/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400d96c0 FUN_1400d96c0 * Pseudocode, not original source. */ undefined8 * FUN_1400d96c0(undefined8 *param_1,longlong param_2,undefined8 param_3,undefined8 param_4) { undefined8 *puVar1; ulonglong uVar2; undefined8 *puVar3; longlong *plVar4; longlong *plVar5; longlong *plVar6; undefined8 **ppuVar7; longlong *plVar8; undefined8 *local_res10; longlong local_50; undefined4 local_44; undefined8 *local_40; *param_1 = Proud::ICompletionContext::vftable; plVar6 = (longlong *)0x0; param_1[0x12] = 0; param_1[0x13] = 0; param_1[0x14] = 0; param_1[1] = Proud::IUdpPacketFragBoardDg::vftable; param_1[2] = Proud::IUdpPacketDefragBoardDg::vftable; FUN_1400d8920(param_1 + 8); *param_1 = Proud::CUdpSocket_S::vftable; param_1[1] = Proud::CUdpSocket_S::vftable; param_1[2] = Proud::CUdpSocket_S::vftable; param_1[8] = Proud::CUdpSocket_S::vftable; param_1[0x11] = Proud::CUdpSocket_S::vftable; uVar2 = FUN_140079250(); plVar8 = (longlong *)CONCAT71((int7)((ulonglong)param_3 >> 8),1); FUN_14006b270((undefined4 *)(param_1 + 0x15),uVar2 & 0xffffffff,plVar8,param_4); param_1[0x1c] = 0; param_1[0x2a] = 0; param_1[0x2b] = Proud::AddrPort::vftable; *(undefined4 *)(param_1 + 0x2c) = 0; *(undefined2 *)((longlong)param_1 + 0x164) = 0; param_1[0x2d] = 0; param_1[0x2e] = 0; param_1[0x2f] = 0; FUN_14006fb50(&local_50); local_50 = 0; local_44 = 1; local_40 = param_1 + 0x15; puVar3 = FUN_14006ccc0(0x800,&local_50,plVar8,param_4); param_1[0x1c] = puVar3; local_res10 = operator_new(0x90); plVar4 = plVar6; if (local_res10 != (undefined8 *)0x0) { plVar8 = param_1 + 1; plVar4 = FUN_1400d80e0(local_res10,param_1[0x1c],plVar8); } param_1[0x2d] = plVar4; *(undefined1 *)(plVar4 + 0x11) = 0; plVar5 = operator_new(0x6b8); plVar4 = plVar6; if (plVar5 != (longlong *)0x0) { *plVar5 = 0; plVar5[3] = 0; plVar5[1] = 0; plVar5[2] = 100; plVar5[0xcf] = (longlong)Proud::CFastArray::vftable; plVar5[0xd0] = 0; plVar5[0xd1] = 0; plVar5[0xd2] = 0; plVar5[0xd3] = 0; plVar5[0xd4] = (longlong)Proud::AddrPort::vftable; *(undefined4 *)(plVar5 + 0xd5) = 0; *(undefined2 *)((longlong)plVar5 + 0x6ac) = 0; plVar4 = plVar5; } param_1[0x2e] = plVar4; *(undefined1 *)(param_1 + 0x20) = 0; *(undefined1 *)(param_1 + 0x28) = 0; local_res10 = (undefined8 *)FUN_14006cbf0(0x400); plVar4 = plVar6; if (local_res10 != (undefined8 *)0x0) { plVar8 = (longlong *)(param_2 + 0x60); if (param_2 == 0) { plVar8 = plVar6; } plVar4 = FUN_1400724c0(local_res10,1,plVar8,param_4); } if (plVar4 == (longlong *)0x0) { local_res10 = (undefined8 *)0x0; } else { local_res10 = (undefined8 *)FUN_14006cbf0(0x10); local_res10[1] = 1; *local_res10 = plVar4; } puVar3 = local_res10; ppuVar7 = &local_res10; FUN_14006e8a0(param_1 + 0x2a,(longlong *)ppuVar7); puVar1 = local_res10; if (puVar3 != (undefined8 *)0x0) { plVar4 = puVar3 + 1; *plVar4 = *plVar4 + -1; if (*plVar4 == 0) { plVar4 = (longlong *)*local_res10; if (plVar4 != (longlong *)0x0) { FUN_140072370(plVar4,ppuVar7,plVar8,param_4); FUN_14006cc60(plVar4); } FUN_14006cc60(puVar1); } } param_1[0x29] = param_2; *(undefined4 *)(param_1 + 0x2c) = DAT_1401ac3d0; *(undefined2 *)((longlong)param_1 + 0x164) = DAT_1401ac3d4; local_res10 = operator_new(0x60); if (local_res10 != (undefined8 *)0x0) { plVar6 = FUN_1400d8240(local_res10,param_1 + 2,plVar8,param_4); } param_1[0x2f] = plVar6; return param_1; }