/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400e67c0 FUN_1400e67c0 * Pseudocode, not original source. */ void FUN_1400e67c0(longlong param_1,int *param_2,byte *param_3,undefined8 param_4) { longlong lVar1; undefined2 **ppuVar2; byte bVar3; int iVar4; SIZE_T SVar5; int *piVar6; longlong *plVar7; undefined4 *puVar8; longlong lVar9; ulonglong uVar10; undefined8 *puVar11; longlong lVar12; uint uVar13; SIZE_T SVar14; longlong lVar15; undefined8 uVar16; undefined2 **local_res8; undefined4 local_1b8 [2]; undefined2 *local_1b0; longlong local_1a8; int local_19c; uint local_190; undefined **local_188; int local_180; undefined2 local_17c; char local_178; int *local_168; undefined1 local_160; undefined8 local_158; undefined4 local_150 [2]; undefined4 local_148 [2]; longlong local_140; longlong local_138; undefined4 local_130; int local_12c; uint local_120; undefined **local_118; int local_110; undefined2 local_10c; char local_108; undefined1 local_100 [232]; local_158 = 0xfffffffffffffffe; uVar13 = (int)((*param_2 >> 0x1f & 7U) + *param_2) >> 3; SVar5 = FUN_1400adf90(*(longlong **)(param_1 + 0x108),param_2[10],param_3,param_4); plVar7 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x1838); lVar15 = *plVar7; SVar14 = SVar5; bVar3 = (**(code **)(lVar15 + 0x10))(plVar7,param_2); *param_3 = *param_3 | bVar3; if (*param_3 == 0) { FUN_1400bc600(param_2,(ulonglong)uVar13,SVar14,lVar15); plVar7 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x17f0); bVar3 = (**(code **)(*plVar7 + 0x10))(plVar7,param_2); *param_3 = *param_3 | bVar3; if (*param_3 == 0) { uVar10 = (ulonglong)uVar13; FUN_1400bc600(param_2,uVar10,SVar5,lVar15); FUN_1400bca00(local_1b8); local_188 = Proud::AddrPort::vftable; local_178 = 0; lVar12 = 0; local_190 = 0; local_180 = DAT_1401ac3d0; local_17c = DAT_1401ac3d4; puVar8 = local_1b8; FUN_1400bc4d0((longlong)puVar8,uVar10,SVar5,lVar15); if (*(longlong *)(param_2 + 2) == 0) { if (*(longlong *)(param_2 + 4) == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar8,uVar10,SVar5,lVar15); } uVar13 = param_2[6]; } else { uVar13 = *(uint *)(*(longlong *)(param_2 + 2) + 0x18); } iVar4 = (int)(*param_2 + (*param_2 >> 0x1f & 7U)) >> 3; lVar9 = *(longlong *)(param_2 + 4); if (*(longlong *)(param_2 + 4) == 0) { lVar1 = *(longlong *)(param_2 + 2); if (lVar1 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,(longlong)iVar4,(ulonglong)uVar13,lVar15); } lVar9 = lVar12; if (*(int *)(lVar1 + 0x18) != 0) { lVar9 = *(longlong *)(lVar1 + 0x10); } } SVar14 = (SIZE_T)(uVar13 - iVar4); puVar11 = (undefined8 *)(iVar4 + lVar9); puVar8 = local_1b8; FUN_1400bcfa0((longlong)puVar8,puVar11,SVar14,lVar15); local_180 = param_2[0xe]; local_17c = (undefined2)param_2[0xf]; local_190 = param_2[10]; local_178 = (char)param_2[0x10]; if ((local_1b0 == (undefined2 *)0x0) && (local_1a8 == 0)) { local_1b0 = FUN_1400d1840(puVar8,puVar11,SVar14); *(undefined8 *)(local_1b0 + 0x14) = 1; } (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))(); FUN_1400bca30(local_148,local_1b8); local_120 = local_190; local_118 = Proud::AddrPort::vftable; local_110 = local_180; local_10c = local_17c; local_108 = local_178; FUN_140093310((longlong)local_100); local_150[0] = 1; lVar15 = *(longlong *)(param_1 + 0x108); uVar16 = 0; SVar14 = *(SIZE_T *)(lVar15 + 0x15f0); puVar8 = local_150; puVar11 = FUN_1400b6070((longlong *)(lVar15 + 0x15e0),puVar8,SVar14,0); if (*(undefined8 **)(lVar15 + 0x15f0) == (undefined8 *)0x0) { *(undefined8 **)(lVar15 + 0x15e8) = puVar11; } else { **(undefined8 **)(lVar15 + 0x15f0) = puVar11; } *(undefined8 **)(lVar15 + 0x15f0) = puVar11; FUN_1400933c0((longlong)local_100,puVar8,SVar14,uVar16); local_res8 = (undefined2 **)&local_140; FUN_1400d1800(&local_140); if (local_138 != 0) { if (local_12c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_130 = 0; } if ((local_190 != 1) && (local_190 != 0)) { piVar6 = (int *)(**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))(); local_168 = piVar6; FUN_14006b350(piVar6); local_160 = 1; plVar7 = FUN_1400aca90(*(longlong **)(param_1 + 0x108),(longlong *)&local_res8,local_190); if ((longlong *)*plVar7 != (longlong *)0x0) { lVar12 = *(longlong *)*plVar7; } if ((local_res8 != (undefined2 **)0x0) && (local_res8[1] = (undefined2 *)((longlong)local_res8[1] + -1), ppuVar2 = local_res8, piVar6 = local_168, local_res8[1] == (undefined2 *)0x0)) { puVar11 = (undefined8 *)*local_res8; if (puVar11 != (undefined8 *)0x0) { (**(code **)*puVar11)(puVar11,1); } FUN_14006cc60(ppuVar2); piVar6 = local_168; } if (((lVar12 != 0) && (*(char *)(lVar12 + 0x684) == '\0')) && (*(undefined1 *)(lVar12 + 0x21) = 1, local_178 == '\0')) { *(int *)(lVar12 + 0x48) = *(int *)(lVar12 + 0x48) + 1; } FUN_14006b3e0((longlong)piVar6); } local_res8 = &local_1b0; FUN_1400d1800((longlong *)&local_1b0); if ((local_1a8 != 0) && (local_19c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } } return; }