/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401dd020 FUN_1401dd020 * Pseudocode, not original source. */ void FUN_1401dd020(longlong *param_1) { longlong lVar1; longlong *plVar2; longlong lVar3; bool bVar4; longlong lVar5; undefined8 uVar6; undefined4 *puVar7; undefined8 *puVar8; undefined1 local_188 [16]; undefined1 local_178 [8]; longlong local_170; int local_164; longlong local_130; longlong local_120; longlong local_118; undefined1 local_110 [40]; undefined1 local_e8 [8]; longlong local_e0; undefined4 local_d8; int local_d4; undefined1 local_c0 [72]; undefined1 local_78 [56]; uVar6 = (**(code **)(*param_1 + 0x58))(); FUN_14016db50(uVar6); lVar1 = param_1[0x2c3]; while( true ) { if (lVar1 == 0) { FUN_14016dbe0(uVar6); return; } puVar7 = (undefined4 *)FUN_1401db800(param_1 + 0x2c0,local_188); lVar1 = param_1[0x2be]; plVar2 = (longlong *)param_1[700]; if (plVar2 == (longlong *)0x0) { puVar8 = (undefined8 *)FUN_14016d940(0x148); } else { puVar8 = (undefined8 *)(**(code **)(*plVar2 + 8))(plVar2,0x148); } if (puVar8 != (undefined8 *)0x0) { *(undefined4 *)(puVar8 + 2) = *puVar7; FUN_14016b470(puVar8 + 3,puVar7 + 2); *(undefined4 *)(puVar8 + 8) = puVar7[0xc]; puVar8[9] = Proud::AddrPort::vftable; *(undefined4 *)(puVar8 + 10) = puVar7[0x10]; *(undefined2 *)((longlong)puVar8 + 0x54) = *(undefined2 *)(puVar7 + 0x11); *(undefined1 *)(puVar8 + 0xb) = *(undefined1 *)(puVar7 + 0x12); FUN_14018d500(puVar8 + 0xc,puVar7 + 0x14); } puVar8[1] = lVar1; *puVar8 = 0; param_1[0x2bf] = param_1[0x2bf] + 1; if ((undefined8 *)param_1[0x2be] == (undefined8 *)0x0) { param_1[0x2bd] = (longlong)puVar8; } else { *(undefined8 *)param_1[0x2be] = puVar8; } param_1[0x2be] = (longlong)puVar8; FUN_14019a9e0(local_78); FUN_14019a9e0(local_c0); FUN_14016d0e0(local_e8); if (local_e0 != 0) { if (local_d4 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_d8 = 0; } FUN_14019a9e0(local_110); lVar1 = local_118; if (local_118 != 0) { FUN_14016db50(local_118); bVar4 = true; *(longlong *)(local_118 + 0x40) = *(longlong *)(local_118 + 0x40) + -1; if (*(longlong *)(local_118 + 0x40) == 0) { FUN_14016dbe0(lVar1); lVar5 = local_118; bVar4 = false; lVar3 = *(longlong *)(local_118 + 0x38); if (lVar3 != 0) { FUN_140178460(lVar3 + 0x28); FUN_14016d970(lVar3); } FUN_14016dc00(lVar5); FUN_14016d970(lVar5); } if (bVar4) { FUN_14016dbe0(lVar1); } } lVar1 = local_120; if (local_120 != 0) { FUN_14016db50(local_120); bVar4 = true; *(longlong *)(local_120 + 0x40) = *(longlong *)(local_120 + 0x40) + -1; if (*(longlong *)(local_120 + 0x40) == 0) { FUN_14016dbe0(lVar1); lVar5 = local_120; bVar4 = false; lVar3 = *(longlong *)(local_120 + 0x38); if (lVar3 != 0) { FUN_14004eb70(lVar3 + 0x98); FUN_140178460(lVar3 + 0x38); FUN_14016d970(lVar3); } FUN_14016dc00(lVar5); FUN_14016d970(lVar5); } if (bVar4) { FUN_14016dbe0(lVar1); } } lVar1 = local_130; if (local_130 != 0) { FUN_14016db50(local_130); bVar4 = true; *(longlong *)(local_130 + 0x40) = *(longlong *)(local_130 + 0x40) + -1; if (*(longlong *)(local_130 + 0x40) == 0) { FUN_14016dbe0(lVar1); lVar5 = local_130; bVar4 = false; lVar3 = *(longlong *)(local_130 + 0x38); if (lVar3 != 0) { FUN_14004eb70(lVar3 + 0x58); FUN_14019a9e0(lVar3 + 0x28); FUN_14004eb70(lVar3 + 0x10); FUN_14016d970(lVar3); } FUN_14016dc00(lVar5); FUN_14016d970(lVar5); } if (bVar4) { FUN_14016dbe0(lVar1); } } FUN_14016d0e0(local_178); if ((local_170 != 0) && (local_164 < 0)) break; lVar1 = param_1[0x2c3]; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); }