/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400da778 FUN_1400da778 * Pseudocode, not original source. */ void FUN_1400da778(longlong param_1,longlong param_2,int param_3) { ushort uVar1; ushort uVar2; ushort uVar3; int iVar4; byte bVar5; int iVar6; longlong lVar7; ushort *puVar8; uint uVar9; uint uVar10; uint uVar11; short sVar12; int iVar13; longlong lVar15; int iVar16; int iVar14; uVar11 = 0xffffffff; iVar14 = 0; iVar4 = 7; iVar16 = 3; iVar6 = 4; if (*(ushort *)(param_2 + 2) == 0) { iVar4 = 0x8a; iVar6 = iVar16; } if (-1 < param_3) { puVar8 = (ushort *)(param_2 + 6); lVar15 = (longlong)param_3 + 1; uVar9 = (uint)*(ushort *)(param_2 + 2); do { iVar13 = iVar14 + 1; lVar7 = (longlong)(int)uVar9; uVar1 = *puVar8; uVar10 = (uint)uVar1; if ((iVar4 <= iVar13) || (uVar9 != uVar10)) { if (iVar13 < iVar6) { do { uVar11 = (uint)*(ushort *)(param_1 + 0xaa6 + lVar7 * 4); iVar6 = *(int *)(param_1 + 0x1714); if ((int)(0x10 - uVar11) < iVar6) { uVar3 = *(ushort *)(param_1 + 0xaa4 + lVar7 * 4); *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar3 << ((byte)iVar6 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar6 = *(int *)(param_1 + 0x1714) + -0x10; *(ushort *)(param_1 + 0x1710) = uVar3 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } else { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xaa4 + lVar7 * 4) << ((byte)iVar6 & 0x1f); } iVar13 = iVar13 + -1; *(uint *)(param_1 + 0x1714) = iVar6 + uVar11; } while (iVar13 != 0); } else { if (uVar9 == 0) { iVar6 = *(int *)(param_1 + 0x1714); sVar12 = (short)iVar13; bVar5 = (byte)iVar6; if (iVar13 < 0xb) { uVar3 = *(ushort *)(param_1 + 0xaea); if ((int)(0x10 - (uint)uVar3) < iVar6) { uVar2 = *(ushort *)(param_1 + 0xae8); *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar2 << (bVar5 & 0x1f); *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar6 = *(int *)(param_1 + 0x1714) + -0x10; *(ushort *)(param_1 + 0x1710) = uVar2 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } else { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xae8) << (bVar5 & 0x1f); } iVar6 = iVar6 + (uint)uVar3; *(int *)(param_1 + 0x1714) = iVar6; if (iVar6 < 0xe) { sVar12 = sVar12 + -3; iVar4 = iVar6 + 3; LAB_1400dac64: *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | sVar12 << ((byte)iVar6 & 0x1f); } else { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | sVar12 - 3U << ((byte)iVar6 & 0x1f); *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar4 = *(int *)(param_1 + 0x1714) + -0xd; *(ushort *)(param_1 + 0x1710) = (ushort)(sVar12 - 3U) >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } } else { uVar3 = *(ushort *)(param_1 + 0xaee); if ((int)(0x10 - (uint)uVar3) < iVar6) { uVar2 = *(ushort *)(param_1 + 0xaec); *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar2 << (bVar5 & 0x1f); *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar6 = *(int *)(param_1 + 0x1714) + -0x10; *(ushort *)(param_1 + 0x1710) = uVar2 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } else { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xaec) << (bVar5 & 0x1f); } iVar6 = iVar6 + (uint)uVar3; *(int *)(param_1 + 0x1714) = iVar6; if (iVar6 < 10) { sVar12 = sVar12 + -0xb; iVar4 = iVar6 + 7; goto LAB_1400dac64; } *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | sVar12 - 0xbU << ((byte)iVar6 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar4 = *(int *)(param_1 + 0x1714) + -9; *(ushort *)(param_1 + 0x1710) = (ushort)(sVar12 - 0xbU) >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } } else { if (uVar9 != uVar11) { uVar11 = (uint)*(ushort *)(param_1 + 0xaa6 + lVar7 * 4); iVar6 = *(int *)(param_1 + 0x1714); if ((int)(0x10 - uVar11) < iVar6) { uVar3 = *(ushort *)(param_1 + 0xaa4 + lVar7 * 4); *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar3 << ((byte)iVar6 & 0x1f); *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *) ((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar6 = *(int *)(param_1 + 0x1714) + -0x10; *(ushort *)(param_1 + 0x1710) = uVar3 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } else { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xaa4 + lVar7 * 4) << ((byte)iVar6 & 0x1f); } *(uint *)(param_1 + 0x1714) = iVar6 + uVar11; iVar13 = iVar14; } uVar3 = *(ushort *)(param_1 + 0xae6); iVar6 = *(int *)(param_1 + 0x1714); if ((int)(0x10 - (uint)uVar3) < iVar6) { uVar2 = *(ushort *)(param_1 + 0xae4); *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar2 << ((byte)iVar6 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar6 = *(int *)(param_1 + 0x1714) + -0x10; *(ushort *)(param_1 + 0x1710) = uVar2 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } else { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xae4) << ((byte)iVar6 & 0x1f); } iVar6 = iVar6 + (uint)uVar3; *(int *)(param_1 + 0x1714) = iVar6; if (iVar6 < 0xf) { sVar12 = (short)iVar13 + -3; iVar4 = iVar6 + 2; goto LAB_1400dac64; } uVar3 = (short)iVar13 - 3; *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar3 << ((byte)iVar6 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar4 = *(int *)(param_1 + 0x1714) + -0xe; *(ushort *)(param_1 + 0x1710) = uVar3 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } *(int *)(param_1 + 0x1714) = iVar4; } iVar13 = 0; uVar11 = uVar9; if (uVar1 == 0) { iVar4 = 0x8a; iVar6 = iVar16; } else if (uVar9 == uVar10) { iVar4 = 6; iVar6 = iVar16; } else { iVar4 = 7; iVar6 = 4; } } iVar14 = iVar13; puVar8 = puVar8 + 2; lVar15 = lVar15 + -1; uVar9 = uVar10; } while (lVar15 != 0); } return; }