
/* void std::__facet_shims::__moneypunct_fill_cache<char, true>(std::integral_constant<bool, false>,
   std::locale::facet const*, std::__moneypunct_cache<char, true>*) */

void std::__facet_shims::__moneypunct_fill_cache<char,true>(long *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  ulong uVar3;
  undefined1 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  long local_40 [2];
  
  uVar4 = (**(code **)(*param_1 + 0x10))();
  *(undefined1 *)(param_2 + 0x21) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined1 *)(param_2 + 0x22) = uVar4;
  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x58) = uVar5;
  *(undefined8 *)(param_2 + 0x28) = 0;
  *(undefined8 *)(param_2 + 0x38) = 0;
  *(undefined8 *)(param_2 + 0x48) = 0;
  *(undefined1 *)(param_2 + 0x6f) = 1;
  (**(code **)(*param_1 + 0x20))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */
  pcVar6 = (char *)operator_new__(uVar3 + 1);
  std::string::copy((string *)local_40,pcVar6,uVar3,0);
  pcVar6[uVar3] = '\0';
  *(ulong *)(param_2 + 0x18) = uVar3;
  *(char **)(param_2 + 0x10) = pcVar6;
  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
    }
  }
  (**(code **)(*param_1 + 0x28))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */
  pcVar6 = (char *)operator_new__(uVar3 + 1);
  std::string::copy((string *)local_40,pcVar6,uVar3,0);
  pcVar6[uVar3] = '\0';
  *(char **)(param_2 + 0x28) = pcVar6;
  *(ulong *)(param_2 + 0x30) = uVar3;
  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
    }
  }
  (**(code **)(*param_1 + 0x30))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */
  pcVar6 = (char *)operator_new__(uVar3 + 1);
  std::string::copy((string *)local_40,pcVar6,uVar3,0);
  pcVar6[uVar3] = '\0';
  *(char **)(param_2 + 0x38) = pcVar6;
  *(ulong *)(param_2 + 0x40) = uVar3;
  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
    }
  }
  (**(code **)(*param_1 + 0x38))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */
  pcVar6 = (char *)operator_new__(uVar3 + 1);
  std::string::copy((string *)local_40,pcVar6,uVar3,0);
  pcVar6[uVar3] = '\0';
  *(char **)(param_2 + 0x48) = pcVar6;
  *(ulong *)(param_2 + 0x50) = uVar3;
  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
    }
  }
  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);
  *(undefined4 *)(param_2 + 0x5c) = uVar5;
  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);
  *(undefined4 *)(param_2 + 0x60) = uVar5;
  return;
}



