/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400fee20 FUN_1400fee20 * Pseudocode, not original source. */ undefined8 FUN_1400fee20(longlong *param_1,int param_2) { longlong *plVar1; int *piVar2; uint uVar3; longlong lVar4; uint uVar5; undefined1 *puVar6; undefined1 *puVar7; uint uVar8; uint uVar9; uVar5 = (int)param_1[3] - 5; uVar3 = 0xffff; if (uVar5 < 0xffff) { uVar3 = uVar5; } puVar7 = (undefined1 *)0x0; do { uVar5 = *(uint *)((longlong)param_1 + 0x9c); if (uVar5 < 2) { FUN_1400fec60(param_1); uVar5 = *(uint *)((longlong)param_1 + 0x9c); if (uVar5 == 0) { if (param_2 == 0) { return 0; } uVar3 = *(uint *)((longlong)param_1 + 0x84); if (-1 < (int)uVar3) { puVar7 = (undefined1 *)((ulonglong)uVar3 + param_1[10]); } FUN_140103070(param_1,puVar7,*(int *)((longlong)param_1 + 0x94) - uVar3,(uint)(param_2 == 4) ); *(undefined4 *)((longlong)param_1 + 0x84) = *(undefined4 *)((longlong)param_1 + 0x94); FUN_1400fe8b0(*param_1); if (*(int *)(*param_1 + 0x18) != 0) { if (param_2 == 4) { return 3; } return 1; } if (param_2 == 4) { return 2; } return 0; } } uVar9 = *(uint *)((longlong)param_1 + 0x84); piVar2 = (int *)((longlong)param_1 + 0x94); *piVar2 = *piVar2 + uVar5; uVar5 = *(uint *)((longlong)param_1 + 0x94); uVar8 = uVar9 + uVar3; *(undefined4 *)((longlong)param_1 + 0x9c) = 0; if ((*piVar2 == 0) || (uVar8 <= uVar5)) { *(uint *)((longlong)param_1 + 0x94) = uVar8; *(uint *)((longlong)param_1 + 0x9c) = uVar5 - uVar8; puVar6 = puVar7; if (-1 < (int)uVar9) { puVar6 = (undefined1 *)((ulonglong)uVar9 + param_1[10]); } FUN_140103070(param_1,puVar6,uVar8 - uVar9,0); lVar4 = *param_1; *(undefined4 *)((longlong)param_1 + 0x84) = *(undefined4 *)((longlong)param_1 + 0x94); uVar5 = *(uint *)(*(longlong *)(lVar4 + 0x28) + 0x28); if (*(uint *)(lVar4 + 0x18) < uVar5) { uVar5 = *(uint *)(lVar4 + 0x18); } if (uVar5 != 0) { memcpy(*(void **)(lVar4 + 0x10),*(void **)(*(longlong *)(lVar4 + 0x28) + 0x20), (ulonglong)uVar5); *(longlong *)(lVar4 + 0x10) = *(longlong *)(lVar4 + 0x10) + (ulonglong)uVar5; plVar1 = (longlong *)(*(longlong *)(lVar4 + 0x28) + 0x20); *plVar1 = *plVar1 + (ulonglong)uVar5; *(int *)(lVar4 + 0x1c) = *(int *)(lVar4 + 0x1c) + uVar5; *(int *)(lVar4 + 0x18) = *(int *)(lVar4 + 0x18) - uVar5; piVar2 = (int *)(*(longlong *)(lVar4 + 0x28) + 0x28); *piVar2 = *piVar2 - uVar5; lVar4 = *(longlong *)(lVar4 + 0x28); if (*(int *)(lVar4 + 0x28) == 0) { *(undefined8 *)(lVar4 + 0x20) = *(undefined8 *)(lVar4 + 0x10); } } if (*(int *)(*param_1 + 0x18) == 0) { return 0; } } uVar5 = *(uint *)((longlong)param_1 + 0x84); uVar9 = *(int *)((longlong)param_1 + 0x94) - uVar5; if (*(int *)((longlong)param_1 + 0x44) - 0x106U <= uVar9) { puVar6 = puVar7; if (-1 < (int)uVar5) { puVar6 = (undefined1 *)((ulonglong)uVar5 + param_1[10]); } FUN_140103070(param_1,puVar6,uVar9,0); lVar4 = *param_1; *(undefined4 *)((longlong)param_1 + 0x84) = *(undefined4 *)((longlong)param_1 + 0x94); uVar5 = *(uint *)(*(longlong *)(lVar4 + 0x28) + 0x28); if (*(uint *)(lVar4 + 0x18) < uVar5) { uVar5 = *(uint *)(lVar4 + 0x18); } if (uVar5 != 0) { memcpy(*(void **)(lVar4 + 0x10),*(void **)(*(longlong *)(lVar4 + 0x28) + 0x20), (ulonglong)uVar5); *(longlong *)(lVar4 + 0x10) = *(longlong *)(lVar4 + 0x10) + (ulonglong)uVar5; plVar1 = (longlong *)(*(longlong *)(lVar4 + 0x28) + 0x20); *plVar1 = *plVar1 + (ulonglong)uVar5; *(int *)(lVar4 + 0x1c) = *(int *)(lVar4 + 0x1c) + uVar5; *(int *)(lVar4 + 0x18) = *(int *)(lVar4 + 0x18) - uVar5; piVar2 = (int *)(*(longlong *)(lVar4 + 0x28) + 0x28); *piVar2 = *piVar2 - uVar5; lVar4 = *(longlong *)(lVar4 + 0x28); if (*(int *)(lVar4 + 0x28) == 0) { *(undefined8 *)(lVar4 + 0x20) = *(undefined8 *)(lVar4 + 0x10); } } if (*(int *)(*param_1 + 0x18) == 0) { return 0; } } } while( true ); }