/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401f2360 FUN_1401f2360 * Pseudocode, not original source. */ undefined8 FUN_1401f2360(longlong param_1) { longlong *plVar1; longlong lVar2; undefined8 uVar3; undefined8 uVar4; undefined4 *puVar5; undefined8 *puVar6; undefined4 local_b8; undefined4 local_b4; longlong local_b0; longlong local_a8; undefined4 local_a0; int local_9c; undefined1 local_98; undefined4 local_90; undefined **local_88; undefined4 local_80; undefined2 local_7c; undefined1 local_78; undefined8 local_68; undefined1 local_60; undefined1 local_58 [8]; undefined1 local_50 [8]; longlong local_48; int local_3c; undefined8 local_30; local_30 = 0xfffffffffffffffe; uVar4 = (**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))(); local_68 = uVar4; FUN_14016db50(uVar4); local_60 = 1; if (*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x1548) == 0) { FUN_14016dbe0(uVar4); uVar4 = 0; } else { FUN_14016b440(&local_b8); local_88 = Proud::AddrPort::vftable; local_78 = 0; local_80 = DAT_140344450; local_7c = DAT_140344454; local_90 = *(undefined4 *)(*(longlong *)(param_1 + 0x108) + 0x1578); puVar5 = (undefined4 *)FUN_1401ee9c0(*(longlong *)(param_1 + 0x108) + 0x1530,local_58); local_b8 = *puVar5; local_b4 = puVar5[1]; if (*(longlong *)(puVar5 + 2) == local_b0) { local_9c = puVar5[7]; local_a8 = *(longlong *)(puVar5 + 4); local_a0 = puVar5[6]; } else { FUN_14016d0e0(&local_b0); if (*(longlong *)(puVar5 + 2) != 0) { plVar1 = (longlong *)(*(longlong *)(puVar5 + 2) + 0x28); *plVar1 = *plVar1 + 1; local_b0 = *(longlong *)(puVar5 + 2); } } local_98 = *(undefined1 *)(puVar5 + 8); FUN_14016d0e0(local_50); if ((local_48 != 0) && (local_3c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_14016b040(&local_b8,0); lVar2 = *(longlong *)(param_1 + 0x108); uVar3 = *(undefined8 *)(lVar2 + 0x6f0); plVar1 = *(longlong **)(lVar2 + 0x6e0); if (plVar1 == (longlong *)0x0) { puVar6 = (undefined8 *)FUN_14016d940(0x58); } else { puVar6 = (undefined8 *)(**(code **)(*plVar1 + 8))(plVar1,0x58); } if (puVar6 != (undefined8 *)0x0) { FUN_14016b470(puVar6 + 2,&local_b8); *(undefined4 *)(puVar6 + 7) = local_90; puVar6[8] = Proud::AddrPort::vftable; *(undefined4 *)(puVar6 + 9) = local_80; *(undefined2 *)((longlong)puVar6 + 0x4c) = local_7c; *(undefined1 *)(puVar6 + 10) = local_78; } puVar6[1] = uVar3; *puVar6 = 0; *(longlong *)(lVar2 + 0x6f8) = *(longlong *)(lVar2 + 0x6f8) + 1; if (*(undefined8 **)(lVar2 + 0x6f0) == (undefined8 *)0x0) { *(undefined8 **)(lVar2 + 0x6e8) = puVar6; } else { **(undefined8 **)(lVar2 + 0x6f0) = puVar6; } *(undefined8 **)(lVar2 + 0x6f0) = puVar6; FUN_1401f1e50(param_1,0); FUN_14016d0e0(&local_b0); if (local_a8 != 0) { if (local_9c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_a0 = 0; } FUN_14016dbe0(uVar4); uVar4 = 1; } return uVar4; }