
void sha1_process_bytes(void *buffer,size_t len,sha1_ctx *ctx)

{
  undefined8 uVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  sha1_uint32 *psVar5;
  uint uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  sha1_uint32 *psVar10;
  uint uVar11;
  ulong uVar12;
  
  if (ctx->buflen != 0) {
    uVar12 = (ulong)ctx->buflen;
    psVar10 = ctx->buffer;
    uVar3 = 0x80 - uVar12;
    if (len < 0x80 - uVar12) {
      uVar3 = len;
    }
    memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);
    uVar11 = ctx->buflen + (int)uVar3;
    ctx->buflen = uVar11;
    if (0x40 < uVar11) {
      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);
      uVar11 = ctx->buflen;
      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);
      uVar2 = uVar11 & 0x3f;
      uVar12 = (ulong)uVar2;
      ctx->buflen = uVar2;
      if (uVar2 < 8) {
        if ((uVar11 & 4) == 0) {
          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {
            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =
                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));
          }
        }
        else {
          ctx->buffer[0] = *psVar5;
          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =
               *(undefined4 *)((long)psVar5 + (uVar12 - 4));
        }
      }
      else {
        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;
        *(undefined8 *)((long)ctx->total + uVar12 + 4) =
             *(undefined8 *)((long)psVar5 + (uVar12 - 8));
        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;
        lVar4 = (long)psVar10 - uVar12;
        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;
        if (7 < uVar11) {
          uVar7 = 0;
          do {
            uVar2 = (int)uVar7 + 8;
            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));
            uVar7 = (ulong)uVar2;
          } while (uVar2 < uVar11);
        }
      }
    }
    buffer = (void *)((long)buffer + uVar3);
    len = len - uVar3;
  }
  puVar9 = (undefined8 *)buffer;
  if (0x3f < len) {
    if (((ulong)buffer & 3) != 0) {
      if (len != 0x40) {
        uVar3 = len - 0x41 >> 6;
        do {
          uVar1 = puVar9[1];
          puVar8 = puVar9 + 8;
          *(undefined8 *)ctx->buffer = *puVar9;
          *(undefined8 *)(ctx->buffer + 2) = uVar1;
          uVar1 = puVar9[3];
          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];
          *(undefined8 *)(ctx->buffer + 6) = uVar1;
          uVar1 = puVar9[5];
          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];
          *(undefined8 *)(ctx->buffer + 10) = uVar1;
          uVar1 = puVar9[7];
          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];
          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;
          sha1_process_block(ctx->buffer,0x40,ctx);
          puVar9 = puVar8;
        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));
        len = (len - 0x40) + uVar3 * -0x40;
        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);
      }
      goto LAB_0027107b;
    }
    puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));
    sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);
    len = (ulong)((uint)len & 0x3f);
  }
  if (len == 0) {
    return;
  }
LAB_0027107b:
  psVar10 = ctx->buffer;
  uVar11 = ctx->buflen;
  uVar2 = (uint)len;
  puVar8 = (undefined8 *)((long)psVar10 + (ulong)uVar11);
  if (uVar2 < 8) {
    if ((len & 4) == 0) {
      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {
        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =
             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));
      }
    }
    else {
      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;
      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =
           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));
    }
  }
  else {
    *puVar8 = *puVar9;
    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =
         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));
    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);
    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;
    if (7 < uVar2) {
      uVar6 = 0;
      do {
        uVar3 = (ulong)uVar6;
        uVar6 = uVar6 + 8;
        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =
             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));
      } while (uVar6 < uVar2);
    }
  }
  uVar3 = len + uVar11;
  if (0x3f < uVar3) {
    uVar3 = uVar3 - 0x40;
    sha1_process_block(psVar10,0x40,ctx);
    memcpy(psVar10,ctx->buffer + 0x10,uVar3);
  }
  ctx->buflen = (sha1_uint32)uVar3;
  return;
}



void FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)

{
  undefined8 uVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  uint uVar5;
  ulong uVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  void *__dest;
  uint uVar9;
  ulong uVar10;
  
  if (*(uint *)(param_3 + 0x1c) != 0) {
    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);
    lVar4 = param_3 + 0x20;
    uVar3 = 0x80 - uVar10;
    if (param_2 < 0x80 - uVar10) {
      uVar3 = param_2;
    }
    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);
    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;
    *(uint *)(param_3 + 0x1c) = uVar9;
    if (0x40 < uVar9) {
      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);
      uVar9 = *(uint *)(param_3 + 0x1c);
      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);
      uVar2 = uVar9 & 0x3f;
      uVar10 = (ulong)uVar2;
      *(uint *)(param_3 + 0x1c) = uVar2;
      if (uVar2 < 8) {
        if ((uVar9 & 4) == 0) {
          if ((uVar2 != 0) &&
             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {
            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));
          }
        }
        else {
          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;
          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));
        }
      }
      else {
        *(undefined8 *)(param_3 + 0x20) = *puVar8;
        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));
        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;
        lVar4 = lVar4 - uVar10;
        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;
        if (7 < uVar9) {
          uVar6 = 0;
          do {
            uVar2 = (int)uVar6 + 8;
            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));
            uVar6 = (ulong)uVar2;
          } while (uVar2 < uVar9);
        }
      }
    }
    param_1 = (undefined8 *)((long)param_1 + uVar3);
    param_2 = param_2 - uVar3;
  }
  puVar8 = param_1;
  if (0x3f < param_2) {
    if (((ulong)param_1 & 3) != 0) {
      if (param_2 != 0x40) {
        uVar3 = param_2 - 0x41 >> 6;
        do {
          uVar1 = puVar8[1];
          puVar7 = puVar8 + 8;
          *(undefined8 *)(param_3 + 0x20) = *puVar8;
          *(undefined8 *)(param_3 + 0x28) = uVar1;
          uVar1 = puVar8[3];
          *(undefined8 *)(param_3 + 0x30) = puVar8[2];
          *(undefined8 *)(param_3 + 0x38) = uVar1;
          uVar1 = puVar8[5];
          *(undefined8 *)(param_3 + 0x40) = puVar8[4];
          *(undefined8 *)(param_3 + 0x48) = uVar1;
          uVar1 = puVar8[7];
          *(undefined8 *)(param_3 + 0x50) = puVar8[6];
          *(undefined8 *)(param_3 + 0x58) = uVar1;
          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);
          puVar8 = puVar7;
        } while (puVar7 != param_1 + (uVar3 + 1) * 8);
        param_2 = (param_2 - 0x40) + uVar3 * -0x40;
        puVar8 = param_1 + (uVar3 + 1) * 8;
      }
      goto LAB_0027107b;
    }
    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));
    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);
    param_2 = (ulong)((uint)param_2 & 0x3f);
  }
  if (param_2 == 0) {
    return;
  }
LAB_0027107b:
  __dest = (void *)(param_3 + 0x20);
  uVar9 = *(uint *)(param_3 + 0x1c);
  uVar2 = (uint)param_2;
  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);
  if (uVar2 < 8) {
    if ((param_2 & 4) == 0) {
      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {
        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =
             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));
      }
    }
    else {
      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;
      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =
           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));
    }
  }
  else {
    *puVar7 = *puVar8;
    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =
         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));
    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);
    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;
    if (7 < uVar2) {
      uVar5 = 0;
      do {
        uVar3 = (ulong)uVar5;
        uVar5 = uVar5 + 8;
        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =
             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));
      } while (uVar5 < uVar2);
    }
  }
  param_2 = param_2 + uVar9;
  if (0x3f < param_2) {
    param_2 = param_2 - 0x40;
    FUN_0026fcf0(__dest,0x40,param_3);
    memcpy(__dest,(void *)(param_3 + 0x60),param_2);
  }
  *(int *)(param_3 + 0x1c) = (int)param_2;
  return;
}


