/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14001b020 FUN_14001b020 * Pseudocode, not original source. */ uint * FUN_14001b020(uint *param_1,ulonglong *param_2,undefined8 param_3,undefined8 param_4) { void *_Src; void *_Dst; uint *puVar1; code *pcVar2; uint uVar3; uint *puVar4; ulonglong uVar5; ulonglong uVar6; int iVar7; undefined8 uVar8; uint uVar9; uint local_res10 [2]; uint local_res18 [4]; puVar4 = local_res10; uVar8 = 4; FUN_140080600(param_1,(undefined8 *)puVar4,4); uVar3 = local_res10[0]; if (((int)local_res10[0] < 0) || (DAT_140155140 <= (int)local_res10[0])) { FUN_14009d5d0(local_res10[0],puVar4,uVar8,param_4); } FUN_14000b0f0((longlong *)param_2,(longlong)(int)uVar3); _Src = (void *)param_2[1]; _Dst = (void *)*param_2; if (((longlong)_Src - (longlong)_Dst >> 2 != 0) && (_Dst != _Src)) { memmove(_Dst,_Src,0); param_2[1] = (ulonglong)_Dst; } iVar7 = 0; uVar9 = local_res10[0]; if (0 < (int)uVar3) { do { uVar8 = FUN_140080600(param_1,(undefined8 *)local_res18,4); puVar4 = (uint *)param_2[1]; if ((char)uVar8 != '\0') { uVar9 = local_res18[0]; } if ((local_res10 < puVar4) && (puVar1 = (uint *)*param_2, puVar1 <= local_res10)) { if (puVar4 == (uint *)param_2[2]) { uVar5 = (longlong)puVar4 - (longlong)puVar1 >> 2; if (0x3ffffffffffffffe < uVar5) { std::_Xlength_error("vector too long"); pcVar2 = (code *)swi(3); puVar4 = (uint *)(*pcVar2)(); return puVar4; } uVar5 = uVar5 + 1; uVar6 = (longlong)param_2[2] - (longlong)puVar1 >> 2; if (uVar6 < uVar5) { if (0x3fffffffffffffff - (uVar6 >> 1) < uVar6) { uVar6 = 0; } else { uVar6 = uVar6 + (uVar6 >> 1); } if (uVar6 < uVar5) { uVar6 = uVar5; } FUN_14000b0f0((longlong *)param_2,uVar6); } } if ((undefined4 *)param_2[1] != (undefined4 *)0x0) { *(undefined4 *)param_2[1] = *(undefined4 *)(*param_2 + ((longlong)local_res10 - (longlong)puVar1 >> 2) * 4); } } else { if (puVar4 == (uint *)param_2[2]) { uVar5 = (longlong)((longlong)puVar4 - *param_2) >> 2; if (0x3ffffffffffffffe < uVar5) { std::_Xlength_error("vector too long"); pcVar2 = (code *)swi(3); puVar4 = (uint *)(*pcVar2)(); return puVar4; } uVar5 = uVar5 + 1; uVar6 = (longlong)((longlong)param_2[2] - *param_2) >> 2; if (uVar6 < uVar5) { if (0x3fffffffffffffff - (uVar6 >> 1) < uVar6) { uVar6 = 0; } else { uVar6 = uVar6 + (uVar6 >> 1); } if (uVar6 < uVar5) { uVar6 = uVar5; } FUN_14000b0f0((longlong *)param_2,uVar6); } } if ((uint *)param_2[1] != (uint *)0x0) { *(uint *)param_2[1] = uVar9; } } param_2[1] = param_2[1] + 4; iVar7 = iVar7 + 1; } while (iVar7 < (int)uVar3); } return param_1; }