/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400f5f50 FUN_1400f5f50 * Pseudocode, not original source. */ void FUN_1400f5f50(undefined8 *param_1,longlong *param_2,longlong *param_3,undefined8 param_4) { uint uVar1; undefined8 uVar2; int iVar3; undefined8 *puVar4; longlong *_Dst; longlong lVar5; char cVar6; uint uVar7; longlong *plVar8; uint uVar9; ulonglong uVar10; ulonglong uVar11; longlong *plVar12; double dVar13; longlong *local_80; longlong *local_78; undefined8 local_70; longlong *local_68; undefined8 local_60; undefined4 local_58; undefined4 local_54; undefined8 local_50; undefined8 local_48; undefined8 local_40; undefined4 local_38; cVar6 = (char)param_2; dVar13 = (double)(**(code **)(**(longlong **)*param_1 + 0x18)) (*(longlong **)*param_1,param_2,param_3,param_4,0xfffffffffffffffe); if ((((cVar6 != '\0') || (iVar3 = (**(code **)(**(longlong **)*param_1 + 0x20))(), iVar3 == 0)) || (DAT_1401ae2b8 < dVar13 - (double)param_1[4])) && (param_1[4] = dVar13, 0 < (longlong)param_1[0xd])) { plVar12 = (longlong *)0x0; do { local_60 = (**(code **)(**(longlong **)*param_1 + 0x38))(); local_70 = 0; local_78 = (longlong *)0x0; local_80 = (longlong *)0x0; local_68 = (longlong *)0x0; local_54 = 0; local_40 = 0; local_50 = 0; local_48 = 0; local_38 = 0; uVar1 = *(uint *)(param_1 + 1); *(uint *)(param_1 + 1) = uVar1 + 1; uVar9 = DAT_1401ba9d8; if ((int)(uint)param_1[0xd] <= (int)DAT_1401ba9d8) { uVar9 = (uint)param_1[0xd]; } local_80 = (longlong *)FUN_1400d1840((ulonglong)uVar1,param_2,(SIZE_T)param_3); local_80[5] = 1; if ((int)uVar9 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (local_78 == (longlong *)0x0) { if ((int)uVar9 < 1) { if (local_80 == (longlong *)0x0) goto LAB_1400f608b; param_3 = local_80; uVar7 = 0; } else { uVar7 = uVar9; if (local_80 == (longlong *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,param_2,param_3,param_4); } } FUN_1400146f0((longlong)local_80,uVar7,(SIZE_T)param_3); } else { if (local_70._4_4_ < (int)uVar9) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_70 = CONCAT44(local_70._4_4_,uVar9); } LAB_1400f608b: plVar8 = plVar12; if (*(int *)(param_1 + 10) != 0) { plVar8 = (longlong *)param_1[9]; } plVar8 = (longlong *)((longlong)plVar8 + param_1[0xc]); _Dst = local_78; if (local_78 == (longlong *)0x0) { if (local_80 == (longlong *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,plVar8,0,param_4); } _Dst = plVar12; if ((int)local_80[3] != 0) { _Dst = (longlong *)local_80[2]; } } param_2 = (longlong *)(longlong)(int)uVar9; if (param_2 < (longlong *)0x21) { uVar10 = (ulonglong)(uVar9 & 7); for (uVar11 = (ulonglong)param_2 >> 3; uVar11 != 0; uVar11 = uVar11 - 1) { *_Dst = *plVar8; _Dst = _Dst + 1; plVar8 = plVar8 + 1; } param_4 = 0; param_3 = (longlong *)0x0; if (uVar10 != 0) { lVar5 = (longlong)_Dst - (longlong)plVar8; do { *(char *)(lVar5 + (longlong)plVar8) = (char)*plVar8; plVar8 = (longlong *)((longlong)plVar8 + 1); uVar10 = uVar10 - 1; } while (uVar10 != 0); param_3 = (longlong *)0x0; } } else { param_3 = param_2; memcpy(_Dst,plVar8,(size_t)param_2); } uVar2 = param_1[0x10]; plVar8 = (longlong *)param_1[0xe]; if (plVar8 == (longlong *)0x0) { puVar4 = (undefined8 *)FUN_14006cbf0(0x68); } else { puVar4 = (undefined8 *)(**(code **)(*plVar8 + 8))(plVar8,0x68); } if (puVar4 != (undefined8 *)0x0) { *(undefined4 *)(puVar4 + 2) = 1; *(uint *)((longlong)puVar4 + 0x14) = uVar1; puVar4[5] = 0; puVar4[4] = 0; if (local_80 == (longlong *)0x0) { puVar4[3] = 0; *(int *)((longlong)puVar4 + 0x2c) = local_70._4_4_; puVar4[4] = local_78; *(undefined4 *)(puVar4 + 5) = (undefined4)local_70; } else { local_80[5] = local_80[5] + 1; puVar4[3] = local_80; } puVar4[7] = local_60; plVar8 = plVar12; if (local_68 != (longlong *)0x0) { local_68[1] = local_68[1] + 1; plVar8 = local_68; } puVar4[6] = plVar8; *(undefined4 *)(puVar4 + 8) = local_58; *(undefined4 *)((longlong)puVar4 + 0x44) = local_54; puVar4[9] = local_50; puVar4[10] = local_48; puVar4[0xb] = local_40; *(undefined4 *)(puVar4 + 0xc) = local_38; } puVar4[1] = uVar2; *puVar4 = 0; param_1[0x11] = param_1[0x11] + 1; if ((undefined8 *)param_1[0x10] == (undefined8 *)0x0) { param_1[0xf] = puVar4; } else { *(undefined8 *)param_1[0x10] = puVar4; } param_1[0x10] = puVar4; FUN_1400f88b0(param_1 + 6,(longlong)param_2,param_3,param_4); if (local_68 != (longlong *)0x0) { plVar8 = local_68 + 1; *plVar8 = *plVar8 + -1; if (*plVar8 == 0) { param_2 = local_68; FUN_140080140((longlong)&local_68,local_68); } } FUN_1400d1800((longlong *)&local_80); if ((local_78 != (longlong *)0x0) && (local_70 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } while (0 < (longlong)param_1[0xd]); } return; }