/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14000dbb0 FUN_14000dbb0 * Pseudocode, not original source. */ char * FUN_14000dbb0(char *param_1,char *param_2,int *param_3,int param_4) { char cVar1; int iVar2; char *pcVar3; uint uVar4; int iVar5; undefined **ppuVar6; longlong lVar7; char *pcVar8; cVar1 = param_1[1]; uVar4 = 0; *param_3 = 0; if ((cVar1 != '\0') && (cVar1 == '#')) { if (param_1[2] != '\0') { iVar5 = 1; if (param_1[2] == 'x') { if (((param_1[3] != '\0') && (pcVar3 = strchr(param_1 + 3,0x3b), pcVar3 != (char *)0x0)) && (*pcVar3 != '\0')) { pcVar8 = pcVar3 + -1; lVar7 = (longlong)pcVar3 - (longlong)param_1; cVar1 = *pcVar8; while (cVar1 != 'x') { if ((cVar1 < '0') || ('9' < cVar1)) { if ((cVar1 < 'a') || ('f' < cVar1)) { if (cVar1 < 'A') { return (char *)0x0; } if ('F' < cVar1) { return (char *)0x0; } iVar2 = cVar1 + -0x37; } else { iVar2 = cVar1 + -0x57; } } else { iVar2 = cVar1 + -0x30; } iVar2 = iVar2 * iVar5; pcVar8 = pcVar8 + -1; iVar5 = iVar5 << 4; uVar4 = uVar4 + iVar2; cVar1 = *pcVar8; } LAB_14000dce0: if (param_4 != 1) { *param_2 = (char)uVar4; *param_3 = 1; return param_1 + lVar7 + 1; } FUN_14000d7b0(uVar4,(longlong)param_2,param_3); return param_1 + lVar7 + 1; } } else { pcVar3 = strchr(param_1 + 2,0x3b); if ((pcVar3 != (char *)0x0) && (*pcVar3 != '\0')) { pcVar8 = pcVar3 + -1; lVar7 = (longlong)pcVar3 - (longlong)param_1; cVar1 = *pcVar8; while (cVar1 != '#') { if (cVar1 < '0') { return (char *)0x0; } if ('9' < cVar1) { return (char *)0x0; } pcVar8 = pcVar8 + -1; uVar4 = uVar4 + (cVar1 + -0x30) * iVar5; iVar5 = iVar5 * 10; cVar1 = *pcVar8; } goto LAB_14000dce0; } } return (char *)0x0; } } ppuVar6 = &PTR_s__amp__1401b33f0; do { iVar5 = strncmp(*ppuVar6,param_1,(ulonglong)*(uint *)(ppuVar6 + 1)); if (iVar5 == 0) { *param_3 = 1; *param_2 = (&DAT_1401b33fc)[(longlong)(int)uVar4 * 0x10]; return param_1 + (uint)(&DAT_1401b33f8)[(longlong)(int)uVar4 * 4]; } ppuVar6 = ppuVar6 + 2; uVar4 = uVar4 + 1; } while ((longlong)ppuVar6 < 0x1401b3440); *param_2 = *param_1; return param_1 + 1; }