/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401f2000 FUN_1401f2000 * Pseudocode, not original source. */ void FUN_1401f2000(longlong param_1,longlong param_2,longlong param_3) { undefined *puVar1; int *piVar2; longlong *plVar3; undefined8 uVar4; undefined4 uVar5; int iVar6; undefined8 uVar7; longlong lVar8; undefined8 *puVar9; ulonglong uVar10; ulonglong uVar11; undefined *puVar12; undefined8 uVar13; undefined1 local_res8 [8]; undefined *local_res10; undefined8 in_stack_fffffffffffffef8; undefined4 uVar14; longlong local_e8; undefined **local_e0; undefined4 local_d8; undefined2 local_d4; undefined **local_d0; undefined8 local_c8; longlong local_c0; undefined8 local_b8; undefined4 local_b0; undefined4 local_ac; undefined **local_a8; undefined4 local_a0; undefined2 local_9c; undefined **local_98; undefined4 local_90; undefined2 local_8c; undefined **local_88; undefined4 local_80; undefined2 local_7c; undefined **local_78; undefined4 local_70; undefined2 local_6c; undefined8 local_68; undefined1 local_60; undefined8 local_58; uVar14 = (undefined4)((ulonglong)in_stack_fffffffffffffef8 >> 0x20); local_58 = 0xfffffffffffffffe; (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))(); *(undefined1 *)(param_2 + 0xc0) = 0; if ((*(double *)(param_2 + 0x148) == 0.0) && (0 < *(int *)(param_3 + 8))) { uVar13 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))(); plVar3 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x678); *plVar3 = *plVar3 + 1; plVar3 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x680); *plVar3 = *plVar3 + (longlong)*(int *)(param_3 + 8); local_e0 = Proud::AddrPort::vftable; uVar11 = 0; local_d8 = 0; local_d4 = 0; local_e8 = 0; FUN_14016d8c0(); local_res10 = PTR_DAT_1403440a0; local_78 = Proud::AddrPort::vftable; local_80 = *(undefined4 *)(param_3 + 0x30); local_7c = *(undefined2 *)(param_3 + 0x34); local_88 = Proud::AddrPort::vftable; uVar10 = uVar11; if (*(ulonglong **)(param_2 + 0x100) != (ulonglong *)0x0) { uVar10 = **(ulonglong **)(param_2 + 0x100); } uVar4 = *(undefined8 *)(param_2 + 0x188); local_70 = local_80; local_6c = local_7c; uVar5 = (**(code **)(**(longlong **)(param_1 + 0x108) + 0xe0)) (*(longlong **)(param_1 + 0x108),&local_78); uVar7 = FUN_14019c8b0(uVar10); iVar6 = FUN_1401b8b00(uVar4,uVar7,*(undefined4 *)(param_3 + 8),&local_88,CONCAT44(uVar14,uVar5), uVar13,&local_e8,&local_res10); if (iVar6 == 0) { local_c8 = 0; local_c0 = 0; local_b8 = 0; local_d0 = Proud::CReceivedMessageList::vftable; local_b0 = 1000; local_ac = 1; local_a8 = Proud::AddrPort::vftable; local_a0 = local_d8; local_9c = local_d4; uVar10 = uVar11; if (*(int *)(local_e8 + 0x40) != 0) { uVar10 = *(ulonglong *)(local_e8 + 0x38); } FUN_1401d5dd0(*(undefined8 *)(param_1 + 0x108),uVar10,*(int *)(local_e8 + 0x40),&local_a8, &local_d0,local_res8); while (iVar6 = (int)uVar11, iVar6 != (int)local_b8) { if ((iVar6 < 0) || ((int)local_b8 <= iVar6)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } lVar8 = *(longlong *)(param_1 + 0x108); uVar13 = FUN_1401ed6b0(lVar8 + 0x6e0,local_c0 + (longlong)iVar6 * 0x48, *(undefined8 *)(lVar8 + 0x6f0),0); if (*(undefined8 **)(lVar8 + 0x6f0) == (undefined8 *)0x0) { *(undefined8 *)(lVar8 + 0x6e8) = uVar13; } else { **(undefined8 **)(lVar8 + 0x6f0) = uVar13; } *(undefined8 *)(lVar8 + 0x6f0) = uVar13; if ((int)local_b8 <= iVar6) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } uVar11 = (ulonglong)(iVar6 + 1); } if ((*(longlong *)(param_2 + 0x120) != 0) || (lVar8 = FUN_1401c71d0(*(undefined8 *)(param_1 + 0x108)), param_2 == lVar8)) { FUN_1401f1e50(param_1,param_2); } FUN_1401a7fe0(&local_d0); } else if (iVar6 == 2) { puVar12 = local_res10; if (local_res10 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } local_98 = Proud::AddrPort::vftable; local_90 = *(undefined4 *)(param_3 + 0x30); local_8c = *(undefined2 *)(param_3 + 0x34); puVar9 = (undefined8 *)(*(longlong *)(param_1 + 0x108) + 0x88); (**(code **)*puVar9)(puVar9,&local_98,puVar12); } puVar12 = local_res10; if (((local_res10 != (undefined *)0x0) && (local_res10 != PTR_DAT_1403440a0)) && (puVar1 = local_res10 + -8, puVar1 != (undefined *)0x0)) { uVar13 = FUN_14016d8c0(); local_68 = uVar13; FUN_14016db50(uVar13); local_60 = 1; piVar2 = (int *)(puVar12 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar13); } local_res10 = PTR_DAT_1403440a0; if (local_e8 != 0) { FUN_1401a4a90(); } } FUN_1401fdf10(param_2); return; }