void FUN_004d99e0(long *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  long lVar3;
  undefined1 uVar4;
  undefined4 uVar5;
  long lVar6;
  undefined1 local_41;
  long local_40 [2];
  
  uVar4 = (**(code **)(*param_1 + 0x10))();
  *(undefined1 *)(param_2 + 0x21) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined1 *)(param_2 + 0x22) = uVar4;
  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x58) = uVar5;
  *(undefined8 *)(param_2 + 0x28) = 0;
  *(undefined8 *)(param_2 + 0x38) = 0;
  *(undefined8 *)(param_2 + 0x48) = 0;
  *(undefined1 *)(param_2 + 0x6f) = 1;
  (**(code **)(*param_1 + 0x20))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x18) = lVar3;
  *(long *)(param_2 + 0x10) = lVar6;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x28))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x28) = lVar6;
  *(long *)(param_2 + 0x30) = lVar3;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x30))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x38) = lVar6;
  *(long *)(param_2 + 0x40) = lVar3;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x38))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x48) = lVar6;
  *(long *)(param_2 + 0x50) = lVar3;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);
  *(undefined4 *)(param_2 + 0x5c) = uVar5;
  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);
  *(undefined4 *)(param_2 + 0x60) = uVar5;
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RBX,RSI
SUB RSP,0x18
MOV RAX,qword ptr [RDI]
LEA R12,[RSP + 0x8]
CALL qword ptr [RAX + 0x10]
MOV RDI,RBP
MOV byte ptr [RBX + 0x21],AL
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x18]
MOV RDI,RBP
MOV byte ptr [RBX + 0x22],AL
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x40]
MOV qword ptr [RBX + 0x10],0x0
MOV RDI,R12
MOV RSI,RBP
MOV dword ptr [RBX + 0x58],EAX
MOV qword ptr [RBX + 0x28],0x0
MOV qword ptr [RBX + 0x38],0x0
MOV qword ptr [RBX + 0x48],0x0
MOV byte ptr [RBX + 0x6f],0x1
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x20]
MOV RAX,qword ptr [RSP + 0x8]
MOV R13,qword ptr [RAX + -0x18]
LEA RDI,[R13 + 0x1]
CALL 0x0049cb00
XOR ECX,ECX
MOV RDX,R13
MOV RSI,RAX
MOV RDI,R12
MOV R14,RAX
CALL 0x004d0470
MOV RAX,qword ptr [RSP + 0x8]
MOV byte ptr [R14 + R13*0x1],0x0
MOV qword ptr [RBX + 0x18],R13
LEA R13,[0x689d80]
LEA RDI,[RAX + -0x18]
MOV qword ptr [RBX + 0x10],R14
CMP RDI,R13
JNZ 0x004d9bb8
MOV RAX,qword ptr [RBP]
MOV RDI,R12
MOV RSI,RBP
CALL qword ptr [RAX + 0x28]
MOV RAX,qword ptr [RSP + 0x8]
MOV R14,qword ptr [RAX + -0x18]
LEA RDI,[R14 + 0x1]
CALL 0x0049cb00
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x004d0470
MOV RAX,qword ptr [RSP + 0x8]
MOV byte ptr [R15 + R14*0x1],0x0
MOV qword ptr [RBX + 0x28],R15
LEA RDI,[RAX + -0x18]
MOV qword ptr [RBX + 0x30],R14
CMP RDI,R13
JNZ 0x004d9bf0
MOV RAX,qword ptr [RBP]
MOV RDI,R12
MOV RSI,RBP
CALL qword ptr [RAX + 0x30]
MOV RAX,qword ptr [RSP + 0x8]
MOV R14,qword ptr [RAX + -0x18]
LEA RDI,[R14 + 0x1]
CALL 0x0049cb00
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x004d0470
MOV RAX,qword ptr [RSP + 0x8]
MOV byte ptr [R15 + R14*0x1],0x0
MOV qword ptr [RBX + 0x38],R15
LEA RDI,[RAX + -0x18]
MOV qword ptr [RBX + 0x40],R14
CMP RDI,R13
JNZ 0x004d9c20
MOV RAX,qword ptr [RBP]
MOV RDI,R12
MOV RSI,RBP
CALL qword ptr [RAX + 0x38]
MOV RAX,qword ptr [RSP + 0x8]
MOV R14,qword ptr [RAX + -0x18]
LEA RDI,[R14 + 0x1]
CALL 0x0049cb00
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x004d0470
MOV RAX,qword ptr [RSP + 0x8]
MOV byte ptr [R15 + R14*0x1],0x0
MOV qword ptr [RBX + 0x48],R15
LEA RDI,[RAX + -0x18]
MOV qword ptr [RBX + 0x50],R14
CMP RDI,R13
JNZ 0x004d9c50
MOV RAX,qword ptr [RBP]
MOV RDI,RBP
CALL qword ptr [RAX + 0x48]
MOV RDI,RBP
MOV dword ptr [RBX + 0x5c],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x50]
MOV dword ptr [RBX + 0x60],EAX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP qword ptr [0x0067bee8],0x0
JZ 0x004d9c90
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x004d9a98
LEA RSI,[RSP + 0x7]
CALL 0x004d1100
JMP 0x004d9a98
CMP qword ptr [0x0067bee8],0x0
JZ 0x004d9c80
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x004d9ae9
LEA RSI,[RSP + 0x7]
CALL 0x004d1100
JMP 0x004d9ae9
CMP qword ptr [0x0067bee8],0x0
JZ 0x004d9cb0
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x004d9b3a
LEA RSI,[RSP + 0x7]
CALL 0x004d1100
JMP 0x004d9b3a
CMP qword ptr [0x0067bee8],0x0
JZ 0x004d9ca0
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x004d9b8b
LEA RSI,[RSP + 0x7]
CALL 0x004d1100
JMP 0x004d9b8b
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x004d9c08
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x004d9bd0
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x004d9c64
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x004d9c38
(translation_unit "void FUN_004d99e0(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}\n\n" (function_definition "void FUN_004d99e0(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}" primitive_type (function_declarator "FUN_004d99e0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */\n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_41;" type_identifier identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x21) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x21) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x21)" * (cast_expression "(undefined1 *)(param_2 + 0x21)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x21)" ( (binary_expression "param_2 + 0x21" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x22) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x22) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x22)" * (cast_expression "(undefined1 *)(param_2 + 0x22)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x22)" ( (binary_expression "param_2 + 0x22" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x58) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x58) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x58)" * (cast_expression "(undefined4 *)(param_2 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" * (cast_expression "(undefined8 *)(param_2 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x48) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x48) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x48)" * (cast_expression "(undefined8 *)(param_2 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x6f) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x6f) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x6f)" * (cast_expression "(undefined1 *)(param_2 + 0x6f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x6f)" ( (binary_expression "param_2 + 0x6f" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar3" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar6" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x28))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x28) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x28) = lVar6" (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar3" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x30))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar6" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x40) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar3" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x38))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x48) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar6" (pointer_expression "*(long *)(param_2 + 0x48)" * (cast_expression "(long *)(param_2 + 0x48)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x50) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar3" (pointer_expression "*(long *)(param_2 + 0x50)" * (cast_expression "(long *)(param_2 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x5c) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x5c) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x5c)" * (cast_expression "(undefined4 *)(param_2 + 0x5c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x5c)" ( (binary_expression "param_2 + 0x5c" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* void std::__facet_shims::__moneypunct_fill_cache<char, true>(std::integral_constant<bool, false>,\n   std::locale::facet const*, std::__moneypunct_cache<char, true>*) */\n\nvoid std::__facet_shims::__moneypunct_fill_cache<char,true>(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  ulong uVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  char *pcVar6;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */\n  pcVar6 = (char *)operator_new__(uVar3 + 1);\n  std::string::copy((string *)local_40,pcVar6,uVar3,0);\n  pcVar6[uVar3] = '\0';\n  *(ulong *)(param_2 + 0x18) = uVar3;\n  *(char **)(param_2 + 0x10) = pcVar6;\n  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }\n  (**(code **)(*param_1 + 0x28))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */\n  pcVar6 = (char *)operator_new__(uVar3 + 1);\n  std::string::copy((string *)local_40,pcVar6,uVar3,0);\n  pcVar6[uVar3] = '\0';\n  *(char **)(param_2 + 0x28) = pcVar6;\n  *(ulong *)(param_2 + 0x30) = uVar3;\n  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }\n  (**(code **)(*param_1 + 0x30))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */\n  pcVar6 = (char *)operator_new__(uVar3 + 1);\n  std::string::copy((string *)local_40,pcVar6,uVar3,0);\n  pcVar6[uVar3] = '\0';\n  *(char **)(param_2 + 0x38) = pcVar6;\n  *(ulong *)(param_2 + 0x40) = uVar3;\n  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }\n  (**(code **)(*param_1 + 0x38))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */\n  pcVar6 = (char *)operator_new__(uVar3 + 1);\n  std::string::copy((string *)local_40,pcVar6,uVar3,0);\n  pcVar6[uVar3] = '\0';\n  *(char **)(param_2 + 0x48) = pcVar6;\n  *(ulong *)(param_2 + 0x50) = uVar3;\n  if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}\n\n" comment (declaration "void std::__facet_shims::__moneypunct_fill_cache<char,true>(long *param_1,long param_2)\n\n{\n  int *piVar1;" primitive_type (ERROR "std::__facet_shims::" identifier : : identifier : :) identifier (ERROR "<char" < primitive_type) , (ERROR "true>(long" identifier > ( long) (pointer_declarator "*param_1" * identifier) , (ERROR "long param_2)\n\n{\n  int" identifier identifier ) { primitive_type) (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x21) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x21) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x21)" * (cast_expression "(undefined1 *)(param_2 + 0x21)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x21)" ( (binary_expression "param_2 + 0x21" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x22) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x22) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x22)" * (cast_expression "(undefined1 *)(param_2 + 0x22)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x22)" ( (binary_expression "param_2 + 0x22" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x58) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x58) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x58)" * (cast_expression "(undefined4 *)(param_2 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" * (cast_expression "(undefined8 *)(param_2 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x48) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x48) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x48)" * (cast_expression "(undefined8 *)(param_2 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x6f) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x6f) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x6f)" * (cast_expression "(undefined1 *)(param_2 + 0x6f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x6f)" ( (binary_expression "param_2 + 0x6f" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "pcVar6 = (char *)operator_new__(uVar3 + 1);" (assignment_expression "pcVar6 = (char *)operator_new__(uVar3 + 1)" identifier = (cast_expression "(char *)operator_new__(uVar3 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar3 + 1)" identifier (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)local_40,pcVar6,uVar3,0);" (call_expression "copy((string *)local_40,pcVar6,uVar3,0)" identifier (argument_list "((string *)local_40,pcVar6,uVar3,0)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar6[uVar3] = '\0';" (assignment_expression "pcVar6[uVar3] = '\0'" (subscript_expression "pcVar6[uVar3]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(ulong *)(param_2 + 0x18) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x18) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x18)" * (cast_expression "(ulong *)(param_2 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(char **)(param_2 + 0x10) = pcVar6;" (assignment_expression "*(char **)(param_2 + 0x10) = pcVar6" (pointer_expression "*(char **)(param_2 + 0x10)" * (cast_expression "(char **)(param_2 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::string::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "(**(code **)(*param_1 + 0x28))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "pcVar6 = (char *)operator_new__(uVar3 + 1);" (assignment_expression "pcVar6 = (char *)operator_new__(uVar3 + 1)" identifier = (cast_expression "(char *)operator_new__(uVar3 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar3 + 1)" identifier (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)local_40,pcVar6,uVar3,0);" (call_expression "copy((string *)local_40,pcVar6,uVar3,0)" identifier (argument_list "((string *)local_40,pcVar6,uVar3,0)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar6[uVar3] = '\0';" (assignment_expression "pcVar6[uVar3] = '\0'" (subscript_expression "pcVar6[uVar3]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char **)(param_2 + 0x28) = pcVar6;" (assignment_expression "*(char **)(param_2 + 0x28) = pcVar6" (pointer_expression "*(char **)(param_2 + 0x28)" * (cast_expression "(char **)(param_2 + 0x28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(ulong *)(param_2 + 0x30) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x30) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x30)" * (cast_expression "(ulong *)(param_2 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::string::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "(**(code **)(*param_1 + 0x30))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "pcVar6 = (char *)operator_new__(uVar3 + 1);" (assignment_expression "pcVar6 = (char *)operator_new__(uVar3 + 1)" identifier = (cast_expression "(char *)operator_new__(uVar3 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar3 + 1)" identifier (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)local_40,pcVar6,uVar3,0);" (call_expression "copy((string *)local_40,pcVar6,uVar3,0)" identifier (argument_list "((string *)local_40,pcVar6,uVar3,0)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar6[uVar3] = '\0';" (assignment_expression "pcVar6[uVar3] = '\0'" (subscript_expression "pcVar6[uVar3]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char **)(param_2 + 0x38) = pcVar6;" (assignment_expression "*(char **)(param_2 + 0x38) = pcVar6" (pointer_expression "*(char **)(param_2 + 0x38)" * (cast_expression "(char **)(param_2 + 0x38)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(ulong *)(param_2 + 0x40) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x40) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x40)" * (cast_expression "(ulong *)(param_2 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::string::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "(**(code **)(*param_1 + 0x38))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "pcVar6 = (char *)operator_new__(uVar3 + 1);" (assignment_expression "pcVar6 = (char *)operator_new__(uVar3 + 1)" identifier = (cast_expression "(char *)operator_new__(uVar3 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar3 + 1)" identifier (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)local_40,pcVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)local_40,pcVar6,uVar3,0);" (call_expression "copy((string *)local_40,pcVar6,uVar3,0)" identifier (argument_list "((string *)local_40,pcVar6,uVar3,0)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar6[uVar3] = '\0';" (assignment_expression "pcVar6[uVar3] = '\0'" (subscript_expression "pcVar6[uVar3]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char **)(param_2 + 0x48) = pcVar6;" (assignment_expression "*(char **)(param_2 + 0x48) = pcVar6" (pointer_expression "*(char **)(param_2 + 0x48)" * (cast_expression "(char **)(param_2 + 0x48)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(ulong *)(param_2 + 0x50) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x50) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x50)" * (cast_expression "(ulong *)(param_2 + 0x50)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)&std::string::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::string::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x5c) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x5c) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x5c)" * (cast_expression "(undefined4 *)(param_2 + 0x5c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x5c)" ( (binary_expression "param_2 + 0x5c" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_004d99e0(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}\n\n" (function_definition "void FUN_004d99e0(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}" primitive_type (function_declarator "FUN_004d99e0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_41;" type_identifier identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x21) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x21) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x21)" * (cast_expression "(undefined1 *)(param_2 + 0x21)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x21)" ( (binary_expression "param_2 + 0x21" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x22) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x22) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x22)" * (cast_expression "(undefined1 *)(param_2 + 0x22)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x22)" ( (binary_expression "param_2 + 0x22" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x58) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x58) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x58)" * (cast_expression "(undefined4 *)(param_2 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" * (cast_expression "(undefined8 *)(param_2 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x48) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x48) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x48)" * (cast_expression "(undefined8 *)(param_2 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x6f) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x6f) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x6f)" * (cast_expression "(undefined1 *)(param_2 + 0x6f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x6f)" ( (binary_expression "param_2 + 0x6f" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar3" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar6" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x28))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x28) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x28) = lVar6" (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar3" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x30))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar6" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x40) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar3" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x38))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" identifier = (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" * (cast_expression "(undefined1 *)(lVar6 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + lVar3)" ( (binary_expression "lVar6 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x48) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar6" (pointer_expression "*(long *)(param_2 + 0x48)" * (cast_expression "(long *)(param_2 + 0x48)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x50) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar3" (pointer_expression "*(long *)(param_2 + 0x50)" * (cast_expression "(long *)(param_2 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00689d80" & identifier)) )) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x5c) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x5c) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x5c)" * (cast_expression "(undefined4 *)(param_2 + 0x5c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x5c)" ( (binary_expression "param_2 + 0x5c" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_004d99e0(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_004d99e0(long *param_1,long param_2)" (identifier "FUN_004d99e0") (parameter_list "(long *param_1,long param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined1 uVar4;\n  undefined4 uVar5;\n  long lVar6;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined1 *)(param_2 + 0x21) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x22) = uVar4;\n  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x58) = uVar5;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  *(undefined8 *)(param_2 + 0x48) = 0;\n  *(undefined1 *)(param_2 + 0x6f) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x18) = lVar3;\n  *(long *)(param_2 + 0x10) = lVar6;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x28) = lVar6;\n  *(long *)(param_2 + 0x30) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar6;\n  *(long *)(param_2 + 0x40) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x38))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);\n  FUN_004d0470(local_40,lVar6,lVar3,0);\n  *(undefined1 *)(lVar6 + lVar3) = 0;\n  *(long *)(param_2 + 0x48) = lVar6;\n  *(long *)(param_2 + 0x50) = lVar3;\n  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);\n  *(undefined4 *)(param_2 + 0x5c) = uVar5;\n  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);\n  *(undefined4 *)(param_2 + 0x60) = uVar5;\n  return;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined1 uVar4;" (type_identifier "undefined1") (identifier "uVar4") (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "undefined1 local_41;" (type_identifier "undefined1") (identifier "local_41") (; ";")) (declaration "long local_40 [2];" (sized_type_specifier "long" (long "long")) (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0x21) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x21) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x21)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0x21)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x21)" (( "(") (binary_expression "param_2 + 0x21" (identifier "param_2") (+ "+") (number_literal "0x21")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x18)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x18)" (* "*") (cast_expression "(code **)(*param_1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0x22) = uVar4;" (assignment_expression "*(undefined1 *)(param_2 + 0x22) = uVar4" (pointer_expression "*(undefined1 *)(param_2 + 0x22)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0x22)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x22)" (( "(") (binary_expression "param_2 + 0x22" (identifier "param_2") (+ "+") (number_literal "0x22")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x40))(param_1)" (identifier "uVar5") (= "=") (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x40)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x40)" (* "*") (cast_expression "(code **)(*param_1 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x40)" (( "(") (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x58) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x58) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x58)" (( "(") (binary_expression "param_2 + 0x58" (identifier "param_2") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x48) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x48) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x48)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x48)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x48)" (( "(") (binary_expression "param_2 + 0x48" (identifier "param_2") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0x6f) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x6f) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x6f)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0x6f)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x6f)" (( "(") (binary_expression "param_2 + 0x6f" (identifier "param_2") (+ "+") (number_literal "0x6f")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "(**(code **)(*param_1 + 0x20))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x20)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x20)" (* "*") (cast_expression "(code **)(*param_1 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x20)" (( "(") (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" (identifier "lVar6") (= "=") (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" (identifier "thunk_FUN_0049cb60") (argument_list "(lVar3 + 1)" (( "(") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" (identifier "FUN_004d0470") (argument_list "(local_40,lVar6,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar6") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" (* "*") (cast_expression "(undefined1 *)(lVar6 + lVar3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + lVar3)" (( "(") (binary_expression "lVar6 + lVar3" (identifier "lVar6") (+ "+") (identifier "lVar3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x18) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar3" (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (expression_statement "*(long *)(param_2 + 0x10) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar6" (pointer_expression "*(long *)(param_2 + 0x10)" (* "*") (cast_expression "(long *)(param_2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "lVar6")) (; ";")) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" (if "if") (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" (( "(") (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00689d80" (& "&") (identifier "DAT_00689d80"))) () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_0067bee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" ({ "{") (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_0049e330") (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x28))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x28)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x28)" (* "*") (cast_expression "(code **)(*param_1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x28)" (( "(") (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" (identifier "lVar6") (= "=") (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" (identifier "thunk_FUN_0049cb60") (argument_list "(lVar3 + 1)" (( "(") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" (identifier "FUN_004d0470") (argument_list "(local_40,lVar6,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar6") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" (* "*") (cast_expression "(undefined1 *)(lVar6 + lVar3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + lVar3)" (( "(") (binary_expression "lVar6 + lVar3" (identifier "lVar6") (+ "+") (identifier "lVar3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x28) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x28) = lVar6" (pointer_expression "*(long *)(param_2 + 0x28)" (* "*") (cast_expression "(long *)(param_2 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "lVar6")) (; ";")) (expression_statement "*(long *)(param_2 + 0x30) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar3" (pointer_expression "*(long *)(param_2 + 0x30)" (* "*") (cast_expression "(long *)(param_2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" (if "if") (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" (( "(") (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00689d80" (& "&") (identifier "DAT_00689d80"))) () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_0067bee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" ({ "{") (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_0049e330") (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x30))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x30)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x30)" (* "*") (cast_expression "(code **)(*param_1 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x30)" (( "(") (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" (identifier "lVar6") (= "=") (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" (identifier "thunk_FUN_0049cb60") (argument_list "(lVar3 + 1)" (( "(") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" (identifier "FUN_004d0470") (argument_list "(local_40,lVar6,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar6") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" (* "*") (cast_expression "(undefined1 *)(lVar6 + lVar3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + lVar3)" (( "(") (binary_expression "lVar6 + lVar3" (identifier "lVar6") (+ "+") (identifier "lVar3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x38) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar6" (pointer_expression "*(long *)(param_2 + 0x38)" (* "*") (cast_expression "(long *)(param_2 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "lVar6")) (; ";")) (expression_statement "*(long *)(param_2 + 0x40) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar3" (pointer_expression "*(long *)(param_2 + 0x40)" (* "*") (cast_expression "(long *)(param_2 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" (if "if") (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" (( "(") (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00689d80" (& "&") (identifier "DAT_00689d80"))) () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_0067bee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" ({ "{") (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_0049e330") (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x38))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x38)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x38)" (* "*") (cast_expression "(code **)(*param_1 + 0x38)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x38)" (( "(") (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x38")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "lVar6 = thunk_FUN_0049cb60(lVar3 + 1);" (assignment_expression "lVar6 = thunk_FUN_0049cb60(lVar3 + 1)" (identifier "lVar6") (= "=") (call_expression "thunk_FUN_0049cb60(lVar3 + 1)" (identifier "thunk_FUN_0049cb60") (argument_list "(lVar3 + 1)" (( "(") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_004d0470(local_40,lVar6,lVar3,0);" (call_expression "FUN_004d0470(local_40,lVar6,lVar3,0)" (identifier "FUN_004d0470") (argument_list "(local_40,lVar6,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar6") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar6 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar6 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar6 + lVar3)" (* "*") (cast_expression "(undefined1 *)(lVar6 + lVar3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + lVar3)" (( "(") (binary_expression "lVar6 + lVar3" (identifier "lVar6") (+ "+") (identifier "lVar3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x48) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar6" (pointer_expression "*(long *)(param_2 + 0x48)" (* "*") (cast_expression "(long *)(param_2 + 0x48)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x48)" (( "(") (binary_expression "param_2 + 0x48" (identifier "param_2") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "lVar6")) (; ";")) (expression_statement "*(long *)(param_2 + 0x50) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar3" (pointer_expression "*(long *)(param_2 + 0x50)" (* "*") (cast_expression "(long *)(param_2 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x50)" (( "(") (binary_expression "param_2 + 0x50" (identifier "param_2") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" (if "if") (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80)" (( "(") (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00689d80" (& "&") (identifier "DAT_00689d80"))) () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_0067bee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_0067bee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_0067bee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);\n    }" ({ "{") (expression_statement "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_0049e330") (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x48))(param_1)" (identifier "uVar5") (= "=") (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x48)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x48)" (* "*") (cast_expression "(code **)(*param_1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x48)" (( "(") (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x5c) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x5c) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x5c)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x5c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x5c)" (( "(") (binary_expression "param_2 + 0x5c" (identifier "param_2") (+ "+") (number_literal "0x5c")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "uVar5 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar5 = (**(code **)(*param_1 + 0x50))(param_1)" (identifier "uVar5") (= "=") (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x50)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x50)" (* "*") (cast_expression "(code **)(*param_1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x50)" (( "(") (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x60)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x60)" (( "(") (binary_expression "param_2 + 0x60" (identifier "param_2") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* void std::__facet_shims::__moneypunct_fill_cache<char, true>(std::integral_constant<bool, false>,
   std::locale::facet const*, std::__moneypunct_cache<char, true>*) */

void std::__facet_shims::__moneypunct_fill_cache<char,true>(long *param_1,long var_1)

{
  int *piVar1;
  int var_6;
  type_1 var_3;
  type_2 uVar4;
  type_3 uVar5;
  char *pcVar6;
  long local_40 [2];
  
  uVar4 = (**(type_4 **)(*param_1 + 0x10))();
  *(type_2 *)(var_1 + 0x21) = uVar4;
  uVar4 = (**(type_4 **)(*param_1 + 0x18))(param_1);
  *(type_2 *)(var_1 + 0x22) = uVar4;
  uVar5 = (**(type_4 **)(*param_1 + 0x40))(param_1);
  *(type_5 *)(var_1 + 0x10) = 0;
  *(type_3 *)(var_1 + 0x58) = uVar5;
  *(type_5 *)(var_1 + 0x28) = 0;
  *(type_5 *)(var_1 + 0x38) = 0;
  *(type_5 *)(var_1 + 0x48) = 0;
  *(type_2 *)(var_1 + 0x6f) = 1;
  (**(type_4 **)(*param_1 + 0x20))((type_6 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */
  pcVar6 = (char *)var_2(var_3 + 1);
  std::string::var_4((type_6 *)local_40,pcVar6,var_3,0);
  pcVar6[var_3] = '\0';
  *(type_1 *)(var_1 + 0x18) = var_3;
  *(char **)(var_1 + 0x10) = pcVar6;
  if ((type_7 *)(local_40[0] + -0x18) != (type_7 *)&std::type_6::_Rep::_S_empty_rep_storage) {
    if (var_5 == (type_8 *)0x0) {
      var_6 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = var_6 + -1;
    }
    else {
      var_7();
      piVar1 = (int *)(local_40[0] + -8);
      var_6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      var_8();
    }
    if (var_6 < 1) {
      std::string::_Rep::var_9((type_7 *)(local_40[0] + -0x18));
    }
  }
  (**(type_4 **)(*param_1 + 0x28))((type_6 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */
  pcVar6 = (char *)var_2(var_3 + 1);
  std::string::var_4((type_6 *)local_40,pcVar6,var_3,0);
  pcVar6[var_3] = '\0';
  *(char **)(var_1 + 0x28) = pcVar6;
  *(type_1 *)(var_1 + 0x30) = var_3;
  if ((type_7 *)(local_40[0] + -0x18) != (type_7 *)&std::type_6::_Rep::_S_empty_rep_storage) {
    if (var_5 == (type_8 *)0x0) {
      var_6 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = var_6 + -1;
    }
    else {
      var_7();
      piVar1 = (int *)(local_40[0] + -8);
      var_6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      var_8();
    }
    if (var_6 < 1) {
      std::string::_Rep::var_9((type_7 *)(local_40[0] + -0x18));
    }
  }
  (**(type_4 **)(*param_1 + 0x30))((type_6 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */
  pcVar6 = (char *)var_2(var_3 + 1);
  std::string::var_4((type_6 *)local_40,pcVar6,var_3,0);
  pcVar6[var_3] = '\0';
  *(char **)(var_1 + 0x38) = pcVar6;
  *(type_1 *)(var_1 + 0x40) = var_3;
  if ((type_7 *)(local_40[0] + -0x18) != (type_7 *)&std::type_6::_Rep::_S_empty_rep_storage) {
    if (var_5 == (type_8 *)0x0) {
      var_6 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = var_6 + -1;
    }
    else {
      var_7();
      piVar1 = (int *)(local_40[0] + -8);
      var_6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      var_8();
    }
    if (var_6 < 1) {
      std::string::_Rep::var_9((type_7 *)(local_40[0] + -0x18));
    }
  }
  (**(type_4 **)(*param_1 + 0x38))((type_6 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */
  pcVar6 = (char *)var_2(var_3 + 1);
  std::string::var_4((type_6 *)local_40,pcVar6,var_3,0);
  pcVar6[var_3] = '\0';
  *(char **)(var_1 + 0x48) = pcVar6;
  *(type_1 *)(var_1 + 0x50) = var_3;
  if ((type_7 *)(local_40[0] + -0x18) != (type_7 *)&std::type_6::_Rep::_S_empty_rep_storage) {
    if (var_5 == (type_8 *)0x0) {
      var_6 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = var_6 + -1;
    }
    else {
      var_7();
      piVar1 = (int *)(local_40[0] + -8);
      var_6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      var_8();
    }
    if (var_6 < 1) {
      std::string::_Rep::var_9((type_7 *)(local_40[0] + -0x18));
    }
  }
  uVar5 = (**(type_4 **)(*param_1 + 0x48))(param_1);
  *(type_3 *)(var_1 + 0x5c) = uVar5;
  uVar5 = (**(type_4 **)(*param_1 + 0x50))(param_1);
  *(type_3 *)(var_1 + 0x60) = uVar5;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list)))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (number_literal))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (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))))) right: (number_literal))) (expression_statement (assignment_expression left: (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))))) right: (number_literal))) (expression_statement (assignment_expression left: (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))))) right: (number_literal))) (expression_statement (assignment_expression left: (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))))) right: (number_literal))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_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: (identifier))) (expression_statement (assignment_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: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_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: (identifier))) (expression_statement (assignment_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: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_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: (identifier))) (expression_statement (assignment_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: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_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: (identifier))) (expression_statement (assignment_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: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (return_statement))))

void MASKED(long *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  long lVar3;
  undefined1 uVar4;
  undefined4 uVar5;
  long lVar6;
  undefined1 local_41;
  long local_40 [2];
  
  uVar4 = (**(code **)(*param_1 + 0x10))();
  *(undefined1 *)(param_2 + 0x21) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined1 *)(param_2 + 0x22) = uVar4;
  uVar5 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x58) = uVar5;
  *(undefined8 *)(param_2 + 0x28) = 0;
  *(undefined8 *)(param_2 + 0x38) = 0;
  *(undefined8 *)(param_2 + 0x48) = 0;
  *(undefined1 *)(param_2 + 0x6f) = 1;
  (**(code **)(*param_1 + 0x20))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9a5a to 004d9a71 has its CatchHandler @ 004d9cc7 */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x18) = lVar3;
  *(long *)(param_2 + 0x10) = lVar6;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x28))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9ab2 to 004d9ac9 has its CatchHandler @ 004d9cc5 */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x28) = lVar6;
  *(long *)(param_2 + 0x30) = lVar3;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x30))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b03 to 004d9b1a has its CatchHandler @ 004d9cbe */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x38) = lVar6;
  *(long *)(param_2 + 0x40) = lVar3;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x38))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 004d9b54 to 004d9b6b has its CatchHandler @ 004d9cc3 */
  lVar6 = thunk_FUN_0049cb60(lVar3 + 1);
  FUN_004d0470(local_40,lVar6,lVar3,0);
  *(undefined1 *)(lVar6 + lVar3) = 0;
  *(long *)(param_2 + 0x48) = lVar6;
  *(long *)(param_2 + 0x50) = lVar3;
  if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00689d80) {
    if (PTR___pthread_key_create_0067bee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_0049e330((undefined8 *)(local_40[0] + -0x18),&local_41);
    }
  }
  uVar5 = (**(code **)(*param_1 + 0x48))(param_1);
  *(undefined4 *)(param_2 + 0x5c) = uVar5;
  uVar5 = (**(code **)(*param_1 + 0x50))(param_1);
  *(undefined4 *)(param_2 + 0x60) = uVar5;
  return;
}

