/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140064d80 FUN_140064d80 * Pseudocode, not original source. */ longlong * FUN_140064d80(longlong *param_1,longlong *param_2) { void *_Src; void *_Dst; void *pvVar1; undefined8 uVar2; ulonglong uVar3; size_t _Size; ulonglong uVar4; if (param_1 != param_2) { pvVar1 = (void *)*param_2; uVar3 = param_2[1] - (longlong)pvVar1 >> 2; if (uVar3 == 0) { FUN_140064c70(param_1); return param_1; } _Dst = (void *)*param_1; uVar4 = param_1[1] - (longlong)_Dst >> 2; if (uVar3 <= uVar4) { memmove(_Dst,pvVar1,param_2[1] - (longlong)pvVar1 & 0xfffffffffffffffc); param_1[1] = *param_1 + (param_2[1] - *param_2 >> 2) * 4; return param_1; } if ((ulonglong)(param_1[2] - (longlong)_Dst >> 2) < uVar3) { if (_Dst != (void *)0x0) { operator_delete(_Dst); } uVar2 = FUN_140064d10(param_1,param_2[1] - *param_2 >> 2); if ((char)uVar2 == '\0') { return param_1; } _Size = (param_2[1] - *param_2 >> 2) * 4; pvVar1 = memmove((void *)*param_1,(void *)*param_2,_Size); } else { _Src = (void *)((longlong)pvVar1 + uVar4 * 4); FUN_140064cd0(pvVar1,(longlong)_Src,_Dst); _Size = (param_2[1] - (longlong)_Src >> 2) * 4; pvVar1 = memmove((void *)param_1[1],_Src,_Size); } param_1[1] = (longlong)pvVar1 + _Size; } return param_1; }