
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: bool section_start(General_options * this, char * secname, uint64_t *
   paddr) */

bool __thiscall
gold::General_options::section_start(General_options *this,char *secname,uint64_t *paddr)

{
  _Rb_tree_header *p_Var1;
  _Base_ptr p_Var2;
  _Alloc_hider __s2;
  uint uVar3;
  int iVar4;
  size_t sVar5;
  ulong uVar6;
  char *pcVar7;
  _Base_ptr p_Var8;
  _Base_ptr p_Var9;
  _Base_ptr p_Var10;
  long lVar11;
  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;
  
  if ((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0) {
    return false;
  }
  pcVar7 = (char *)0xffffffffffffffff;
  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;
  if (secname != (char *)0x0) {
    sVar5 = strlen(secname);
    pcVar7 = secname + sVar5;
  }
  p_Var1 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header;
  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::
  _M_construct<char_const*>(&local_58,secname,pcVar7);
  __s2._M_p = local_58._M_dataplus._M_p;
  p_Var2 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;
  p_Var10 = &p_Var1->_M_header;
  if (p_Var2 != (_Base_ptr)0x0) {
    do {
      while( true ) {
        p_Var9 = p_Var2;
        p_Var2 = p_Var9[1]._M_parent;
        p_Var8 = (_Base_ptr)local_58._M_string_length;
        if (p_Var2 <= local_58._M_string_length) {
          p_Var8 = p_Var2;
        }
        if (p_Var8 != (_Base_ptr)0x0) break;
LAB_001e6c34:
        uVar6 = (long)p_Var2 - local_58._M_string_length;
        if ((long)uVar6 < 0x80000000) {
          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;
          goto LAB_001e6c08;
        }
LAB_001e6c4e:
        p_Var2 = p_Var9->_M_left;
        p_Var10 = p_Var9;
        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;
      }
      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);
      uVar6 = (ulong)uVar3;
      if (uVar3 == 0) goto LAB_001e6c34;
LAB_001e6c4a:
      if (-1 < (int)uVar6) goto LAB_001e6c4e;
LAB_001e6c08:
      p_Var2 = p_Var9->_M_right;
    } while (p_Var9->_M_right != (_Base_ptr)0x0);
LAB_001e6c5a:
    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;
    p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);
    p_Var8 = p_Var2;
    if (local_58._M_string_length <= p_Var2) {
      p_Var8 = (_Base_ptr)local_58._M_string_length;
    }
    if ((p_Var8 == (_Base_ptr)0x0) ||
       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)
       , iVar4 == 0)) {
      lVar11 = local_58._M_string_length - (long)p_Var2;
      if (0x7fffffff < lVar11) goto LAB_001e6ca1;
      if (lVar11 < -0x80000000) goto LAB_001e6cd8;
      iVar4 = (int)lVar11;
    }
    if (-1 < iVar4) {
LAB_001e6ca1:
      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9
           *)__s2._M_p != &local_58.field_2) {
        operator_delete(__s2._M_p);
      }
      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);
      return true;
    }
  }
LAB_001e6cd8:
  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9
       *)__s2._M_p != &local_58.field_2) {
    operator_delete(__s2._M_p);
  }
  return false;
}



undefined8 FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)

{
  ulong uVar1;
  undefined1 *__s2;
  uint uVar2;
  int iVar3;
  size_t sVar4;
  ulong uVar5;
  char *pcVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined1 *local_58;
  ulong local_50;
  undefined1 local_48 [24];
  
  if (*(long *)(param_1 + 0x9298) == 0) {
    return 0;
  }
  pcVar6 = (char *)0xffffffffffffffff;
  local_58 = local_48;
  if (param_2 != (char *)0x0) {
    sVar4 = strlen(param_2);
    pcVar6 = param_2 + sVar4;
  }
  FUN_001665c0(&local_58,param_2,pcVar6);
  __s2 = local_58;
  lVar9 = *(long *)(param_1 + 0x9280);
  lVar8 = param_1 + 0x9278;
  if (*(long *)(param_1 + 0x9280) != 0) {
    do {
      while( true ) {
        lVar7 = lVar9;
        uVar1 = *(ulong *)(lVar7 + 0x28);
        uVar5 = local_50;
        if (uVar1 <= local_50) {
          uVar5 = uVar1;
        }
        if (uVar5 != 0) break;
LAB_001e6c34:
        uVar5 = uVar1 - local_50;
        if ((long)uVar5 < 0x80000000) {
          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;
          goto LAB_001e6c08;
        }
LAB_001e6c4e:
        lVar9 = *(long *)(lVar7 + 0x10);
        lVar8 = lVar7;
        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;
      }
      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);
      uVar5 = (ulong)uVar2;
      if (uVar2 == 0) goto LAB_001e6c34;
LAB_001e6c4a:
      if (-1 < (int)uVar5) goto LAB_001e6c4e;
LAB_001e6c08:
      lVar9 = *(long *)(lVar7 + 0x18);
    } while (*(long *)(lVar7 + 0x18) != 0);
LAB_001e6c5a:
    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;
    uVar1 = *(ulong *)(lVar8 + 0x28);
    uVar5 = uVar1;
    if (local_50 <= uVar1) {
      uVar5 = local_50;
    }
    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {
      lVar9 = local_50 - uVar1;
      if (0x7fffffff < lVar9) goto LAB_001e6ca1;
      if (lVar9 < -0x80000000) goto LAB_001e6cd8;
      iVar3 = (int)lVar9;
    }
    if (-1 < iVar3) {
LAB_001e6ca1:
      if (__s2 != local_48) {
        FUN_002dac70(__s2);
      }
      *param_3 = *(undefined8 *)(lVar8 + 0x40);
      return 1;
    }
  }
LAB_001e6cd8:
  if (__s2 != local_48) {
    FUN_002dac70(__s2);
  }
  return 0;
}


