/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14003f5b0 FUN_14003f5b0 * Pseudocode, not original source. */ int FUN_14003f5b0(byte *param_1,byte *param_2,int *param_3,uint param_4,uint param_5) { short sVar1; int iVar2; undefined8 uVar3; byte *pbVar4; byte bVar5; short sVar6; uint uVar7; size_t _MaxCount; uint uVar8; size_t sVar9; byte *pbVar10; int iVar11; size_t sVar12; byte *local_res8; byte *local_res10; int *local_res18; uint local_58; uint local_54; byte *local_50; byte *local_48; local_res10 = param_2; local_res18 = param_3; if (param_1 == (byte *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x80004005); } if (param_2 == (byte *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x80004005); } if (param_1 == param_2) { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x80004005); } _MaxCount = 0; bVar5 = *param_1; local_50 = param_2 + param_4; uVar7 = 0; local_58 = 0; iVar2 = 1; iVar11 = 1; local_54 = 0; sVar9 = _MaxCount; sVar12 = _MaxCount; local_48 = param_2; if (bVar5 != 0) { do { uVar8 = (uint)sVar9; pbVar10 = param_1 + 1; uVar7 = (uint)_MaxCount; iVar2 = 0; if (uVar7 == param_4) { iVar11 = iVar2; } local_res8 = pbVar10; if (bVar5 == 0x3a) { if ((char)param_5 < '\0') { if ((int)sVar12 == 0) { if (iVar11 != 0) { *param_2 = (byte)sVar12; pbVar4 = param_2 + -_MaxCount; if ((pbVar4 < local_48) || (local_50 < pbVar4)) { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x80004005); } FUN_14003f2d0((char *)pbVar4,(size_t)(local_50 + (1 - (longlong)pbVar4))); uVar8 = local_54; if (uVar7 == 4) { iVar2 = strncmp("file",(char *)(param_2 + -4),_MaxCount); sVar12 = 5; uVar8 = local_54; if (iVar2 == 0) { uVar8 = 1; local_54 = 1; } goto LAB_14003f7c9; } } sVar12 = (size_t)(uVar7 + 1); } goto LAB_14003f7c9; } LAB_14003f855: uVar3 = FUN_14003f3d0(bVar5); if (((((int)uVar3 == 0) || ((param_5 & 2) != 0)) || ((((param_5 & 0x10) != 0 && (bVar5 != 0x20)) || (((param_5 & 8) != 0 && (bVar5 == 0x2e)))))) || (((param_5 & 0x40) == 0 && (bVar5 == 0x25)))) { if (iVar11 != 0) { *param_2 = bVar5; param_2 = param_2 + 1; local_res10 = param_2; } } else if (uVar7 < param_4 - 3) { if (iVar11 != 0) { *param_2 = 0x25; pbVar4 = param_2 + 1; if (bVar5 < 0x10) { *pbVar4 = 0x30; pbVar4 = param_2 + 2; } FUN_14003f320((uint)bVar5,(char *)pbVar4,(longlong)local_50 - (longlong)pbVar4,0x10); param_2 = param_2 + 3; local_res10 = param_2; } uVar7 = uVar7 + 2; } else { iVar11 = 0; uVar7 = uVar7 + 2; } local_58 = uVar7 + 1; local_res8 = pbVar10; } else { if (bVar5 == 0x25) { if ((param_5 & 4) != 0) { bVar5 = *pbVar10; if (bVar5 == 0) goto LAB_14003f965; param_3 = local_res18; if ((byte)(bVar5 - 0x30) < 10) { sVar6 = bVar5 - 0x30; } else if ((byte)(bVar5 + 0xbf) < 6) { sVar6 = bVar5 - 0x37; } else { if (5 < (byte)(bVar5 + 0x9f)) goto LAB_14003f924; sVar6 = bVar5 - 0x57; } if (sVar6 < 0) goto LAB_14003f924; bVar5 = param_1[2]; if (bVar5 == 0) goto LAB_14003f965; pbVar10 = param_1 + 3; if ((byte)(bVar5 - 0x30) < 10) { sVar1 = bVar5 - 0x30; } else if ((byte)(bVar5 + 0xbf) < 6) { sVar1 = bVar5 - 0x37; } else { if (5 < (byte)(bVar5 + 0x9f)) goto LAB_14003f924; sVar1 = bVar5 - 0x57; } if (sVar1 < 0) goto LAB_14003f924; bVar5 = (char)sVar6 * '\x10' + (char)sVar1; local_res8 = pbVar10; } } else if (((bVar5 == 0x3f) || (bVar5 == 0x23)) && ((param_5 & 0x20) != 0)) { param_5 = param_5 | 2; } LAB_14003f7c9: if ((-1 < (char)param_5) || ((param_5 & 2) != 0)) goto LAB_14003f855; if (bVar5 == 0x5c) { if ((((int)sVar12 != 0) || ((param_5 >> 8 & 1) != 0)) && ((iVar11 != 0 && ((uVar8 == 0 || (uVar7 < 7)))))) { bVar5 = 0x2f; } goto LAB_14003f855; } if ((((bVar5 != 0x2e) || (uVar7 == 0)) || ((param_5 & 8) != 0)) || (uVar3 = FUN_14003f480((longlong *)&local_res10,(char *)(param_2 + -1),uVar7,&local_res8, &local_58,param_5,(int)sVar12), param_2 = local_res10, pbVar10 = local_res8, uVar7 = local_58, (int)uVar3 == 0)) goto LAB_14003f855; } _MaxCount = (size_t)local_58; bVar5 = *local_res8; uVar7 = local_58; if (bVar5 == 0) goto LAB_14003f965; sVar9 = (size_t)local_54; param_1 = local_res8; } while( true ); } LAB_14003f972: if (uVar7 < param_4) { *param_2 = 0; } LAB_14003f924: if (param_3 != (int *)0x0) { *param_3 = uVar7 + 1; } if (param_4 < uVar7 + 1) { iVar2 = 0; } return iVar2; LAB_14003f965: iVar2 = iVar11; param_3 = local_res18; if (iVar2 == 0) goto LAB_14003f924; goto LAB_14003f972; }