PUSH R15
PUSH R14
PUSH R13
MOV R13,RSI
PUSH R12
MOV R12,RDX
PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0x8
MOV EAX,dword ptr [RDX + 0x1c]
TEST EAX,EAX
JNZ 0x00271128
CMP R13,0x3f
JBE 0x0027110c
TEST BL,0x3
JZ 0x002710f0
LEA RBP,[R12 + 0x20]
CMP R13,0x40
JZ 0x00271290
LEA RAX,[R13 + -0x41]
SHR RAX,0x6
LEA R14,[RAX + 0x1]
MOV R15,RAX
SHL R14,0x6
ADD R14,RBX
NOP word ptr [RAX + RAX*0x1]
MOVDQU XMM0,xmmword ptr [RBX]
MOV RDX,R12
MOV ESI,0x40
MOV RDI,RBP
ADD RBX,0x40
MOVUPS xmmword ptr [RBP],XMM0
MOVDQU XMM1,xmmword ptr [RBX + -0x30]
MOVUPS xmmword ptr [RBP + 0x10],XMM1
MOVDQU XMM2,xmmword ptr [RBX + -0x20]
MOVUPS xmmword ptr [RBP + 0x20],XMM2
MOVDQU XMM3,xmmword ptr [RBX + -0x10]
MOVUPS xmmword ptr [RBP + 0x30],XMM3
CALL 0x0026fcf0
CMP RBX,R14
JNZ 0x00271030
MOV RAX,R15
NEG RAX
SHL RAX,0x6
LEA R13,[R13 + RAX*0x1 + -0x40]
MOV ECX,dword ptr [R12 + 0x1c]
MOV EAX,R13D
LEA RSI,[RBP + RCX*0x1]
CMP R13D,0x8
JNC 0x00271170
TEST R13B,0x4
JNZ 0x00271298
TEST R13D,R13D
JZ 0x002710af
MOVZX EDX,byte ptr [R14]
MOV byte ptr [RSI],DL
TEST AL,0x2
JNZ 0x002712ae
ADD R13,RCX
CMP R13,0x3f
JBE 0x002710dc
MOV RDX,R12
MOV ESI,0x40
MOV RDI,RBP
SUB R13,0x40
CALL 0x0026fcf0
LEA RSI,[R12 + 0x60]
MOV RDX,R13
MOV RDI,RBP
CALL 0x0013eaa0
MOV dword ptr [R12 + 0x1c],R13D
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RBP,R13
MOV RDI,RBX
MOV RDX,R12
AND R13D,0x3f
AND RBP,-0x40
MOV RSI,RBP
ADD RBX,RBP
CALL 0x0026fcf0
TEST R13,R13
JNZ 0x002712c1
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EBP,EAX
MOV EDX,0x80
LEA R15,[R12 + 0x20]
SUB RDX,RBP
LEA RDI,[R15 + RBP*0x1]
CMP RDX,RSI
CMOVA RDX,RSI
MOV RSI,RBX
MOV R14,RDX
CALL 0x0013eaa0
MOV ESI,dword ptr [R12 + 0x1c]
ADD ESI,R14D
MOV dword ptr [R12 + 0x1c],ESI
CMP ESI,0x40
JA 0x002711c0
ADD RBX,R14
SUB R13,R14
JMP 0x00270ff2
MOV RAX,qword ptr [R14]
MOV EDX,R13D
LEA RDI,[RSI + 0x8]
AND RDI,-0x8
MOV qword ptr [RSI],RAX
MOV RAX,qword ptr [R14 + RDX*0x1 + -0x8]
MOV qword ptr [RSI + RDX*0x1 + -0x8],RAX
MOV RAX,RSI
SUB RAX,RDI
SUB R14,RAX
ADD EAX,R13D
AND EAX,0xfffffff8
CMP EAX,0x8
JC 0x002710af
AND EAX,0xfffffff8
XOR EDX,EDX
MOV ESI,EDX
ADD EDX,0x8
MOV R8,qword ptr [R14 + RSI*0x1]
MOV qword ptr [RDI + RSI*0x1],R8
CMP EDX,EAX
JC 0x002711a8
JMP 0x002710af
MOV RDX,R12
AND ESI,0xffffffc0
MOV RDI,R15
CALL 0x0026fcf0
MOV ECX,dword ptr [R12 + 0x1c]
LEA RAX,[RBP + R14*0x1]
AND RAX,-0x40
MOV EDX,ECX
ADD RAX,R15
AND EDX,0x3f
MOV dword ptr [R12 + 0x1c],EDX
CMP EDX,0x8
JNC 0x00271220
TEST CL,0x4
JNZ 0x00271271
TEST EDX,EDX
JZ 0x0027115f
MOVZX ESI,byte ptr [RAX]
AND ECX,0x2
MOV byte ptr [R12 + 0x20],SIL
JZ 0x0027115f
MOVZX EAX,word ptr [RAX + RDX*0x1 + -0x2]
MOV word ptr [R15 + RDX*0x1 + -0x2],AX
JMP 0x0027115f
MOV RCX,qword ptr [RAX]
MOV qword ptr [R12 + 0x20],RCX
MOV ECX,EDX
MOV RSI,qword ptr [RAX + RCX*0x1 + -0x8]
MOV qword ptr [R15 + RCX*0x1 + -0x8],RSI
LEA RSI,[R12 + 0x28]
AND RSI,-0x8
SUB R15,RSI
SUB RAX,R15
ADD R15D,EDX
AND R15D,0xfffffff8
CMP R15D,0x8
JC 0x0027115f
AND R15D,0xfffffff8
XOR EDX,EDX
MOV ECX,EDX
ADD EDX,0x8
MOV RDI,qword ptr [RAX + RCX*0x1]
MOV qword ptr [RSI + RCX*0x1],RDI
CMP EDX,R15D
JC 0x0027125a
JMP 0x0027115f
MOV ECX,dword ptr [RAX]
MOV dword ptr [R12 + 0x20],ECX
MOV EAX,dword ptr [RAX + RDX*0x1 + -0x4]
MOV dword ptr [R15 + RDX*0x1 + -0x4],EAX
JMP 0x0027115f
MOV R14,RBX
JMP 0x0027107b
MOV EDX,dword ptr [R14]
MOV dword ptr [RSI],EDX
MOV EDX,R13D
MOV EAX,dword ptr [R14 + RDX*0x1 + -0x4]
MOV dword ptr [RSI + RDX*0x1 + -0x4],EAX
JMP 0x002710af
MOV EDX,R13D
MOVZX EAX,word ptr [R14 + RDX*0x1 + -0x2]
MOV word ptr [RSI + RDX*0x1 + -0x2],AX
JMP 0x002710af
LEA RBP,[R12 + 0x20]
MOV R14,RBX
JMP 0x0027107b
(translation_unit "void FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}\n\n" (function_definition "void FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}" primitive_type (function_declarator "FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)" identifier (parameter_list "(undefined8 *param_1,ulong param_2,long param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (if_statement "if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }" if (parenthesized_expression "(*(uint *)(param_3 + 0x1c) != 0)" ( (binary_expression "*(uint *)(param_3 + 0x1c) != 0" (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }" { (expression_statement "uVar10 = (ulong)*(uint *)(param_3 + 0x1c);" (assignment_expression "uVar10 = (ulong)*(uint *)(param_3 + 0x1c)" identifier = (binary_expression "(ulong)*(uint *)(param_3 + 0x1c)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "lVar4 = param_3 + 0x20;" (assignment_expression "lVar4 = param_3 + 0x20" identifier = (binary_expression "param_3 + 0x20" identifier + number_literal)) ;) (expression_statement "uVar3 = 0x80 - uVar10;" (assignment_expression "uVar3 = 0x80 - uVar10" identifier = (binary_expression "0x80 - uVar10" number_literal - identifier)) ;) (if_statement "if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }" if (parenthesized_expression "(param_2 < 0x80 - uVar10)" ( (binary_expression "param_2 < 0x80 - uVar10" identifier < (binary_expression "0x80 - uVar10" number_literal - identifier)) )) (compound_statement "{\n      uVar3 = param_2;\n    }" { (expression_statement "uVar3 = param_2;" (assignment_expression "uVar3 = param_2" identifier = identifier) ;) })) (expression_statement "memcpy((void *)(lVar4 + uVar10),param_1,uVar3);" (call_expression "memcpy((void *)(lVar4 + uVar10),param_1,uVar3)" identifier (argument_list "((void *)(lVar4 + uVar10),param_1,uVar3)" ( (cast_expression "(void *)(lVar4 + uVar10)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar4 + uVar10)" ( (binary_expression "lVar4 + uVar10" identifier + identifier) ))) , identifier , identifier ))) ;) (expression_statement "uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;" (assignment_expression "uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3" identifier = (binary_expression "*(int *)(param_3 + 0x1c) + (int)uVar3" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) + (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "*(uint *)(param_3 + 0x1c) = uVar9;" (assignment_expression "*(uint *)(param_3 + 0x1c) = uVar9" (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }" if (parenthesized_expression "(0x40 < uVar9)" ( (binary_expression "0x40 < uVar9" number_literal < identifier) )) (compound_statement "{\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }" { (expression_statement "FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);" (call_expression "FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3)" identifier (argument_list "(lVar4,uVar9 & 0xffffffc0,param_3)" ( identifier , (binary_expression "uVar9 & 0xffffffc0" identifier & number_literal) , identifier ))) ;) (expression_statement "uVar9 = *(uint *)(param_3 + 0x1c);" (assignment_expression "uVar9 = *(uint *)(param_3 + 0x1c)" identifier = (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);" (assignment_expression "puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" identifier = (cast_expression "(undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" ( (binary_expression "(uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4" (parenthesized_expression "(uVar10 + uVar3 & 0xffffffffffffffc0)" ( (binary_expression "uVar10 + uVar3 & 0xffffffffffffffc0" (binary_expression "uVar10 + uVar3" identifier + identifier) & number_literal) )) + identifier) )))) ;) (expression_statement "uVar2 = uVar9 & 0x3f;" (assignment_expression "uVar2 = uVar9 & 0x3f" identifier = (binary_expression "uVar9 & 0x3f" identifier & number_literal)) ;) (expression_statement "uVar10 = (ulong)uVar2;" (assignment_expression "uVar10 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "*(uint *)(param_3 + 0x1c) = uVar2;" (assignment_expression "*(uint *)(param_3 + 0x1c) = uVar2" (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" if (parenthesized_expression "(uVar2 < 8)" ( (binary_expression "uVar2 < 8" identifier < number_literal) )) (compound_statement "{\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }" { (if_statement "if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" if (parenthesized_expression "((uVar9 & 4) == 0)" ( (binary_expression "(uVar9 & 4) == 0" (parenthesized_expression "(uVar9 & 4)" ( (binary_expression "uVar9 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }" { (if_statement "if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }" if (parenthesized_expression "((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0))" ( (binary_expression "(uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)" ( (comma_expression "*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0" (assignment_expression "*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8" (pointer_expression "*(undefined1 *)(param_3 + 0x20)" * (cast_expression "(undefined1 *)(param_3 + 0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*(undefined1 *)puVar8" * (cast_expression "(undefined1 *)puVar8" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) , (binary_expression "(uVar9 & 2) != 0" (parenthesized_expression "(uVar9 & 2)" ( (binary_expression "uVar9 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }" { (expression_statement "*(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));" (assignment_expression "*(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2))" (pointer_expression "*(undefined2 *)(param_3 + 0x1e + uVar10)" * (cast_expression "(undefined2 *)(param_3 + 0x1e + uVar10)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1e + uVar10)" ( (binary_expression "param_3 + 0x1e + uVar10" (binary_expression "param_3 + 0x1e" identifier + number_literal) + identifier) )))) = (pointer_expression "*(undefined2 *)((long)puVar8 + (uVar10 - 2))" * (cast_expression "(undefined2 *)((long)puVar8 + (uVar10 - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar10 - 2))" ( (binary_expression "(long)puVar8 + (uVar10 - 2)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar10 - 2)" ( (binary_expression "uVar10 - 2" identifier - number_literal) ))) ))))) ;) })) }) (else_clause "else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" else (compound_statement "{\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" { (expression_statement "*(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;" (assignment_expression "*(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8" (pointer_expression "*(undefined4 *)(param_3 + 0x20)" * (cast_expression "(undefined4 *)(param_3 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));" (assignment_expression "*(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4))" (pointer_expression "*(undefined4 *)(param_3 + 0x1c + uVar10)" * (cast_expression "(undefined4 *)(param_3 + 0x1c + uVar10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c + uVar10)" ( (binary_expression "param_3 + 0x1c + uVar10" (binary_expression "param_3 + 0x1c" identifier + number_literal) + identifier) )))) = (pointer_expression "*(undefined4 *)((long)puVar8 + (uVar10 - 4))" * (cast_expression "(undefined4 *)((long)puVar8 + (uVar10 - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar10 - 4))" ( (binary_expression "(long)puVar8 + (uVar10 - 4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar10 - 4)" ( (binary_expression "uVar10 - 4" identifier - number_literal) ))) ))))) ;) }))) }) (else_clause "else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" else (compound_statement "{\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" { (expression_statement "*(undefined8 *)(param_3 + 0x20) = *puVar8;" (assignment_expression "*(undefined8 *)(param_3 + 0x20) = *puVar8" (pointer_expression "*(undefined8 *)(param_3 + 0x20)" * (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));" (assignment_expression "*(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8))" (pointer_expression "*(undefined8 *)(param_3 + 0x18 + uVar10)" * (cast_expression "(undefined8 *)(param_3 + 0x18 + uVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x18 + uVar10)" ( (binary_expression "param_3 + 0x18 + uVar10" (binary_expression "param_3 + 0x18" identifier + number_literal) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar10 - 8))" * (cast_expression "(undefined8 *)((long)puVar8 + (uVar10 - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar10 - 8))" ( (binary_expression "(long)puVar8 + (uVar10 - 8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar10 - 8)" ( (binary_expression "uVar10 - 8" identifier - number_literal) ))) ))))) ;) (expression_statement "uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;" (assignment_expression "uVar10 = param_3 + 0x28U & 0xfffffffffffffff8" identifier = (binary_expression "param_3 + 0x28U & 0xfffffffffffffff8" (binary_expression "param_3 + 0x28U" identifier + number_literal) & number_literal)) ;) (expression_statement "lVar4 = lVar4 - uVar10;" (assignment_expression "lVar4 = lVar4 - uVar10" identifier = (binary_expression "lVar4 - uVar10" identifier - identifier)) ;) (expression_statement "uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar9 = (int)lVar4 + uVar2 & 0xfffffff8" identifier = (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) & number_literal)) ;) (if_statement "if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }" if (parenthesized_expression "(7 < uVar9)" ( (binary_expression "7 < uVar9" number_literal < identifier) )) (compound_statement "{\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);" do (compound_statement "{\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          }" { (expression_statement "uVar2 = (int)uVar6 + 8;" (assignment_expression "uVar2 = (int)uVar6 + 8" identifier = (binary_expression "(int)uVar6 + 8" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "*(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));" (assignment_expression "*(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" (pointer_expression "*(undefined8 *)(uVar10 + uVar6)" * (cast_expression "(undefined8 *)(uVar10 + uVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar10 + uVar6)" ( (binary_expression "uVar10 + uVar6" identifier + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" * (cast_expression "(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar6 - lVar4))" ( (binary_expression "(long)puVar8 + (uVar6 - lVar4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar6 - lVar4)" ( (binary_expression "uVar6 - lVar4" identifier - identifier) ))) ))))) ;) (expression_statement "uVar6 = (ulong)uVar2;" (assignment_expression "uVar6 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }) while (parenthesized_expression "(uVar2 < uVar9)" ( (binary_expression "uVar2 < uVar9" identifier < identifier) )) ;) })) }))) })) (expression_statement "param_1 = (undefined8 *)((long)param_1 + uVar3);" (assignment_expression "param_1 = (undefined8 *)((long)param_1 + uVar3)" identifier = (cast_expression "(undefined8 *)((long)param_1 + uVar3)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + uVar3)" ( (binary_expression "(long)param_1 + uVar3" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "param_2 = param_2 - uVar3;" (assignment_expression "param_2 = param_2 - uVar3" identifier = (binary_expression "param_2 - uVar3" identifier - identifier)) ;) })) (expression_statement "puVar8 = param_1;" (assignment_expression "puVar8 = param_1" identifier = identifier) ;) (if_statement "if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }" if (parenthesized_expression "(0x3f < param_2)" ( (binary_expression "0x3f < param_2" number_literal < identifier) )) (compound_statement "{\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }" { (if_statement "if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }" if (parenthesized_expression "(((ulong)param_1 & 3) != 0)" ( (binary_expression "((ulong)param_1 & 3) != 0" (parenthesized_expression "((ulong)param_1 & 3)" ( (binary_expression "(ulong)param_1 & 3" (cast_expression "(ulong)param_1" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }" { (if_statement "if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }" if (parenthesized_expression "(param_2 != 0x40)" ( (binary_expression "param_2 != 0x40" identifier != number_literal) )) (compound_statement "{\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }" { (expression_statement "uVar3 = param_2 - 0x41 >> 6;" (assignment_expression "uVar3 = param_2 - 0x41 >> 6" identifier = (binary_expression "param_2 - 0x41 >> 6" (binary_expression "param_2 - 0x41" identifier - number_literal) >> number_literal)) ;) (do_statement "do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);" do (compound_statement "{\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        }" { (expression_statement "uVar1 = puVar8[1];" (assignment_expression "uVar1 = puVar8[1]" identifier = (subscript_expression "puVar8[1]" identifier [ number_literal ])) ;) (expression_statement "puVar7 = puVar8 + 8;" (assignment_expression "puVar7 = puVar8 + 8" identifier = (binary_expression "puVar8 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(param_3 + 0x20) = *puVar8;" (assignment_expression "*(undefined8 *)(param_3 + 0x20) = *puVar8" (pointer_expression "*(undefined8 *)(param_3 + 0x20)" * (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*(undefined8 *)(param_3 + 0x28) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x28) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x28)" * (cast_expression "(undefined8 *)(param_3 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar8[3];" (assignment_expression "uVar1 = puVar8[3]" identifier = (subscript_expression "puVar8[3]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x30) = puVar8[2];" (assignment_expression "*(undefined8 *)(param_3 + 0x30) = puVar8[2]" (pointer_expression "*(undefined8 *)(param_3 + 0x30)" * (cast_expression "(undefined8 *)(param_3 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x30)" ( (binary_expression "param_3 + 0x30" identifier + number_literal) )))) = (subscript_expression "puVar8[2]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x38) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x38) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x38)" * (cast_expression "(undefined8 *)(param_3 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x38)" ( (binary_expression "param_3 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar8[5];" (assignment_expression "uVar1 = puVar8[5]" identifier = (subscript_expression "puVar8[5]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x40) = puVar8[4];" (assignment_expression "*(undefined8 *)(param_3 + 0x40) = puVar8[4]" (pointer_expression "*(undefined8 *)(param_3 + 0x40)" * (cast_expression "(undefined8 *)(param_3 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x40)" ( (binary_expression "param_3 + 0x40" identifier + number_literal) )))) = (subscript_expression "puVar8[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x48) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x48) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x48)" * (cast_expression "(undefined8 *)(param_3 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x48)" ( (binary_expression "param_3 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar8[7];" (assignment_expression "uVar1 = puVar8[7]" identifier = (subscript_expression "puVar8[7]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x50) = puVar8[6];" (assignment_expression "*(undefined8 *)(param_3 + 0x50) = puVar8[6]" (pointer_expression "*(undefined8 *)(param_3 + 0x50)" * (cast_expression "(undefined8 *)(param_3 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x50)" ( (binary_expression "param_3 + 0x50" identifier + number_literal) )))) = (subscript_expression "puVar8[6]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x58) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x58) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x58)" * (cast_expression "(undefined8 *)(param_3 + 0x58)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x58)" ( (binary_expression "param_3 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);" (call_expression "FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3)" identifier (argument_list "((undefined8 *)(param_3 + 0x20),0x40,param_3)" ( (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) ))) , number_literal , identifier ))) ;) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(puVar7 != param_1 + (uVar3 + 1) * 8)" ( (binary_expression "puVar7 != param_1 + (uVar3 + 1) * 8" identifier != (binary_expression "param_1 + (uVar3 + 1) * 8" identifier + (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal))) )) ;) (expression_statement "param_2 = (param_2 - 0x40) + uVar3 * -0x40;" (assignment_expression "param_2 = (param_2 - 0x40) + uVar3 * -0x40" identifier = (binary_expression "(param_2 - 0x40) + uVar3 * -0x40" (parenthesized_expression "(param_2 - 0x40)" ( (binary_expression "param_2 - 0x40" identifier - number_literal) )) + (binary_expression "uVar3 * -0x40" identifier * number_literal))) ;) (expression_statement "puVar8 = param_1 + (uVar3 + 1) * 8;" (assignment_expression "puVar8 = param_1 + (uVar3 + 1) * 8" identifier = (binary_expression "param_1 + (uVar3 + 1) * 8" identifier + (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal))) ;) })) (goto_statement "goto LAB_0027107b;" goto statement_identifier ;) })) (expression_statement "puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));" (assignment_expression "puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0))" identifier = (cast_expression "(undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + (param_2 & 0xffffffffffffffc0))" ( (binary_expression "(long)param_1 + (param_2 & 0xffffffffffffffc0)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(param_2 & 0xffffffffffffffc0)" ( (binary_expression "param_2 & 0xffffffffffffffc0" identifier & number_literal) ))) )))) ;) (expression_statement "FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);" (call_expression "FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3)" identifier (argument_list "(param_1,param_2 & 0xffffffffffffffc0,param_3)" ( identifier , (binary_expression "param_2 & 0xffffffffffffffc0" identifier & number_literal) , identifier ))) ;) (expression_statement "param_2 = (ulong)((uint)param_2 & 0x3f);" (assignment_expression "param_2 = (ulong)((uint)param_2 & 0x3f)" identifier = (call_expression "(ulong)((uint)param_2 & 0x3f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)param_2 & 0x3f)" ( (binary_expression "(uint)param_2 & 0x3f" (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) })) (if_statement "if (param_2 == 0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);" statement_identifier : (expression_statement "__dest = (void *)(param_3 + 0x20);" (assignment_expression "__dest = (void *)(param_3 + 0x20)" identifier = (cast_expression "(void *)(param_3 + 0x20)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) ;)) (expression_statement "uVar9 = *(uint *)(param_3 + 0x1c);" (assignment_expression "uVar9 = *(uint *)(param_3 + 0x1c)" identifier = (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = (uint)param_2;" (assignment_expression "uVar2 = (uint)param_2" identifier = (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);" (assignment_expression "puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9)" identifier = (cast_expression "(undefined8 *)((long)__dest + (ulong)uVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest + (ulong)uVar9)" ( (binary_expression "(long)__dest + (ulong)uVar9" (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (cast_expression "(ulong)uVar9" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) ;) (if_statement "if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" if (parenthesized_expression "(uVar2 < 8)" ( (binary_expression "uVar2 < 8" identifier < number_literal) )) (compound_statement "{\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }" { (if_statement "if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" if (parenthesized_expression "((param_2 & 4) == 0)" ( (binary_expression "(param_2 & 4) == 0" (parenthesized_expression "(param_2 & 4)" ( (binary_expression "param_2 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }" { (if_statement "if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }" if (parenthesized_expression "((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0))" ( (binary_expression "(uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)" ( (comma_expression "*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0" (assignment_expression "*(undefined1 *)puVar7 = *(undefined1 *)puVar8" (pointer_expression "*(undefined1 *)puVar7" * (cast_expression "(undefined1 *)puVar7" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined1 *)puVar8" * (cast_expression "(undefined1 *)puVar8" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) , (binary_expression "(param_2 & 2) != 0" (parenthesized_expression "(param_2 & 2)" ( (binary_expression "param_2 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }" { (expression_statement "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));" (assignment_expression "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" (pointer_expression "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2))" * (cast_expression "(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 2))" ( (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 2)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 2)" ( (binary_expression "(param_2 & 0xffffffff) - 2" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" * (cast_expression "(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 2))" ( (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 2)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 2)" ( (binary_expression "(param_2 & 0xffffffff) - 2" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) })) }) (else_clause "else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" else (compound_statement "{\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" { (expression_statement "*(undefined4 *)puVar7 = *(undefined4 *)puVar8;" (assignment_expression "*(undefined4 *)puVar7 = *(undefined4 *)puVar8" (pointer_expression "*(undefined4 *)puVar7" * (cast_expression "(undefined4 *)puVar7" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));" (assignment_expression "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" (pointer_expression "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4))" * (cast_expression "(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 4))" ( (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 4)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 4)" ( (binary_expression "(param_2 & 0xffffffff) - 4" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" * (cast_expression "(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 4))" ( (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 4)" ( (binary_expression "(param_2 & 0xffffffff) - 4" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) }))) }) (else_clause "else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" else (compound_statement "{\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" { (expression_statement "*puVar7 = *puVar8;" (assignment_expression "*puVar7 = *puVar8" (pointer_expression "*puVar7" * identifier) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));" (assignment_expression "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" (pointer_expression "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8))" * (cast_expression "(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 8))" ( (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 8)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 8)" ( (binary_expression "(param_2 & 0xffffffff) - 8" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" * (cast_expression "(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 8))" ( (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 8)" ( (binary_expression "(param_2 & 0xffffffff) - 8" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) (expression_statement "lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" identifier = (binary_expression "(long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (parenthesized_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar7 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar7 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar7 + 1)" ( (binary_expression "puVar7 + 1" identifier + number_literal) ))) & number_literal) )))) ;) (expression_statement "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8" identifier = (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) & number_literal)) ;) (if_statement "if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }" if (parenthesized_expression "(7 < uVar2)" ( (binary_expression "7 < uVar2" number_literal < identifier) )) (compound_statement "{\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);" do (compound_statement "{\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      }" { (expression_statement "uVar3 = (ulong)uVar5;" (assignment_expression "uVar3 = (ulong)uVar5" identifier = (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar5 = uVar5 + 8;" (assignment_expression "uVar5 = uVar5 + 8" identifier = (binary_expression "uVar5 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));" (assignment_expression "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" (pointer_expression "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" * (cast_expression "(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" ( (binary_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3" (parenthesized_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar7 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar7 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar7 + 1)" ( (binary_expression "puVar7 + 1" identifier + number_literal) ))) & number_literal) )) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" * (cast_expression "(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar3 - lVar4))" ( (binary_expression "(long)puVar8 + (uVar3 - lVar4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar3 - lVar4)" ( (binary_expression "uVar3 - lVar4" identifier - identifier) ))) ))))) ;) }) while (parenthesized_expression "(uVar5 < uVar2)" ( (binary_expression "uVar5 < uVar2" identifier < identifier) )) ;) })) }))) (expression_statement "param_2 = param_2 + uVar9;" (assignment_expression "param_2 = param_2 + uVar9" identifier = (binary_expression "param_2 + uVar9" identifier + identifier)) ;) (if_statement "if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }" if (parenthesized_expression "(0x3f < param_2)" ( (binary_expression "0x3f < param_2" number_literal < identifier) )) (compound_statement "{\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }" { (expression_statement "param_2 = param_2 - 0x40;" (assignment_expression "param_2 = param_2 - 0x40" identifier = (binary_expression "param_2 - 0x40" identifier - number_literal)) ;) (expression_statement "FUN_0026fcf0(__dest,0x40,param_3);" (call_expression "FUN_0026fcf0(__dest,0x40,param_3)" identifier (argument_list "(__dest,0x40,param_3)" ( identifier , number_literal , identifier ))) ;) (expression_statement "memcpy(__dest,(void *)(param_3 + 0x60),param_2);" (call_expression "memcpy(__dest,(void *)(param_3 + 0x60),param_2)" identifier (argument_list "(__dest,(void *)(param_3 + 0x60),param_2)" ( identifier , (cast_expression "(void *)(param_3 + 0x60)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x60)" ( (binary_expression "param_3 + 0x60" identifier + number_literal) ))) , identifier ))) ;) })) (expression_statement "*(int *)(param_3 + 0x1c) = (int)param_2;" (assignment_expression "*(int *)(param_3 + 0x1c) = (int)param_2" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) = (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit "void sha1_process_bytes(void *buffer,size_t len,sha1_ctx *ctx)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  sha1_uint32 *psVar5;\n  uint uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  sha1_uint32 *psVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  if (ctx->buflen != 0) {\n    uVar12 = (ulong)ctx->buflen;\n    psVar10 = ctx->buffer;\n    uVar3 = 0x80 - uVar12;\n    if (len < 0x80 - uVar12) {\n      uVar3 = len;\n    }\n    memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);\n    uVar11 = ctx->buflen + (int)uVar3;\n    ctx->buflen = uVar11;\n    if (0x40 < uVar11) {\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }\n    buffer = (void *)((long)buffer + uVar3);\n    len = len - uVar3;\n  }\n  puVar9 = (undefined8 *)buffer;\n  if (0x3f < len) {\n    if (((ulong)buffer & 3) != 0) {\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }\n    puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));\n    sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);\n    len = (ulong)((uint)len & 0x3f);\n  }\n  if (len == 0) {\n    return;\n  }\nLAB_0027107b:\n  psVar10 = ctx->buffer;\n  uVar11 = ctx->buflen;\n  uVar2 = (uint)len;\n  puVar8 = (undefined8 *)((long)psVar10 + (ulong)uVar11);\n  if (uVar2 < 8) {\n    if ((len & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar8 = *puVar9;\n    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));\n    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }\n  }\n  uVar3 = len + uVar11;\n  if (0x3f < uVar3) {\n    uVar3 = uVar3 - 0x40;\n    sha1_process_block(psVar10,0x40,ctx);\n    memcpy(psVar10,ctx->buffer + 0x10,uVar3);\n  }\n  ctx->buflen = (sha1_uint32)uVar3;\n  return;\n}\n\n" (function_definition "void sha1_process_bytes(void *buffer,size_t len,sha1_ctx *ctx)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  sha1_uint32 *psVar5;\n  uint uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  sha1_uint32 *psVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  if (ctx->buflen != 0) {\n    uVar12 = (ulong)ctx->buflen;\n    psVar10 = ctx->buffer;\n    uVar3 = 0x80 - uVar12;\n    if (len < 0x80 - uVar12) {\n      uVar3 = len;\n    }\n    memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);\n    uVar11 = ctx->buflen + (int)uVar3;\n    ctx->buflen = uVar11;\n    if (0x40 < uVar11) {\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }\n    buffer = (void *)((long)buffer + uVar3);\n    len = len - uVar3;\n  }\n  puVar9 = (undefined8 *)buffer;\n  if (0x3f < len) {\n    if (((ulong)buffer & 3) != 0) {\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }\n    puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));\n    sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);\n    len = (ulong)((uint)len & 0x3f);\n  }\n  if (len == 0) {\n    return;\n  }\nLAB_0027107b:\n  psVar10 = ctx->buffer;\n  uVar11 = ctx->buflen;\n  uVar2 = (uint)len;\n  puVar8 = (undefined8 *)((long)psVar10 + (ulong)uVar11);\n  if (uVar2 < 8) {\n    if ((len & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar8 = *puVar9;\n    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));\n    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }\n  }\n  uVar3 = len + uVar11;\n  if (0x3f < uVar3) {\n    uVar3 = uVar3 - 0x40;\n    sha1_process_block(psVar10,0x40,ctx);\n    memcpy(psVar10,ctx->buffer + 0x10,uVar3);\n  }\n  ctx->buflen = (sha1_uint32)uVar3;\n  return;\n}" primitive_type (function_declarator "sha1_process_bytes(void *buffer,size_t len,sha1_ctx *ctx)" identifier (parameter_list "(void *buffer,size_t len,sha1_ctx *ctx)" ( (parameter_declaration "void *buffer" primitive_type (pointer_declarator "*buffer" * identifier)) , (parameter_declaration "size_t len" primitive_type identifier) , (parameter_declaration "sha1_ctx *ctx" type_identifier (pointer_declarator "*ctx" * identifier)) ))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  sha1_uint32 *psVar5;\n  uint uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  sha1_uint32 *psVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  if (ctx->buflen != 0) {\n    uVar12 = (ulong)ctx->buflen;\n    psVar10 = ctx->buffer;\n    uVar3 = 0x80 - uVar12;\n    if (len < 0x80 - uVar12) {\n      uVar3 = len;\n    }\n    memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);\n    uVar11 = ctx->buflen + (int)uVar3;\n    ctx->buflen = uVar11;\n    if (0x40 < uVar11) {\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }\n    buffer = (void *)((long)buffer + uVar3);\n    len = len - uVar3;\n  }\n  puVar9 = (undefined8 *)buffer;\n  if (0x3f < len) {\n    if (((ulong)buffer & 3) != 0) {\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }\n    puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));\n    sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);\n    len = (ulong)((uint)len & 0x3f);\n  }\n  if (len == 0) {\n    return;\n  }\nLAB_0027107b:\n  psVar10 = ctx->buffer;\n  uVar11 = ctx->buflen;\n  uVar2 = (uint)len;\n  puVar8 = (undefined8 *)((long)psVar10 + (ulong)uVar11);\n  if (uVar2 < 8) {\n    if ((len & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar8 = *puVar9;\n    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));\n    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }\n  }\n  uVar3 = len + uVar11;\n  if (0x3f < uVar3) {\n    uVar3 = uVar3 - 0x40;\n    sha1_process_block(psVar10,0x40,ctx);\n    memcpy(psVar10,ctx->buffer + 0x10,uVar3);\n  }\n  ctx->buflen = (sha1_uint32)uVar3;\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "sha1_uint32 *psVar5;" type_identifier (pointer_declarator "*psVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "sha1_uint32 *psVar10;" type_identifier (pointer_declarator "*psVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (if_statement "if (ctx->buflen != 0) {\n    uVar12 = (ulong)ctx->buflen;\n    psVar10 = ctx->buffer;\n    uVar3 = 0x80 - uVar12;\n    if (len < 0x80 - uVar12) {\n      uVar3 = len;\n    }\n    memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);\n    uVar11 = ctx->buflen + (int)uVar3;\n    ctx->buflen = uVar11;\n    if (0x40 < uVar11) {\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }\n    buffer = (void *)((long)buffer + uVar3);\n    len = len - uVar3;\n  }" if (parenthesized_expression "(ctx->buflen != 0)" ( (binary_expression "ctx->buflen != 0" (field_expression "ctx->buflen" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    uVar12 = (ulong)ctx->buflen;\n    psVar10 = ctx->buffer;\n    uVar3 = 0x80 - uVar12;\n    if (len < 0x80 - uVar12) {\n      uVar3 = len;\n    }\n    memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);\n    uVar11 = ctx->buflen + (int)uVar3;\n    ctx->buflen = uVar11;\n    if (0x40 < uVar11) {\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }\n    buffer = (void *)((long)buffer + uVar3);\n    len = len - uVar3;\n  }" { (expression_statement "uVar12 = (ulong)ctx->buflen;" (assignment_expression "uVar12 = (ulong)ctx->buflen" identifier = (cast_expression "(ulong)ctx->buflen" ( (type_descriptor "ulong" type_identifier) ) (field_expression "ctx->buflen" identifier -> field_identifier))) ;) (expression_statement "psVar10 = ctx->buffer;" (assignment_expression "psVar10 = ctx->buffer" identifier = (field_expression "ctx->buffer" identifier -> field_identifier)) ;) (expression_statement "uVar3 = 0x80 - uVar12;" (assignment_expression "uVar3 = 0x80 - uVar12" identifier = (binary_expression "0x80 - uVar12" number_literal - identifier)) ;) (if_statement "if (len < 0x80 - uVar12) {\n      uVar3 = len;\n    }" if (parenthesized_expression "(len < 0x80 - uVar12)" ( (binary_expression "len < 0x80 - uVar12" identifier < (binary_expression "0x80 - uVar12" number_literal - identifier)) )) (compound_statement "{\n      uVar3 = len;\n    }" { (expression_statement "uVar3 = len;" (assignment_expression "uVar3 = len" identifier = identifier) ;) })) (expression_statement "memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3);" (call_expression "memcpy((void *)((long)psVar10 + uVar12),buffer,uVar3)" identifier (argument_list "((void *)((long)psVar10 + uVar12),buffer,uVar3)" ( (cast_expression "(void *)((long)psVar10 + uVar12)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)psVar10 + uVar12)" ( (binary_expression "(long)psVar10 + uVar12" (cast_expression "(long)psVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , identifier , identifier ))) ;) (expression_statement "uVar11 = ctx->buflen + (int)uVar3;" (assignment_expression "uVar11 = ctx->buflen + (int)uVar3" identifier = (binary_expression "ctx->buflen + (int)uVar3" (field_expression "ctx->buflen" identifier -> field_identifier) + (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "ctx->buflen = uVar11;" (assignment_expression "ctx->buflen = uVar11" (field_expression "ctx->buflen" identifier -> field_identifier) = identifier) ;) (if_statement "if (0x40 < uVar11) {\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }" if (parenthesized_expression "(0x40 < uVar11)" ( (binary_expression "0x40 < uVar11" number_literal < identifier) )) (compound_statement "{\n      sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);\n      uVar11 = ctx->buflen;\n      psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);\n      uVar2 = uVar11 & 0x3f;\n      uVar12 = (ulong)uVar2;\n      ctx->buflen = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }\n    }" { (expression_statement "sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx);" (call_expression "sha1_process_block(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx)" identifier (argument_list "(psVar10,(ulong)(uVar11 & 0xffffffc0),ctx)" ( identifier , (call_expression "(ulong)(uVar11 & 0xffffffc0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar11 & 0xffffffc0)" ( (binary_expression "uVar11 & 0xffffffc0" identifier & number_literal) ))) , identifier ))) ;) (expression_statement "uVar11 = ctx->buflen;" (assignment_expression "uVar11 = ctx->buflen" identifier = (field_expression "ctx->buflen" identifier -> field_identifier)) ;) (expression_statement "psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10);" (assignment_expression "psVar5 = (sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10)" identifier = (cast_expression "(sha1_uint32 *)((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10)" ( (type_descriptor "sha1_uint32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10)" ( (binary_expression "(uVar12 + uVar3 & 0xffffffffffffffc0) + (long)psVar10" (parenthesized_expression "(uVar12 + uVar3 & 0xffffffffffffffc0)" ( (binary_expression "uVar12 + uVar3 & 0xffffffffffffffc0" (binary_expression "uVar12 + uVar3" identifier + identifier) & number_literal) )) + (cast_expression "(long)psVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (expression_statement "uVar2 = uVar11 & 0x3f;" (assignment_expression "uVar2 = uVar11 & 0x3f" identifier = (binary_expression "uVar11 & 0x3f" identifier & number_literal)) ;) (expression_statement "uVar12 = (ulong)uVar2;" (assignment_expression "uVar12 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "ctx->buflen = uVar2;" (assignment_expression "ctx->buflen = uVar2" (field_expression "ctx->buflen" identifier -> field_identifier) = identifier) ;) (if_statement "if (uVar2 < 8) {\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }" if (parenthesized_expression "(uVar2 < 8)" ( (binary_expression "uVar2 < 8" identifier < number_literal) )) (compound_statement "{\n        if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }\n      }" { (if_statement "if ((uVar11 & 4) == 0) {\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }\n        else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }" if (parenthesized_expression "((uVar11 & 4) == 0)" ( (binary_expression "(uVar11 & 4) == 0" (parenthesized_expression "(uVar11 & 4)" ( (binary_expression "uVar11 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }\n        }" { (if_statement "if ((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)) {\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }" if (parenthesized_expression "((uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0))" ( (binary_expression "(uVar2 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0)" ( (comma_expression "*(char *)ctx->buffer = (char)*psVar5, (uVar11 & 2) != 0" (assignment_expression "*(char *)ctx->buffer = (char)*psVar5" (pointer_expression "*(char *)ctx->buffer" * (cast_expression "(char *)ctx->buffer" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "ctx->buffer" identifier -> field_identifier))) = (cast_expression "(char)*psVar5" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*psVar5" * identifier))) , (binary_expression "(uVar11 & 2) != 0" (parenthesized_expression "(uVar11 & 2)" ( (binary_expression "uVar11 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n            *(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));\n          }" { (expression_statement "*(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2));" (assignment_expression "*(undefined2 *)((long)ctx->buffer + (uVar12 - 2)) =\n                 *(undefined2 *)((long)psVar5 + (uVar12 - 2))" (pointer_expression "*(undefined2 *)((long)ctx->buffer + (uVar12 - 2))" * (cast_expression "(undefined2 *)((long)ctx->buffer + (uVar12 - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)ctx->buffer + (uVar12 - 2))" ( (binary_expression "(long)ctx->buffer + (uVar12 - 2)" (cast_expression "(long)ctx->buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "ctx->buffer" identifier -> field_identifier)) + (parenthesized_expression "(uVar12 - 2)" ( (binary_expression "uVar12 - 2" identifier - number_literal) ))) )))) = (pointer_expression "*(undefined2 *)((long)psVar5 + (uVar12 - 2))" * (cast_expression "(undefined2 *)((long)psVar5 + (uVar12 - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)psVar5 + (uVar12 - 2))" ( (binary_expression "(long)psVar5 + (uVar12 - 2)" (cast_expression "(long)psVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar12 - 2)" ( (binary_expression "uVar12 - 2" identifier - number_literal) ))) ))))) ;) })) }) (else_clause "else {\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }" else (compound_statement "{\n          ctx->buffer[0] = *psVar5;\n          *(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));\n        }" { (expression_statement "ctx->buffer[0] = *psVar5;" (assignment_expression "ctx->buffer[0] = *psVar5" (subscript_expression "ctx->buffer[0]" (field_expression "ctx->buffer" identifier -> field_identifier) [ number_literal ]) = (pointer_expression "*psVar5" * identifier)) ;) (expression_statement "*(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4));" (assignment_expression "*(undefined4 *)((long)ctx->buffer + (uVar12 - 4)) =\n               *(undefined4 *)((long)psVar5 + (uVar12 - 4))" (pointer_expression "*(undefined4 *)((long)ctx->buffer + (uVar12 - 4))" * (cast_expression "(undefined4 *)((long)ctx->buffer + (uVar12 - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)ctx->buffer + (uVar12 - 4))" ( (binary_expression "(long)ctx->buffer + (uVar12 - 4)" (cast_expression "(long)ctx->buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "ctx->buffer" identifier -> field_identifier)) + (parenthesized_expression "(uVar12 - 4)" ( (binary_expression "uVar12 - 4" identifier - number_literal) ))) )))) = (pointer_expression "*(undefined4 *)((long)psVar5 + (uVar12 - 4))" * (cast_expression "(undefined4 *)((long)psVar5 + (uVar12 - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)psVar5 + (uVar12 - 4))" ( (binary_expression "(long)psVar5 + (uVar12 - 4)" (cast_expression "(long)psVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar12 - 4)" ( (binary_expression "uVar12 - 4" identifier - number_literal) ))) ))))) ;) }))) }) (else_clause "else {\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }" else (compound_statement "{\n        *(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;\n        *(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));\n        uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;\n        lVar4 = (long)psVar10 - uVar12;\n        uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }\n      }" { (expression_statement "*(undefined8 *)ctx->buffer = *(undefined8 *)psVar5;" (assignment_expression "*(undefined8 *)ctx->buffer = *(undefined8 *)psVar5" (pointer_expression "*(undefined8 *)ctx->buffer" * (cast_expression "(undefined8 *)ctx->buffer" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "ctx->buffer" identifier -> field_identifier))) = (pointer_expression "*(undefined8 *)psVar5" * (cast_expression "(undefined8 *)psVar5" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8));" (assignment_expression "*(undefined8 *)((long)ctx->total + uVar12 + 4) =\n             *(undefined8 *)((long)psVar5 + (uVar12 - 8))" (pointer_expression "*(undefined8 *)((long)ctx->total + uVar12 + 4)" * (cast_expression "(undefined8 *)((long)ctx->total + uVar12 + 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)ctx->total + uVar12 + 4)" ( (binary_expression "(long)ctx->total + uVar12 + 4" (binary_expression "(long)ctx->total + uVar12" (cast_expression "(long)ctx->total" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "ctx->total" identifier -> field_identifier)) + identifier) + number_literal) )))) = (pointer_expression "*(undefined8 *)((long)psVar5 + (uVar12 - 8))" * (cast_expression "(undefined8 *)((long)psVar5 + (uVar12 - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)psVar5 + (uVar12 - 8))" ( (binary_expression "(long)psVar5 + (uVar12 - 8)" (cast_expression "(long)psVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar12 - 8)" ( (binary_expression "uVar12 - 8" identifier - number_literal) ))) ))))) ;) (expression_statement "uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8;" (assignment_expression "uVar12 = (ulong)(ctx->buffer + 2) & 0xfffffffffffffff8" identifier = (binary_expression "(ulong)(ctx->buffer + 2) & 0xfffffffffffffff8" (call_expression "(ulong)(ctx->buffer + 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(ctx->buffer + 2)" ( (binary_expression "ctx->buffer + 2" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) ))) & number_literal)) ;) (expression_statement "lVar4 = (long)psVar10 - uVar12;" (assignment_expression "lVar4 = (long)psVar10 - uVar12" identifier = (binary_expression "(long)psVar10 - uVar12" (cast_expression "(long)psVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - identifier)) ;) (expression_statement "uVar11 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar11 = (int)lVar4 + uVar2 & 0xfffffff8" identifier = (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) & number_literal)) ;) (if_statement "if (7 < uVar11) {\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }" if (parenthesized_expression "(7 < uVar11)" ( (binary_expression "7 < uVar11" number_literal < identifier) )) (compound_statement "{\n          uVar7 = 0;\n          do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);\n        }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          } while (uVar2 < uVar11);" do (compound_statement "{\n            uVar2 = (int)uVar7 + 8;\n            *(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));\n            uVar7 = (ulong)uVar2;\n          }" { (expression_statement "uVar2 = (int)uVar7 + 8;" (assignment_expression "uVar2 = (int)uVar7 + 8" identifier = (binary_expression "(int)uVar7 + 8" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "*(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4));" (assignment_expression "*(undefined8 *)(uVar12 + uVar7) = *(undefined8 *)((long)psVar5 + (uVar7 - lVar4))" (pointer_expression "*(undefined8 *)(uVar12 + uVar7)" * (cast_expression "(undefined8 *)(uVar12 + uVar7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar12 + uVar7)" ( (binary_expression "uVar12 + uVar7" identifier + identifier) )))) = (pointer_expression "*(undefined8 *)((long)psVar5 + (uVar7 - lVar4))" * (cast_expression "(undefined8 *)((long)psVar5 + (uVar7 - lVar4))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)psVar5 + (uVar7 - lVar4))" ( (binary_expression "(long)psVar5 + (uVar7 - lVar4)" (cast_expression "(long)psVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar7 - lVar4)" ( (binary_expression "uVar7 - lVar4" identifier - identifier) ))) ))))) ;) (expression_statement "uVar7 = (ulong)uVar2;" (assignment_expression "uVar7 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }) while (parenthesized_expression "(uVar2 < uVar11)" ( (binary_expression "uVar2 < uVar11" identifier < identifier) )) ;) })) }))) })) (expression_statement "buffer = (void *)((long)buffer + uVar3);" (assignment_expression "buffer = (void *)((long)buffer + uVar3)" identifier = (cast_expression "(void *)((long)buffer + uVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)buffer + uVar3)" ( (binary_expression "(long)buffer + uVar3" (cast_expression "(long)buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "len = len - uVar3;" (assignment_expression "len = len - uVar3" identifier = (binary_expression "len - uVar3" identifier - identifier)) ;) })) (expression_statement "puVar9 = (undefined8 *)buffer;" (assignment_expression "puVar9 = (undefined8 *)buffer" identifier = (cast_expression "(undefined8 *)buffer" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (0x3f < len) {\n    if (((ulong)buffer & 3) != 0) {\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }\n    puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));\n    sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);\n    len = (ulong)((uint)len & 0x3f);\n  }" if (parenthesized_expression "(0x3f < len)" ( (binary_expression "0x3f < len" number_literal < identifier) )) (compound_statement "{\n    if (((ulong)buffer & 3) != 0) {\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }\n    puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));\n    sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);\n    len = (ulong)((uint)len & 0x3f);\n  }" { (if_statement "if (((ulong)buffer & 3) != 0) {\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }" if (parenthesized_expression "(((ulong)buffer & 3) != 0)" ( (binary_expression "((ulong)buffer & 3) != 0" (parenthesized_expression "((ulong)buffer & 3)" ( (binary_expression "(ulong)buffer & 3" (cast_expression "(ulong)buffer" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }\n      goto LAB_0027107b;\n    }" { (if_statement "if (len != 0x40) {\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }" if (parenthesized_expression "(len != 0x40)" ( (binary_expression "len != 0x40" identifier != number_literal) )) (compound_statement "{\n        uVar3 = len - 0x41 >> 6;\n        do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));\n        len = (len - 0x40) + uVar3 * -0x40;\n        puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);\n      }" { (expression_statement "uVar3 = len - 0x41 >> 6;" (assignment_expression "uVar3 = len - 0x41 >> 6" identifier = (binary_expression "len - 0x41 >> 6" (binary_expression "len - 0x41" identifier - number_literal) >> number_literal)) ;) (do_statement "do {\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        } while (puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8));" do (compound_statement "{\n          uVar1 = puVar9[1];\n          puVar8 = puVar9 + 8;\n          *(undefined8 *)ctx->buffer = *puVar9;\n          *(undefined8 *)(ctx->buffer + 2) = uVar1;\n          uVar1 = puVar9[3];\n          *(undefined8 *)(ctx->buffer + 4) = puVar9[2];\n          *(undefined8 *)(ctx->buffer + 6) = uVar1;\n          uVar1 = puVar9[5];\n          *(undefined8 *)(ctx->buffer + 8) = puVar9[4];\n          *(undefined8 *)(ctx->buffer + 10) = uVar1;\n          uVar1 = puVar9[7];\n          *(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];\n          *(undefined8 *)(ctx->buffer + 0xe) = uVar1;\n          sha1_process_block(ctx->buffer,0x40,ctx);\n          puVar9 = puVar8;\n        }" { (expression_statement "uVar1 = puVar9[1];" (assignment_expression "uVar1 = puVar9[1]" identifier = (subscript_expression "puVar9[1]" identifier [ number_literal ])) ;) (expression_statement "puVar8 = puVar9 + 8;" (assignment_expression "puVar8 = puVar9 + 8" identifier = (binary_expression "puVar9 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)ctx->buffer = *puVar9;" (assignment_expression "*(undefined8 *)ctx->buffer = *puVar9" (pointer_expression "*(undefined8 *)ctx->buffer" * (cast_expression "(undefined8 *)ctx->buffer" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "ctx->buffer" identifier -> field_identifier))) = (pointer_expression "*puVar9" * identifier)) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 2) = uVar1;" (assignment_expression "*(undefined8 *)(ctx->buffer + 2) = uVar1" (pointer_expression "*(undefined8 *)(ctx->buffer + 2)" * (cast_expression "(undefined8 *)(ctx->buffer + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 2)" ( (binary_expression "ctx->buffer + 2" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar9[3];" (assignment_expression "uVar1 = puVar9[3]" identifier = (subscript_expression "puVar9[3]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 4) = puVar9[2];" (assignment_expression "*(undefined8 *)(ctx->buffer + 4) = puVar9[2]" (pointer_expression "*(undefined8 *)(ctx->buffer + 4)" * (cast_expression "(undefined8 *)(ctx->buffer + 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 4)" ( (binary_expression "ctx->buffer + 4" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = (subscript_expression "puVar9[2]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 6) = uVar1;" (assignment_expression "*(undefined8 *)(ctx->buffer + 6) = uVar1" (pointer_expression "*(undefined8 *)(ctx->buffer + 6)" * (cast_expression "(undefined8 *)(ctx->buffer + 6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 6)" ( (binary_expression "ctx->buffer + 6" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar9[5];" (assignment_expression "uVar1 = puVar9[5]" identifier = (subscript_expression "puVar9[5]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 8) = puVar9[4];" (assignment_expression "*(undefined8 *)(ctx->buffer + 8) = puVar9[4]" (pointer_expression "*(undefined8 *)(ctx->buffer + 8)" * (cast_expression "(undefined8 *)(ctx->buffer + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 8)" ( (binary_expression "ctx->buffer + 8" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = (subscript_expression "puVar9[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 10) = uVar1;" (assignment_expression "*(undefined8 *)(ctx->buffer + 10) = uVar1" (pointer_expression "*(undefined8 *)(ctx->buffer + 10)" * (cast_expression "(undefined8 *)(ctx->buffer + 10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 10)" ( (binary_expression "ctx->buffer + 10" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar9[7];" (assignment_expression "uVar1 = puVar9[7]" identifier = (subscript_expression "puVar9[7]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 0xc) = puVar9[6];" (assignment_expression "*(undefined8 *)(ctx->buffer + 0xc) = puVar9[6]" (pointer_expression "*(undefined8 *)(ctx->buffer + 0xc)" * (cast_expression "(undefined8 *)(ctx->buffer + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 0xc)" ( (binary_expression "ctx->buffer + 0xc" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = (subscript_expression "puVar9[6]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(ctx->buffer + 0xe) = uVar1;" (assignment_expression "*(undefined8 *)(ctx->buffer + 0xe) = uVar1" (pointer_expression "*(undefined8 *)(ctx->buffer + 0xe)" * (cast_expression "(undefined8 *)(ctx->buffer + 0xe)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ctx->buffer + 0xe)" ( (binary_expression "ctx->buffer + 0xe" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) )))) = identifier) ;) (expression_statement "sha1_process_block(ctx->buffer,0x40,ctx);" (call_expression "sha1_process_block(ctx->buffer,0x40,ctx)" identifier (argument_list "(ctx->buffer,0x40,ctx)" ( (field_expression "ctx->buffer" identifier -> field_identifier) , number_literal , identifier ))) ;) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) }) while (parenthesized_expression "(puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8))" ( (binary_expression "puVar8 != (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8)" identifier != (cast_expression "(undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)buffer + (uVar3 + 1) * 8 * 8)" ( (binary_expression "(long)buffer + (uVar3 + 1) * 8 * 8" (cast_expression "(long)buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(uVar3 + 1) * 8 * 8" (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal) * number_literal)) )))) )) ;) (expression_statement "len = (len - 0x40) + uVar3 * -0x40;" (assignment_expression "len = (len - 0x40) + uVar3 * -0x40" identifier = (binary_expression "(len - 0x40) + uVar3 * -0x40" (parenthesized_expression "(len - 0x40)" ( (binary_expression "len - 0x40" identifier - number_literal) )) + (binary_expression "uVar3 * -0x40" identifier * number_literal))) ;) (expression_statement "puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8);" (assignment_expression "puVar9 = (undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8)" identifier = (cast_expression "(undefined8 *)((long)buffer + (uVar3 + 1) * 8 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)buffer + (uVar3 + 1) * 8 * 8)" ( (binary_expression "(long)buffer + (uVar3 + 1) * 8 * 8" (cast_expression "(long)buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(uVar3 + 1) * 8 * 8" (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal) * number_literal)) )))) ;) })) (goto_statement "goto LAB_0027107b;" goto statement_identifier ;) })) (expression_statement "puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0));" (assignment_expression "puVar9 = (undefined8 *)((long)buffer + (len & 0xffffffffffffffc0))" identifier = (cast_expression "(undefined8 *)((long)buffer + (len & 0xffffffffffffffc0))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)buffer + (len & 0xffffffffffffffc0))" ( (binary_expression "(long)buffer + (len & 0xffffffffffffffc0)" (cast_expression "(long)buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(len & 0xffffffffffffffc0)" ( (binary_expression "len & 0xffffffffffffffc0" identifier & number_literal) ))) )))) ;) (expression_statement "sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx);" (call_expression "sha1_process_block(buffer,len & 0xffffffffffffffc0,ctx)" identifier (argument_list "(buffer,len & 0xffffffffffffffc0,ctx)" ( identifier , (binary_expression "len & 0xffffffffffffffc0" identifier & number_literal) , identifier ))) ;) (expression_statement "len = (ulong)((uint)len & 0x3f);" (assignment_expression "len = (ulong)((uint)len & 0x3f)" identifier = (call_expression "(ulong)((uint)len & 0x3f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)len & 0x3f)" ( (binary_expression "(uint)len & 0x3f" (cast_expression "(uint)len" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) })) (if_statement "if (len == 0) {\n    return;\n  }" if (parenthesized_expression "(len == 0)" ( (binary_expression "len == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0027107b:\n  psVar10 = ctx->buffer;" statement_identifier : (expression_statement "psVar10 = ctx->buffer;" (assignment_expression "psVar10 = ctx->buffer" identifier = (field_expression "ctx->buffer" identifier -> field_identifier)) ;)) (expression_statement "uVar11 = ctx->buflen;" (assignment_expression "uVar11 = ctx->buflen" identifier = (field_expression "ctx->buflen" identifier -> field_identifier)) ;) (expression_statement "uVar2 = (uint)len;" (assignment_expression "uVar2 = (uint)len" identifier = (cast_expression "(uint)len" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar8 = (undefined8 *)((long)psVar10 + (ulong)uVar11);" (assignment_expression "puVar8 = (undefined8 *)((long)psVar10 + (ulong)uVar11)" identifier = (cast_expression "(undefined8 *)((long)psVar10 + (ulong)uVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)psVar10 + (ulong)uVar11)" ( (binary_expression "(long)psVar10 + (ulong)uVar11" (cast_expression "(long)psVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) ;) (if_statement "if (uVar2 < 8) {\n    if ((len & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar8 = *puVar9;\n    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));\n    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }\n  }" if (parenthesized_expression "(uVar2 < 8)" ( (binary_expression "uVar2 < 8" identifier < number_literal) )) (compound_statement "{\n    if ((len & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }\n  }" { (if_statement "if ((len & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }" if (parenthesized_expression "((len & 4) == 0)" ( (binary_expression "(len & 4) == 0" (parenthesized_expression "(len & 4)" ( (binary_expression "len & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }\n    }" { (if_statement "if ((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }" if (parenthesized_expression "((uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0))" ( (binary_expression "(uVar2 != 0) && (*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0)" ( (comma_expression "*(undefined1 *)puVar8 = *(undefined1 *)puVar9, (len & 2) != 0" (assignment_expression "*(undefined1 *)puVar8 = *(undefined1 *)puVar9" (pointer_expression "*(undefined1 *)puVar8" * (cast_expression "(undefined1 *)puVar8" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined1 *)puVar9" * (cast_expression "(undefined1 *)puVar9" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) , (binary_expression "(len & 2) != 0" (parenthesized_expression "(len & 2)" ( (binary_expression "len & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        *(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));\n      }" { (expression_statement "*(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2));" (assignment_expression "*(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2))" (pointer_expression "*(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2))" * (cast_expression "(undefined2 *)((long)puVar8 + ((len & 0xffffffff) - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((len & 0xffffffff) - 2))" ( (binary_expression "(long)puVar8 + ((len & 0xffffffff) - 2)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((len & 0xffffffff) - 2)" ( (binary_expression "(len & 0xffffffff) - 2" (parenthesized_expression "(len & 0xffffffff)" ( (binary_expression "len & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2))" * (cast_expression "(undefined2 *)((long)puVar9 + ((len & 0xffffffff) - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((len & 0xffffffff) - 2))" ( (binary_expression "(long)puVar9 + ((len & 0xffffffff) - 2)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((len & 0xffffffff) - 2)" ( (binary_expression "(len & 0xffffffff) - 2" (parenthesized_expression "(len & 0xffffffff)" ( (binary_expression "len & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) })) }) (else_clause "else {\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }" else (compound_statement "{\n      *(undefined4 *)puVar8 = *(undefined4 *)puVar9;\n      *(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));\n    }" { (expression_statement "*(undefined4 *)puVar8 = *(undefined4 *)puVar9;" (assignment_expression "*(undefined4 *)puVar8 = *(undefined4 *)puVar9" (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)puVar9" * (cast_expression "(undefined4 *)puVar9" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4));" (assignment_expression "*(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4))" (pointer_expression "*(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4))" * (cast_expression "(undefined4 *)((long)puVar8 + ((len & 0xffffffff) - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((len & 0xffffffff) - 4))" ( (binary_expression "(long)puVar8 + ((len & 0xffffffff) - 4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((len & 0xffffffff) - 4)" ( (binary_expression "(len & 0xffffffff) - 4" (parenthesized_expression "(len & 0xffffffff)" ( (binary_expression "len & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4))" * (cast_expression "(undefined4 *)((long)puVar9 + ((len & 0xffffffff) - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((len & 0xffffffff) - 4))" ( (binary_expression "(long)puVar9 + ((len & 0xffffffff) - 4)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((len & 0xffffffff) - 4)" ( (binary_expression "(len & 0xffffffff) - 4" (parenthesized_expression "(len & 0xffffffff)" ( (binary_expression "len & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) }))) }) (else_clause "else {\n    *puVar8 = *puVar9;\n    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));\n    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }\n  }" else (compound_statement "{\n    *puVar8 = *puVar9;\n    *(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));\n    lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }\n  }" { (expression_statement "*puVar8 = *puVar9;" (assignment_expression "*puVar8 = *puVar9" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar9" * identifier)) ;) (expression_statement "*(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8));" (assignment_expression "*(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8))" (pointer_expression "*(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8))" * (cast_expression "(undefined8 *)((long)puVar8 + ((len & 0xffffffff) - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((len & 0xffffffff) - 8))" ( (binary_expression "(long)puVar8 + ((len & 0xffffffff) - 8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((len & 0xffffffff) - 8)" ( (binary_expression "(len & 0xffffffff) - 8" (parenthesized_expression "(len & 0xffffffff)" ( (binary_expression "len & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8))" * (cast_expression "(undefined8 *)((long)puVar9 + ((len & 0xffffffff) - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((len & 0xffffffff) - 8))" ( (binary_expression "(long)puVar9 + ((len & 0xffffffff) - 8)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((len & 0xffffffff) - 8)" ( (binary_expression "(len & 0xffffffff) - 8" (parenthesized_expression "(len & 0xffffffff)" ( (binary_expression "len & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) (expression_statement "lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar4 = (long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" identifier = (binary_expression "(long)puVar8 - ((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar8 + 1)" ( (binary_expression "puVar8 + 1" identifier + number_literal) ))) & number_literal) )))) ;) (expression_statement "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8" identifier = (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) & number_literal)) ;) (if_statement "if (7 < uVar2) {\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }" if (parenthesized_expression "(7 < uVar2)" ( (binary_expression "7 < uVar2" number_literal < identifier) )) (compound_statement "{\n      uVar6 = 0;\n      do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);\n    }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      } while (uVar6 < uVar2);" do (compound_statement "{\n        uVar3 = (ulong)uVar6;\n        uVar6 = uVar6 + 8;\n        *(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));\n      }" { (expression_statement "uVar3 = (ulong)uVar6;" (assignment_expression "uVar3 = (ulong)uVar6" identifier = (cast_expression "(ulong)uVar6" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar6 = uVar6 + 8;" (assignment_expression "uVar6 = uVar6 + 8" identifier = (binary_expression "uVar6 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4));" (assignment_expression "*(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar9 + (uVar3 - lVar4))" (pointer_expression "*(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3)" * (cast_expression "(undefined8 *)(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3)" ( (binary_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8) + uVar3" (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar8 + 1)" ( (binary_expression "puVar8 + 1" identifier + number_literal) ))) & number_literal) )) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar9 + (uVar3 - lVar4))" * (cast_expression "(undefined8 *)((long)puVar9 + (uVar3 - lVar4))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + (uVar3 - lVar4))" ( (binary_expression "(long)puVar9 + (uVar3 - lVar4)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar3 - lVar4)" ( (binary_expression "uVar3 - lVar4" identifier - identifier) ))) ))))) ;) }) while (parenthesized_expression "(uVar6 < uVar2)" ( (binary_expression "uVar6 < uVar2" identifier < identifier) )) ;) })) }))) (expression_statement "uVar3 = len + uVar11;" (assignment_expression "uVar3 = len + uVar11" identifier = (binary_expression "len + uVar11" identifier + identifier)) ;) (if_statement "if (0x3f < uVar3) {\n    uVar3 = uVar3 - 0x40;\n    sha1_process_block(psVar10,0x40,ctx);\n    memcpy(psVar10,ctx->buffer + 0x10,uVar3);\n  }" if (parenthesized_expression "(0x3f < uVar3)" ( (binary_expression "0x3f < uVar3" number_literal < identifier) )) (compound_statement "{\n    uVar3 = uVar3 - 0x40;\n    sha1_process_block(psVar10,0x40,ctx);\n    memcpy(psVar10,ctx->buffer + 0x10,uVar3);\n  }" { (expression_statement "uVar3 = uVar3 - 0x40;" (assignment_expression "uVar3 = uVar3 - 0x40" identifier = (binary_expression "uVar3 - 0x40" identifier - number_literal)) ;) (expression_statement "sha1_process_block(psVar10,0x40,ctx);" (call_expression "sha1_process_block(psVar10,0x40,ctx)" identifier (argument_list "(psVar10,0x40,ctx)" ( identifier , number_literal , identifier ))) ;) (expression_statement "memcpy(psVar10,ctx->buffer + 0x10,uVar3);" (call_expression "memcpy(psVar10,ctx->buffer + 0x10,uVar3)" identifier (argument_list "(psVar10,ctx->buffer + 0x10,uVar3)" ( identifier , (binary_expression "ctx->buffer + 0x10" (field_expression "ctx->buffer" identifier -> field_identifier) + number_literal) , identifier ))) ;) })) (expression_statement "ctx->buflen = (sha1_uint32)uVar3;" (assignment_expression "ctx->buflen = (sha1_uint32)uVar3" (field_expression "ctx->buflen" identifier -> field_identifier) = (cast_expression "(sha1_uint32)uVar3" ( (type_descriptor "sha1_uint32" type_identifier) ) identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}\n\n" (function_definition "void FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}" primitive_type (function_declarator "FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)" identifier (parameter_list "(undefined8 *param_1,ulong param_2,long param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (if_statement "if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }" if (parenthesized_expression "(*(uint *)(param_3 + 0x1c) != 0)" ( (binary_expression "*(uint *)(param_3 + 0x1c) != 0" (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }" { (expression_statement "uVar10 = (ulong)*(uint *)(param_3 + 0x1c);" (assignment_expression "uVar10 = (ulong)*(uint *)(param_3 + 0x1c)" identifier = (binary_expression "(ulong)*(uint *)(param_3 + 0x1c)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "lVar4 = param_3 + 0x20;" (assignment_expression "lVar4 = param_3 + 0x20" identifier = (binary_expression "param_3 + 0x20" identifier + number_literal)) ;) (expression_statement "uVar3 = 0x80 - uVar10;" (assignment_expression "uVar3 = 0x80 - uVar10" identifier = (binary_expression "0x80 - uVar10" number_literal - identifier)) ;) (if_statement "if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }" if (parenthesized_expression "(param_2 < 0x80 - uVar10)" ( (binary_expression "param_2 < 0x80 - uVar10" identifier < (binary_expression "0x80 - uVar10" number_literal - identifier)) )) (compound_statement "{\n      uVar3 = param_2;\n    }" { (expression_statement "uVar3 = param_2;" (assignment_expression "uVar3 = param_2" identifier = identifier) ;) })) (expression_statement "memcpy((void *)(lVar4 + uVar10),param_1,uVar3);" (call_expression "memcpy((void *)(lVar4 + uVar10),param_1,uVar3)" identifier (argument_list "((void *)(lVar4 + uVar10),param_1,uVar3)" ( (cast_expression "(void *)(lVar4 + uVar10)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar4 + uVar10)" ( (binary_expression "lVar4 + uVar10" identifier + identifier) ))) , identifier , identifier ))) ;) (expression_statement "uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;" (assignment_expression "uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3" identifier = (binary_expression "*(int *)(param_3 + 0x1c) + (int)uVar3" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) + (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "*(uint *)(param_3 + 0x1c) = uVar9;" (assignment_expression "*(uint *)(param_3 + 0x1c) = uVar9" (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }" if (parenthesized_expression "(0x40 < uVar9)" ( (binary_expression "0x40 < uVar9" number_literal < identifier) )) (compound_statement "{\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }" { (expression_statement "FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);" (call_expression "FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3)" identifier (argument_list "(lVar4,uVar9 & 0xffffffc0,param_3)" ( identifier , (binary_expression "uVar9 & 0xffffffc0" identifier & number_literal) , identifier ))) ;) (expression_statement "uVar9 = *(uint *)(param_3 + 0x1c);" (assignment_expression "uVar9 = *(uint *)(param_3 + 0x1c)" identifier = (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);" (assignment_expression "puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" identifier = (cast_expression "(undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" ( (binary_expression "(uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4" (parenthesized_expression "(uVar10 + uVar3 & 0xffffffffffffffc0)" ( (binary_expression "uVar10 + uVar3 & 0xffffffffffffffc0" (binary_expression "uVar10 + uVar3" identifier + identifier) & number_literal) )) + identifier) )))) ;) (expression_statement "uVar2 = uVar9 & 0x3f;" (assignment_expression "uVar2 = uVar9 & 0x3f" identifier = (binary_expression "uVar9 & 0x3f" identifier & number_literal)) ;) (expression_statement "uVar10 = (ulong)uVar2;" (assignment_expression "uVar10 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "*(uint *)(param_3 + 0x1c) = uVar2;" (assignment_expression "*(uint *)(param_3 + 0x1c) = uVar2" (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" if (parenthesized_expression "(uVar2 < 8)" ( (binary_expression "uVar2 < 8" identifier < number_literal) )) (compound_statement "{\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }" { (if_statement "if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" if (parenthesized_expression "((uVar9 & 4) == 0)" ( (binary_expression "(uVar9 & 4) == 0" (parenthesized_expression "(uVar9 & 4)" ( (binary_expression "uVar9 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }" { (if_statement "if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }" if (parenthesized_expression "((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0))" ( (binary_expression "(uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)" ( (comma_expression "*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0" (assignment_expression "*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8" (pointer_expression "*(undefined1 *)(param_3 + 0x20)" * (cast_expression "(undefined1 *)(param_3 + 0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*(undefined1 *)puVar8" * (cast_expression "(undefined1 *)puVar8" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) , (binary_expression "(uVar9 & 2) != 0" (parenthesized_expression "(uVar9 & 2)" ( (binary_expression "uVar9 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }" { (expression_statement "*(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));" (assignment_expression "*(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2))" (pointer_expression "*(undefined2 *)(param_3 + 0x1e + uVar10)" * (cast_expression "(undefined2 *)(param_3 + 0x1e + uVar10)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1e + uVar10)" ( (binary_expression "param_3 + 0x1e + uVar10" (binary_expression "param_3 + 0x1e" identifier + number_literal) + identifier) )))) = (pointer_expression "*(undefined2 *)((long)puVar8 + (uVar10 - 2))" * (cast_expression "(undefined2 *)((long)puVar8 + (uVar10 - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar10 - 2))" ( (binary_expression "(long)puVar8 + (uVar10 - 2)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar10 - 2)" ( (binary_expression "uVar10 - 2" identifier - number_literal) ))) ))))) ;) })) }) (else_clause "else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" else (compound_statement "{\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" { (expression_statement "*(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;" (assignment_expression "*(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8" (pointer_expression "*(undefined4 *)(param_3 + 0x20)" * (cast_expression "(undefined4 *)(param_3 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));" (assignment_expression "*(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4))" (pointer_expression "*(undefined4 *)(param_3 + 0x1c + uVar10)" * (cast_expression "(undefined4 *)(param_3 + 0x1c + uVar10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c + uVar10)" ( (binary_expression "param_3 + 0x1c + uVar10" (binary_expression "param_3 + 0x1c" identifier + number_literal) + identifier) )))) = (pointer_expression "*(undefined4 *)((long)puVar8 + (uVar10 - 4))" * (cast_expression "(undefined4 *)((long)puVar8 + (uVar10 - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar10 - 4))" ( (binary_expression "(long)puVar8 + (uVar10 - 4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar10 - 4)" ( (binary_expression "uVar10 - 4" identifier - number_literal) ))) ))))) ;) }))) }) (else_clause "else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" else (compound_statement "{\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" { (expression_statement "*(undefined8 *)(param_3 + 0x20) = *puVar8;" (assignment_expression "*(undefined8 *)(param_3 + 0x20) = *puVar8" (pointer_expression "*(undefined8 *)(param_3 + 0x20)" * (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));" (assignment_expression "*(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8))" (pointer_expression "*(undefined8 *)(param_3 + 0x18 + uVar10)" * (cast_expression "(undefined8 *)(param_3 + 0x18 + uVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x18 + uVar10)" ( (binary_expression "param_3 + 0x18 + uVar10" (binary_expression "param_3 + 0x18" identifier + number_literal) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar10 - 8))" * (cast_expression "(undefined8 *)((long)puVar8 + (uVar10 - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar10 - 8))" ( (binary_expression "(long)puVar8 + (uVar10 - 8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar10 - 8)" ( (binary_expression "uVar10 - 8" identifier - number_literal) ))) ))))) ;) (expression_statement "uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;" (assignment_expression "uVar10 = param_3 + 0x28U & 0xfffffffffffffff8" identifier = (binary_expression "param_3 + 0x28U & 0xfffffffffffffff8" (binary_expression "param_3 + 0x28U" identifier + number_literal) & number_literal)) ;) (expression_statement "lVar4 = lVar4 - uVar10;" (assignment_expression "lVar4 = lVar4 - uVar10" identifier = (binary_expression "lVar4 - uVar10" identifier - identifier)) ;) (expression_statement "uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar9 = (int)lVar4 + uVar2 & 0xfffffff8" identifier = (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) & number_literal)) ;) (if_statement "if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }" if (parenthesized_expression "(7 < uVar9)" ( (binary_expression "7 < uVar9" number_literal < identifier) )) (compound_statement "{\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);" do (compound_statement "{\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          }" { (expression_statement "uVar2 = (int)uVar6 + 8;" (assignment_expression "uVar2 = (int)uVar6 + 8" identifier = (binary_expression "(int)uVar6 + 8" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "*(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));" (assignment_expression "*(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" (pointer_expression "*(undefined8 *)(uVar10 + uVar6)" * (cast_expression "(undefined8 *)(uVar10 + uVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar10 + uVar6)" ( (binary_expression "uVar10 + uVar6" identifier + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" * (cast_expression "(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar6 - lVar4))" ( (binary_expression "(long)puVar8 + (uVar6 - lVar4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar6 - lVar4)" ( (binary_expression "uVar6 - lVar4" identifier - identifier) ))) ))))) ;) (expression_statement "uVar6 = (ulong)uVar2;" (assignment_expression "uVar6 = (ulong)uVar2" identifier = (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }) while (parenthesized_expression "(uVar2 < uVar9)" ( (binary_expression "uVar2 < uVar9" identifier < identifier) )) ;) })) }))) })) (expression_statement "param_1 = (undefined8 *)((long)param_1 + uVar3);" (assignment_expression "param_1 = (undefined8 *)((long)param_1 + uVar3)" identifier = (cast_expression "(undefined8 *)((long)param_1 + uVar3)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + uVar3)" ( (binary_expression "(long)param_1 + uVar3" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "param_2 = param_2 - uVar3;" (assignment_expression "param_2 = param_2 - uVar3" identifier = (binary_expression "param_2 - uVar3" identifier - identifier)) ;) })) (expression_statement "puVar8 = param_1;" (assignment_expression "puVar8 = param_1" identifier = identifier) ;) (if_statement "if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }" if (parenthesized_expression "(0x3f < param_2)" ( (binary_expression "0x3f < param_2" number_literal < identifier) )) (compound_statement "{\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }" { (if_statement "if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }" if (parenthesized_expression "(((ulong)param_1 & 3) != 0)" ( (binary_expression "((ulong)param_1 & 3) != 0" (parenthesized_expression "((ulong)param_1 & 3)" ( (binary_expression "(ulong)param_1 & 3" (cast_expression "(ulong)param_1" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }" { (if_statement "if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }" if (parenthesized_expression "(param_2 != 0x40)" ( (binary_expression "param_2 != 0x40" identifier != number_literal) )) (compound_statement "{\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }" { (expression_statement "uVar3 = param_2 - 0x41 >> 6;" (assignment_expression "uVar3 = param_2 - 0x41 >> 6" identifier = (binary_expression "param_2 - 0x41 >> 6" (binary_expression "param_2 - 0x41" identifier - number_literal) >> number_literal)) ;) (do_statement "do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);" do (compound_statement "{\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        }" { (expression_statement "uVar1 = puVar8[1];" (assignment_expression "uVar1 = puVar8[1]" identifier = (subscript_expression "puVar8[1]" identifier [ number_literal ])) ;) (expression_statement "puVar7 = puVar8 + 8;" (assignment_expression "puVar7 = puVar8 + 8" identifier = (binary_expression "puVar8 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(param_3 + 0x20) = *puVar8;" (assignment_expression "*(undefined8 *)(param_3 + 0x20) = *puVar8" (pointer_expression "*(undefined8 *)(param_3 + 0x20)" * (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*(undefined8 *)(param_3 + 0x28) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x28) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x28)" * (cast_expression "(undefined8 *)(param_3 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar8[3];" (assignment_expression "uVar1 = puVar8[3]" identifier = (subscript_expression "puVar8[3]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x30) = puVar8[2];" (assignment_expression "*(undefined8 *)(param_3 + 0x30) = puVar8[2]" (pointer_expression "*(undefined8 *)(param_3 + 0x30)" * (cast_expression "(undefined8 *)(param_3 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x30)" ( (binary_expression "param_3 + 0x30" identifier + number_literal) )))) = (subscript_expression "puVar8[2]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x38) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x38) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x38)" * (cast_expression "(undefined8 *)(param_3 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x38)" ( (binary_expression "param_3 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar8[5];" (assignment_expression "uVar1 = puVar8[5]" identifier = (subscript_expression "puVar8[5]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x40) = puVar8[4];" (assignment_expression "*(undefined8 *)(param_3 + 0x40) = puVar8[4]" (pointer_expression "*(undefined8 *)(param_3 + 0x40)" * (cast_expression "(undefined8 *)(param_3 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x40)" ( (binary_expression "param_3 + 0x40" identifier + number_literal) )))) = (subscript_expression "puVar8[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x48) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x48) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x48)" * (cast_expression "(undefined8 *)(param_3 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x48)" ( (binary_expression "param_3 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = puVar8[7];" (assignment_expression "uVar1 = puVar8[7]" identifier = (subscript_expression "puVar8[7]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x50) = puVar8[6];" (assignment_expression "*(undefined8 *)(param_3 + 0x50) = puVar8[6]" (pointer_expression "*(undefined8 *)(param_3 + 0x50)" * (cast_expression "(undefined8 *)(param_3 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x50)" ( (binary_expression "param_3 + 0x50" identifier + number_literal) )))) = (subscript_expression "puVar8[6]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_3 + 0x58) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x58) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x58)" * (cast_expression "(undefined8 *)(param_3 + 0x58)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x58)" ( (binary_expression "param_3 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);" (call_expression "FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3)" identifier (argument_list "((undefined8 *)(param_3 + 0x20),0x40,param_3)" ( (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) ))) , number_literal , identifier ))) ;) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(puVar7 != param_1 + (uVar3 + 1) * 8)" ( (binary_expression "puVar7 != param_1 + (uVar3 + 1) * 8" identifier != (binary_expression "param_1 + (uVar3 + 1) * 8" identifier + (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal))) )) ;) (expression_statement "param_2 = (param_2 - 0x40) + uVar3 * -0x40;" (assignment_expression "param_2 = (param_2 - 0x40) + uVar3 * -0x40" identifier = (binary_expression "(param_2 - 0x40) + uVar3 * -0x40" (parenthesized_expression "(param_2 - 0x40)" ( (binary_expression "param_2 - 0x40" identifier - number_literal) )) + (binary_expression "uVar3 * -0x40" identifier * number_literal))) ;) (expression_statement "puVar8 = param_1 + (uVar3 + 1) * 8;" (assignment_expression "puVar8 = param_1 + (uVar3 + 1) * 8" identifier = (binary_expression "param_1 + (uVar3 + 1) * 8" identifier + (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal))) ;) })) (goto_statement "goto LAB_0027107b;" goto statement_identifier ;) })) (expression_statement "puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));" (assignment_expression "puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0))" identifier = (cast_expression "(undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + (param_2 & 0xffffffffffffffc0))" ( (binary_expression "(long)param_1 + (param_2 & 0xffffffffffffffc0)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(param_2 & 0xffffffffffffffc0)" ( (binary_expression "param_2 & 0xffffffffffffffc0" identifier & number_literal) ))) )))) ;) (expression_statement "FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);" (call_expression "FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3)" identifier (argument_list "(param_1,param_2 & 0xffffffffffffffc0,param_3)" ( identifier , (binary_expression "param_2 & 0xffffffffffffffc0" identifier & number_literal) , identifier ))) ;) (expression_statement "param_2 = (ulong)((uint)param_2 & 0x3f);" (assignment_expression "param_2 = (ulong)((uint)param_2 & 0x3f)" identifier = (call_expression "(ulong)((uint)param_2 & 0x3f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)param_2 & 0x3f)" ( (binary_expression "(uint)param_2 & 0x3f" (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) })) (if_statement "if (param_2 == 0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);" statement_identifier : (expression_statement "__dest = (void *)(param_3 + 0x20);" (assignment_expression "__dest = (void *)(param_3 + 0x20)" identifier = (cast_expression "(void *)(param_3 + 0x20)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) ;)) (expression_statement "uVar9 = *(uint *)(param_3 + 0x1c);" (assignment_expression "uVar9 = *(uint *)(param_3 + 0x1c)" identifier = (pointer_expression "*(uint *)(param_3 + 0x1c)" * (cast_expression "(uint *)(param_3 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = (uint)param_2;" (assignment_expression "uVar2 = (uint)param_2" identifier = (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);" (assignment_expression "puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9)" identifier = (cast_expression "(undefined8 *)((long)__dest + (ulong)uVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest + (ulong)uVar9)" ( (binary_expression "(long)__dest + (ulong)uVar9" (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (cast_expression "(ulong)uVar9" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) ;) (if_statement "if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" if (parenthesized_expression "(uVar2 < 8)" ( (binary_expression "uVar2 < 8" identifier < number_literal) )) (compound_statement "{\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }" { (if_statement "if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" if (parenthesized_expression "((param_2 & 4) == 0)" ( (binary_expression "(param_2 & 4) == 0" (parenthesized_expression "(param_2 & 4)" ( (binary_expression "param_2 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }" { (if_statement "if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }" if (parenthesized_expression "((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0))" ( (binary_expression "(uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)" ( (comma_expression "*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0" (assignment_expression "*(undefined1 *)puVar7 = *(undefined1 *)puVar8" (pointer_expression "*(undefined1 *)puVar7" * (cast_expression "(undefined1 *)puVar7" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined1 *)puVar8" * (cast_expression "(undefined1 *)puVar8" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) , (binary_expression "(param_2 & 2) != 0" (parenthesized_expression "(param_2 & 2)" ( (binary_expression "param_2 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }" { (expression_statement "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));" (assignment_expression "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" (pointer_expression "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2))" * (cast_expression "(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 2))" ( (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 2)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 2)" ( (binary_expression "(param_2 & 0xffffffff) - 2" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" * (cast_expression "(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 2))" ( (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 2)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 2)" ( (binary_expression "(param_2 & 0xffffffff) - 2" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) })) }) (else_clause "else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" else (compound_statement "{\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" { (expression_statement "*(undefined4 *)puVar7 = *(undefined4 *)puVar8;" (assignment_expression "*(undefined4 *)puVar7 = *(undefined4 *)puVar8" (pointer_expression "*(undefined4 *)puVar7" * (cast_expression "(undefined4 *)puVar7" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));" (assignment_expression "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" (pointer_expression "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4))" * (cast_expression "(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 4))" ( (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 4)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 4)" ( (binary_expression "(param_2 & 0xffffffff) - 4" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" * (cast_expression "(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 4))" ( (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 4)" ( (binary_expression "(param_2 & 0xffffffff) - 4" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) }))) }) (else_clause "else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" else (compound_statement "{\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" { (expression_statement "*puVar7 = *puVar8;" (assignment_expression "*puVar7 = *puVar8" (pointer_expression "*puVar7" * identifier) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));" (assignment_expression "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" (pointer_expression "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8))" * (cast_expression "(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 8))" ( (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 8)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 8)" ( (binary_expression "(param_2 & 0xffffffff) - 8" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" * (cast_expression "(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 8))" ( (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((param_2 & 0xffffffff) - 8)" ( (binary_expression "(param_2 & 0xffffffff) - 8" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) - number_literal) ))) ))))) ;) (expression_statement "lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" identifier = (binary_expression "(long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (parenthesized_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar7 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar7 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar7 + 1)" ( (binary_expression "puVar7 + 1" identifier + number_literal) ))) & number_literal) )))) ;) (expression_statement "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8" identifier = (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) & number_literal)) ;) (if_statement "if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }" if (parenthesized_expression "(7 < uVar2)" ( (binary_expression "7 < uVar2" number_literal < identifier) )) (compound_statement "{\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);" do (compound_statement "{\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      }" { (expression_statement "uVar3 = (ulong)uVar5;" (assignment_expression "uVar3 = (ulong)uVar5" identifier = (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar5 = uVar5 + 8;" (assignment_expression "uVar5 = uVar5 + 8" identifier = (binary_expression "uVar5 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));" (assignment_expression "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" (pointer_expression "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" * (cast_expression "(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" ( (binary_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3" (parenthesized_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar7 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar7 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar7 + 1)" ( (binary_expression "puVar7 + 1" identifier + number_literal) ))) & number_literal) )) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" * (cast_expression "(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + (uVar3 - lVar4))" ( (binary_expression "(long)puVar8 + (uVar3 - lVar4)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(uVar3 - lVar4)" ( (binary_expression "uVar3 - lVar4" identifier - identifier) ))) ))))) ;) }) while (parenthesized_expression "(uVar5 < uVar2)" ( (binary_expression "uVar5 < uVar2" identifier < identifier) )) ;) })) }))) (expression_statement "param_2 = param_2 + uVar9;" (assignment_expression "param_2 = param_2 + uVar9" identifier = (binary_expression "param_2 + uVar9" identifier + identifier)) ;) (if_statement "if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }" if (parenthesized_expression "(0x3f < param_2)" ( (binary_expression "0x3f < param_2" number_literal < identifier) )) (compound_statement "{\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }" { (expression_statement "param_2 = param_2 - 0x40;" (assignment_expression "param_2 = param_2 - 0x40" identifier = (binary_expression "param_2 - 0x40" identifier - number_literal)) ;) (expression_statement "FUN_0026fcf0(__dest,0x40,param_3);" (call_expression "FUN_0026fcf0(__dest,0x40,param_3)" identifier (argument_list "(__dest,0x40,param_3)" ( identifier , number_literal , identifier ))) ;) (expression_statement "memcpy(__dest,(void *)(param_3 + 0x60),param_2);" (call_expression "memcpy(__dest,(void *)(param_3 + 0x60),param_2)" identifier (argument_list "(__dest,(void *)(param_3 + 0x60),param_2)" ( identifier , (cast_expression "(void *)(param_3 + 0x60)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x60)" ( (binary_expression "param_3 + 0x60" identifier + number_literal) ))) , identifier ))) ;) })) (expression_statement "*(int *)(param_3 + 0x1c) = (int)param_2;" (assignment_expression "*(int *)(param_3 + 0x1c) = (int)param_2" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) = (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression LIT - IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT & LIT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) & LIT) )) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT - LIT) ))) ))))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT - LIT) ))) ))))) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT - LIT) ))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) }))) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - LIT) >> LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , LIT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT))) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT))) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT & LIT) ))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT & LIT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) ))) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) ))) ))))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) ))) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) ))) ))))) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) ))) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) ))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )) + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , IDENT ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (return_statement return ;) })))
(function_definition "void FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00270fd0(undefined8 *param_1,ulong param_2,long param_3)" (identifier "FUN_00270fd0") (parameter_list "(undefined8 *param_1,ulong param_2,long param_3)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  void *__dest;\n  uint uVar9;\n  ulong uVar10;\n  \n  if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }\n  puVar8 = param_1;\n  if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);\n  uVar9 = *(uint *)(param_3 + 0x1c);\n  uVar2 = (uint)param_2;\n  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);\n  if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }\n  param_2 = param_2 + uVar9;\n  if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }\n  *(int *)(param_3 + 0x1c) = (int)param_2;\n  return;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "undefined8 *puVar7;" (type_identifier "undefined8") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined8 *puVar8;" (type_identifier "undefined8") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "void *__dest;" (primitive_type "void") (pointer_declarator "*__dest" (* "*") (identifier "__dest")) (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "ulong uVar10;" (type_identifier "ulong") (identifier "uVar10") (; ";")) (if_statement "if (*(uint *)(param_3 + 0x1c) != 0) {\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }" (if "if") (parenthesized_expression "(*(uint *)(param_3 + 0x1c) != 0)" (( "(") (binary_expression "*(uint *)(param_3 + 0x1c) != 0" (pointer_expression "*(uint *)(param_3 + 0x1c)" (* "*") (cast_expression "(uint *)(param_3 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);\n    lVar4 = param_3 + 0x20;\n    uVar3 = 0x80 - uVar10;\n    if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }\n    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);\n    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;\n    *(uint *)(param_3 + 0x1c) = uVar9;\n    if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }\n    param_1 = (undefined8 *)((long)param_1 + uVar3);\n    param_2 = param_2 - uVar3;\n  }" ({ "{") (expression_statement "uVar10 = (ulong)*(uint *)(param_3 + 0x1c);" (assignment_expression "uVar10 = (ulong)*(uint *)(param_3 + 0x1c)" (identifier "uVar10") (= "=") (binary_expression "(ulong)*(uint *)(param_3 + 0x1c)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(param_3 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "lVar4 = param_3 + 0x20;" (assignment_expression "lVar4 = param_3 + 0x20" (identifier "lVar4") (= "=") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20"))) (; ";")) (expression_statement "uVar3 = 0x80 - uVar10;" (assignment_expression "uVar3 = 0x80 - uVar10" (identifier "uVar3") (= "=") (binary_expression "0x80 - uVar10" (number_literal "0x80") (- "-") (identifier "uVar10"))) (; ";")) (if_statement "if (param_2 < 0x80 - uVar10) {\n      uVar3 = param_2;\n    }" (if "if") (parenthesized_expression "(param_2 < 0x80 - uVar10)" (( "(") (binary_expression "param_2 < 0x80 - uVar10" (identifier "param_2") (< "<") (binary_expression "0x80 - uVar10" (number_literal "0x80") (- "-") (identifier "uVar10"))) () ")")) (compound_statement "{\n      uVar3 = param_2;\n    }" ({ "{") (expression_statement "uVar3 = param_2;" (assignment_expression "uVar3 = param_2" (identifier "uVar3") (= "=") (identifier "param_2")) (; ";")) (} "}"))) (expression_statement "memcpy((void *)(lVar4 + uVar10),param_1,uVar3);" (call_expression "memcpy((void *)(lVar4 + uVar10),param_1,uVar3)" (identifier "memcpy") (argument_list "((void *)(lVar4 + uVar10),param_1,uVar3)" (( "(") (cast_expression "(void *)(lVar4 + uVar10)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar4 + uVar10)" (( "(") (binary_expression "lVar4 + uVar10" (identifier "lVar4") (+ "+") (identifier "uVar10")) () ")"))) (, ",") (identifier "param_1") (, ",") (identifier "uVar3") () ")"))) (; ";")) (expression_statement "uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;" (assignment_expression "uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3" (identifier "uVar9") (= "=") (binary_expression "*(int *)(param_3 + 0x1c) + (int)uVar3" (pointer_expression "*(int *)(param_3 + 0x1c)" (* "*") (cast_expression "(int *)(param_3 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (+ "+") (cast_expression "(int)uVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar3")))) (; ";")) (expression_statement "*(uint *)(param_3 + 0x1c) = uVar9;" (assignment_expression "*(uint *)(param_3 + 0x1c) = uVar9" (pointer_expression "*(uint *)(param_3 + 0x1c)" (* "*") (cast_expression "(uint *)(param_3 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (identifier "uVar9")) (; ";")) (if_statement "if (0x40 < uVar9) {\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }" (if "if") (parenthesized_expression "(0x40 < uVar9)" (( "(") (binary_expression "0x40 < uVar9" (number_literal "0x40") (< "<") (identifier "uVar9")) () ")")) (compound_statement "{\n      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);\n      uVar9 = *(uint *)(param_3 + 0x1c);\n      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);\n      uVar2 = uVar9 & 0x3f;\n      uVar10 = (ulong)uVar2;\n      *(uint *)(param_3 + 0x1c) = uVar2;\n      if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }\n    }" ({ "{") (expression_statement "FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);" (call_expression "FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3)" (identifier "FUN_0026fcf0") (argument_list "(lVar4,uVar9 & 0xffffffc0,param_3)" (( "(") (identifier "lVar4") (, ",") (binary_expression "uVar9 & 0xffffffc0" (identifier "uVar9") (& "&") (number_literal "0xffffffc0")) (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "uVar9 = *(uint *)(param_3 + 0x1c);" (assignment_expression "uVar9 = *(uint *)(param_3 + 0x1c)" (identifier "uVar9") (= "=") (pointer_expression "*(uint *)(param_3 + 0x1c)" (* "*") (cast_expression "(uint *)(param_3 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);" (assignment_expression "puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" (identifier "puVar8") (= "=") (cast_expression "(undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4)" (( "(") (binary_expression "(uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4" (parenthesized_expression "(uVar10 + uVar3 & 0xffffffffffffffc0)" (( "(") (binary_expression "uVar10 + uVar3 & 0xffffffffffffffc0" (binary_expression "uVar10 + uVar3" (identifier "uVar10") (+ "+") (identifier "uVar3")) (& "&") (number_literal "0xffffffffffffffc0")) () ")")) (+ "+") (identifier "lVar4")) () ")")))) (; ";")) (expression_statement "uVar2 = uVar9 & 0x3f;" (assignment_expression "uVar2 = uVar9 & 0x3f" (identifier "uVar2") (= "=") (binary_expression "uVar9 & 0x3f" (identifier "uVar9") (& "&") (number_literal "0x3f"))) (; ";")) (expression_statement "uVar10 = (ulong)uVar2;" (assignment_expression "uVar10 = (ulong)uVar2" (identifier "uVar10") (= "=") (cast_expression "(ulong)uVar2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar2"))) (; ";")) (expression_statement "*(uint *)(param_3 + 0x1c) = uVar2;" (assignment_expression "*(uint *)(param_3 + 0x1c) = uVar2" (pointer_expression "*(uint *)(param_3 + 0x1c)" (* "*") (cast_expression "(uint *)(param_3 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (uVar2 < 8) {\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }\n      else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" (if "if") (parenthesized_expression "(uVar2 < 8)" (( "(") (binary_expression "uVar2 < 8" (identifier "uVar2") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n        if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }\n      }" ({ "{") (if_statement "if ((uVar9 & 4) == 0) {\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }\n        else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" (if "if") (parenthesized_expression "((uVar9 & 4) == 0)" (( "(") (binary_expression "(uVar9 & 4) == 0" (parenthesized_expression "(uVar9 & 4)" (( "(") (binary_expression "uVar9 & 4" (identifier "uVar9") (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }\n        }" ({ "{") (if_statement "if ((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }" (if "if") (parenthesized_expression "((uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0))" (( "(") (binary_expression "(uVar2 != 0) &&\n             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)" (( "(") (comma_expression "*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0" (assignment_expression "*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8" (pointer_expression "*(undefined1 *)(param_3 + 0x20)" (* "*") (cast_expression "(undefined1 *)(param_3 + 0x20)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (pointer_expression "*(undefined1 *)puVar8" (* "*") (cast_expression "(undefined1 *)puVar8" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar8")))) (, ",") (binary_expression "(uVar9 & 2) != 0" (parenthesized_expression "(uVar9 & 2)" (( "(") (binary_expression "uVar9 & 2" (identifier "uVar9") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));\n          }" ({ "{") (expression_statement "*(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));" (assignment_expression "*(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2))" (pointer_expression "*(undefined2 *)(param_3 + 0x1e + uVar10)" (* "*") (cast_expression "(undefined2 *)(param_3 + 0x1e + uVar10)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1e + uVar10)" (( "(") (binary_expression "param_3 + 0x1e + uVar10" (binary_expression "param_3 + 0x1e" (identifier "param_3") (+ "+") (number_literal "0x1e")) (+ "+") (identifier "uVar10")) () ")")))) (= "=") (pointer_expression "*(undefined2 *)((long)puVar8 + (uVar10 - 2))" (* "*") (cast_expression "(undefined2 *)((long)puVar8 + (uVar10 - 2))" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + (uVar10 - 2))" (( "(") (binary_expression "(long)puVar8 + (uVar10 - 2)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "(uVar10 - 2)" (( "(") (binary_expression "uVar10 - 2" (identifier "uVar10") (- "-") (number_literal "2")) () ")"))) () ")"))))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" (else "else") (compound_statement "{\n          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;\n          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));\n        }" ({ "{") (expression_statement "*(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;" (assignment_expression "*(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8" (pointer_expression "*(undefined4 *)(param_3 + 0x20)" (* "*") (cast_expression "(undefined4 *)(param_3 + 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)puVar8" (* "*") (cast_expression "(undefined4 *)puVar8" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar8")))) (; ";")) (expression_statement "*(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));" (assignment_expression "*(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4))" (pointer_expression "*(undefined4 *)(param_3 + 0x1c + uVar10)" (* "*") (cast_expression "(undefined4 *)(param_3 + 0x1c + uVar10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c + uVar10)" (( "(") (binary_expression "param_3 + 0x1c + uVar10" (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) (+ "+") (identifier "uVar10")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)((long)puVar8 + (uVar10 - 4))" (* "*") (cast_expression "(undefined4 *)((long)puVar8 + (uVar10 - 4))" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + (uVar10 - 4))" (( "(") (binary_expression "(long)puVar8 + (uVar10 - 4)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "(uVar10 - 4)" (( "(") (binary_expression "uVar10 - 4" (identifier "uVar10") (- "-") (number_literal "4")) () ")"))) () ")"))))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" (else "else") (compound_statement "{\n        *(undefined8 *)(param_3 + 0x20) = *puVar8;\n        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));\n        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;\n        lVar4 = lVar4 - uVar10;\n        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;\n        if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }\n      }" ({ "{") (expression_statement "*(undefined8 *)(param_3 + 0x20) = *puVar8;" (assignment_expression "*(undefined8 *)(param_3 + 0x20) = *puVar8" (pointer_expression "*(undefined8 *)(param_3 + 0x20)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));" (assignment_expression "*(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8))" (pointer_expression "*(undefined8 *)(param_3 + 0x18 + uVar10)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x18 + uVar10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x18 + uVar10)" (( "(") (binary_expression "param_3 + 0x18 + uVar10" (binary_expression "param_3 + 0x18" (identifier "param_3") (+ "+") (number_literal "0x18")) (+ "+") (identifier "uVar10")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar10 - 8))" (* "*") (cast_expression "(undefined8 *)((long)puVar8 + (uVar10 - 8))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + (uVar10 - 8))" (( "(") (binary_expression "(long)puVar8 + (uVar10 - 8)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "(uVar10 - 8)" (( "(") (binary_expression "uVar10 - 8" (identifier "uVar10") (- "-") (number_literal "8")) () ")"))) () ")"))))) (; ";")) (expression_statement "uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;" (assignment_expression "uVar10 = param_3 + 0x28U & 0xfffffffffffffff8" (identifier "uVar10") (= "=") (binary_expression "param_3 + 0x28U & 0xfffffffffffffff8" (binary_expression "param_3 + 0x28U" (identifier "param_3") (+ "+") (number_literal "0x28U")) (& "&") (number_literal "0xfffffffffffffff8"))) (; ";")) (expression_statement "lVar4 = lVar4 - uVar10;" (assignment_expression "lVar4 = lVar4 - uVar10" (identifier "lVar4") (= "=") (binary_expression "lVar4 - uVar10" (identifier "lVar4") (- "-") (identifier "uVar10"))) (; ";")) (expression_statement "uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar9 = (int)lVar4 + uVar2 & 0xfffffff8" (identifier "uVar9") (= "=") (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar4")) (+ "+") (identifier "uVar2")) (& "&") (number_literal "0xfffffff8"))) (; ";")) (if_statement "if (7 < uVar9) {\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }" (if "if") (parenthesized_expression "(7 < uVar9)" (( "(") (binary_expression "7 < uVar9" (number_literal "7") (< "<") (identifier "uVar9")) () ")")) (compound_statement "{\n          uVar6 = 0;\n          do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);\n        }" ({ "{") (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          } while (uVar2 < uVar9);" (do "do") (compound_statement "{\n            uVar2 = (int)uVar6 + 8;\n            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));\n            uVar6 = (ulong)uVar2;\n          }" ({ "{") (expression_statement "uVar2 = (int)uVar6 + 8;" (assignment_expression "uVar2 = (int)uVar6 + 8" (identifier "uVar2") (= "=") (binary_expression "(int)uVar6 + 8" (cast_expression "(int)uVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar6")) (+ "+") (number_literal "8"))) (; ";")) (expression_statement "*(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));" (assignment_expression "*(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" (pointer_expression "*(undefined8 *)(uVar10 + uVar6)" (* "*") (cast_expression "(undefined8 *)(uVar10 + uVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar10 + uVar6)" (( "(") (binary_expression "uVar10 + uVar6" (identifier "uVar10") (+ "+") (identifier "uVar6")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" (* "*") (cast_expression "(undefined8 *)((long)puVar8 + (uVar6 - lVar4))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + (uVar6 - lVar4))" (( "(") (binary_expression "(long)puVar8 + (uVar6 - lVar4)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "(uVar6 - lVar4)" (( "(") (binary_expression "uVar6 - lVar4" (identifier "uVar6") (- "-") (identifier "lVar4")) () ")"))) () ")"))))) (; ";")) (expression_statement "uVar6 = (ulong)uVar2;" (assignment_expression "uVar6 = (ulong)uVar2" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar2 < uVar9)" (( "(") (binary_expression "uVar2 < uVar9" (identifier "uVar2") (< "<") (identifier "uVar9")) () ")")) (; ";")) (} "}"))) (} "}")))) (} "}"))) (expression_statement "param_1 = (undefined8 *)((long)param_1 + uVar3);" (assignment_expression "param_1 = (undefined8 *)((long)param_1 + uVar3)" (identifier "param_1") (= "=") (cast_expression "(undefined8 *)((long)param_1 + uVar3)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + uVar3)" (( "(") (binary_expression "(long)param_1 + uVar3" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "uVar3")) () ")")))) (; ";")) (expression_statement "param_2 = param_2 - uVar3;" (assignment_expression "param_2 = param_2 - uVar3" (identifier "param_2") (= "=") (binary_expression "param_2 - uVar3" (identifier "param_2") (- "-") (identifier "uVar3"))) (; ";")) (} "}"))) (expression_statement "puVar8 = param_1;" (assignment_expression "puVar8 = param_1" (identifier "puVar8") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (0x3f < param_2) {\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }" (if "if") (parenthesized_expression "(0x3f < param_2)" (( "(") (binary_expression "0x3f < param_2" (number_literal "0x3f") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n    if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }\n    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));\n    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);\n    param_2 = (ulong)((uint)param_2 & 0x3f);\n  }" ({ "{") (if_statement "if (((ulong)param_1 & 3) != 0) {\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }" (if "if") (parenthesized_expression "(((ulong)param_1 & 3) != 0)" (( "(") (binary_expression "((ulong)param_1 & 3) != 0" (parenthesized_expression "((ulong)param_1 & 3)" (( "(") (binary_expression "(ulong)param_1 & 3" (cast_expression "(ulong)param_1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_1")) (& "&") (number_literal "3")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }\n      goto LAB_0027107b;\n    }" ({ "{") (if_statement "if (param_2 != 0x40) {\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }" (if "if") (parenthesized_expression "(param_2 != 0x40)" (( "(") (binary_expression "param_2 != 0x40" (identifier "param_2") (!= "!=") (number_literal "0x40")) () ")")) (compound_statement "{\n        uVar3 = param_2 - 0x41 >> 6;\n        do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);\n        param_2 = (param_2 - 0x40) + uVar3 * -0x40;\n        puVar8 = param_1 + (uVar3 + 1) * 8;\n      }" ({ "{") (expression_statement "uVar3 = param_2 - 0x41 >> 6;" (assignment_expression "uVar3 = param_2 - 0x41 >> 6" (identifier "uVar3") (= "=") (binary_expression "param_2 - 0x41 >> 6" (binary_expression "param_2 - 0x41" (identifier "param_2") (- "-") (number_literal "0x41")) (>> ">>") (number_literal "6"))) (; ";")) (do_statement "do {\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        } while (puVar7 != param_1 + (uVar3 + 1) * 8);" (do "do") (compound_statement "{\n          uVar1 = puVar8[1];\n          puVar7 = puVar8 + 8;\n          *(undefined8 *)(param_3 + 0x20) = *puVar8;\n          *(undefined8 *)(param_3 + 0x28) = uVar1;\n          uVar1 = puVar8[3];\n          *(undefined8 *)(param_3 + 0x30) = puVar8[2];\n          *(undefined8 *)(param_3 + 0x38) = uVar1;\n          uVar1 = puVar8[5];\n          *(undefined8 *)(param_3 + 0x40) = puVar8[4];\n          *(undefined8 *)(param_3 + 0x48) = uVar1;\n          uVar1 = puVar8[7];\n          *(undefined8 *)(param_3 + 0x50) = puVar8[6];\n          *(undefined8 *)(param_3 + 0x58) = uVar1;\n          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);\n          puVar8 = puVar7;\n        }" ({ "{") (expression_statement "uVar1 = puVar8[1];" (assignment_expression "uVar1 = puVar8[1]" (identifier "uVar1") (= "=") (subscript_expression "puVar8[1]" (identifier "puVar8") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar7 = puVar8 + 8;" (assignment_expression "puVar7 = puVar8 + 8" (identifier "puVar7") (= "=") (binary_expression "puVar8 + 8" (identifier "puVar8") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x20) = *puVar8;" (assignment_expression "*(undefined8 *)(param_3 + 0x20) = *puVar8" (pointer_expression "*(undefined8 *)(param_3 + 0x20)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x28) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x28) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x28)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x28)" (( "(") (binary_expression "param_3 + 0x28" (identifier "param_3") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "uVar1 = puVar8[3];" (assignment_expression "uVar1 = puVar8[3]" (identifier "uVar1") (= "=") (subscript_expression "puVar8[3]" (identifier "puVar8") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x30) = puVar8[2];" (assignment_expression "*(undefined8 *)(param_3 + 0x30) = puVar8[2]" (pointer_expression "*(undefined8 *)(param_3 + 0x30)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x30)" (( "(") (binary_expression "param_3 + 0x30" (identifier "param_3") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (subscript_expression "puVar8[2]" (identifier "puVar8") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x38) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x38) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x38)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x38)" (( "(") (binary_expression "param_3 + 0x38" (identifier "param_3") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "uVar1 = puVar8[5];" (assignment_expression "uVar1 = puVar8[5]" (identifier "uVar1") (= "=") (subscript_expression "puVar8[5]" (identifier "puVar8") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x40) = puVar8[4];" (assignment_expression "*(undefined8 *)(param_3 + 0x40) = puVar8[4]" (pointer_expression "*(undefined8 *)(param_3 + 0x40)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x40)" (( "(") (binary_expression "param_3 + 0x40" (identifier "param_3") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (subscript_expression "puVar8[4]" (identifier "puVar8") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x48) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x48) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x48)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x48)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x48)" (( "(") (binary_expression "param_3 + 0x48" (identifier "param_3") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "uVar1 = puVar8[7];" (assignment_expression "uVar1 = puVar8[7]" (identifier "uVar1") (= "=") (subscript_expression "puVar8[7]" (identifier "puVar8") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x50) = puVar8[6];" (assignment_expression "*(undefined8 *)(param_3 + 0x50) = puVar8[6]" (pointer_expression "*(undefined8 *)(param_3 + 0x50)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x50)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x50)" (( "(") (binary_expression "param_3 + 0x50" (identifier "param_3") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (subscript_expression "puVar8[6]" (identifier "puVar8") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_3 + 0x58) = uVar1;" (assignment_expression "*(undefined8 *)(param_3 + 0x58) = uVar1" (pointer_expression "*(undefined8 *)(param_3 + 0x58)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x58)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x58)" (( "(") (binary_expression "param_3 + 0x58" (identifier "param_3") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);" (call_expression "FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3)" (identifier "FUN_0026fcf0") (argument_list "((undefined8 *)(param_3 + 0x20),0x40,param_3)" (( "(") (cast_expression "(undefined8 *)(param_3 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")"))) (, ",") (number_literal "0x40") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" (identifier "puVar8") (= "=") (identifier "puVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar7 != param_1 + (uVar3 + 1) * 8)" (( "(") (binary_expression "puVar7 != param_1 + (uVar3 + 1) * 8" (identifier "puVar7") (!= "!=") (binary_expression "param_1 + (uVar3 + 1) * 8" (identifier "param_1") (+ "+") (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" (( "(") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "8")))) () ")")) (; ";")) (expression_statement "param_2 = (param_2 - 0x40) + uVar3 * -0x40;" (assignment_expression "param_2 = (param_2 - 0x40) + uVar3 * -0x40" (identifier "param_2") (= "=") (binary_expression "(param_2 - 0x40) + uVar3 * -0x40" (parenthesized_expression "(param_2 - 0x40)" (( "(") (binary_expression "param_2 - 0x40" (identifier "param_2") (- "-") (number_literal "0x40")) () ")")) (+ "+") (binary_expression "uVar3 * -0x40" (identifier "uVar3") (* "*") (number_literal "-0x40")))) (; ";")) (expression_statement "puVar8 = param_1 + (uVar3 + 1) * 8;" (assignment_expression "puVar8 = param_1 + (uVar3 + 1) * 8" (identifier "puVar8") (= "=") (binary_expression "param_1 + (uVar3 + 1) * 8" (identifier "param_1") (+ "+") (binary_expression "(uVar3 + 1) * 8" (parenthesized_expression "(uVar3 + 1)" (( "(") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "8")))) (; ";")) (} "}"))) (goto_statement "goto LAB_0027107b;" (goto "goto") (statement_identifier "LAB_0027107b") (; ";")) (} "}"))) (expression_statement "puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));" (assignment_expression "puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0))" (identifier "puVar8") (= "=") (cast_expression "(undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + (param_2 & 0xffffffffffffffc0))" (( "(") (binary_expression "(long)param_1 + (param_2 & 0xffffffffffffffc0)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (parenthesized_expression "(param_2 & 0xffffffffffffffc0)" (( "(") (binary_expression "param_2 & 0xffffffffffffffc0" (identifier "param_2") (& "&") (number_literal "0xffffffffffffffc0")) () ")"))) () ")")))) (; ";")) (expression_statement "FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);" (call_expression "FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3)" (identifier "FUN_0026fcf0") (argument_list "(param_1,param_2 & 0xffffffffffffffc0,param_3)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_2 & 0xffffffffffffffc0" (identifier "param_2") (& "&") (number_literal "0xffffffffffffffc0")) (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "param_2 = (ulong)((uint)param_2 & 0x3f);" (assignment_expression "param_2 = (ulong)((uint)param_2 & 0x3f)" (identifier "param_2") (= "=") (call_expression "(ulong)((uint)param_2 & 0x3f)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)param_2 & 0x3f)" (( "(") (binary_expression "(uint)param_2 & 0x3f" (cast_expression "(uint)param_2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_2")) (& "&") (number_literal "0x3f")) () ")")))) (; ";")) (} "}"))) (if_statement "if (param_2 == 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (labeled_statement "LAB_0027107b:\n  __dest = (void *)(param_3 + 0x20);" (statement_identifier "LAB_0027107b") (: ":") (expression_statement "__dest = (void *)(param_3 + 0x20);" (assignment_expression "__dest = (void *)(param_3 + 0x20)" (identifier "__dest") (= "=") (cast_expression "(void *)(param_3 + 0x20)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (; ";"))) (expression_statement "uVar9 = *(uint *)(param_3 + 0x1c);" (assignment_expression "uVar9 = *(uint *)(param_3 + 0x1c)" (identifier "uVar9") (= "=") (pointer_expression "*(uint *)(param_3 + 0x1c)" (* "*") (cast_expression "(uint *)(param_3 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "uVar2 = (uint)param_2;" (assignment_expression "uVar2 = (uint)param_2" (identifier "uVar2") (= "=") (cast_expression "(uint)param_2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_2"))) (; ";")) (expression_statement "puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);" (assignment_expression "puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9)" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)((long)__dest + (ulong)uVar9)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__dest + (ulong)uVar9)" (( "(") (binary_expression "(long)__dest + (ulong)uVar9" (cast_expression "(long)__dest" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest")) (+ "+") (cast_expression "(ulong)uVar9" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar9"))) () ")")))) (; ";")) (if_statement "if (uVar2 < 8) {\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }\n  else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" (if "if") (parenthesized_expression "(uVar2 < 8)" (( "(") (binary_expression "uVar2 < 8" (identifier "uVar2") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n    if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }\n  }" ({ "{") (if_statement "if ((param_2 & 4) == 0) {\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }\n    else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" (if "if") (parenthesized_expression "((param_2 & 4) == 0)" (( "(") (binary_expression "(param_2 & 4) == 0" (parenthesized_expression "(param_2 & 4)" (( "(") (binary_expression "param_2 & 4" (identifier "param_2") (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }\n    }" ({ "{") (if_statement "if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }" (if "if") (parenthesized_expression "((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0))" (( "(") (binary_expression "(uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)" (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)" (( "(") (comma_expression "*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0" (assignment_expression "*(undefined1 *)puVar7 = *(undefined1 *)puVar8" (pointer_expression "*(undefined1 *)puVar7" (* "*") (cast_expression "(undefined1 *)puVar7" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar7"))) (= "=") (pointer_expression "*(undefined1 *)puVar8" (* "*") (cast_expression "(undefined1 *)puVar8" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar8")))) (, ",") (binary_expression "(param_2 & 2) != 0" (parenthesized_expression "(param_2 & 2)" (( "(") (binary_expression "param_2 & 2" (identifier "param_2") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));\n      }" ({ "{") (expression_statement "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));" (assignment_expression "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =\n             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" (pointer_expression "*(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2))" (* "*") (cast_expression "(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2))" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 2))" (( "(") (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 2)" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (parenthesized_expression "((param_2 & 0xffffffff) - 2)" (( "(") (binary_expression "(param_2 & 0xffffffff) - 2" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (- "-") (number_literal "2")) () ")"))) () ")")))) (= "=") (pointer_expression "*(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" (* "*") (cast_expression "(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2))" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 2))" (( "(") (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 2)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "((param_2 & 0xffffffff) - 2)" (( "(") (binary_expression "(param_2 & 0xffffffff) - 2" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (- "-") (number_literal "2")) () ")"))) () ")"))))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" (else "else") (compound_statement "{\n      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;\n      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));\n    }" ({ "{") (expression_statement "*(undefined4 *)puVar7 = *(undefined4 *)puVar8;" (assignment_expression "*(undefined4 *)puVar7 = *(undefined4 *)puVar8" (pointer_expression "*(undefined4 *)puVar7" (* "*") (cast_expression "(undefined4 *)puVar7" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar7"))) (= "=") (pointer_expression "*(undefined4 *)puVar8" (* "*") (cast_expression "(undefined4 *)puVar8" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar8")))) (; ";")) (expression_statement "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));" (assignment_expression "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =\n           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" (pointer_expression "*(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4))" (* "*") (cast_expression "(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4))" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 4))" (( "(") (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 4)" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (parenthesized_expression "((param_2 & 0xffffffff) - 4)" (( "(") (binary_expression "(param_2 & 0xffffffff) - 4" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (- "-") (number_literal "4")) () ")"))) () ")")))) (= "=") (pointer_expression "*(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" (* "*") (cast_expression "(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4))" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 4))" (( "(") (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 4)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "((param_2 & 0xffffffff) - 4)" (( "(") (binary_expression "(param_2 & 0xffffffff) - 4" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (- "-") (number_literal "4")) () ")"))) () ")"))))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" (else "else") (compound_statement "{\n    *puVar7 = *puVar8;\n    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));\n    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);\n    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;\n    if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }\n  }" ({ "{") (expression_statement "*puVar7 = *puVar8;" (assignment_expression "*puVar7 = *puVar8" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));" (assignment_expression "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =\n         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" (pointer_expression "*(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8))" (* "*") (cast_expression "(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + ((param_2 & 0xffffffff) - 8))" (( "(") (binary_expression "(long)puVar7 + ((param_2 & 0xffffffff) - 8)" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (parenthesized_expression "((param_2 & 0xffffffff) - 8)" (( "(") (binary_expression "(param_2 & 0xffffffff) - 8" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (- "-") (number_literal "8")) () ")"))) () ")")))) (= "=") (pointer_expression "*(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" (* "*") (cast_expression "(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + ((param_2 & 0xffffffff) - 8))" (( "(") (binary_expression "(long)puVar8 + ((param_2 & 0xffffffff) - 8)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "((param_2 & 0xffffffff) - 8)" (( "(") (binary_expression "(param_2 & 0xffffffff) - 8" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (- "-") (number_literal "8")) () ")"))) () ")"))))) (; ";")) (expression_statement "lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" (identifier "lVar4") (= "=") (binary_expression "(long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (- "-") (parenthesized_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" (( "(") (binary_expression "(ulong)(puVar7 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar7 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(puVar7 + 1)" (( "(") (binary_expression "puVar7 + 1" (identifier "puVar7") (+ "+") (number_literal "1")) () ")"))) (& "&") (number_literal "0xfffffffffffffff8")) () ")")))) (; ";")) (expression_statement "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;" (assignment_expression "uVar2 = (int)lVar4 + uVar2 & 0xfffffff8" (identifier "uVar2") (= "=") (binary_expression "(int)lVar4 + uVar2 & 0xfffffff8" (binary_expression "(int)lVar4 + uVar2" (cast_expression "(int)lVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar4")) (+ "+") (identifier "uVar2")) (& "&") (number_literal "0xfffffff8"))) (; ";")) (if_statement "if (7 < uVar2) {\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }" (if "if") (parenthesized_expression "(7 < uVar2)" (( "(") (binary_expression "7 < uVar2" (number_literal "7") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n      uVar5 = 0;\n      do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);\n    }" ({ "{") (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      } while (uVar5 < uVar2);" (do "do") (compound_statement "{\n        uVar3 = (ulong)uVar5;\n        uVar5 = uVar5 + 8;\n        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));\n      }" ({ "{") (expression_statement "uVar3 = (ulong)uVar5;" (assignment_expression "uVar3 = (ulong)uVar5" (identifier "uVar3") (= "=") (cast_expression "(ulong)uVar5" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar5"))) (; ";")) (expression_statement "uVar5 = uVar5 + 8;" (assignment_expression "uVar5 = uVar5 + 8" (identifier "uVar5") (= "=") (binary_expression "uVar5 + 8" (identifier "uVar5") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));" (assignment_expression "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =\n             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" (pointer_expression "*(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" (* "*") (cast_expression "(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3)" (( "(") (binary_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3" (parenthesized_expression "((ulong)(puVar7 + 1) & 0xfffffffffffffff8)" (( "(") (binary_expression "(ulong)(puVar7 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar7 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(puVar7 + 1)" (( "(") (binary_expression "puVar7 + 1" (identifier "puVar7") (+ "+") (number_literal "1")) () ")"))) (& "&") (number_literal "0xfffffffffffffff8")) () ")")) (+ "+") (identifier "uVar3")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" (* "*") (cast_expression "(undefined8 *)((long)puVar8 + (uVar3 - lVar4))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + (uVar3 - lVar4))" (( "(") (binary_expression "(long)puVar8 + (uVar3 - lVar4)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "(uVar3 - lVar4)" (( "(") (binary_expression "uVar3 - lVar4" (identifier "uVar3") (- "-") (identifier "lVar4")) () ")"))) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar5 < uVar2)" (( "(") (binary_expression "uVar5 < uVar2" (identifier "uVar5") (< "<") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (} "}")))) (expression_statement "param_2 = param_2 + uVar9;" (assignment_expression "param_2 = param_2 + uVar9" (identifier "param_2") (= "=") (binary_expression "param_2 + uVar9" (identifier "param_2") (+ "+") (identifier "uVar9"))) (; ";")) (if_statement "if (0x3f < param_2) {\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }" (if "if") (parenthesized_expression "(0x3f < param_2)" (( "(") (binary_expression "0x3f < param_2" (number_literal "0x3f") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n    param_2 = param_2 - 0x40;\n    FUN_0026fcf0(__dest,0x40,param_3);\n    memcpy(__dest,(void *)(param_3 + 0x60),param_2);\n  }" ({ "{") (expression_statement "param_2 = param_2 - 0x40;" (assignment_expression "param_2 = param_2 - 0x40" (identifier "param_2") (= "=") (binary_expression "param_2 - 0x40" (identifier "param_2") (- "-") (number_literal "0x40"))) (; ";")) (expression_statement "FUN_0026fcf0(__dest,0x40,param_3);" (call_expression "FUN_0026fcf0(__dest,0x40,param_3)" (identifier "FUN_0026fcf0") (argument_list "(__dest,0x40,param_3)" (( "(") (identifier "__dest") (, ",") (number_literal "0x40") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "memcpy(__dest,(void *)(param_3 + 0x60),param_2);" (call_expression "memcpy(__dest,(void *)(param_3 + 0x60),param_2)" (identifier "memcpy") (argument_list "(__dest,(void *)(param_3 + 0x60),param_2)" (( "(") (identifier "__dest") (, ",") (cast_expression "(void *)(param_3 + 0x60)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x60)" (( "(") (binary_expression "param_3 + 0x60" (identifier "param_3") (+ "+") (number_literal "0x60")) () ")"))) (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}"))) (expression_statement "*(int *)(param_3 + 0x1c) = (int)param_2;" (assignment_expression "*(int *)(param_3 + 0x1c) = (int)param_2" (pointer_expression "*(int *)(param_3 + 0x1c)" (* "*") (cast_expression "(int *)(param_3 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(void *buffer,size_t var_2,type_1 *ctx)

{
  type_2 uVar1;
  type_3 var_7;
  type_4 var_6;
  long var_9;
  type_5 *psVar5;
  type_3 var_12;
  type_4 var_8;
  type_2 *var_11;
  type_2 *var_10;
  type_5 *psVar10;
  type_3 var_4;
  type_4 var_1;
  
  if (ctx->buflen != 0) {
    var_1 = (type_4)ctx->buflen;
    psVar10 = ctx->buffer;
    var_6 = 0x80 - var_1;
    if (var_2 < 0x80 - var_1) {
      var_6 = var_2;
    }
    var_3((void *)((long)psVar10 + var_1),buffer,var_6);
    var_4 = ctx->buflen + (int)var_6;
    ctx->buflen = var_4;
    if (0x40 < var_4) {
      var_5(psVar10,(type_4)(var_4 & 0xffffffc0),ctx);
      var_4 = ctx->buflen;
      psVar5 = (type_5 *)((var_1 + var_6 & 0xffffffffffffffc0) + (long)psVar10);
      var_7 = var_4 & 0x3f;
      var_1 = (type_4)var_7;
      ctx->buflen = var_7;
      if (var_7 < 8) {
        if ((var_4 & 4) == 0) {
          if ((var_7 != 0) && (*(char *)ctx->buffer = (char)*psVar5, (var_4 & 2) != 0)) {
            *(type_6 *)((long)ctx->buffer + (var_1 - 2)) =
                 *(type_6 *)((long)psVar5 + (var_1 - 2));
          }
        }
        else {
          ctx->buffer[0] = *psVar5;
          *(type_7 *)((long)ctx->buffer + (var_1 - 4)) =
               *(type_7 *)((long)psVar5 + (var_1 - 4));
        }
      }
      else {
        *(type_2 *)ctx->buffer = *(type_2 *)psVar5;
        *(type_2 *)((long)ctx->total + var_1 + 4) =
             *(type_2 *)((long)psVar5 + (var_1 - 8));
        var_1 = (type_4)(ctx->buffer + 2) & 0xfffffffffffffff8;
        var_9 = (long)psVar10 - var_1;
        var_4 = (int)var_9 + var_7 & 0xfffffff8;
        if (7 < var_4) {
          var_8 = 0;
          do {
            var_7 = (int)var_8 + 8;
            *(type_2 *)(var_1 + var_8) = *(type_2 *)((long)psVar5 + (var_8 - var_9));
            var_8 = (type_4)var_7;
          } while (var_7 < var_4);
        }
      }
    }
    buffer = (void *)((long)buffer + var_6);
    var_2 = var_2 - var_6;
  }
  var_10 = (type_2 *)buffer;
  if (0x3f < var_2) {
    if (((type_4)buffer & 3) != 0) {
      if (var_2 != 0x40) {
        var_6 = var_2 - 0x41 >> 6;
        do {
          uVar1 = var_10[1];
          var_11 = var_10 + 8;
          *(type_2 *)ctx->buffer = *var_10;
          *(type_2 *)(ctx->buffer + 2) = uVar1;
          uVar1 = var_10[3];
          *(type_2 *)(ctx->buffer + 4) = var_10[2];
          *(type_2 *)(ctx->buffer + 6) = uVar1;
          uVar1 = var_10[5];
          *(type_2 *)(ctx->buffer + 8) = var_10[4];
          *(type_2 *)(ctx->buffer + 10) = uVar1;
          uVar1 = var_10[7];
          *(type_2 *)(ctx->buffer + 0xc) = var_10[6];
          *(type_2 *)(ctx->buffer + 0xe) = uVar1;
          var_5(ctx->buffer,0x40,ctx);
          var_10 = var_11;
        } while (var_11 != (type_2 *)((long)buffer + (var_6 + 1) * 8 * 8));
        var_2 = (var_2 - 0x40) + var_6 * -0x40;
        var_10 = (type_2 *)((long)buffer + (var_6 + 1) * 8 * 8);
      }
      goto LAB_0027107b;
    }
    var_10 = (type_2 *)((long)buffer + (var_2 & 0xffffffffffffffc0));
    var_5(buffer,var_2 & 0xffffffffffffffc0,ctx);
    var_2 = (type_4)((type_3)var_2 & 0x3f);
  }
  if (var_2 == 0) {
    return;
  }
LAB_0027107b:
  psVar10 = ctx->buffer;
  var_4 = ctx->buflen;
  var_7 = (type_3)var_2;
  var_11 = (type_2 *)((long)psVar10 + (type_4)var_4);
  if (var_7 < 8) {
    if ((var_2 & 4) == 0) {
      if ((var_7 != 0) && (*(type_8 *)var_11 = *(type_8 *)var_10, (var_2 & 2) != 0)) {
        *(type_6 *)((long)var_11 + ((var_2 & 0xffffffff) - 2)) =
             *(type_6 *)((long)var_10 + ((var_2 & 0xffffffff) - 2));
      }
    }
    else {
      *(type_7 *)var_11 = *(type_7 *)var_10;
      *(type_7 *)((long)var_11 + ((var_2 & 0xffffffff) - 4)) =
           *(type_7 *)((long)var_10 + ((var_2 & 0xffffffff) - 4));
    }
  }
  else {
    *var_11 = *var_10;
    *(type_2 *)((long)var_11 + ((var_2 & 0xffffffff) - 8)) =
         *(type_2 *)((long)var_10 + ((var_2 & 0xffffffff) - 8));
    var_9 = (long)var_11 - ((type_4)(var_11 + 1) & 0xfffffffffffffff8);
    var_7 = (int)var_9 + var_7 & 0xfffffff8;
    if (7 < var_7) {
      var_12 = 0;
      do {
        var_6 = (type_4)var_12;
        var_12 = var_12 + 8;
        *(type_2 *)(((type_4)(var_11 + 1) & 0xfffffffffffffff8) + var_6) =
             *(type_2 *)((long)var_10 + (var_6 - var_9));
      } while (var_12 < var_7);
    }
  }
  var_6 = var_2 + var_4;
  if (0x3f < var_6) {
    var_6 = var_6 - 0x40;
    var_5(psVar10,0x40,ctx);
    var_3(psVar10,ctx->buffer + 0x10,var_6);
  }
  ctx->buflen = (type_5)var_6;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (number_literal) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (number_literal) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (return_statement))))

void MASKED(undefined8 *param_1,ulong param_2,long param_3)

{
  undefined8 uVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  uint uVar5;
  ulong uVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  void *__dest;
  uint uVar9;
  ulong uVar10;
  
  if (*(uint *)(param_3 + 0x1c) != 0) {
    uVar10 = (ulong)*(uint *)(param_3 + 0x1c);
    lVar4 = param_3 + 0x20;
    uVar3 = 0x80 - uVar10;
    if (param_2 < 0x80 - uVar10) {
      uVar3 = param_2;
    }
    memcpy((void *)(lVar4 + uVar10),param_1,uVar3);
    uVar9 = *(int *)(param_3 + 0x1c) + (int)uVar3;
    *(uint *)(param_3 + 0x1c) = uVar9;
    if (0x40 < uVar9) {
      FUN_0026fcf0(lVar4,uVar9 & 0xffffffc0,param_3);
      uVar9 = *(uint *)(param_3 + 0x1c);
      puVar8 = (undefined8 *)((uVar10 + uVar3 & 0xffffffffffffffc0) + lVar4);
      uVar2 = uVar9 & 0x3f;
      uVar10 = (ulong)uVar2;
      *(uint *)(param_3 + 0x1c) = uVar2;
      if (uVar2 < 8) {
        if ((uVar9 & 4) == 0) {
          if ((uVar2 != 0) &&
             (*(undefined1 *)(param_3 + 0x20) = *(undefined1 *)puVar8, (uVar9 & 2) != 0)) {
            *(undefined2 *)(param_3 + 0x1e + uVar10) = *(undefined2 *)((long)puVar8 + (uVar10 - 2));
          }
        }
        else {
          *(undefined4 *)(param_3 + 0x20) = *(undefined4 *)puVar8;
          *(undefined4 *)(param_3 + 0x1c + uVar10) = *(undefined4 *)((long)puVar8 + (uVar10 - 4));
        }
      }
      else {
        *(undefined8 *)(param_3 + 0x20) = *puVar8;
        *(undefined8 *)(param_3 + 0x18 + uVar10) = *(undefined8 *)((long)puVar8 + (uVar10 - 8));
        uVar10 = param_3 + 0x28U & 0xfffffffffffffff8;
        lVar4 = lVar4 - uVar10;
        uVar9 = (int)lVar4 + uVar2 & 0xfffffff8;
        if (7 < uVar9) {
          uVar6 = 0;
          do {
            uVar2 = (int)uVar6 + 8;
            *(undefined8 *)(uVar10 + uVar6) = *(undefined8 *)((long)puVar8 + (uVar6 - lVar4));
            uVar6 = (ulong)uVar2;
          } while (uVar2 < uVar9);
        }
      }
    }
    param_1 = (undefined8 *)((long)param_1 + uVar3);
    param_2 = param_2 - uVar3;
  }
  puVar8 = param_1;
  if (0x3f < param_2) {
    if (((ulong)param_1 & 3) != 0) {
      if (param_2 != 0x40) {
        uVar3 = param_2 - 0x41 >> 6;
        do {
          uVar1 = puVar8[1];
          puVar7 = puVar8 + 8;
          *(undefined8 *)(param_3 + 0x20) = *puVar8;
          *(undefined8 *)(param_3 + 0x28) = uVar1;
          uVar1 = puVar8[3];
          *(undefined8 *)(param_3 + 0x30) = puVar8[2];
          *(undefined8 *)(param_3 + 0x38) = uVar1;
          uVar1 = puVar8[5];
          *(undefined8 *)(param_3 + 0x40) = puVar8[4];
          *(undefined8 *)(param_3 + 0x48) = uVar1;
          uVar1 = puVar8[7];
          *(undefined8 *)(param_3 + 0x50) = puVar8[6];
          *(undefined8 *)(param_3 + 0x58) = uVar1;
          FUN_0026fcf0((undefined8 *)(param_3 + 0x20),0x40,param_3);
          puVar8 = puVar7;
        } while (puVar7 != param_1 + (uVar3 + 1) * 8);
        param_2 = (param_2 - 0x40) + uVar3 * -0x40;
        puVar8 = param_1 + (uVar3 + 1) * 8;
      }
      goto LAB_0027107b;
    }
    puVar8 = (undefined8 *)((long)param_1 + (param_2 & 0xffffffffffffffc0));
    FUN_0026fcf0(param_1,param_2 & 0xffffffffffffffc0,param_3);
    param_2 = (ulong)((uint)param_2 & 0x3f);
  }
  if (param_2 == 0) {
    return;
  }
LAB_0027107b:
  __dest = (void *)(param_3 + 0x20);
  uVar9 = *(uint *)(param_3 + 0x1c);
  uVar2 = (uint)param_2;
  puVar7 = (undefined8 *)((long)__dest + (ulong)uVar9);
  if (uVar2 < 8) {
    if ((param_2 & 4) == 0) {
      if ((uVar2 != 0) && (*(undefined1 *)puVar7 = *(undefined1 *)puVar8, (param_2 & 2) != 0)) {
        *(undefined2 *)((long)puVar7 + ((param_2 & 0xffffffff) - 2)) =
             *(undefined2 *)((long)puVar8 + ((param_2 & 0xffffffff) - 2));
      }
    }
    else {
      *(undefined4 *)puVar7 = *(undefined4 *)puVar8;
      *(undefined4 *)((long)puVar7 + ((param_2 & 0xffffffff) - 4)) =
           *(undefined4 *)((long)puVar8 + ((param_2 & 0xffffffff) - 4));
    }
  }
  else {
    *puVar7 = *puVar8;
    *(undefined8 *)((long)puVar7 + ((param_2 & 0xffffffff) - 8)) =
         *(undefined8 *)((long)puVar8 + ((param_2 & 0xffffffff) - 8));
    lVar4 = (long)puVar7 - ((ulong)(puVar7 + 1) & 0xfffffffffffffff8);
    uVar2 = (int)lVar4 + uVar2 & 0xfffffff8;
    if (7 < uVar2) {
      uVar5 = 0;
      do {
        uVar3 = (ulong)uVar5;
        uVar5 = uVar5 + 8;
        *(undefined8 *)(((ulong)(puVar7 + 1) & 0xfffffffffffffff8) + uVar3) =
             *(undefined8 *)((long)puVar8 + (uVar3 - lVar4));
      } while (uVar5 < uVar2);
    }
  }
  param_2 = param_2 + uVar9;
  if (0x3f < param_2) {
    param_2 = param_2 - 0x40;
    FUN_0026fcf0(__dest,0x40,param_3);
    memcpy(__dest,(void *)(param_3 + 0x60),param_2);
  }
  *(int *)(param_3 + 0x1c) = (int)param_2;
  return;
}

