/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400c0a50 FUN_1400c0a50 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x0001400c1033) */ /* WARNING: Removing unreachable block (ram,0x0001400c103b) */ /* WARNING: Removing unreachable block (ram,0x0001400c103f) */ /* WARNING: Removing unreachable block (ram,0x0001400c1049) */ void FUN_1400c0a50(longlong param_1,int param_2,int param_3) { int *piVar1; int iVar2; int iVar3; undefined4 uVar4; longlong *plVar5; void *pvVar6; ulonglong uVar7; int iVar8; longlong lVar9; ulonglong uVar10; int iVar11; longlong lVar12; longlong lVar13; int iVar14; int local_res10 [2]; int local_res18 [2]; char *local_res20; longlong *local_128; void *local_120; ulonglong local_118; longlong local_110; longlong local_108; longlong *local_f8; undefined **local_f0 [3]; undefined **local_d8 [3]; undefined **local_c0 [3]; undefined8 local_a8; undefined **local_a0 [3]; undefined **local_88 [3]; undefined8 local_70 [3]; undefined8 local_58 [4]; local_a8 = 0xfffffffffffffffe; if (1 < param_2 - param_3) { std::_Container_base12::_Container_base12((_Container_base12 *)&local_128); local_128 = operator_new(0x10); if (local_128 == (longlong *)0x0) { local_f8 = local_128; std::exception::exception((exception *)local_d8,(char **)&local_f8); local_d8[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_d8,(ThrowInfo *)&DAT_140151ad0); } *local_128 = 0; local_128[1] = 0; *local_128 = (longlong)&local_128; local_120 = (void *)0x0; local_118 = 0; local_110 = 0; local_108 = 0; local_res18[0] = param_2 + -1; local_res10[0] = param_3; FUN_140044460((_Container_base12 *)&local_128,local_res10); FUN_140044460((_Container_base12 *)&local_128,local_res18); lVar9 = local_108; while (lVar13 = 0, uVar7 = local_118, lVar9 != 0) { plVar5 = FUN_1400415a0(&local_128,local_70); plVar5 = FUN_140044550(plVar5,local_58,1); lVar12 = lVar13; if ((longlong *)*plVar5 != (longlong *)0x0) { lVar12 = *(longlong *)*plVar5; } uVar7 = (ulonglong)plVar5[2] >> 2; if (*(ulonglong *)(lVar12 + 0x10) <= uVar7) { uVar7 = uVar7 - *(ulonglong *)(lVar12 + 0x10); } iVar14 = *(int *)(*(longlong *)(*(longlong *)(lVar12 + 8) + uVar7 * 8) + (ulonglong)((uint)plVar5[2] & 3) * 4); if ((lVar9 != 0) && (lVar9 = lVar9 + -1, local_108 = lVar9, lVar9 == 0)) { local_110 = lVar13; } local_res10[0] = iVar14; plVar5 = FUN_1400415a0(&local_128,local_58); plVar5 = FUN_140044550(plVar5,local_70,1); lVar12 = lVar13; if ((longlong *)*plVar5 != (longlong *)0x0) { lVar12 = *(longlong *)*plVar5; } uVar7 = (ulonglong)plVar5[2] >> 2; if (*(ulonglong *)(lVar12 + 0x10) <= uVar7) { uVar7 = uVar7 - *(ulonglong *)(lVar12 + 0x10); } iVar2 = *(int *)(*(longlong *)(*(longlong *)(lVar12 + 8) + uVar7 * 8) + (ulonglong)((uint)plVar5[2] & 3) * 4); lVar12 = (longlong)iVar2; if ((lVar9 != 0) && (lVar9 = lVar9 + -1, local_108 = lVar9, lVar9 == 0)) { local_110 = lVar13; } iVar11 = iVar2 + 1; iVar3 = *(int *)(param_1 + lVar12 * 4); if (iVar11 <= iVar14) { iVar8 = iVar14; if ((iVar11 < iVar14) && (lVar9 = local_108, iVar11 <= iVar14)) { LAB_1400c0c17: do { if (iVar3 < *(int *)(param_1 + (longlong)iVar11 * 4)) { if (iVar8 < iVar11) break; do { if (*(int *)(param_1 + (longlong)iVar8 * 4) < iVar3) { if (iVar8 < iVar11) goto LAB_1400c0c65; uVar4 = *(undefined4 *)(param_1 + (longlong)iVar11 * 4); *(undefined4 *)(param_1 + (longlong)iVar11 * 4) = *(undefined4 *)(param_1 + (longlong)iVar8 * 4); *(undefined4 *)(param_1 + (longlong)iVar8 * 4) = uVar4; break; } iVar8 = iVar8 + -1; } while (iVar11 <= iVar8); } else { iVar11 = iVar11 + 1; if (iVar11 <= iVar8) goto LAB_1400c0c17; } } while (iVar11 < iVar8); } LAB_1400c0c65: if (iVar2 <= iVar8) { iVar3 = *(int *)(param_1 + (longlong)iVar8 * 4); if (iVar3 < *(int *)(param_1 + lVar12 * 4)) { uVar4 = *(undefined4 *)(param_1 + lVar12 * 4); *(int *)(param_1 + lVar12 * 4) = iVar3; *(undefined4 *)(param_1 + (longlong)iVar8 * 4) = uVar4; lVar9 = local_108; } if (iVar2 < iVar8) { std::_Container_base12::_Orphan_all((_Container_base12 *)&local_128); if ((((int)local_110 + (int)local_108 & 3U) == 0) && (local_118 <= local_108 + 4U >> 2)) { FUN_1400415c0((longlong)&local_128,1); } uVar7 = local_108 + local_110; uVar10 = uVar7 >> 2; if (local_118 <= uVar10) { uVar10 = uVar10 - local_118; } if (*(longlong *)((longlong)local_120 + uVar10 * 8) == 0) { pvVar6 = operator_new(0x10); if (pvVar6 == (void *)0x0) { local_res20 = (char *)0x0; std::exception::exception((exception *)local_a0,&local_res20); local_a0[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_a0,(ThrowInfo *)&DAT_140151ad0); } *(void **)((longlong)local_120 + uVar10 * 8) = pvVar6; } piVar1 = (int *)(*(longlong *)((longlong)local_120 + uVar10 * 8) + (ulonglong)((uint)uVar7 & 3) * 4); if (piVar1 != (int *)0x0) { *piVar1 = iVar2; } local_108 = local_108 + 1; std::_Container_base12::_Orphan_all((_Container_base12 *)&local_128); if ((((char)local_108 + (char)local_110 & 3U) == 0) && (local_118 <= local_108 + 4U >> 2)) { FUN_1400415c0((longlong)&local_128,1); } uVar7 = local_108 + local_110; uVar10 = uVar7 >> 2; if (local_118 <= uVar10) { uVar10 = uVar10 - local_118; } if (*(longlong *)((longlong)local_120 + uVar10 * 8) == 0) { local_res20 = operator_new(0x10); if (local_res20 == (char *)0x0) { std::exception::exception((exception *)local_c0,&local_res20); local_c0[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_c0,(ThrowInfo *)&DAT_140151ad0); } *(char **)((longlong)local_120 + uVar10 * 8) = local_res20; } piVar1 = (int *)(*(longlong *)((longlong)local_120 + uVar10 * 8) + (ulonglong)((uint)uVar7 & 3) * 4); if (piVar1 != (int *)0x0) { *piVar1 = iVar8 + -1; } lVar9 = local_108 + 1; iVar14 = local_res10[0]; local_108 = lVar9; } } if (iVar8 < iVar14) { std::_Container_base12::_Orphan_all((_Container_base12 *)&local_128); if ((((int)local_110 + (int)local_108 & 3U) == 0) && (local_118 <= local_108 + 4U >> 2)) { FUN_1400415c0((longlong)&local_128,1); } uVar7 = local_108 + local_110; uVar10 = uVar7 >> 2; if (local_118 <= uVar10) { uVar10 = uVar10 - local_118; } if (*(longlong *)((longlong)local_120 + uVar10 * 8) == 0) { pvVar6 = operator_new(0x10); if (pvVar6 == (void *)0x0) { local_res20 = (char *)0x0; std::exception::exception((exception *)local_f0,&local_res20); local_f0[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_f0,(ThrowInfo *)&DAT_140151ad0); } *(void **)((longlong)local_120 + uVar10 * 8) = pvVar6; } piVar1 = (int *)(*(longlong *)((longlong)local_120 + uVar10 * 8) + (ulonglong)((uint)uVar7 & 3) * 4); if (piVar1 != (int *)0x0) { *piVar1 = iVar8 + 1; } local_108 = local_108 + 1; std::_Container_base12::_Orphan_all((_Container_base12 *)&local_128); if ((((char)local_108 + (char)local_110 & 3U) == 0) && (local_118 <= local_108 + 4U >> 2)) { FUN_1400415c0((longlong)&local_128,1); } uVar7 = local_108 + local_110; uVar10 = uVar7 >> 2; if (local_118 <= uVar10) { uVar10 = uVar10 - local_118; } if (*(longlong *)((longlong)local_120 + uVar10 * 8) == 0) { pvVar6 = operator_new(0x10); if (pvVar6 == (void *)0x0) { local_res20 = (char *)0x0; std::exception::exception((exception *)local_88,&local_res20); local_88[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_88,(ThrowInfo *)&DAT_140151ad0); } *(void **)((longlong)local_120 + uVar10 * 8) = pvVar6; } piVar1 = (int *)(*(longlong *)((longlong)local_120 + uVar10 * 8) + (ulonglong)((uint)uVar7 & 3) * 4); if (piVar1 != (int *)0x0) { *piVar1 = iVar14; } lVar9 = local_108 + 1; local_108 = lVar9; } } } while (uVar7 != 0) { uVar7 = uVar7 - 1; if (*(longlong *)((longlong)local_120 + uVar7 * 8) != 0) { operator_delete(*(void **)((longlong)local_120 + uVar7 * 8)); } } if (local_120 != (void *)0x0) { operator_delete(local_120); } local_118 = 0; local_120 = (void *)0x0; std::_Container_base12::_Orphan_all((_Container_base12 *)&local_128); operator_delete(local_128); local_128 = (longlong *)0x0; std::_Container_base12::~_Container_base12((_Container_base12 *)&local_128); } return; }