CMP qword ptr [RDI + 0x9298],0x0
JNZ 0x001e6b90
XOR EAX,EAX
RET
PUSH R15
PUSH R14
PUSH R13
MOV R13,RDI
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RSI
SUB RSP,0x38
LEA RBP,[RSP + 0x10]
MOV qword ptr [RSP + 0x8],RDX
MOV RDX,-0x1
LEA RAX,[RBP + 0x10]
MOV qword ptr [RSP + 0x10],RAX
TEST RSI,RSI
JZ 0x001e6bcf
MOV RDI,RSI
CALL 0x00147490
LEA RDX,[RBX + RAX*0x1]
MOV RSI,RBX
MOV RDI,RBP
LEA R12,[R13 + 0x9278]
CALL 0x001665c0
MOV RBX,qword ptr [R13 + 0x9280]
MOV qword ptr [RSP],R12
TEST RBX,RBX
JZ 0x001e6cd0
MOV R15,qword ptr [RSP + 0x18]
MOV R13,qword ptr [RSP + 0x10]
JMP 0x001e6c11
MOV RBX,qword ptr [RBX + 0x18]
TEST RBX,RBX
JZ 0x001e6c5a
MOV R14,qword ptr [RBX + 0x28]
MOV RDX,R15
CMP R14,R15
CMOVBE RDX,R14
TEST RDX,RDX
JZ 0x001e6c34
MOV RDI,qword ptr [RBX + 0x20]
MOV RSI,R13
CALL 0x00147840
TEST EAX,EAX
JNZ 0x001e6c4a
MOV RAX,R14
SUB RAX,R15
CMP RAX,0x7fffffff
JG 0x001e6c4e
CMP RAX,-0x80000000
JL 0x001e6c08
TEST EAX,EAX
JS 0x001e6c08
MOV R12,RBX
MOV RBX,qword ptr [RBX + 0x10]
TEST RBX,RBX
JNZ 0x001e6c11
CMP qword ptr [RSP],R12
JZ 0x001e6cd8
MOV RBX,qword ptr [R12 + 0x28]
CMP R15,RBX
MOV RDX,RBX
CMOVBE RDX,R15
TEST RDX,RDX
JZ 0x001e6c85
MOV RSI,qword ptr [R12 + 0x20]
MOV RDI,R13
CALL 0x00147840
TEST EAX,EAX
JNZ 0x001e6c9d
SUB R15,RBX
CMP R15,0x7fffffff
JG 0x001e6ca1
CMP R15,-0x80000000
JL 0x001e6cd8
MOV EAX,R15D
TEST EAX,EAX
JS 0x001e6cd8
ADD RBP,0x10
CMP R13,RBP
JNZ 0x001e6cf8
MOV RAX,qword ptr [R12 + 0x40]
MOV RCX,qword ptr [RSP + 0x8]
MOV qword ptr [RCX],RAX
ADD RSP,0x38
MOV EAX,0x1
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R13,qword ptr [RSP + 0x10]
NOP dword ptr [RAX]
ADD RBP,0x10
CMP R13,RBP
JNZ 0x001e6d02
ADD RSP,0x38
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,R13
CALL 0x002dac70
JMP 0x001e6caa
MOV RDI,R13
CALL 0x002dac70
JMP 0x001e6ce1
(translation_unit "undefined8 FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)\n\n{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)\n\n{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)" identifier (parameter_list "(long param_1,char *param_2,undefined8 *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "undefined1 *__s2;" type_identifier (pointer_declarator "*__s2" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "ulong local_50;" type_identifier identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (if_statement "if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x9298) == 0)" ( (binary_expression "*(long *)(param_1 + 0x9298) == 0" (pointer_expression "*(long *)(param_1 + 0x9298)" * (cast_expression "(long *)(param_1 + 0x9298)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x9298)" ( (binary_expression "param_1 + 0x9298" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar6 = (char *)0xffffffffffffffff;" (assignment_expression "pcVar6 = (char *)0xffffffffffffffff" identifier = (cast_expression "(char *)0xffffffffffffffff" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_58 = local_48;" (assignment_expression "local_58 = local_48" identifier = identifier) ;) (if_statement "if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }" if (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }" { (expression_statement "sVar4 = strlen(param_2);" (assignment_expression "sVar4 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "pcVar6 = param_2 + sVar4;" (assignment_expression "pcVar6 = param_2 + sVar4" identifier = (binary_expression "param_2 + sVar4" identifier + identifier)) ;) })) (expression_statement "FUN_001665c0(&local_58,param_2,pcVar6);" (call_expression "FUN_001665c0(&local_58,param_2,pcVar6)" identifier (argument_list "(&local_58,param_2,pcVar6)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier ))) ;) (expression_statement "__s2 = local_58;" (assignment_expression "__s2 = local_58" identifier = identifier) ;) (expression_statement "lVar9 = *(long *)(param_1 + 0x9280);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x9280)" identifier = (pointer_expression "*(long *)(param_1 + 0x9280)" * (cast_expression "(long *)(param_1 + 0x9280)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x9280)" ( (binary_expression "param_1 + 0x9280" identifier + number_literal) ))))) ;) (expression_statement "lVar8 = param_1 + 0x9278;" (assignment_expression "lVar8 = param_1 + 0x9278" identifier = (binary_expression "param_1 + 0x9278" identifier + number_literal)) ;) (if_statement "if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x9280) != 0)" ( (binary_expression "*(long *)(param_1 + 0x9280) != 0" (pointer_expression "*(long *)(param_1 + 0x9280)" * (cast_expression "(long *)(param_1 + 0x9280)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x9280)" ( (binary_expression "param_1 + 0x9280" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }" { (do_statement "do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);" do (compound_statement "{\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    }" { (while_statement "while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }" { (expression_statement "lVar7 = lVar9;" (assignment_expression "lVar7 = lVar9" identifier = identifier) ;) (expression_statement "uVar1 = *(ulong *)(lVar7 + 0x28);" (assignment_expression "uVar1 = *(ulong *)(lVar7 + 0x28)" identifier = (pointer_expression "*(ulong *)(lVar7 + 0x28)" * (cast_expression "(ulong *)(lVar7 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x28)" ( (binary_expression "lVar7 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = local_50;" (assignment_expression "uVar5 = local_50" identifier = identifier) ;) (if_statement "if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }" if (parenthesized_expression "(uVar1 <= local_50)" ( (binary_expression "uVar1 <= local_50" identifier <= identifier) )) (compound_statement "{\n          uVar5 = uVar1;\n        }" { (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" identifier = identifier) ;) })) (if_statement "if (uVar5 != 0) break;" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_001e6c34:\n        uVar5 = uVar1 - local_50;" statement_identifier : (expression_statement "uVar5 = uVar1 - local_50;" (assignment_expression "uVar5 = uVar1 - local_50" identifier = (binary_expression "uVar1 - local_50" identifier - identifier)) ;)) (if_statement "if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" if (parenthesized_expression "((long)uVar5 < 0x80000000)" ( (binary_expression "(long)uVar5 < 0x80000000" (cast_expression "(long)uVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" { (if_statement "if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;" if (parenthesized_expression "(-0x80000001 < (long)uVar5)" ( (binary_expression "-0x80000001 < (long)uVar5" number_literal < (cast_expression "(long)uVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (goto_statement "goto LAB_001e6c4a;" goto statement_identifier ;)) (goto_statement "goto LAB_001e6c08;" goto statement_identifier ;) })) (labeled_statement "LAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);" statement_identifier : (expression_statement "lVar9 = *(long *)(lVar7 + 0x10);" (assignment_expression "lVar9 = *(long *)(lVar7 + 0x10)" identifier = (pointer_expression "*(long *)(lVar7 + 0x10)" * (cast_expression "(long *)(lVar7 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x10)" ( (binary_expression "lVar7 + 0x10" identifier + number_literal) ))))) ;)) (expression_statement "lVar8 = lVar7;" (assignment_expression "lVar8 = lVar7" identifier = identifier) ;) (if_statement "if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;" if (parenthesized_expression "(*(long *)(lVar7 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar7 + 0x10) == 0" (pointer_expression "*(long *)(lVar7 + 0x10)" * (cast_expression "(long *)(lVar7 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x10)" ( (binary_expression "lVar7 + 0x10" identifier + number_literal) )))) == number_literal) )) (goto_statement "goto LAB_001e6c5a;" goto statement_identifier ;)) })) (expression_statement "uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);" (assignment_expression "uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5)" identifier = (call_expression "memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5)" identifier (argument_list "(*(void **)(lVar7 + 0x20),__s2,uVar5)" ( (pointer_expression "*(void **)(lVar7 + 0x20)" * (cast_expression "(void **)(lVar7 + 0x20)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) )))) , identifier , identifier )))) ;) (expression_statement "uVar5 = (ulong)uVar2;" (assignment_expression "uVar5 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar2 == 0) goto LAB_001e6c34;" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001e6c34;" goto statement_identifier ;)) (labeled_statement "LAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;" statement_identifier : (if_statement "if (-1 < (int)uVar5) goto LAB_001e6c4e;" if (parenthesized_expression "(-1 < (int)uVar5)" ( (binary_expression "-1 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_001e6c4e;" goto statement_identifier ;))) (labeled_statement "LAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);" statement_identifier : (expression_statement "lVar9 = *(long *)(lVar7 + 0x18);" (assignment_expression "lVar9 = *(long *)(lVar7 + 0x18)" identifier = (pointer_expression "*(long *)(lVar7 + 0x18)" * (cast_expression "(long *)(lVar7 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x18)" ( (binary_expression "lVar7 + 0x18" identifier + number_literal) ))))) ;)) }) while (parenthesized_expression "(*(long *)(lVar7 + 0x18) != 0)" ( (binary_expression "*(long *)(lVar7 + 0x18) != 0" (pointer_expression "*(long *)(lVar7 + 0x18)" * (cast_expression "(long *)(lVar7 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x18)" ( (binary_expression "lVar7 + 0x18" identifier + number_literal) )))) != number_literal) )) ;) (labeled_statement "LAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;" statement_identifier : (if_statement "if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;" if (parenthesized_expression "(param_1 + 0x9278 == lVar8)" ( (binary_expression "param_1 + 0x9278 == lVar8" (binary_expression "param_1 + 0x9278" identifier + number_literal) == identifier) )) (goto_statement "goto LAB_001e6cd8;" goto statement_identifier ;))) (expression_statement "uVar1 = *(ulong *)(lVar8 + 0x28);" (assignment_expression "uVar1 = *(ulong *)(lVar8 + 0x28)" identifier = (pointer_expression "*(ulong *)(lVar8 + 0x28)" * (cast_expression "(ulong *)(lVar8 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x28)" ( (binary_expression "lVar8 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" identifier = identifier) ;) (if_statement "if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }" if (parenthesized_expression "(local_50 <= uVar1)" ( (binary_expression "local_50 <= uVar1" identifier <= identifier) )) (compound_statement "{\n      uVar5 = local_50;\n    }" { (expression_statement "uVar5 = local_50;" (assignment_expression "uVar5 = local_50" identifier = identifier) ;) })) (if_statement "if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }" if (parenthesized_expression "((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0))" ( (binary_expression "(uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)" (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)" ( (comma_expression "iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0" (assignment_expression "iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5)" identifier = (call_expression "memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5)" identifier (argument_list "(__s2,*(void **)(lVar8 + 0x20),uVar5)" ( identifier , (pointer_expression "*(void **)(lVar8 + 0x20)" * (cast_expression "(void **)(lVar8 + 0x20)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar8 + 0x20)" ( (binary_expression "lVar8 + 0x20" identifier + number_literal) )))) , identifier )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }" { (expression_statement "lVar9 = local_50 - uVar1;" (assignment_expression "lVar9 = local_50 - uVar1" identifier = (binary_expression "local_50 - uVar1" identifier - identifier)) ;) (if_statement "if (0x7fffffff < lVar9) goto LAB_001e6ca1;" if (parenthesized_expression "(0x7fffffff < lVar9)" ( (binary_expression "0x7fffffff < lVar9" number_literal < identifier) )) (goto_statement "goto LAB_001e6ca1;" goto statement_identifier ;)) (if_statement "if (lVar9 < -0x80000000) goto LAB_001e6cd8;" if (parenthesized_expression "(lVar9 < -0x80000000)" ( (binary_expression "lVar9 < -0x80000000" identifier < number_literal) )) (goto_statement "goto LAB_001e6cd8;" goto statement_identifier ;)) (expression_statement "iVar3 = (int)lVar9;" (assignment_expression "iVar3 = (int)lVar9" identifier = (cast_expression "(int)lVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (if_statement "if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }" if (parenthesized_expression "(-1 < iVar3)" ( (binary_expression "-1 < iVar3" number_literal < identifier) )) (compound_statement "{\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }" { (labeled_statement "LAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }" statement_identifier : (if_statement "if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }" if (parenthesized_expression "(__s2 != local_48)" ( (binary_expression "__s2 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_002dac70(__s2);\n      }" { (expression_statement "FUN_002dac70(__s2);" (call_expression "FUN_002dac70(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) }))) (expression_statement "*param_3 = *(undefined8 *)(lVar8 + 0x40);" (assignment_expression "*param_3 = *(undefined8 *)(lVar8 + 0x40)" (pointer_expression "*param_3" * identifier) = (pointer_expression "*(undefined8 *)(lVar8 + 0x40)" * (cast_expression "(undefined8 *)(lVar8 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x40)" ( (binary_expression "lVar8 + 0x40" identifier + number_literal) ))))) ;) (return_statement "return 1;" return number_literal ;) })) })) (labeled_statement "LAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }" statement_identifier : (if_statement "if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }" if (parenthesized_expression "(__s2 != local_48)" ( (binary_expression "__s2 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_002dac70(__s2);\n  }" { (expression_statement "FUN_002dac70(__s2);" (call_expression "FUN_002dac70(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: bool section_start(General_options * this, char * secname, uint64_t *\n   paddr) */\n\nbool __thiscall\ngold::General_options::section_start(General_options *this,char *secname,uint64_t *paddr)\n\n{\n  _Rb_tree_header *p_Var1;\n  _Base_ptr p_Var2;\n  _Alloc_hider __s2;\n  uint uVar3;\n  int iVar4;\n  size_t sVar5;\n  ulong uVar6;\n  char *pcVar7;\n  _Base_ptr p_Var8;\n  _Base_ptr p_Var9;\n  _Base_ptr p_Var10;\n  long lVar11;\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;\n  \n  if ((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0) {\n    return false;\n  }\n  pcVar7 = (char *)0xffffffffffffffff;\n  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;\n  if (secname != (char *)0x0) {\n    sVar5 = strlen(secname);\n    pcVar7 = secname + sVar5;\n  }\n  p_Var1 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header;\n  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,secname,pcVar7);\n  __s2._M_p = local_58._M_dataplus._M_p;\n  p_Var2 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n  p_Var10 = &p_Var1->_M_header;\n  if (p_Var2 != (_Base_ptr)0x0) {\n    do {\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    } while (p_Var9->_M_right != (_Base_ptr)0x0);\nLAB_001e6c5a:\n    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;\n    p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);\n    p_Var8 = p_Var2;\n    if (local_58._M_string_length <= p_Var2) {\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }\n    if ((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)) {\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }\n    if (-1 < iVar4) {\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }\n  }\nLAB_001e6cd8:\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2) {\n    operator_delete(__s2._M_p);\n  }\n  return false;\n}\n\n" comment comment comment (function_definition "bool __thiscall\ngold::General_options::section_start(General_options *this,char *secname,uint64_t *paddr)\n\n{\n  _Rb_tree_header *p_Var1;\n  _Base_ptr p_Var2;\n  _Alloc_hider __s2;\n  uint uVar3;\n  int iVar4;\n  size_t sVar5;\n  ulong uVar6;\n  char *pcVar7;\n  _Base_ptr p_Var8;\n  _Base_ptr p_Var9;\n  _Base_ptr p_Var10;\n  long lVar11;\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;\n  \n  if ((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0) {\n    return false;\n  }\n  pcVar7 = (char *)0xffffffffffffffff;\n  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;\n  if (secname != (char *)0x0) {\n    sVar5 = strlen(secname);\n    pcVar7 = secname + sVar5;\n  }\n  p_Var1 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header;\n  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,secname,pcVar7);\n  __s2._M_p = local_58._M_dataplus._M_p;\n  p_Var2 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n  p_Var10 = &p_Var1->_M_header;\n  if (p_Var2 != (_Base_ptr)0x0) {\n    do {\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    } while (p_Var9->_M_right != (_Base_ptr)0x0);\nLAB_001e6c5a:\n    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;\n    p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);\n    p_Var8 = p_Var2;\n    if (local_58._M_string_length <= p_Var2) {\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }\n    if ((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)) {\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }\n    if (-1 < iVar4) {\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }\n  }\nLAB_001e6cd8:\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2) {\n    operator_delete(__s2._M_p);\n  }\n  return false;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::General_options::" identifier : : identifier : :) (function_declarator "section_start(General_options *this,char *secname,uint64_t *paddr)" identifier (parameter_list "(General_options *this,char *secname,uint64_t *paddr)" ( (parameter_declaration "General_options *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "char *secname" primitive_type (pointer_declarator "*secname" * identifier)) , (parameter_declaration "uint64_t *paddr" primitive_type (pointer_declarator "*paddr" * identifier)) ))) (compound_statement "{\n  _Rb_tree_header *p_Var1;\n  _Base_ptr p_Var2;\n  _Alloc_hider __s2;\n  uint uVar3;\n  int iVar4;\n  size_t sVar5;\n  ulong uVar6;\n  char *pcVar7;\n  _Base_ptr p_Var8;\n  _Base_ptr p_Var9;\n  _Base_ptr p_Var10;\n  long lVar11;\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;\n  \n  if ((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0) {\n    return false;\n  }\n  pcVar7 = (char *)0xffffffffffffffff;\n  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;\n  if (secname != (char *)0x0) {\n    sVar5 = strlen(secname);\n    pcVar7 = secname + sVar5;\n  }\n  p_Var1 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header;\n  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,secname,pcVar7);\n  __s2._M_p = local_58._M_dataplus._M_p;\n  p_Var2 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n  p_Var10 = &p_Var1->_M_header;\n  if (p_Var2 != (_Base_ptr)0x0) {\n    do {\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    } while (p_Var9->_M_right != (_Base_ptr)0x0);\nLAB_001e6c5a:\n    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;\n    p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);\n    p_Var8 = p_Var2;\n    if (local_58._M_string_length <= p_Var2) {\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }\n    if ((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)) {\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }\n    if (-1 < iVar4) {\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }\n  }\nLAB_001e6cd8:\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2) {\n    operator_delete(__s2._M_p);\n  }\n  return false;\n}" { (declaration "_Rb_tree_header *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "_Base_ptr p_Var2;" type_identifier identifier ;) (declaration "_Alloc_hider __s2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "_Base_ptr p_Var8;" type_identifier identifier ;) (declaration "_Base_ptr p_Var9;" type_identifier identifier ;) (declaration "_Base_ptr p_Var10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (ERROR "basic_string<char,_std::char_traits<char>,_std::" (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (expression_statement "allocator<char>_> local_58;" (binary_expression "allocator<char>_> local_58" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) ;) (if_statement "if ((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0) {\n    return false;\n  }" if (parenthesized_expression "((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0)" ( (binary_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0" (field_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count" (field_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->section_starts_)._M_t._M_impl" (field_expression "(this->section_starts_)._M_t" (parenthesized_expression "(this->section_starts_)" ( (field_expression "this->section_starts_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier) == number_literal) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "pcVar7 = (char *)0xffffffffffffffff;" (assignment_expression "pcVar7 = (char *)0xffffffffffffffff" identifier = (cast_expression "(char *)0xffffffffffffffff" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_58._M_dataplus._M_p = (pointer)&local_58.field_2;" (assignment_expression "local_58._M_dataplus._M_p = (pointer)&local_58.field_2" (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier) = (binary_expression "(pointer)&local_58.field_2" (parenthesized_expression "(pointer)" ( identifier )) & (field_expression "local_58.field_2" identifier . field_identifier))) ;) (if_statement "if (secname != (char *)0x0) {\n    sVar5 = strlen(secname);\n    pcVar7 = secname + sVar5;\n  }" if (parenthesized_expression "(secname != (char *)0x0)" ( (binary_expression "secname != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar5 = strlen(secname);\n    pcVar7 = secname + sVar5;\n  }" { (expression_statement "sVar5 = strlen(secname);" (assignment_expression "sVar5 = strlen(secname)" identifier = (call_expression "strlen(secname)" identifier (argument_list "(secname)" ( identifier )))) ;) (expression_statement "pcVar7 = secname + sVar5;" (assignment_expression "pcVar7 = secname + sVar5" identifier = (binary_expression "secname + sVar5" identifier + identifier)) ;) })) (expression_statement "p_Var1 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header;" (assignment_expression "p_Var1 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header" identifier = (pointer_expression "&(this->section_starts_)._M_t._M_impl.super__Rb_tree_header" & (field_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->section_starts_)._M_t._M_impl" (field_expression "(this->section_starts_)._M_t" (parenthesized_expression "(this->section_starts_)" ( (field_expression "this->section_starts_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier))) ;) (labeled_statement "std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,secname,pcVar7);" statement_identifier (ERROR "::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>:" : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > :) : (expression_statement "_M_construct<char_const*>(&local_58,secname,pcVar7);" (binary_expression "_M_construct<char_const*>(&local_58,secname,pcVar7)" (binary_expression "_M_construct<char_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(&local_58,secname,pcVar7)" ( (comma_expression "&local_58,secname,pcVar7" (pointer_expression "&local_58" & identifier) , (comma_expression "secname,pcVar7" identifier , identifier)) ))) ;)) (expression_statement "__s2._M_p = local_58._M_dataplus._M_p;" (assignment_expression "__s2._M_p = local_58._M_dataplus._M_p" (field_expression "__s2._M_p" identifier . field_identifier) = (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier)) ;) (expression_statement "p_Var2 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;" (assignment_expression "p_Var2 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" identifier = (field_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" (field_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header" (field_expression "(this->section_starts_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->section_starts_)._M_t._M_impl" (field_expression "(this->section_starts_)._M_t" (parenthesized_expression "(this->section_starts_)" ( (field_expression "this->section_starts_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier) . field_identifier)) ;) (expression_statement "p_Var10 = &p_Var1->_M_header;" (assignment_expression "p_Var10 = &p_Var1->_M_header" identifier = (pointer_expression "&p_Var1->_M_header" & (field_expression "p_Var1->_M_header" identifier -> field_identifier))) ;) (if_statement "if (p_Var2 != (_Base_ptr)0x0) {\n    do {\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    } while (p_Var9->_M_right != (_Base_ptr)0x0);\nLAB_001e6c5a:\n    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;\n    p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);\n    p_Var8 = p_Var2;\n    if (local_58._M_string_length <= p_Var2) {\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }\n    if ((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)) {\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }\n    if (-1 < iVar4) {\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }\n  }" if (parenthesized_expression "(p_Var2 != (_Base_ptr)0x0)" ( (binary_expression "p_Var2 != (_Base_ptr)0x0" identifier != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\n    do {\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    } while (p_Var9->_M_right != (_Base_ptr)0x0);\nLAB_001e6c5a:\n    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;\n    p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);\n    p_Var8 = p_Var2;\n    if (local_58._M_string_length <= p_Var2) {\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }\n    if ((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)) {\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }\n    if (-1 < iVar4) {\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }\n  }" { (do_statement "do {\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    } while (p_Var9->_M_right != (_Base_ptr)0x0);" do (compound_statement "{\n      while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }\n      uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);\n      uVar6 = (ulong)uVar3;\n      if (uVar3 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;\nLAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;\n    }" { (while_statement "while( true ) {\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        p_Var9 = p_Var2;\n        p_Var2 = p_Var9[1]._M_parent;\n        p_Var8 = (_Base_ptr)local_58._M_string_length;\n        if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }\n        if (p_Var8 != (_Base_ptr)0x0) break;\nLAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;\n        if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;\n        p_Var10 = p_Var9;\n        if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;\n      }" { (expression_statement "p_Var9 = p_Var2;" (assignment_expression "p_Var9 = p_Var2" identifier = identifier) ;) (expression_statement "p_Var2 = p_Var9[1]._M_parent;" (assignment_expression "p_Var2 = p_Var9[1]._M_parent" identifier = (field_expression "p_Var9[1]._M_parent" (subscript_expression "p_Var9[1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var8 = (_Base_ptr)local_58._M_string_length;" (assignment_expression "p_Var8 = (_Base_ptr)local_58._M_string_length" identifier = (cast_expression "(_Base_ptr)local_58._M_string_length" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "local_58._M_string_length" identifier . field_identifier))) ;) (if_statement "if (p_Var2 <= local_58._M_string_length) {\n          p_Var8 = p_Var2;\n        }" if (parenthesized_expression "(p_Var2 <= local_58._M_string_length)" ( (binary_expression "p_Var2 <= local_58._M_string_length" identifier <= (field_expression "local_58._M_string_length" identifier . field_identifier)) )) (compound_statement "{\n          p_Var8 = p_Var2;\n        }" { (expression_statement "p_Var8 = p_Var2;" (assignment_expression "p_Var8 = p_Var2" identifier = identifier) ;) })) (if_statement "if (p_Var8 != (_Base_ptr)0x0) break;" if (parenthesized_expression "(p_Var8 != (_Base_ptr)0x0)" ( (binary_expression "p_Var8 != (_Base_ptr)0x0" identifier != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (break_statement "break;" break ;)) (labeled_statement "LAB_001e6c34:\n        uVar6 = (long)p_Var2 - local_58._M_string_length;" statement_identifier : (expression_statement "uVar6 = (long)p_Var2 - local_58._M_string_length;" (assignment_expression "uVar6 = (long)p_Var2 - local_58._M_string_length" identifier = (binary_expression "(long)p_Var2 - local_58._M_string_length" (cast_expression "(long)p_Var2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (field_expression "local_58._M_string_length" identifier . field_identifier))) ;)) (if_statement "if ((long)uVar6 < 0x80000000) {\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" if (parenthesized_expression "((long)uVar6 < 0x80000000)" ( (binary_expression "(long)uVar6 < 0x80000000" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" { (if_statement "if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;" if (parenthesized_expression "(-0x80000001 < (long)uVar6)" ( (binary_expression "-0x80000001 < (long)uVar6" number_literal < (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (goto_statement "goto LAB_001e6c4a;" goto statement_identifier ;)) (goto_statement "goto LAB_001e6c08;" goto statement_identifier ;) })) (labeled_statement "LAB_001e6c4e:\n        p_Var2 = p_Var9->_M_left;" statement_identifier : (expression_statement "p_Var2 = p_Var9->_M_left;" (assignment_expression "p_Var2 = p_Var9->_M_left" identifier = (field_expression "p_Var9->_M_left" identifier -> field_identifier)) ;)) (expression_statement "p_Var10 = p_Var9;" (assignment_expression "p_Var10 = p_Var9" identifier = identifier) ;) (if_statement "if (p_Var9->_M_left == (_Base_ptr)0x0) goto LAB_001e6c5a;" if (parenthesized_expression "(p_Var9->_M_left == (_Base_ptr)0x0)" ( (binary_expression "p_Var9->_M_left == (_Base_ptr)0x0" (field_expression "p_Var9->_M_left" identifier -> field_identifier) == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_001e6c5a;" goto statement_identifier ;)) })) (expression_statement "uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8);" (assignment_expression "uVar3 = memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8)" identifier = (call_expression "memcmp(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8)" identifier (argument_list "(*(void **)(p_Var9 + 1),__s2._M_p,(size_t)p_Var8)" ( (pointer_expression "*(void **)(p_Var9 + 1)" * (cast_expression "(void **)(p_Var9 + 1)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(p_Var9 + 1)" ( (binary_expression "p_Var9 + 1" identifier + number_literal) )))) , (field_expression "__s2._M_p" identifier . field_identifier) , (cast_expression "(size_t)p_Var8" ( (type_descriptor "size_t" primitive_type) ) identifier) )))) ;) (expression_statement "uVar6 = (ulong)uVar3;" (assignment_expression "uVar6 = (ulong)uVar3" identifier = (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar3 == 0) goto LAB_001e6c34;" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001e6c34;" goto statement_identifier ;)) (labeled_statement "LAB_001e6c4a:\n      if (-1 < (int)uVar6) goto LAB_001e6c4e;" statement_identifier : (if_statement "if (-1 < (int)uVar6) goto LAB_001e6c4e;" if (parenthesized_expression "(-1 < (int)uVar6)" ( (binary_expression "-1 < (int)uVar6" number_literal < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_001e6c4e;" goto statement_identifier ;))) (labeled_statement "LAB_001e6c08:\n      p_Var2 = p_Var9->_M_right;" statement_identifier : (expression_statement "p_Var2 = p_Var9->_M_right;" (assignment_expression "p_Var2 = p_Var9->_M_right" identifier = (field_expression "p_Var9->_M_right" identifier -> field_identifier)) ;)) }) while (parenthesized_expression "(p_Var9->_M_right != (_Base_ptr)0x0)" ( (binary_expression "p_Var9->_M_right != (_Base_ptr)0x0" (field_expression "p_Var9->_M_right" identifier -> field_identifier) != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) ;) (labeled_statement "LAB_001e6c5a:\n    if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;" statement_identifier : (if_statement "if (p_Var1 == (_Rb_tree_header *)p_Var10) goto LAB_001e6cd8;" if (parenthesized_expression "(p_Var1 == (_Rb_tree_header *)p_Var10)" ( (binary_expression "p_Var1 == (_Rb_tree_header *)p_Var10" identifier == (cast_expression "(_Rb_tree_header *)p_Var10" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (goto_statement "goto LAB_001e6cd8;" goto statement_identifier ;))) (expression_statement "p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28);" (assignment_expression "p_Var2 = *(_Base_ptr *)((long)p_Var10 + 0x28)" identifier = (pointer_expression "*(_Base_ptr *)((long)p_Var10 + 0x28)" * (cast_expression "(_Base_ptr *)((long)p_Var10 + 0x28)" ( (type_descriptor "_Base_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p_Var10 + 0x28)" ( (binary_expression "(long)p_Var10 + 0x28" (cast_expression "(long)p_Var10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "p_Var8 = p_Var2;" (assignment_expression "p_Var8 = p_Var2" identifier = identifier) ;) (if_statement "if (local_58._M_string_length <= p_Var2) {\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }" if (parenthesized_expression "(local_58._M_string_length <= p_Var2)" ( (binary_expression "local_58._M_string_length <= p_Var2" (field_expression "local_58._M_string_length" identifier . field_identifier) <= identifier) )) (compound_statement "{\n      p_Var8 = (_Base_ptr)local_58._M_string_length;\n    }" { (expression_statement "p_Var8 = (_Base_ptr)local_58._M_string_length;" (assignment_expression "p_Var8 = (_Base_ptr)local_58._M_string_length" identifier = (cast_expression "(_Base_ptr)local_58._M_string_length" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "local_58._M_string_length" identifier . field_identifier))) ;) })) (if_statement "if ((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)) {\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }" if (parenthesized_expression "((p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0))" ( (binary_expression "(p_Var8 == (_Base_ptr)0x0) ||\n       (iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)" (parenthesized_expression "(p_Var8 == (_Base_ptr)0x0)" ( (binary_expression "p_Var8 == (_Base_ptr)0x0" identifier == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) || (parenthesized_expression "(iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0)" ( (comma_expression "iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)\n       , iVar4 == 0" (assignment_expression "iVar4 = memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)" identifier = (call_expression "memcmp(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)" identifier (argument_list "(__s2._M_p,(void *)((_Rb_tree_header *)p_Var10)->_M_node_count,(size_t)p_Var8)" ( (field_expression "__s2._M_p" identifier . field_identifier) , (cast_expression "(void *)((_Rb_tree_header *)p_Var10)->_M_node_count" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "((_Rb_tree_header *)p_Var10)->_M_node_count" (parenthesized_expression "((_Rb_tree_header *)p_Var10)" ( (cast_expression "(_Rb_tree_header *)p_Var10" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )) -> field_identifier)) , (cast_expression "(size_t)p_Var8" ( (type_descriptor "size_t" primitive_type) ) identifier) )))) , (binary_expression "iVar4 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      lVar11 = local_58._M_string_length - (long)p_Var2;\n      if (0x7fffffff < lVar11) goto LAB_001e6ca1;\n      if (lVar11 < -0x80000000) goto LAB_001e6cd8;\n      iVar4 = (int)lVar11;\n    }" { (expression_statement "lVar11 = local_58._M_string_length - (long)p_Var2;" (assignment_expression "lVar11 = local_58._M_string_length - (long)p_Var2" identifier = (binary_expression "local_58._M_string_length - (long)p_Var2" (field_expression "local_58._M_string_length" identifier . field_identifier) - (cast_expression "(long)p_Var2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (0x7fffffff < lVar11) goto LAB_001e6ca1;" if (parenthesized_expression "(0x7fffffff < lVar11)" ( (binary_expression "0x7fffffff < lVar11" number_literal < identifier) )) (goto_statement "goto LAB_001e6ca1;" goto statement_identifier ;)) (if_statement "if (lVar11 < -0x80000000) goto LAB_001e6cd8;" if (parenthesized_expression "(lVar11 < -0x80000000)" ( (binary_expression "lVar11 < -0x80000000" identifier < number_literal) )) (goto_statement "goto LAB_001e6cd8;" goto statement_identifier ;)) (expression_statement "iVar4 = (int)lVar11;" (assignment_expression "iVar4 = (int)lVar11" identifier = (cast_expression "(int)lVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (if_statement "if (-1 < iVar4) {\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }" if (parenthesized_expression "(-1 < iVar4)" ( (binary_expression "-1 < iVar4" number_literal < identifier) )) (compound_statement "{\nLAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }\n      *paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);\n      return true;\n    }" { (labeled_statement "LAB_001e6ca1:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }" statement_identifier : (if_statement "if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2) {\n        operator_delete(__s2._M_p);\n      }" if (parenthesized_expression "((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2)" ( (parenthesized_expression "(anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2)" ( (ERROR "anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::" (comma_expression "anon_union_16_2_edb7204a_for_basic_string<char,_std" (binary_expression "anon_union_16_2_edb7204a_for_basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_9\n           *)__s2._M_p != &local_58.field_2" (binary_expression "allocator<char>_>_9\n           *)__s2._M_p" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (binary_expression "_9\n           *)__s2._M_p" identifier * (ERROR ")" )) (field_expression "__s2._M_p" identifier . field_identifier))) != (pointer_expression "&local_58.field_2" & (field_expression "local_58.field_2" identifier . field_identifier))) )) )) (compound_statement "{\n        operator_delete(__s2._M_p);\n      }" { (expression_statement "operator_delete(__s2._M_p);" (call_expression "operator_delete(__s2._M_p)" identifier (argument_list "(__s2._M_p)" ( (field_expression "__s2._M_p" identifier . field_identifier) ))) ;) }))) (expression_statement "*paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18);" (assignment_expression "*paddr = *(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18)" (pointer_expression "*paddr" * identifier) = (pointer_expression "*(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18)" * (cast_expression "(uint64_t *)((undefined1 *)((long)p_Var10 + 0x28) + 0x18)" ( (type_descriptor "uint64_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((undefined1 *)((long)p_Var10 + 0x28) + 0x18)" ( (binary_expression "(undefined1 *)((long)p_Var10 + 0x28) + 0x18" (cast_expression "(undefined1 *)((long)p_Var10 + 0x28)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p_Var10 + 0x28)" ( (binary_expression "(long)p_Var10 + 0x28" (cast_expression "(long)p_Var10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))) + number_literal) ))))) ;) (return_statement "return true;" return true ;) })) })) (labeled_statement "LAB_001e6cd8:\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2) {\n    operator_delete(__s2._M_p);\n  }" statement_identifier : (if_statement "if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2) {\n    operator_delete(__s2._M_p);\n  }" if (parenthesized_expression "((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2)" ( (parenthesized_expression "(anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2)" ( (ERROR "anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::" (comma_expression "anon_union_16_2_edb7204a_for_basic_string<char,_std" (binary_expression "anon_union_16_2_edb7204a_for_basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_9\n       *)__s2._M_p != &local_58.field_2" (binary_expression "allocator<char>_>_9\n       *)__s2._M_p" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (binary_expression "_9\n       *)__s2._M_p" identifier * (ERROR ")" )) (field_expression "__s2._M_p" identifier . field_identifier))) != (pointer_expression "&local_58.field_2" & (field_expression "local_58.field_2" identifier . field_identifier))) )) )) (compound_statement "{\n    operator_delete(__s2._M_p);\n  }" { (expression_statement "operator_delete(__s2._M_p);" (call_expression "operator_delete(__s2._M_p)" identifier (argument_list "(__s2._M_p)" ( (field_expression "__s2._M_p" identifier . field_identifier) ))) ;) }))) (return_statement "return false;" return false ;) })))
(translation_unit "undefined8 FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)\n\n{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)\n\n{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)" identifier (parameter_list "(long param_1,char *param_2,undefined8 *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "undefined1 *__s2;" type_identifier (pointer_declarator "*__s2" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "ulong local_50;" type_identifier identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (if_statement "if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x9298) == 0)" ( (binary_expression "*(long *)(param_1 + 0x9298) == 0" (pointer_expression "*(long *)(param_1 + 0x9298)" * (cast_expression "(long *)(param_1 + 0x9298)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x9298)" ( (binary_expression "param_1 + 0x9298" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar6 = (char *)0xffffffffffffffff;" (assignment_expression "pcVar6 = (char *)0xffffffffffffffff" identifier = (cast_expression "(char *)0xffffffffffffffff" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_58 = local_48;" (assignment_expression "local_58 = local_48" identifier = identifier) ;) (if_statement "if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }" if (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }" { (expression_statement "sVar4 = strlen(param_2);" (assignment_expression "sVar4 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "pcVar6 = param_2 + sVar4;" (assignment_expression "pcVar6 = param_2 + sVar4" identifier = (binary_expression "param_2 + sVar4" identifier + identifier)) ;) })) (expression_statement "FUN_001665c0(&local_58,param_2,pcVar6);" (call_expression "FUN_001665c0(&local_58,param_2,pcVar6)" identifier (argument_list "(&local_58,param_2,pcVar6)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier ))) ;) (expression_statement "__s2 = local_58;" (assignment_expression "__s2 = local_58" identifier = identifier) ;) (expression_statement "lVar9 = *(long *)(param_1 + 0x9280);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x9280)" identifier = (pointer_expression "*(long *)(param_1 + 0x9280)" * (cast_expression "(long *)(param_1 + 0x9280)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x9280)" ( (binary_expression "param_1 + 0x9280" identifier + number_literal) ))))) ;) (expression_statement "lVar8 = param_1 + 0x9278;" (assignment_expression "lVar8 = param_1 + 0x9278" identifier = (binary_expression "param_1 + 0x9278" identifier + number_literal)) ;) (if_statement "if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x9280) != 0)" ( (binary_expression "*(long *)(param_1 + 0x9280) != 0" (pointer_expression "*(long *)(param_1 + 0x9280)" * (cast_expression "(long *)(param_1 + 0x9280)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x9280)" ( (binary_expression "param_1 + 0x9280" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }" { (do_statement "do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);" do (compound_statement "{\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    }" { (while_statement "while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }" { (expression_statement "lVar7 = lVar9;" (assignment_expression "lVar7 = lVar9" identifier = identifier) ;) (expression_statement "uVar1 = *(ulong *)(lVar7 + 0x28);" (assignment_expression "uVar1 = *(ulong *)(lVar7 + 0x28)" identifier = (pointer_expression "*(ulong *)(lVar7 + 0x28)" * (cast_expression "(ulong *)(lVar7 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x28)" ( (binary_expression "lVar7 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = local_50;" (assignment_expression "uVar5 = local_50" identifier = identifier) ;) (if_statement "if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }" if (parenthesized_expression "(uVar1 <= local_50)" ( (binary_expression "uVar1 <= local_50" identifier <= identifier) )) (compound_statement "{\n          uVar5 = uVar1;\n        }" { (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" identifier = identifier) ;) })) (if_statement "if (uVar5 != 0) break;" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_001e6c34:\n        uVar5 = uVar1 - local_50;" statement_identifier : (expression_statement "uVar5 = uVar1 - local_50;" (assignment_expression "uVar5 = uVar1 - local_50" identifier = (binary_expression "uVar1 - local_50" identifier - identifier)) ;)) (if_statement "if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" if (parenthesized_expression "((long)uVar5 < 0x80000000)" ( (binary_expression "(long)uVar5 < 0x80000000" (cast_expression "(long)uVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" { (if_statement "if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;" if (parenthesized_expression "(-0x80000001 < (long)uVar5)" ( (binary_expression "-0x80000001 < (long)uVar5" number_literal < (cast_expression "(long)uVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (goto_statement "goto LAB_001e6c4a;" goto statement_identifier ;)) (goto_statement "goto LAB_001e6c08;" goto statement_identifier ;) })) (labeled_statement "LAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);" statement_identifier : (expression_statement "lVar9 = *(long *)(lVar7 + 0x10);" (assignment_expression "lVar9 = *(long *)(lVar7 + 0x10)" identifier = (pointer_expression "*(long *)(lVar7 + 0x10)" * (cast_expression "(long *)(lVar7 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x10)" ( (binary_expression "lVar7 + 0x10" identifier + number_literal) ))))) ;)) (expression_statement "lVar8 = lVar7;" (assignment_expression "lVar8 = lVar7" identifier = identifier) ;) (if_statement "if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;" if (parenthesized_expression "(*(long *)(lVar7 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar7 + 0x10) == 0" (pointer_expression "*(long *)(lVar7 + 0x10)" * (cast_expression "(long *)(lVar7 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x10)" ( (binary_expression "lVar7 + 0x10" identifier + number_literal) )))) == number_literal) )) (goto_statement "goto LAB_001e6c5a;" goto statement_identifier ;)) })) (expression_statement "uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);" (assignment_expression "uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5)" identifier = (call_expression "memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5)" identifier (argument_list "(*(void **)(lVar7 + 0x20),__s2,uVar5)" ( (pointer_expression "*(void **)(lVar7 + 0x20)" * (cast_expression "(void **)(lVar7 + 0x20)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) )))) , identifier , identifier )))) ;) (expression_statement "uVar5 = (ulong)uVar2;" (assignment_expression "uVar5 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar2 == 0) goto LAB_001e6c34;" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001e6c34;" goto statement_identifier ;)) (labeled_statement "LAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;" statement_identifier : (if_statement "if (-1 < (int)uVar5) goto LAB_001e6c4e;" if (parenthesized_expression "(-1 < (int)uVar5)" ( (binary_expression "-1 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_001e6c4e;" goto statement_identifier ;))) (labeled_statement "LAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);" statement_identifier : (expression_statement "lVar9 = *(long *)(lVar7 + 0x18);" (assignment_expression "lVar9 = *(long *)(lVar7 + 0x18)" identifier = (pointer_expression "*(long *)(lVar7 + 0x18)" * (cast_expression "(long *)(lVar7 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x18)" ( (binary_expression "lVar7 + 0x18" identifier + number_literal) ))))) ;)) }) while (parenthesized_expression "(*(long *)(lVar7 + 0x18) != 0)" ( (binary_expression "*(long *)(lVar7 + 0x18) != 0" (pointer_expression "*(long *)(lVar7 + 0x18)" * (cast_expression "(long *)(lVar7 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x18)" ( (binary_expression "lVar7 + 0x18" identifier + number_literal) )))) != number_literal) )) ;) (labeled_statement "LAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;" statement_identifier : (if_statement "if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;" if (parenthesized_expression "(param_1 + 0x9278 == lVar8)" ( (binary_expression "param_1 + 0x9278 == lVar8" (binary_expression "param_1 + 0x9278" identifier + number_literal) == identifier) )) (goto_statement "goto LAB_001e6cd8;" goto statement_identifier ;))) (expression_statement "uVar1 = *(ulong *)(lVar8 + 0x28);" (assignment_expression "uVar1 = *(ulong *)(lVar8 + 0x28)" identifier = (pointer_expression "*(ulong *)(lVar8 + 0x28)" * (cast_expression "(ulong *)(lVar8 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x28)" ( (binary_expression "lVar8 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" identifier = identifier) ;) (if_statement "if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }" if (parenthesized_expression "(local_50 <= uVar1)" ( (binary_expression "local_50 <= uVar1" identifier <= identifier) )) (compound_statement "{\n      uVar5 = local_50;\n    }" { (expression_statement "uVar5 = local_50;" (assignment_expression "uVar5 = local_50" identifier = identifier) ;) })) (if_statement "if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }" if (parenthesized_expression "((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0))" ( (binary_expression "(uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)" (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)" ( (comma_expression "iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0" (assignment_expression "iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5)" identifier = (call_expression "memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5)" identifier (argument_list "(__s2,*(void **)(lVar8 + 0x20),uVar5)" ( identifier , (pointer_expression "*(void **)(lVar8 + 0x20)" * (cast_expression "(void **)(lVar8 + 0x20)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar8 + 0x20)" ( (binary_expression "lVar8 + 0x20" identifier + number_literal) )))) , identifier )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }" { (expression_statement "lVar9 = local_50 - uVar1;" (assignment_expression "lVar9 = local_50 - uVar1" identifier = (binary_expression "local_50 - uVar1" identifier - identifier)) ;) (if_statement "if (0x7fffffff < lVar9) goto LAB_001e6ca1;" if (parenthesized_expression "(0x7fffffff < lVar9)" ( (binary_expression "0x7fffffff < lVar9" number_literal < identifier) )) (goto_statement "goto LAB_001e6ca1;" goto statement_identifier ;)) (if_statement "if (lVar9 < -0x80000000) goto LAB_001e6cd8;" if (parenthesized_expression "(lVar9 < -0x80000000)" ( (binary_expression "lVar9 < -0x80000000" identifier < number_literal) )) (goto_statement "goto LAB_001e6cd8;" goto statement_identifier ;)) (expression_statement "iVar3 = (int)lVar9;" (assignment_expression "iVar3 = (int)lVar9" identifier = (cast_expression "(int)lVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (if_statement "if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }" if (parenthesized_expression "(-1 < iVar3)" ( (binary_expression "-1 < iVar3" number_literal < identifier) )) (compound_statement "{\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }" { (labeled_statement "LAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }" statement_identifier : (if_statement "if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }" if (parenthesized_expression "(__s2 != local_48)" ( (binary_expression "__s2 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_002dac70(__s2);\n      }" { (expression_statement "FUN_002dac70(__s2);" (call_expression "FUN_002dac70(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) }))) (expression_statement "*param_3 = *(undefined8 *)(lVar8 + 0x40);" (assignment_expression "*param_3 = *(undefined8 *)(lVar8 + 0x40)" (pointer_expression "*param_3" * identifier) = (pointer_expression "*(undefined8 *)(lVar8 + 0x40)" * (cast_expression "(undefined8 *)(lVar8 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x40)" ( (binary_expression "lVar8 + 0x40" identifier + number_literal) ))))) ;) (return_statement "return 1;" return number_literal ;) })) })) (labeled_statement "LAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }" statement_identifier : (if_statement "if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }" if (parenthesized_expression "(__s2 != local_48)" ( (binary_expression "__s2 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_002dac70(__s2);\n  }" { (expression_statement "FUN_002dac70(__s2);" (call_expression "FUN_002dac70(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) == IDENT) )) (goto_statement goto statement_identifier ;))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (return_statement return LIT ;) })) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)\n\n{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_001e6b80(long param_1,char *param_2,undefined8 *param_3)" (identifier "FUN_001e6b80") (parameter_list "(long param_1,char *param_2,undefined8 *param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  ulong uVar1;\n  undefined1 *__s2;\n  uint uVar2;\n  int iVar3;\n  size_t sVar4;\n  ulong uVar5;\n  char *pcVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }\n  pcVar6 = (char *)0xffffffffffffffff;\n  local_58 = local_48;\n  if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }\n  FUN_001665c0(&local_58,param_2,pcVar6);\n  __s2 = local_58;\n  lVar9 = *(long *)(param_1 + 0x9280);\n  lVar8 = param_1 + 0x9278;\n  if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }\nLAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }\n  return 0;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "undefined1 *__s2;" (type_identifier "undefined1") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "undefined1 *local_58;" (type_identifier "undefined1") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "ulong local_50;" (type_identifier "ulong") (identifier "local_50") (; ";")) (declaration "undefined1 local_48 [24];" (type_identifier "undefined1") (array_declarator "local_48 [24]" (identifier "local_48") ([ "[") (number_literal "24") (] "]")) (; ";")) (if_statement "if (*(long *)(param_1 + 0x9298) == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x9298) == 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x9298) == 0" (pointer_expression "*(long *)(param_1 + 0x9298)" (* "*") (cast_expression "(long *)(param_1 + 0x9298)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x9298)" (( "(") (binary_expression "param_1 + 0x9298" (identifier "param_1") (+ "+") (number_literal "0x9298")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pcVar6 = (char *)0xffffffffffffffff;" (assignment_expression "pcVar6 = (char *)0xffffffffffffffff" (identifier "pcVar6") (= "=") (cast_expression "(char *)0xffffffffffffffff" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xffffffffffffffff"))) (; ";")) (expression_statement "local_58 = local_48;" (assignment_expression "local_58 = local_48" (identifier "local_58") (= "=") (identifier "local_48")) (; ";")) (if_statement "if (param_2 != (char *)0x0) {\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }" (if "if") (parenthesized_expression "(param_2 != (char *)0x0)" (( "(") (binary_expression "param_2 != (char *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    sVar4 = strlen(param_2);\n    pcVar6 = param_2 + sVar4;\n  }" ({ "{") (expression_statement "sVar4 = strlen(param_2);" (assignment_expression "sVar4 = strlen(param_2)" (identifier "sVar4") (= "=") (call_expression "strlen(param_2)" (identifier "strlen") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (expression_statement "pcVar6 = param_2 + sVar4;" (assignment_expression "pcVar6 = param_2 + sVar4" (identifier "pcVar6") (= "=") (binary_expression "param_2 + sVar4" (identifier "param_2") (+ "+") (identifier "sVar4"))) (; ";")) (} "}"))) (expression_statement "FUN_001665c0(&local_58,param_2,pcVar6);" (call_expression "FUN_001665c0(&local_58,param_2,pcVar6)" (identifier "FUN_001665c0") (argument_list "(&local_58,param_2,pcVar6)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_2") (, ",") (identifier "pcVar6") () ")"))) (; ";")) (expression_statement "__s2 = local_58;" (assignment_expression "__s2 = local_58" (identifier "__s2") (= "=") (identifier "local_58")) (; ";")) (expression_statement "lVar9 = *(long *)(param_1 + 0x9280);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x9280)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(param_1 + 0x9280)" (* "*") (cast_expression "(long *)(param_1 + 0x9280)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x9280)" (( "(") (binary_expression "param_1 + 0x9280" (identifier "param_1") (+ "+") (number_literal "0x9280")) () ")"))))) (; ";")) (expression_statement "lVar8 = param_1 + 0x9278;" (assignment_expression "lVar8 = param_1 + 0x9278" (identifier "lVar8") (= "=") (binary_expression "param_1 + 0x9278" (identifier "param_1") (+ "+") (number_literal "0x9278"))) (; ";")) (if_statement "if (*(long *)(param_1 + 0x9280) != 0) {\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x9280) != 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x9280) != 0" (pointer_expression "*(long *)(param_1 + 0x9280)" (* "*") (cast_expression "(long *)(param_1 + 0x9280)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x9280)" (( "(") (binary_expression "param_1 + 0x9280" (identifier "param_1") (+ "+") (number_literal "0x9280")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);\nLAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;\n    uVar1 = *(ulong *)(lVar8 + 0x28);\n    uVar5 = uVar1;\n    if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }\n    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }\n    if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }\n  }" ({ "{") (do_statement "do {\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    } while (*(long *)(lVar7 + 0x18) != 0);" (do "do") (compound_statement "{\n      while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }\n      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);\n      uVar5 = (ulong)uVar2;\n      if (uVar2 == 0) goto LAB_001e6c34;\nLAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;\nLAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);\n    }" ({ "{") (while_statement "while( true ) {\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        lVar7 = lVar9;\n        uVar1 = *(ulong *)(lVar7 + 0x28);\n        uVar5 = local_50;\n        if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }\n        if (uVar5 != 0) break;\nLAB_001e6c34:\n        uVar5 = uVar1 - local_50;\n        if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }\nLAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);\n        lVar8 = lVar7;\n        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;\n      }" ({ "{") (expression_statement "lVar7 = lVar9;" (assignment_expression "lVar7 = lVar9" (identifier "lVar7") (= "=") (identifier "lVar9")) (; ";")) (expression_statement "uVar1 = *(ulong *)(lVar7 + 0x28);" (assignment_expression "uVar1 = *(ulong *)(lVar7 + 0x28)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(lVar7 + 0x28)" (* "*") (cast_expression "(ulong *)(lVar7 + 0x28)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x28)" (( "(") (binary_expression "lVar7 + 0x28" (identifier "lVar7") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "uVar5 = local_50;" (assignment_expression "uVar5 = local_50" (identifier "uVar5") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (uVar1 <= local_50) {\n          uVar5 = uVar1;\n        }" (if "if") (parenthesized_expression "(uVar1 <= local_50)" (( "(") (binary_expression "uVar1 <= local_50" (identifier "uVar1") (<= "<=") (identifier "local_50")) () ")")) (compound_statement "{\n          uVar5 = uVar1;\n        }" ({ "{") (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" (identifier "uVar5") (= "=") (identifier "uVar1")) (; ";")) (} "}"))) (if_statement "if (uVar5 != 0) break;" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "LAB_001e6c34:\n        uVar5 = uVar1 - local_50;" (statement_identifier "LAB_001e6c34") (: ":") (expression_statement "uVar5 = uVar1 - local_50;" (assignment_expression "uVar5 = uVar1 - local_50" (identifier "uVar5") (= "=") (binary_expression "uVar1 - local_50" (identifier "uVar1") (- "-") (identifier "local_50"))) (; ";"))) (if_statement "if ((long)uVar5 < 0x80000000) {\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" (if "if") (parenthesized_expression "((long)uVar5 < 0x80000000)" (( "(") (binary_expression "(long)uVar5 < 0x80000000" (cast_expression "(long)uVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar5")) (< "<") (number_literal "0x80000000")) () ")")) (compound_statement "{\n          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;\n          goto LAB_001e6c08;\n        }" ({ "{") (if_statement "if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;" (if "if") (parenthesized_expression "(-0x80000001 < (long)uVar5)" (( "(") (binary_expression "-0x80000001 < (long)uVar5" (number_literal "-0x80000001") (< "<") (cast_expression "(long)uVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar5"))) () ")")) (goto_statement "goto LAB_001e6c4a;" (goto "goto") (statement_identifier "LAB_001e6c4a") (; ";"))) (goto_statement "goto LAB_001e6c08;" (goto "goto") (statement_identifier "LAB_001e6c08") (; ";")) (} "}"))) (labeled_statement "LAB_001e6c4e:\n        lVar9 = *(long *)(lVar7 + 0x10);" (statement_identifier "LAB_001e6c4e") (: ":") (expression_statement "lVar9 = *(long *)(lVar7 + 0x10);" (assignment_expression "lVar9 = *(long *)(lVar7 + 0x10)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(lVar7 + 0x10)" (* "*") (cast_expression "(long *)(lVar7 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x10)" (( "(") (binary_expression "lVar7 + 0x10" (identifier "lVar7") (+ "+") (number_literal "0x10")) () ")"))))) (; ";"))) (expression_statement "lVar8 = lVar7;" (assignment_expression "lVar8 = lVar7" (identifier "lVar8") (= "=") (identifier "lVar7")) (; ";")) (if_statement "if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;" (if "if") (parenthesized_expression "(*(long *)(lVar7 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(lVar7 + 0x10) == 0" (pointer_expression "*(long *)(lVar7 + 0x10)" (* "*") (cast_expression "(long *)(lVar7 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x10)" (( "(") (binary_expression "lVar7 + 0x10" (identifier "lVar7") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001e6c5a;" (goto "goto") (statement_identifier "LAB_001e6c5a") (; ";"))) (} "}"))) (expression_statement "uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);" (assignment_expression "uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5)" (identifier "uVar2") (= "=") (call_expression "memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5)" (identifier "memcmp") (argument_list "(*(void **)(lVar7 + 0x20),__s2,uVar5)" (( "(") (pointer_expression "*(void **)(lVar7 + 0x20)" (* "*") (cast_expression "(void **)(lVar7 + 0x20)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar7 + 0x20)" (( "(") (binary_expression "lVar7 + 0x20" (identifier "lVar7") (+ "+") (number_literal "0x20")) () ")")))) (, ",") (identifier "__s2") (, ",") (identifier "uVar5") () ")")))) (; ";")) (expression_statement "uVar5 = (ulong)uVar2;" (assignment_expression "uVar5 = (ulong)uVar2" (identifier "uVar5") (= "=") (cast_expression "(ulong)uVar2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar2"))) (; ";")) (if_statement "if (uVar2 == 0) goto LAB_001e6c34;" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001e6c34;" (goto "goto") (statement_identifier "LAB_001e6c34") (; ";"))) (labeled_statement "LAB_001e6c4a:\n      if (-1 < (int)uVar5) goto LAB_001e6c4e;" (statement_identifier "LAB_001e6c4a") (: ":") (if_statement "if (-1 < (int)uVar5) goto LAB_001e6c4e;" (if "if") (parenthesized_expression "(-1 < (int)uVar5)" (( "(") (binary_expression "-1 < (int)uVar5" (number_literal "-1") (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (goto_statement "goto LAB_001e6c4e;" (goto "goto") (statement_identifier "LAB_001e6c4e") (; ";")))) (labeled_statement "LAB_001e6c08:\n      lVar9 = *(long *)(lVar7 + 0x18);" (statement_identifier "LAB_001e6c08") (: ":") (expression_statement "lVar9 = *(long *)(lVar7 + 0x18);" (assignment_expression "lVar9 = *(long *)(lVar7 + 0x18)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(lVar7 + 0x18)" (* "*") (cast_expression "(long *)(lVar7 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x18)" (( "(") (binary_expression "lVar7 + 0x18" (identifier "lVar7") (+ "+") (number_literal "0x18")) () ")"))))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "(*(long *)(lVar7 + 0x18) != 0)" (( "(") (binary_expression "*(long *)(lVar7 + 0x18) != 0" (pointer_expression "*(long *)(lVar7 + 0x18)" (* "*") (cast_expression "(long *)(lVar7 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x18)" (( "(") (binary_expression "lVar7 + 0x18" (identifier "lVar7") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (; ";")) (labeled_statement "LAB_001e6c5a:\n    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;" (statement_identifier "LAB_001e6c5a") (: ":") (if_statement "if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;" (if "if") (parenthesized_expression "(param_1 + 0x9278 == lVar8)" (( "(") (binary_expression "param_1 + 0x9278 == lVar8" (binary_expression "param_1 + 0x9278" (identifier "param_1") (+ "+") (number_literal "0x9278")) (== "==") (identifier "lVar8")) () ")")) (goto_statement "goto LAB_001e6cd8;" (goto "goto") (statement_identifier "LAB_001e6cd8") (; ";")))) (expression_statement "uVar1 = *(ulong *)(lVar8 + 0x28);" (assignment_expression "uVar1 = *(ulong *)(lVar8 + 0x28)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(lVar8 + 0x28)" (* "*") (cast_expression "(ulong *)(lVar8 + 0x28)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x28)" (( "(") (binary_expression "lVar8 + 0x28" (identifier "lVar8") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" (identifier "uVar5") (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (local_50 <= uVar1) {\n      uVar5 = local_50;\n    }" (if "if") (parenthesized_expression "(local_50 <= uVar1)" (( "(") (binary_expression "local_50 <= uVar1" (identifier "local_50") (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n      uVar5 = local_50;\n    }" ({ "{") (expression_statement "uVar5 = local_50;" (assignment_expression "uVar5 = local_50" (identifier "uVar5") (= "=") (identifier "local_50")) (; ";")) (} "}"))) (if_statement "if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }" (if "if") (parenthesized_expression "((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0))" (( "(") (binary_expression "(uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)" (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)" (( "(") (comma_expression "iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0" (assignment_expression "iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5)" (identifier "iVar3") (= "=") (call_expression "memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5)" (identifier "memcmp") (argument_list "(__s2,*(void **)(lVar8 + 0x20),uVar5)" (( "(") (identifier "__s2") (, ",") (pointer_expression "*(void **)(lVar8 + 0x20)" (* "*") (cast_expression "(void **)(lVar8 + 0x20)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar8 + 0x20)" (( "(") (binary_expression "lVar8 + 0x20" (identifier "lVar8") (+ "+") (number_literal "0x20")) () ")")))) (, ",") (identifier "uVar5") () ")")))) (, ",") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      lVar9 = local_50 - uVar1;\n      if (0x7fffffff < lVar9) goto LAB_001e6ca1;\n      if (lVar9 < -0x80000000) goto LAB_001e6cd8;\n      iVar3 = (int)lVar9;\n    }" ({ "{") (expression_statement "lVar9 = local_50 - uVar1;" (assignment_expression "lVar9 = local_50 - uVar1" (identifier "lVar9") (= "=") (binary_expression "local_50 - uVar1" (identifier "local_50") (- "-") (identifier "uVar1"))) (; ";")) (if_statement "if (0x7fffffff < lVar9) goto LAB_001e6ca1;" (if "if") (parenthesized_expression "(0x7fffffff < lVar9)" (( "(") (binary_expression "0x7fffffff < lVar9" (number_literal "0x7fffffff") (< "<") (identifier "lVar9")) () ")")) (goto_statement "goto LAB_001e6ca1;" (goto "goto") (statement_identifier "LAB_001e6ca1") (; ";"))) (if_statement "if (lVar9 < -0x80000000) goto LAB_001e6cd8;" (if "if") (parenthesized_expression "(lVar9 < -0x80000000)" (( "(") (binary_expression "lVar9 < -0x80000000" (identifier "lVar9") (< "<") (number_literal "-0x80000000")) () ")")) (goto_statement "goto LAB_001e6cd8;" (goto "goto") (statement_identifier "LAB_001e6cd8") (; ";"))) (expression_statement "iVar3 = (int)lVar9;" (assignment_expression "iVar3 = (int)lVar9" (identifier "iVar3") (= "=") (cast_expression "(int)lVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar9"))) (; ";")) (} "}"))) (if_statement "if (-1 < iVar3) {\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }" (if "if") (parenthesized_expression "(-1 < iVar3)" (( "(") (binary_expression "-1 < iVar3" (number_literal "-1") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\nLAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }\n      *param_3 = *(undefined8 *)(lVar8 + 0x40);\n      return 1;\n    }" ({ "{") (labeled_statement "LAB_001e6ca1:\n      if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }" (statement_identifier "LAB_001e6ca1") (: ":") (if_statement "if (__s2 != local_48) {\n        FUN_002dac70(__s2);\n      }" (if "if") (parenthesized_expression "(__s2 != local_48)" (( "(") (binary_expression "__s2 != local_48" (identifier "__s2") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n        FUN_002dac70(__s2);\n      }" ({ "{") (expression_statement "FUN_002dac70(__s2);" (call_expression "FUN_002dac70(__s2)" (identifier "FUN_002dac70") (argument_list "(__s2)" (( "(") (identifier "__s2") () ")"))) (; ";")) (} "}")))) (expression_statement "*param_3 = *(undefined8 *)(lVar8 + 0x40);" (assignment_expression "*param_3 = *(undefined8 *)(lVar8 + 0x40)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (pointer_expression "*(undefined8 *)(lVar8 + 0x40)" (* "*") (cast_expression "(undefined8 *)(lVar8 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x40)" (( "(") (binary_expression "lVar8 + 0x40" (identifier "lVar8") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_001e6cd8:\n  if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }" (statement_identifier "LAB_001e6cd8") (: ":") (if_statement "if (__s2 != local_48) {\n    FUN_002dac70(__s2);\n  }" (if "if") (parenthesized_expression "(__s2 != local_48)" (( "(") (binary_expression "__s2 != local_48" (identifier "__s2") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n    FUN_002dac70(__s2);\n  }" ({ "{") (expression_statement "FUN_002dac70(__s2);" (call_expression "FUN_002dac70(__s2)" (identifier "FUN_002dac70") (argument_list "(__s2)" (( "(") (identifier "__s2") () ")"))) (; ";")) (} "}")))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: bool section_start(General_options * this, char * secname, uint64_t *
   paddr) */

bool __thiscall
gold::type_1::function_1(type_1 *this,char *var_5,uint64_t *paddr)

{
  type_2 *var_15;
  type_3 var_10;
  type_4 __s2;
  type_5 var_14;
  int var_16;
  size_t var_7;
  type_6 uVar6;
  char *pcVar7;
  type_3 var_11;
  type_3 var_13;
  type_3 p_Var10;
  long var_17;
  basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3> var_4;
  
  if ((this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_node_count == 0) {
    return false;
  }
  pcVar7 = (char *)0xffffffffffffffff;
  var_4._M_dataplus._M_p = (pointer)&var_4.field_2;
  if (var_5 != (char *)0x0) {
    var_7 = var_6(var_5);
    pcVar7 = var_5 + var_7;
  }
  var_15 = &(this->section_starts_)._M_t._M_impl.super__Rb_tree_header;
  std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>::
  var_8<var_9*>(&var_4,var_5,pcVar7);
  __s2._M_p = var_4._M_dataplus._M_p;
  var_10 = (this->section_starts_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;
  p_Var10 = &var_15->_M_header;
  if (var_10 != (type_3)0x0) {
    do {
      while( true ) {
        var_13 = var_10;
        var_10 = var_13[1]._M_parent;
        var_11 = (type_3)var_4._M_string_length;
        if (var_10 <= var_4._M_string_length) {
          var_11 = var_10;
        }
        if (var_11 != (type_3)0x0) break;
LAB_001e6c34:
        uVar6 = (long)var_10 - var_4._M_string_length;
        if ((long)uVar6 < 0x80000000) {
          if (-0x80000001 < (long)uVar6) goto LAB_001e6c4a;
          goto LAB_001e6c08;
        }
LAB_001e6c4e:
        var_10 = var_13->_M_left;
        p_Var10 = var_13;
        if (var_13->_M_left == (type_3)0x0) goto LAB_001e6c5a;
      }
      var_14 = var_12(*(void **)(var_13 + 1),__s2._M_p,(size_t)var_11);
      uVar6 = (type_6)var_14;
      if (var_14 == 0) goto LAB_001e6c34;
LAB_001e6c4a:
      if (-1 < (int)uVar6) goto LAB_001e6c4e;
LAB_001e6c08:
      var_10 = var_13->_M_right;
    } while (var_13->_M_right != (type_3)0x0);
LAB_001e6c5a:
    if (var_15 == (type_2 *)p_Var10) goto LAB_001e6cd8;
    var_10 = *(type_3 *)((long)p_Var10 + 0x28);
    var_11 = var_10;
    if (var_4._M_string_length <= var_10) {
      var_11 = (type_3)var_4._M_string_length;
    }
    if ((var_11 == (type_3)0x0) ||
       (var_16 = var_12(__s2._M_p,(void *)((type_2 *)p_Var10)->_M_node_count,(size_t)var_11)
       , var_16 == 0)) {
      var_17 = var_4._M_string_length - (long)var_10;
      if (0x7fffffff < var_17) goto LAB_001e6ca1;
      if (var_17 < -0x80000000) goto LAB_001e6cd8;
      var_16 = (int)var_17;
    }
    if (-1 < var_16) {
LAB_001e6ca1:
      if ((anon_union_16_2_edb7204a_for_basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_18
           *)__s2._M_p != &var_4.field_2) {
        var_19(__s2._M_p);
      }
      *paddr = *(uint64_t *)((type_7 *)((long)p_Var10 + 0x28) + 0x18);
      return true;
    }
  }
LAB_001e6cd8:
  if ((anon_union_16_2_edb7204a_for_basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_18
       *)__s2._M_p != &var_4.field_2) {
    var_19(__s2._M_p);
  }
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (return_statement (number_literal)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (return_statement (number_literal)))))

undefined8 MASKED(long param_1,char *param_2,undefined8 *param_3)

{
  ulong uVar1;
  undefined1 *__s2;
  uint uVar2;
  int iVar3;
  size_t sVar4;
  ulong uVar5;
  char *pcVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined1 *local_58;
  ulong local_50;
  undefined1 local_48 [24];
  
  if (*(long *)(param_1 + 0x9298) == 0) {
    return 0;
  }
  pcVar6 = (char *)0xffffffffffffffff;
  local_58 = local_48;
  if (param_2 != (char *)0x0) {
    sVar4 = strlen(param_2);
    pcVar6 = param_2 + sVar4;
  }
  FUN_001665c0(&local_58,param_2,pcVar6);
  __s2 = local_58;
  lVar9 = *(long *)(param_1 + 0x9280);
  lVar8 = param_1 + 0x9278;
  if (*(long *)(param_1 + 0x9280) != 0) {
    do {
      while( true ) {
        lVar7 = lVar9;
        uVar1 = *(ulong *)(lVar7 + 0x28);
        uVar5 = local_50;
        if (uVar1 <= local_50) {
          uVar5 = uVar1;
        }
        if (uVar5 != 0) break;
LAB_001e6c34:
        uVar5 = uVar1 - local_50;
        if ((long)uVar5 < 0x80000000) {
          if (-0x80000001 < (long)uVar5) goto LAB_001e6c4a;
          goto LAB_001e6c08;
        }
LAB_001e6c4e:
        lVar9 = *(long *)(lVar7 + 0x10);
        lVar8 = lVar7;
        if (*(long *)(lVar7 + 0x10) == 0) goto LAB_001e6c5a;
      }
      uVar2 = memcmp(*(void **)(lVar7 + 0x20),__s2,uVar5);
      uVar5 = (ulong)uVar2;
      if (uVar2 == 0) goto LAB_001e6c34;
LAB_001e6c4a:
      if (-1 < (int)uVar5) goto LAB_001e6c4e;
LAB_001e6c08:
      lVar9 = *(long *)(lVar7 + 0x18);
    } while (*(long *)(lVar7 + 0x18) != 0);
LAB_001e6c5a:
    if (param_1 + 0x9278 == lVar8) goto LAB_001e6cd8;
    uVar1 = *(ulong *)(lVar8 + 0x28);
    uVar5 = uVar1;
    if (local_50 <= uVar1) {
      uVar5 = local_50;
    }
    if ((uVar5 == 0) || (iVar3 = memcmp(__s2,*(void **)(lVar8 + 0x20),uVar5), iVar3 == 0)) {
      lVar9 = local_50 - uVar1;
      if (0x7fffffff < lVar9) goto LAB_001e6ca1;
      if (lVar9 < -0x80000000) goto LAB_001e6cd8;
      iVar3 = (int)lVar9;
    }
    if (-1 < iVar3) {
LAB_001e6ca1:
      if (__s2 != local_48) {
        FUN_002dac70(__s2);
      }
      *param_3 = *(undefined8 *)(lVar8 + 0x40);
      return 1;
    }
  }
LAB_001e6cd8:
  if (__s2 != local_48) {
    FUN_002dac70(__s2);
  }
  return 0;
}

