/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14020fc30 FUN_14020fc30 * Pseudocode, not original source. */ undefined8 FUN_14020fc30(ushort *param_1,uint param_2,undefined1 *param_3,uint *param_4) { undefined1 uVar1; int iVar2; undefined8 uVar3; undefined1 uVar4; uint uVar5; byte *pbVar6; byte *pbVar7; ulonglong uVar8; ushort *puVar9; uint uVar10; uVar8 = (ulonglong)param_2; if (((param_1 == (ushort *)0x0) || (param_3 == (undefined1 *)0x0)) || (param_4 == (uint *)0x0)) { return 0x10; } uVar5 = 0; uVar10 = 0; puVar9 = param_1; if (param_2 == 0) { LAB_14020fce7: uVar10 = uVar5 + 2; LAB_14020fcea: if (*param_4 < uVar10) { *param_4 = uVar5; return 6; } *param_3 = 0xc; uVar4 = (undefined1)uVar5; if (uVar5 < 0x80) { param_3[1] = uVar4; uVar10 = 2; } else if (uVar5 < 0x100) { param_3[1] = 0x81; uVar10 = 3; param_3[2] = uVar4; } else { uVar1 = (undefined1)(uVar5 >> 8); if (uVar5 < 0x10000) { param_3[1] = 0x82; uVar10 = 4; param_3[2] = uVar1; param_3[3] = uVar4; } else { if (0xffffff < uVar5) goto LAB_14020fdfe; param_3[1] = 0x83; uVar10 = 5; param_3[2] = (char)(uVar5 >> 0x10); param_3[3] = uVar1; param_3[4] = uVar4; } } if (param_2 != 0) { pbVar6 = param_3 + (int)uVar10; do { iVar2 = FUN_14020d3c0(*param_1); if (iVar2 == 1) { uVar10 = uVar10 + 1; pbVar7 = pbVar6 + 1; *pbVar6 = (byte)*param_1; } else if (iVar2 == 2) { uVar10 = uVar10 + 2; *pbVar6 = (byte)(*param_1 >> 6) & 0x1f | 0xc0; pbVar7 = pbVar6 + 2; pbVar6[1] = (byte)*param_1 & 0x3f | 0x80; } else { pbVar7 = pbVar6; if (iVar2 == 3) { uVar10 = uVar10 + 3; *pbVar6 = (byte)(*param_1 >> 0xc) | 0xe0; pbVar6[1] = (byte)(*param_1 >> 6) & 0x3f | 0x80; pbVar7 = pbVar6 + 3; pbVar6[2] = (byte)*param_1 & 0x3f | 0x80; } } param_1 = param_1 + 1; uVar8 = uVar8 - 1; pbVar6 = pbVar7; } while (uVar8 != 0); } *param_4 = uVar10; uVar3 = 0; } else { do { if (0x1ffff < *puVar9) goto LAB_14020fdfe; iVar2 = FUN_14020d3c0(*puVar9); uVar10 = uVar10 + 1; uVar5 = uVar5 + iVar2; puVar9 = puVar9 + 1; } while (uVar10 < param_2); if (uVar5 < 0x80) goto LAB_14020fce7; if (uVar5 < 0x100) { uVar10 = uVar5 + 3; goto LAB_14020fcea; } if (uVar5 < 0x10000) { uVar10 = uVar5 + 4; goto LAB_14020fcea; } if (uVar5 < 0x1000000) { uVar10 = uVar5 + 5; goto LAB_14020fcea; } LAB_14020fdfe: uVar3 = 0x10; } return uVar3; }