
int xcbc_init(xcbc_state *xcbc,int cipher,uchar *key,ulong keylen)

{
  xcbc_state *pxVar1;
  uint uVar2;
  int iVar3;
  undefined *puVar4;
  undefined *puVar5;
  int iVar6;
  long lVar7;
  void *__ptr;
  uint uVar8;
  xcbc_state *pxVar9;
  xcbc_state *pxVar10;
  ulong __n;
  xcbc_state *pxVar11;
  uchar uVar12;
  
  if (xcbc == (xcbc_state *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);
  }
  if (key == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);
  }
  iVar6 = cipher_is_valid(cipher);
  puVar4 = PTR_cipher_descriptor_001dded0;
  if (iVar6 == 0) {
    lVar7 = (long)cipher;
    iVar6 = 0x10;
    uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);
    if ((uVar2 & 7) == 0) {
      if ((keylen & 0x8000) == 0) {
        __ptr = calloc(1,0x10a0);
        if (__ptr != (void *)0x0) {
          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);
          if (iVar6 == 0) {
            uVar12 = '\x01';
            pxVar11 = xcbc;
            do {
              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);
              if (0 < (int)uVar8) {
                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);
                uVar8 = uVar8 & 7;
                pxVar9 = pxVar11;
                if (uVar8 != 0) {
                  if (uVar8 != 1) {
                    if (uVar8 != 2) {
                      if (uVar8 != 3) {
                        if (uVar8 != 4) {
                          if (uVar8 != 5) {
                            if (uVar8 != 6) {
                              pxVar11->K[0][0] = uVar12;
                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);
                            }
                            pxVar9->K[0][0] = uVar12;
                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);
                          }
                          pxVar9->K[0][0] = uVar12;
                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);
                        }
                        pxVar9->K[0][0] = uVar12;
                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);
                      }
                      pxVar9->K[0][0] = uVar12;
                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);
                    }
                    pxVar9->K[0][0] = uVar12;
                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);
                  }
                  pxVar9->K[0][0] = uVar12;
                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);
                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;
                }
                do {
                  pxVar9->K[0][0] = uVar12;
                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);
                  pxVar9->K[0][1] = uVar12;
                  pxVar9->K[0][2] = uVar12;
                  pxVar9->K[0][3] = uVar12;
                  pxVar9->K[0][4] = uVar12;
                  pxVar9->K[0][5] = uVar12;
                  pxVar9->K[0][6] = uVar12;
                  pxVar9->K[0][7] = uVar12;
                  pxVar9 = pxVar10;
                } while (pxVar1 != pxVar10);
              }
LAB_0015f0fe:
              uVar12 = uVar12 + '\x01';
              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);
              puVar5 = PTR_cipher_descriptor_001dded0;
              pxVar11 = (xcbc_state *)(pxVar11->K + 1);
            } while (uVar12 != '\x04');
            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))
                              (xcbc,uVar2,0,&xcbc->key);
            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));
            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);
            xcbc->cipher = cipher;
            xcbc->buflen = 0;
            xcbc->blocksize = iVar3;
            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);
          }
          else {
            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);
          }
          free(__ptr);
          return iVar6;
        }
        iVar6 = 0xd;
      }
      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {
        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);
        memcpy(xcbc,key,__n);
        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));
        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,
               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));
        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);
        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));
        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);
        xcbc->cipher = cipher;
        xcbc->buflen = 0;
        xcbc->blocksize = iVar3;
        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);
      }
    }
  }
  return iVar6;
}



ulong xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)

{
  undefined4 uVar1;
  undefined *puVar2;
  undefined *puVar3;
  uint uVar4;
  uint uVar5;
  ulong uVar6;
  long lVar7;
  void *__ptr;
  uint uVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char cVar12;
  
  if (param_1 == (char *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);
  }
  if (param_3 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);
  }
  uVar6 = cipher_is_valid(param_2);
  puVar2 = PTR_cipher_descriptor_001dded0;
  if ((int)uVar6 == 0) {
    lVar7 = (long)param_2;
    uVar6 = 0x10;
    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);
    if ((uVar4 & 7) == 0) {
      if ((param_4 & 0x8000) == 0) {
        __ptr = calloc(1,0x10a0);
        if (__ptr != (void *)0x0) {
          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);
          if (uVar5 == 0) {
            cVar12 = '\x01';
            pcVar11 = param_1;
            do {
              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);
              if (0 < (int)uVar5) {
                uVar8 = uVar5 & 7;
                pcVar10 = pcVar11;
                if (uVar8 != 0) {
                  pcVar9 = pcVar11;
                  if (uVar8 != 1) {
                    if (uVar8 != 2) {
                      if (uVar8 != 3) {
                        if (uVar8 != 4) {
                          if (uVar8 != 5) {
                            if (uVar8 != 6) {
                              *pcVar11 = cVar12;
                              pcVar9 = pcVar11 + 1;
                            }
                            *pcVar9 = cVar12;
                            pcVar9 = pcVar9 + 1;
                          }
                          *pcVar9 = cVar12;
                          pcVar9 = pcVar9 + 1;
                        }
                        *pcVar9 = cVar12;
                        pcVar9 = pcVar9 + 1;
                      }
                      *pcVar9 = cVar12;
                      pcVar9 = pcVar9 + 1;
                    }
                    *pcVar9 = cVar12;
                    pcVar9 = pcVar9 + 1;
                  }
                  *pcVar9 = cVar12;
                  pcVar10 = pcVar9 + 1;
                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;
                }
                do {
                  *pcVar10 = cVar12;
                  pcVar9 = pcVar10 + 8;
                  pcVar10[1] = cVar12;
                  pcVar10[2] = cVar12;
                  pcVar10[3] = cVar12;
                  pcVar10[4] = cVar12;
                  pcVar10[5] = cVar12;
                  pcVar10[6] = cVar12;
                  pcVar10[7] = cVar12;
                  pcVar10 = pcVar9;
                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);
              }
LAB_0015f0fe:
              cVar12 = cVar12 + '\x01';
              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);
              puVar3 = PTR_cipher_descriptor_001dded0;
              pcVar11 = pcVar11 + 0x80;
            } while (cVar12 != '\x04');
            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))
                              (param_1,uVar4,0,param_1 + 0x200);
            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));
            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);
            *(int *)(param_1 + 0x12a0) = param_2;
            param_1[0x12a4] = '\0';
            param_1[0x12a5] = '\0';
            param_1[0x12a6] = '\0';
            param_1[0x12a7] = '\0';
            *(undefined4 *)(param_1 + 0x12a8) = uVar1;
            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);
          }
          else {
            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);
          }
          free(__ptr);
          return (ulong)uVar5;
        }
        uVar6 = 0xd;
      }
      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {
        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);
        memcpy(param_1,param_3,uVar6);
        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),
               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));
        memcpy(param_1 + 0x100,
               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),
               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));
        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))
                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);
        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));
        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);
        *(int *)(param_1 + 0x12a0) = param_2;
        param_1[0x12a4] = '\0';
        param_1[0x12a5] = '\0';
        param_1[0x12a6] = '\0';
        param_1[0x12a7] = '\0';
        *(undefined4 *)(param_1 + 0x12a8) = uVar1;
        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);
        uVar6 = (ulong)uVar4;
      }
    }
  }
  return uVar6;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
TEST RDI,RDI
JZ 0x0015f1e8
MOV R15,RDX
TEST RDX,RDX
JZ 0x0015f1d0
MOV RBP,RDI
MOV EDI,ESI
MOV R13D,ESI
MOV R12,RCX
CALL 0x00113da0
TEST EAX,EAX
JNZ 0x0015f010
MOVSXD RAX,R13D
LEA R9,[RAX + RAX*0x2]
MOV EAX,0x10
MOV RBX,R9
SHL RBX,0x6
ADD RBX,qword ptr [0x001dded0]
MOV R14D,dword ptr [RBX + 0x14]
TEST R14B,0x7
JNZ 0x0015f010
TEST R12D,0x8000
JZ 0x0015f020
MOVSXD R11,R14D
AND R12,-0x8001
ADD R11,R11
CMP R11,R12
JA 0x0015f010
LEA EAX,[R14 + R14*0x1]
MOV RSI,R15
MOV RDI,RBP
MOVSXD R9,EAX
SUB R12,R9
MOV RDX,R12
CALL 0x00113f70
MOVSXD RDX,dword ptr [RBX + 0x14]
LEA RDI,[RBP + 0x80]
LEA RSI,[R15 + R12*0x1]
CALL 0x00113f70
MOVSXD RDX,dword ptr [RBX + 0x14]
LEA RDI,[RBP + 0x100]
LEA RSI,[RDX + R12*0x1]
ADD RSI,R15
CALL 0x00113f70
XOR EDX,EDX
MOV ESI,R12D
MOV RDI,RBP
LEA RCX,[RBP + 0x200]
CALL qword ptr [RBX + 0x20]
MOVSXD RSI,dword ptr [RBX + 0x14]
LEA RDI,[RBP + 0x180]
MOV dword ptr [RSP],EAX
CALL 0x00114e00
MOV EDX,dword ptr [RBX + 0x14]
XOR EDI,EDI
MOV dword ptr [RBP + 0x12a0],R13D
MOV dword ptr [RBP + 0x12a4],0x0
MOV dword ptr [RBP + 0x12a8],EDX
CALL qword ptr [RBX + 0x40]
MOV EAX,dword ptr [RSP]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV ESI,0x10a0
MOV EDI,0x1
MOV qword ptr [RSP + 0x8],R9
CALL 0x00113d60
MOV qword ptr [RSP],RAX
TEST RAX,RAX
JZ 0x0015f1c6
XOR EDX,EDX
MOV RCX,RAX
MOV ESI,R12D
MOV RDI,R15
CALL qword ptr [RBX + 0x20]
TEST EAX,EAX
JNZ 0x0015f1a0
MOV R12,RBP
MOV R15D,0x1
MOV EDX,dword ptr [RBX + 0x14]
TEST EDX,EDX
JLE 0x0015f0fe
LEA ECX,[RDX + -0x1]
MOV RDI,R12
LEA RSI,[R12 + RCX*0x1 + 0x1]
ADD RCX,0x1
AND ECX,0x7
JZ 0x0015f0d6
CMP RCX,0x1
JZ 0x0015f0ca
CMP RCX,0x2
JZ 0x0015f0c3
CMP RCX,0x3
JZ 0x0015f0bc
CMP RCX,0x4
JZ 0x0015f0b5
CMP RCX,0x5
JZ 0x0015f0ae
CMP RCX,0x6
JNZ 0x0015f1b8
MOV byte ptr [RDI],R15B
ADD RDI,0x1
MOV byte ptr [RDI],R15B
ADD RDI,0x1
MOV byte ptr [RDI],R15B
ADD RDI,0x1
MOV byte ptr [RDI],R15B
ADD RDI,0x1
MOV byte ptr [RDI],R15B
ADD RDI,0x1
MOV byte ptr [RDI],R15B
ADD RDI,0x1
CMP RSI,RDI
JZ 0x0015f0fe
MOV byte ptr [RDI],R15B
ADD RDI,0x8
MOV byte ptr [RDI + -0x7],R15B
MOV byte ptr [RDI + -0x6],R15B
MOV byte ptr [RDI + -0x5],R15B
MOV byte ptr [RDI + -0x4],R15B
MOV byte ptr [RDI + -0x3],R15B
MOV byte ptr [RDI + -0x2],R15B
MOV byte ptr [RDI + -0x1],R15B
CMP RSI,RDI
JNZ 0x0015f0d6
ADD R15D,0x1
MOV RSI,R12
MOV RDI,R12
MOV RDX,qword ptr [RSP]
CALL qword ptr [RBX + 0x28]
SUB R12,-0x80
CMP R15B,0x4
JNZ 0x0015f060
MOV RBX,qword ptr [RSP + 0x8]
XOR EDX,EDX
MOV ESI,R14D
MOV RDI,RBP
LEA RCX,[RBP + 0x200]
SHL RBX,0x6
ADD RBX,qword ptr [0x001dded0]
CALL qword ptr [RBX + 0x20]
MOVSXD RSI,dword ptr [RBX + 0x14]
LEA RDI,[RBP + 0x180]
MOV dword ptr [RSP + 0x8],EAX
CALL 0x00114e00
MOV R8D,dword ptr [RBX + 0x14]
MOV RDI,qword ptr [RSP]
MOV dword ptr [RBP + 0x12a0],R13D
MOV dword ptr [RBP + 0x12a4],0x0
MOV dword ptr [RBP + 0x12a8],R8D
CALL qword ptr [RBX + 0x40]
MOV R10D,dword ptr [RSP + 0x8]
MOV RDI,qword ptr [RSP]
MOV dword ptr [RSP + 0x8],R10D
CALL 0x00113130
MOV EAX,dword ptr [RSP + 0x8]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV dword ptr [RSP + 0x8],EAX
MOV RDI,qword ptr [RSP]
CALL qword ptr [RBX + 0x40]
MOV R10D,dword ptr [RSP + 0x8]
JMP 0x0015f17b
MOV byte ptr [R12],R15B
LEA RDI,[R12 + 0x1]
JMP 0x0015f0a7
MOV EAX,0xd
JMP 0x0015f010
MOV EDX,0x20
LEA RSI,[0x1bd95f]
LEA RDI,[0x1c5e5d]
CALL 0x00114270
MOV EDX,0x1f
LEA RSI,[0x1bd95f]
LEA RDI,[0x1bd939]
CALL 0x00114270
(translation_unit "ulong xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)\n\n{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}\n\n" (function_definition "ulong xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)\n\n{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}" type_identifier (function_declarator "xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)" identifier (parameter_list "(char *param_1,int param_2,void *param_3,ulong param_4)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "void *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "char cVar12;" primitive_type identifier ;) (if_statement "if (param_1 == (char *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" if (parenthesized_expression "(param_1 == (char *)0x0)" ( (binary_expression "param_1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" { comment (expression_statement "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);" (call_expression "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" identifier (argument_list "("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" ( (string_literal ""xcbc != NULL"" " string_content ") , (string_literal ""src/mac/xcbc/xcbc_init.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" if (parenthesized_expression "(param_3 == (void *)0x0)" ( (binary_expression "param_3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);" (call_expression "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" identifier (argument_list "("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/mac/xcbc/xcbc_init.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "uVar6 = cipher_is_valid(param_2);" (assignment_expression "uVar6 = cipher_is_valid(param_2)" identifier = (call_expression "cipher_is_valid(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "puVar2 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar2 = PTR_cipher_descriptor_001dded0" identifier = identifier) ;) (if_statement "if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }" if (parenthesized_expression "((int)uVar6 == 0)" ( (binary_expression "(int)uVar6 == 0" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) (compound_statement "{\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }" { (expression_statement "lVar7 = (long)param_2;" (assignment_expression "lVar7 = (long)param_2" identifier = (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "uVar6 = 0x10;" (assignment_expression "uVar6 = 0x10" identifier = number_literal) ;) (expression_statement "uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }" if (parenthesized_expression "((uVar4 & 7) == 0)" ( (binary_expression "(uVar4 & 7) == 0" (parenthesized_expression "(uVar4 & 7)" ( (binary_expression "uVar4 & 7" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }" { (if_statement "if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" if (parenthesized_expression "((param_4 & 0x8000) == 0)" ( (binary_expression "(param_4 & 0x8000) == 0" (parenthesized_expression "(param_4 & 0x8000)" ( (binary_expression "param_4 & 0x8000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }" { (expression_statement "__ptr = calloc(1,0x10a0);" (assignment_expression "__ptr = calloc(1,0x10a0)" identifier = (call_expression "calloc(1,0x10a0)" identifier (argument_list "(1,0x10a0)" ( number_literal , number_literal )))) ;) (if_statement "if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }" { (expression_statement "uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);" (assignment_expression "uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr)" identifier = (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(param_3,param_4 & 0xffffffff,0,__ptr)" ( identifier , (binary_expression "param_4 & 0xffffffff" identifier & number_literal) , number_literal , identifier )))) ;) (if_statement "if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" { (expression_statement "cVar12 = '\x01';" (assignment_expression "cVar12 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "pcVar11 = param_1;" (assignment_expression "pcVar11 = param_1" identifier = identifier) ;) (do_statement "do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');" do (compound_statement "{\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            }" { (expression_statement "uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }" if (parenthesized_expression "(0 < (int)uVar5)" ( (binary_expression "0 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }" { (expression_statement "uVar8 = uVar5 & 7;" (assignment_expression "uVar8 = uVar5 & 7" identifier = (binary_expression "uVar5 & 7" identifier & number_literal)) ;) (expression_statement "pcVar10 = pcVar11;" (assignment_expression "pcVar10 = pcVar11" identifier = identifier) ;) (if_statement "if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }" { (expression_statement "pcVar9 = pcVar11;" (assignment_expression "pcVar9 = pcVar11" identifier = identifier) ;) (if_statement "if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }" if (parenthesized_expression "(uVar8 != 1)" ( (binary_expression "uVar8 != 1" identifier != number_literal) )) (compound_statement "{\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }" { (if_statement "if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }" if (parenthesized_expression "(uVar8 != 2)" ( (binary_expression "uVar8 != 2" identifier != number_literal) )) (compound_statement "{\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }" { (if_statement "if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }" if (parenthesized_expression "(uVar8 != 3)" ( (binary_expression "uVar8 != 3" identifier != number_literal) )) (compound_statement "{\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }" { (if_statement "if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }" if (parenthesized_expression "(uVar8 != 4)" ( (binary_expression "uVar8 != 4" identifier != number_literal) )) (compound_statement "{\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }" { (if_statement "if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }" if (parenthesized_expression "(uVar8 != 5)" ( (binary_expression "uVar8 != 5" identifier != number_literal) )) (compound_statement "{\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }" { (if_statement "if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }" if (parenthesized_expression "(uVar8 != 6)" ( (binary_expression "uVar8 != 6" identifier != number_literal) )) (compound_statement "{\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }" { (expression_statement "*pcVar11 = cVar12;" (assignment_expression "*pcVar11 = cVar12" (pointer_expression "*pcVar11" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar11 + 1;" (assignment_expression "pcVar9 = pcVar11 + 1" identifier = (binary_expression "pcVar11 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar10 = pcVar9 + 1;" (assignment_expression "pcVar10 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) (if_statement "if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;" if (parenthesized_expression "(pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1)" ( (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1)" identifier + (call_expression "(ulong)(uVar5 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) )))) + number_literal) == (binary_expression "pcVar9 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0015f0fe;" goto statement_identifier ;)) })) (do_statement "do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);" do (compound_statement "{\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                }" { (expression_statement "*pcVar10 = cVar12;" (assignment_expression "*pcVar10 = cVar12" (pointer_expression "*pcVar10" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar10 + 8;" (assignment_expression "pcVar9 = pcVar10 + 8" identifier = (binary_expression "pcVar10 + 8" identifier + number_literal)) ;) (expression_statement "pcVar10[1] = cVar12;" (assignment_expression "pcVar10[1] = cVar12" (subscript_expression "pcVar10[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[2] = cVar12;" (assignment_expression "pcVar10[2] = cVar12" (subscript_expression "pcVar10[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[3] = cVar12;" (assignment_expression "pcVar10[3] = cVar12" (subscript_expression "pcVar10[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[4] = cVar12;" (assignment_expression "pcVar10[4] = cVar12" (subscript_expression "pcVar10[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[5] = cVar12;" (assignment_expression "pcVar10[5] = cVar12" (subscript_expression "pcVar10[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[6] = cVar12;" (assignment_expression "pcVar10[6] = cVar12" (subscript_expression "pcVar10[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[7] = cVar12;" (assignment_expression "pcVar10[7] = cVar12" (subscript_expression "pcVar10[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10 = pcVar9;" (assignment_expression "pcVar10 = pcVar9" identifier = identifier) ;) }) while (parenthesized_expression "(pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9)" ( (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9" (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1)" identifier + (call_expression "(ulong)(uVar5 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) )))) + number_literal) != identifier) )) ;) })) (labeled_statement "LAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';" statement_identifier : (expression_statement "cVar12 = cVar12 + '\x01';" (assignment_expression "cVar12 = cVar12 + '\x01'" identifier = (binary_expression "cVar12 + '\x01'" identifier + (char_literal "'\x01'" ' escape_sequence '))) ;)) (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x28)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x28" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(pcVar11,pcVar11,__ptr)" ( identifier , identifier , identifier ))) ;) (expression_statement "puVar3 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar3 = PTR_cipher_descriptor_001dded0" identifier = identifier) ;) (expression_statement "pcVar11 = pcVar11 + 0x80;" (assignment_expression "pcVar11 = pcVar11 + 0x80" identifier = (binary_expression "pcVar11 + 0x80" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar12 != '\x04')" ( (binary_expression "cVar12 != '\x04'" identifier != (char_literal "'\x04'" ' escape_sequence ')) )) ;) (expression_statement "uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);" (assignment_expression "uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200)" identifier = (call_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(param_1,uVar4,0,param_1 + 0x200)" ( identifier , identifier , number_literal , (binary_expression "param_1 + 0x200" identifier + number_literal) )))) ;) (expression_statement "zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x180" identifier + number_literal) , (cast_expression "(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar3 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar3 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar3 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar3 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x12a0) = param_2;" (assignment_expression "*(int *)(param_1 + 0x12a0) = param_2" (pointer_expression "*(int *)(param_1 + 0x12a0)" * (cast_expression "(int *)(param_1 + 0x12a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a0)" ( (binary_expression "param_1 + 0x12a0" identifier + number_literal) )))) = identifier) ;) (expression_statement "param_1[0x12a4] = '\0';" (assignment_expression "param_1[0x12a4] = '\0'" (subscript_expression "param_1[0x12a4]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a5] = '\0';" (assignment_expression "param_1[0x12a5] = '\0'" (subscript_expression "param_1[0x12a5]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a6] = '\0';" (assignment_expression "param_1[0x12a6] = '\0'" (subscript_expression "param_1[0x12a6]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a7] = '\0';" (assignment_expression "param_1[0x12a7] = '\0'" (subscript_expression "param_1[0x12a7]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(undefined4 *)(param_1 + 0x12a8) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x12a8) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x12a8)" * (cast_expression "(undefined4 *)(param_1 + 0x12a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a8)" ( (binary_expression "param_1 + 0x12a8" identifier + number_literal) )))) = identifier) ;) (expression_statement "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar3 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar3 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(__ptr)" ( identifier ))) ;) }) (else_clause "else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" else (compound_statement "{\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" { (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(__ptr)" ( identifier ))) ;) }))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return (ulong)uVar5;" return (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) ;) })) (expression_statement "uVar6 = 0xd;" (assignment_expression "uVar6 = 0xd" identifier = number_literal) ;) }) (else_clause "else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" else (if_statement "if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" if (parenthesized_expression "((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff))" ( (binary_expression "(ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)" (call_expression "(ulong)((long)(int)uVar4 * 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(int)uVar4 * 2)" ( (binary_expression "(long)(int)uVar4 * 2" (cast_expression "(long)(int)uVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) * number_literal) ))) <= (parenthesized_expression "(param_4 & 0xffffffffffff7fff)" ( (binary_expression "param_4 & 0xffffffffffff7fff" identifier & number_literal) ))) )) (compound_statement "{\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" { (expression_statement "uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);" (assignment_expression "uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2)" identifier = (binary_expression "(param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2)" (parenthesized_expression "(param_4 & 0xffffffffffff7fff)" ( (binary_expression "param_4 & 0xffffffffffff7fff" identifier & number_literal) )) - (cast_expression "(long)(int)(uVar4 * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(uVar4 * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar4 * 2)" ( (binary_expression "uVar4 * 2" identifier * number_literal) )))))) ;) (expression_statement "memcpy(param_1,param_3,uVar6);" (call_expression "memcpy(param_1,param_3,uVar6)" identifier (argument_list "(param_1,param_3,uVar6)" ( identifier , identifier , identifier ))) ;) (expression_statement "memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x80" identifier + number_literal) , (cast_expression "(void *)((long)param_3 + uVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + uVar6)" ( (binary_expression "(long)param_3 + uVar6" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x100" identifier + number_literal) , (cast_expression "(void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3)" ( (binary_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3" (binary_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6" (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) + identifier) + (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) , (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);" (assignment_expression "uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" identifier = (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" ( identifier , (binary_expression "uVar6 & 0xffffffff" identifier & number_literal) , number_literal , (binary_expression "param_1 + 0x200" identifier + number_literal) )))) ;) (expression_statement "zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x180" identifier + number_literal) , (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x12a0) = param_2;" (assignment_expression "*(int *)(param_1 + 0x12a0) = param_2" (pointer_expression "*(int *)(param_1 + 0x12a0)" * (cast_expression "(int *)(param_1 + 0x12a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a0)" ( (binary_expression "param_1 + 0x12a0" identifier + number_literal) )))) = identifier) ;) (expression_statement "param_1[0x12a4] = '\0';" (assignment_expression "param_1[0x12a4] = '\0'" (subscript_expression "param_1[0x12a4]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a5] = '\0';" (assignment_expression "param_1[0x12a5] = '\0'" (subscript_expression "param_1[0x12a5]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a6] = '\0';" (assignment_expression "param_1[0x12a6] = '\0'" (subscript_expression "param_1[0x12a6]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a7] = '\0';" (assignment_expression "param_1[0x12a7] = '\0'" (subscript_expression "param_1[0x12a7]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(undefined4 *)(param_1 + 0x12a8) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x12a8) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x12a8)" * (cast_expression "(undefined4 *)(param_1 + 0x12a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a8)" ( (binary_expression "param_1 + 0x12a8" identifier + number_literal) )))) = identifier) ;) (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar6 = (ulong)uVar4;" (assignment_expression "uVar6 = (ulong)uVar4" identifier = (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })))) })) })) (return_statement "return uVar6;" return identifier ;) })))
(translation_unit "int xcbc_init(xcbc_state *xcbc,int cipher,uchar *key,ulong keylen)\n\n{\n  xcbc_state *pxVar1;\n  uint uVar2;\n  int iVar3;\n  undefined *puVar4;\n  undefined *puVar5;\n  int iVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  xcbc_state *pxVar9;\n  xcbc_state *pxVar10;\n  ulong __n;\n  xcbc_state *pxVar11;\n  uchar uVar12;\n  \n  if (xcbc == (xcbc_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  iVar6 = cipher_is_valid(cipher);\n  puVar4 = PTR_cipher_descriptor_001dded0;\n  if (iVar6 == 0) {\n    lVar7 = (long)cipher;\n    iVar6 = 0x10;\n    uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar2 & 7) == 0) {\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }\n  }\n  return iVar6;\n}\n\n" (function_definition "int xcbc_init(xcbc_state *xcbc,int cipher,uchar *key,ulong keylen)\n\n{\n  xcbc_state *pxVar1;\n  uint uVar2;\n  int iVar3;\n  undefined *puVar4;\n  undefined *puVar5;\n  int iVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  xcbc_state *pxVar9;\n  xcbc_state *pxVar10;\n  ulong __n;\n  xcbc_state *pxVar11;\n  uchar uVar12;\n  \n  if (xcbc == (xcbc_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  iVar6 = cipher_is_valid(cipher);\n  puVar4 = PTR_cipher_descriptor_001dded0;\n  if (iVar6 == 0) {\n    lVar7 = (long)cipher;\n    iVar6 = 0x10;\n    uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar2 & 7) == 0) {\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }\n  }\n  return iVar6;\n}" primitive_type (function_declarator "xcbc_init(xcbc_state *xcbc,int cipher,uchar *key,ulong keylen)" identifier (parameter_list "(xcbc_state *xcbc,int cipher,uchar *key,ulong keylen)" ( (parameter_declaration "xcbc_state *xcbc" type_identifier (pointer_declarator "*xcbc" * identifier)) , (parameter_declaration "int cipher" primitive_type identifier) , (parameter_declaration "uchar *key" type_identifier (pointer_declarator "*key" * identifier)) , (parameter_declaration "ulong keylen" type_identifier identifier) ))) (compound_statement "{\n  xcbc_state *pxVar1;\n  uint uVar2;\n  int iVar3;\n  undefined *puVar4;\n  undefined *puVar5;\n  int iVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  xcbc_state *pxVar9;\n  xcbc_state *pxVar10;\n  ulong __n;\n  xcbc_state *pxVar11;\n  uchar uVar12;\n  \n  if (xcbc == (xcbc_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  iVar6 = cipher_is_valid(cipher);\n  puVar4 = PTR_cipher_descriptor_001dded0;\n  if (iVar6 == 0) {\n    lVar7 = (long)cipher;\n    iVar6 = 0x10;\n    uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar2 & 7) == 0) {\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }\n  }\n  return iVar6;\n}" { (declaration "xcbc_state *pxVar1;" type_identifier (pointer_declarator "*pxVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "xcbc_state *pxVar9;" type_identifier (pointer_declarator "*pxVar9" * identifier) ;) (declaration "xcbc_state *pxVar10;" type_identifier (pointer_declarator "*pxVar10" * identifier) ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "xcbc_state *pxVar11;" type_identifier (pointer_declarator "*pxVar11" * identifier) ;) (declaration "uchar uVar12;" type_identifier identifier ;) (if_statement "if (xcbc == (xcbc_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" if (parenthesized_expression "(xcbc == (xcbc_state *)0x0)" ( (binary_expression "xcbc == (xcbc_state *)0x0" identifier == (cast_expression "(xcbc_state *)0x0" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" { comment (expression_statement "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);" (call_expression "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" identifier (argument_list "("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" ( (string_literal ""xcbc != NULL"" " string_content ") , (string_literal ""src/mac/xcbc/xcbc_init.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" if (parenthesized_expression "(key == (uchar *)0x0)" ( (binary_expression "key == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);" (call_expression "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" identifier (argument_list "("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/mac/xcbc/xcbc_init.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "iVar6 = cipher_is_valid(cipher);" (assignment_expression "iVar6 = cipher_is_valid(cipher)" identifier = (call_expression "cipher_is_valid(cipher)" identifier (argument_list "(cipher)" ( identifier )))) ;) (expression_statement "puVar4 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar4 = PTR_cipher_descriptor_001dded0" identifier = identifier) ;) (if_statement "if (iVar6 == 0) {\n    lVar7 = (long)cipher;\n    iVar6 = 0x10;\n    uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar2 & 7) == 0) {\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }\n  }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n    lVar7 = (long)cipher;\n    iVar6 = 0x10;\n    uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar2 & 7) == 0) {\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }\n  }" { (expression_statement "lVar7 = (long)cipher;" (assignment_expression "lVar7 = (long)cipher" identifier = (cast_expression "(long)cipher" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "iVar6 = 0x10;" (assignment_expression "iVar6 = 0x10" identifier = number_literal) ;) (expression_statement "uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar2 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if ((uVar2 & 7) == 0) {\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }" if (parenthesized_expression "((uVar2 & 7) == 0)" ( (binary_expression "(uVar2 & 7) == 0" (parenthesized_expression "(uVar2 & 7)" ( (binary_expression "uVar2 & 7" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }\n    }" { (if_statement "if ((keylen & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }" if (parenthesized_expression "((keylen & 0x8000) == 0)" ( (binary_expression "(keylen & 0x8000) == 0" (parenthesized_expression "(keylen & 0x8000)" ( (binary_expression "keylen & 0x8000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }\n        iVar6 = 0xd;\n      }" { (expression_statement "__ptr = calloc(1,0x10a0);" (assignment_expression "__ptr = calloc(1,0x10a0)" identifier = (call_expression "calloc(1,0x10a0)" identifier (argument_list "(1,0x10a0)" ( number_literal , number_literal )))) ;) (if_statement "if (__ptr != (void *)0x0) {\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);\n          if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return iVar6;\n        }" { (expression_statement "iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr);" (assignment_expression "iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr)" identifier = (call_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(key,keylen & 0xffffffff,0,__ptr)" (parenthesized_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(puVar4 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(puVar4 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(puVar4 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(key,keylen & 0xffffffff,0,__ptr)" ( identifier , (binary_expression "keylen & 0xffffffff" identifier & number_literal) , number_literal , identifier )))) ;) (if_statement "if (iVar6 == 0) {\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n            uVar12 = '\x01';\n            pxVar11 = xcbc;\n            do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');\n            iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);\n            zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));\n            iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);\n            xcbc->cipher = cipher;\n            xcbc->buflen = 0;\n            xcbc->blocksize = iVar3;\n            (**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" { (expression_statement "uVar12 = '\x01';" (assignment_expression "uVar12 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "pxVar11 = xcbc;" (assignment_expression "pxVar11 = xcbc" identifier = identifier) ;) (do_statement "do {\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            } while (uVar12 != '\x04');" do (compound_statement "{\n              uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }\nLAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';\n              (**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);\n              puVar5 = PTR_cipher_descriptor_001dded0;\n              pxVar11 = (xcbc_state *)(pxVar11->K + 1);\n            }" { (expression_statement "uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar8 = *(uint *)(puVar4 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(uint *)(puVar4 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(uint *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (0 < (int)uVar8) {\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }" if (parenthesized_expression "(0 < (int)uVar8)" ( (binary_expression "0 < (int)uVar8" number_literal < (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);\n                uVar8 = uVar8 & 7;\n                pxVar9 = pxVar11;\n                if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }\n                do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);\n              }" { (expression_statement "pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1);" (assignment_expression "pxVar1 = (xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar11->K[0] + (ulong)(uVar8 - 1) + 1)" ( (binary_expression "pxVar11->K[0] + (ulong)(uVar8 - 1) + 1" (binary_expression "pxVar11->K[0] + (ulong)(uVar8 - 1)" (subscript_expression "pxVar11->K[0]" (field_expression "pxVar11->K" identifier -> field_identifier) [ number_literal ]) + (call_expression "(ulong)(uVar8 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar8 - 1)" ( (binary_expression "uVar8 - 1" identifier - number_literal) )))) + number_literal) )))) ;) (expression_statement "uVar8 = uVar8 & 7;" (assignment_expression "uVar8 = uVar8 & 7" identifier = (binary_expression "uVar8 & 7" identifier & number_literal)) ;) (expression_statement "pxVar9 = pxVar11;" (assignment_expression "pxVar9 = pxVar11" identifier = identifier) ;) (if_statement "if (uVar8 != 0) {\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  if (pxVar1 == pxVar9) goto LAB_0015f0fe;\n                }" { (if_statement "if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }" if (parenthesized_expression "(uVar8 != 1)" ( (binary_expression "uVar8 != 1" identifier != number_literal) )) (compound_statement "{\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }\n                    pxVar9->K[0][0] = uVar12;\n                    pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                  }" { (if_statement "if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }" if (parenthesized_expression "(uVar8 != 2)" ( (binary_expression "uVar8 != 2" identifier != number_literal) )) (compound_statement "{\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }\n                      pxVar9->K[0][0] = uVar12;\n                      pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                    }" { (if_statement "if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }" if (parenthesized_expression "(uVar8 != 3)" ( (binary_expression "uVar8 != 3" identifier != number_literal) )) (compound_statement "{\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }\n                        pxVar9->K[0][0] = uVar12;\n                        pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                      }" { (if_statement "if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }" if (parenthesized_expression "(uVar8 != 4)" ( (binary_expression "uVar8 != 4" identifier != number_literal) )) (compound_statement "{\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }\n                          pxVar9->K[0][0] = uVar12;\n                          pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                        }" { (if_statement "if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }" if (parenthesized_expression "(uVar8 != 5)" ( (binary_expression "uVar8 != 5" identifier != number_literal) )) (compound_statement "{\n                            if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }\n                            pxVar9->K[0][0] = uVar12;\n                            pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);\n                          }" { (if_statement "if (uVar8 != 6) {\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }" if (parenthesized_expression "(uVar8 != 6)" ( (binary_expression "uVar8 != 6" identifier != number_literal) )) (compound_statement "{\n                              pxVar11->K[0][0] = uVar12;\n                              pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);\n                            }" { (expression_statement "pxVar11->K[0][0] = uVar12;" (assignment_expression "pxVar11->K[0][0] = uVar12" (subscript_expression "pxVar11->K[0][0]" (subscript_expression "pxVar11->K[0]" (field_expression "pxVar11->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar11->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar11->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar11->K[0] + 1)" ( (binary_expression "pxVar11->K[0] + 1" (subscript_expression "pxVar11->K[0]" (field_expression "pxVar11->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) })) (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 1)" ( (binary_expression "pxVar9->K[0] + 1" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) })) (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 1)" ( (binary_expression "pxVar9->K[0] + 1" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) })) (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 1)" ( (binary_expression "pxVar9->K[0] + 1" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) })) (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 1)" ( (binary_expression "pxVar9->K[0] + 1" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) })) (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 1)" ( (binary_expression "pxVar9->K[0] + 1" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) })) (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1);" (assignment_expression "pxVar9 = (xcbc_state *)(pxVar9->K[0] + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 1)" ( (binary_expression "pxVar9->K[0] + 1" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) (if_statement "if (pxVar1 == pxVar9) goto LAB_0015f0fe;" if (parenthesized_expression "(pxVar1 == pxVar9)" ( (binary_expression "pxVar1 == pxVar9" identifier == identifier) )) (goto_statement "goto LAB_0015f0fe;" goto statement_identifier ;)) })) (do_statement "do {\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                } while (pxVar1 != pxVar10);" do (compound_statement "{\n                  pxVar9->K[0][0] = uVar12;\n                  pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);\n                  pxVar9->K[0][1] = uVar12;\n                  pxVar9->K[0][2] = uVar12;\n                  pxVar9->K[0][3] = uVar12;\n                  pxVar9->K[0][4] = uVar12;\n                  pxVar9->K[0][5] = uVar12;\n                  pxVar9->K[0][6] = uVar12;\n                  pxVar9->K[0][7] = uVar12;\n                  pxVar9 = pxVar10;\n                }" { (expression_statement "pxVar9->K[0][0] = uVar12;" (assignment_expression "pxVar9->K[0][0] = uVar12" (subscript_expression "pxVar9->K[0][0]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8);" (assignment_expression "pxVar10 = (xcbc_state *)(pxVar9->K[0] + 8)" identifier = (cast_expression "(xcbc_state *)(pxVar9->K[0] + 8)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar9->K[0] + 8)" ( (binary_expression "pxVar9->K[0] + 8" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) + number_literal) )))) ;) (expression_statement "pxVar9->K[0][1] = uVar12;" (assignment_expression "pxVar9->K[0][1] = uVar12" (subscript_expression "pxVar9->K[0][1]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9->K[0][2] = uVar12;" (assignment_expression "pxVar9->K[0][2] = uVar12" (subscript_expression "pxVar9->K[0][2]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9->K[0][3] = uVar12;" (assignment_expression "pxVar9->K[0][3] = uVar12" (subscript_expression "pxVar9->K[0][3]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9->K[0][4] = uVar12;" (assignment_expression "pxVar9->K[0][4] = uVar12" (subscript_expression "pxVar9->K[0][4]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9->K[0][5] = uVar12;" (assignment_expression "pxVar9->K[0][5] = uVar12" (subscript_expression "pxVar9->K[0][5]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9->K[0][6] = uVar12;" (assignment_expression "pxVar9->K[0][6] = uVar12" (subscript_expression "pxVar9->K[0][6]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9->K[0][7] = uVar12;" (assignment_expression "pxVar9->K[0][7] = uVar12" (subscript_expression "pxVar9->K[0][7]" (subscript_expression "pxVar9->K[0]" (field_expression "pxVar9->K" identifier -> field_identifier) [ number_literal ]) [ number_literal ]) = identifier) ;) (expression_statement "pxVar9 = pxVar10;" (assignment_expression "pxVar9 = pxVar10" identifier = identifier) ;) }) while (parenthesized_expression "(pxVar1 != pxVar10)" ( (binary_expression "pxVar1 != pxVar10" identifier != identifier) )) ;) })) (labeled_statement "LAB_0015f0fe:\n              uVar12 = uVar12 + '\x01';" statement_identifier : (expression_statement "uVar12 = uVar12 + '\x01';" (assignment_expression "uVar12 = uVar12 + '\x01'" identifier = (binary_expression "uVar12 + '\x01'" identifier + (char_literal "'\x01'" ' escape_sequence '))) ;)) (expression_statement "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr);" (call_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))(pxVar11,pxVar11,__ptr)" (parenthesized_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x28))" ( (pointer_expression "**(code **)(puVar4 + lVar7 * 0xc0 + 0x28)" * (pointer_expression "*(code **)(puVar4 + lVar7 * 0xc0 + 0x28)" * (cast_expression "(code **)(puVar4 + lVar7 * 0xc0 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x28)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x28" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(pxVar11,pxVar11,__ptr)" ( identifier , identifier , identifier ))) ;) (expression_statement "puVar5 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar5 = PTR_cipher_descriptor_001dded0" identifier = identifier) ;) (expression_statement "pxVar11 = (xcbc_state *)(pxVar11->K + 1);" (assignment_expression "pxVar11 = (xcbc_state *)(pxVar11->K + 1)" identifier = (cast_expression "(xcbc_state *)(pxVar11->K + 1)" ( (type_descriptor "xcbc_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pxVar11->K + 1)" ( (binary_expression "pxVar11->K + 1" (field_expression "pxVar11->K" identifier -> field_identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(uVar12 != '\x04')" ( (binary_expression "uVar12 != '\x04'" identifier != (char_literal "'\x04'" ' escape_sequence ')) )) ;) (expression_statement "iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key);" (assignment_expression "iVar6 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key)" identifier = (call_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (xcbc,uVar2,0,&xcbc->key)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(xcbc,uVar2,0,&xcbc->key)" ( identifier , identifier , number_literal , (pointer_expression "&xcbc->key" & (field_expression "xcbc->key" identifier -> field_identifier)) )))) ;) (expression_statement "zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(xcbc->IV,(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14))" ( (field_expression "xcbc->IV" identifier -> field_identifier) , (cast_expression "(long)*(int *)(puVar5 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar5 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar5 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar5 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar5 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14);" (assignment_expression "iVar3 = *(int *)(puVar5 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(int *)(puVar5 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar5 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar5 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar5 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "xcbc->cipher = cipher;" (assignment_expression "xcbc->cipher = cipher" (field_expression "xcbc->cipher" identifier -> field_identifier) = identifier) ;) (expression_statement "xcbc->buflen = 0;" (assignment_expression "xcbc->buflen = 0" (field_expression "xcbc->buflen" identifier -> field_identifier) = number_literal) ;) (expression_statement "xcbc->blocksize = iVar3;" (assignment_expression "xcbc->blocksize = iVar3" (field_expression "xcbc->blocksize" identifier -> field_identifier) = identifier) ;) (expression_statement "(**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar5 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar5 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar5 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar5 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar5 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar5 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(__ptr)" ( identifier ))) ;) }) (else_clause "else {\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" else (compound_statement "{\n            (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" { (expression_statement "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar4 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar4 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar4 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(__ptr)" ( identifier ))) ;) }))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return iVar6;" return identifier ;) })) (expression_statement "iVar6 = 0xd;" (assignment_expression "iVar6 = 0xd" identifier = number_literal) ;) }) (else_clause "else if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }" else (if_statement "if ((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)) {\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }" if (parenthesized_expression "((ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff))" ( (binary_expression "(ulong)((long)(int)uVar2 * 2) <= (keylen & 0xffffffffffff7fff)" (call_expression "(ulong)((long)(int)uVar2 * 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(int)uVar2 * 2)" ( (binary_expression "(long)(int)uVar2 * 2" (cast_expression "(long)(int)uVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier)) * number_literal) ))) <= (parenthesized_expression "(keylen & 0xffffffffffff7fff)" ( (binary_expression "keylen & 0xffffffffffff7fff" identifier & number_literal) ))) )) (compound_statement "{\n        __n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);\n        memcpy(xcbc,key,__n);\n        memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);\n        zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));\n        iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);\n        xcbc->cipher = cipher;\n        xcbc->buflen = 0;\n        xcbc->blocksize = iVar3;\n        (**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);\n      }" { (expression_statement "__n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2);" (assignment_expression "__n = (keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2)" identifier = (binary_expression "(keylen & 0xffffffffffff7fff) - (long)(int)(uVar2 * 2)" (parenthesized_expression "(keylen & 0xffffffffffff7fff)" ( (binary_expression "keylen & 0xffffffffffff7fff" identifier & number_literal) )) - (cast_expression "(long)(int)(uVar2 * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(uVar2 * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar2 * 2)" ( (binary_expression "uVar2 * 2" identifier * number_literal) )))))) ;) (expression_statement "memcpy(xcbc,key,__n);" (call_expression "memcpy(xcbc,key,__n)" identifier (argument_list "(xcbc,key,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(xcbc->K + 1,key + __n,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "xcbc->K + 1" (field_expression "xcbc->K" identifier -> field_identifier) + number_literal) , (binary_expression "key + __n" identifier + identifier) , (cast_expression "(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(xcbc->K + 2,key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n,\n               (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "xcbc->K + 2" (field_expression "xcbc->K" identifier -> field_identifier) + number_literal) , (binary_expression "key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14) + __n" (binary_expression "key + (long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" identifier + (cast_expression "(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) )))))) + identifier) , (cast_expression "(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key);" (assignment_expression "iVar6 = (**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key)" identifier = (call_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))(xcbc,__n & 0xffffffff,0,&xcbc->key)" (parenthesized_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(puVar4 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(puVar4 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(puVar4 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(xcbc,__n & 0xffffffff,0,&xcbc->key)" ( identifier , (binary_expression "__n & 0xffffffff" identifier & number_literal) , number_literal , (pointer_expression "&xcbc->key" & (field_expression "xcbc->key" identifier -> field_identifier)) )))) ;) (expression_statement "zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(xcbc->IV,(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14))" ( (field_expression "xcbc->IV" identifier -> field_identifier) , (cast_expression "(long)*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14);" (assignment_expression "iVar3 = *(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar4 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "xcbc->cipher = cipher;" (assignment_expression "xcbc->cipher = cipher" (field_expression "xcbc->cipher" identifier -> field_identifier) = identifier) ;) (expression_statement "xcbc->buflen = 0;" (assignment_expression "xcbc->buflen = 0" (field_expression "xcbc->buflen" identifier -> field_identifier) = number_literal) ;) (expression_statement "xcbc->blocksize = iVar3;" (assignment_expression "xcbc->blocksize = iVar3" (field_expression "xcbc->blocksize" identifier -> field_identifier) = identifier) ;) (expression_statement "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0);" (call_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))(0)" (parenthesized_expression "(**(code **)(puVar4 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar4 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar4 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar4 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar4 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar4 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(0)" ( number_literal ))) ;) })))) })) })) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit "ulong xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)\n\n{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}\n\n" (function_definition "ulong xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)\n\n{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}" type_identifier (function_declarator "xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)" identifier (parameter_list "(char *param_1,int param_2,void *param_3,ulong param_4)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "void *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "char cVar12;" primitive_type identifier ;) (if_statement "if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" if (parenthesized_expression "(param_1 == (char *)0x0)" ( (binary_expression "param_1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" { (expression_statement "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);" (call_expression "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" identifier (argument_list "("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" ( (string_literal ""xcbc != NULL"" " string_content ") , (string_literal ""src/mac/xcbc/xcbc_init.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" if (parenthesized_expression "(param_3 == (void *)0x0)" ( (binary_expression "param_3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" { (expression_statement "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);" (call_expression "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" identifier (argument_list "("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/mac/xcbc/xcbc_init.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "uVar6 = cipher_is_valid(param_2);" (assignment_expression "uVar6 = cipher_is_valid(param_2)" identifier = (call_expression "cipher_is_valid(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "puVar2 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar2 = PTR_cipher_descriptor_001dded0" identifier = identifier) ;) (if_statement "if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }" if (parenthesized_expression "((int)uVar6 == 0)" ( (binary_expression "(int)uVar6 == 0" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) (compound_statement "{\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }" { (expression_statement "lVar7 = (long)param_2;" (assignment_expression "lVar7 = (long)param_2" identifier = (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "uVar6 = 0x10;" (assignment_expression "uVar6 = 0x10" identifier = number_literal) ;) (expression_statement "uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }" if (parenthesized_expression "((uVar4 & 7) == 0)" ( (binary_expression "(uVar4 & 7) == 0" (parenthesized_expression "(uVar4 & 7)" ( (binary_expression "uVar4 & 7" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }" { (if_statement "if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" if (parenthesized_expression "((param_4 & 0x8000) == 0)" ( (binary_expression "(param_4 & 0x8000) == 0" (parenthesized_expression "(param_4 & 0x8000)" ( (binary_expression "param_4 & 0x8000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }" { (expression_statement "__ptr = calloc(1,0x10a0);" (assignment_expression "__ptr = calloc(1,0x10a0)" identifier = (call_expression "calloc(1,0x10a0)" identifier (argument_list "(1,0x10a0)" ( number_literal , number_literal )))) ;) (if_statement "if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }" { (expression_statement "uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);" (assignment_expression "uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr)" identifier = (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(param_3,param_4 & 0xffffffff,0,__ptr)" ( identifier , (binary_expression "param_4 & 0xffffffff" identifier & number_literal) , number_literal , identifier )))) ;) (if_statement "if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" { (expression_statement "cVar12 = '\x01';" (assignment_expression "cVar12 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "pcVar11 = param_1;" (assignment_expression "pcVar11 = param_1" identifier = identifier) ;) (do_statement "do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');" do (compound_statement "{\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            }" { (expression_statement "uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }" if (parenthesized_expression "(0 < (int)uVar5)" ( (binary_expression "0 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }" { (expression_statement "uVar8 = uVar5 & 7;" (assignment_expression "uVar8 = uVar5 & 7" identifier = (binary_expression "uVar5 & 7" identifier & number_literal)) ;) (expression_statement "pcVar10 = pcVar11;" (assignment_expression "pcVar10 = pcVar11" identifier = identifier) ;) (if_statement "if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }" { (expression_statement "pcVar9 = pcVar11;" (assignment_expression "pcVar9 = pcVar11" identifier = identifier) ;) (if_statement "if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }" if (parenthesized_expression "(uVar8 != 1)" ( (binary_expression "uVar8 != 1" identifier != number_literal) )) (compound_statement "{\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }" { (if_statement "if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }" if (parenthesized_expression "(uVar8 != 2)" ( (binary_expression "uVar8 != 2" identifier != number_literal) )) (compound_statement "{\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }" { (if_statement "if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }" if (parenthesized_expression "(uVar8 != 3)" ( (binary_expression "uVar8 != 3" identifier != number_literal) )) (compound_statement "{\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }" { (if_statement "if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }" if (parenthesized_expression "(uVar8 != 4)" ( (binary_expression "uVar8 != 4" identifier != number_literal) )) (compound_statement "{\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }" { (if_statement "if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }" if (parenthesized_expression "(uVar8 != 5)" ( (binary_expression "uVar8 != 5" identifier != number_literal) )) (compound_statement "{\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }" { (if_statement "if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }" if (parenthesized_expression "(uVar8 != 6)" ( (binary_expression "uVar8 != 6" identifier != number_literal) )) (compound_statement "{\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }" { (expression_statement "*pcVar11 = cVar12;" (assignment_expression "*pcVar11 = cVar12" (pointer_expression "*pcVar11" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar11 + 1;" (assignment_expression "pcVar9 = pcVar11 + 1" identifier = (binary_expression "pcVar11 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) })) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" * identifier) = identifier) ;) (expression_statement "pcVar10 = pcVar9 + 1;" (assignment_expression "pcVar10 = pcVar9 + 1" identifier = (binary_expression "pcVar9 + 1" identifier + number_literal)) ;) (if_statement "if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;" if (parenthesized_expression "(pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1)" ( (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1)" identifier + (call_expression "(ulong)(uVar5 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) )))) + number_literal) == (binary_expression "pcVar9 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0015f0fe;" goto statement_identifier ;)) })) (do_statement "do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);" do (compound_statement "{\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                }" { (expression_statement "*pcVar10 = cVar12;" (assignment_expression "*pcVar10 = cVar12" (pointer_expression "*pcVar10" * identifier) = identifier) ;) (expression_statement "pcVar9 = pcVar10 + 8;" (assignment_expression "pcVar9 = pcVar10 + 8" identifier = (binary_expression "pcVar10 + 8" identifier + number_literal)) ;) (expression_statement "pcVar10[1] = cVar12;" (assignment_expression "pcVar10[1] = cVar12" (subscript_expression "pcVar10[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[2] = cVar12;" (assignment_expression "pcVar10[2] = cVar12" (subscript_expression "pcVar10[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[3] = cVar12;" (assignment_expression "pcVar10[3] = cVar12" (subscript_expression "pcVar10[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[4] = cVar12;" (assignment_expression "pcVar10[4] = cVar12" (subscript_expression "pcVar10[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[5] = cVar12;" (assignment_expression "pcVar10[5] = cVar12" (subscript_expression "pcVar10[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[6] = cVar12;" (assignment_expression "pcVar10[6] = cVar12" (subscript_expression "pcVar10[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10[7] = cVar12;" (assignment_expression "pcVar10[7] = cVar12" (subscript_expression "pcVar10[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar10 = pcVar9;" (assignment_expression "pcVar10 = pcVar9" identifier = identifier) ;) }) while (parenthesized_expression "(pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9)" ( (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9" (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1)" identifier + (call_expression "(ulong)(uVar5 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) )))) + number_literal) != identifier) )) ;) })) (labeled_statement "LAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';" statement_identifier : (expression_statement "cVar12 = cVar12 + '\x01';" (assignment_expression "cVar12 = cVar12 + '\x01'" identifier = (binary_expression "cVar12 + '\x01'" identifier + (char_literal "'\x01'" ' escape_sequence '))) ;)) (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x28)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x28" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(pcVar11,pcVar11,__ptr)" ( identifier , identifier , identifier ))) ;) (expression_statement "puVar3 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar3 = PTR_cipher_descriptor_001dded0" identifier = identifier) ;) (expression_statement "pcVar11 = pcVar11 + 0x80;" (assignment_expression "pcVar11 = pcVar11 + 0x80" identifier = (binary_expression "pcVar11 + 0x80" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar12 != '\x04')" ( (binary_expression "cVar12 != '\x04'" identifier != (char_literal "'\x04'" ' escape_sequence ')) )) ;) (expression_statement "uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);" (assignment_expression "uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200)" identifier = (call_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(param_1,uVar4,0,param_1 + 0x200)" ( identifier , identifier , number_literal , (binary_expression "param_1 + 0x200" identifier + number_literal) )))) ;) (expression_statement "zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x180" identifier + number_literal) , (cast_expression "(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar3 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar3 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar3 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar3 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x12a0) = param_2;" (assignment_expression "*(int *)(param_1 + 0x12a0) = param_2" (pointer_expression "*(int *)(param_1 + 0x12a0)" * (cast_expression "(int *)(param_1 + 0x12a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a0)" ( (binary_expression "param_1 + 0x12a0" identifier + number_literal) )))) = identifier) ;) (expression_statement "param_1[0x12a4] = '\0';" (assignment_expression "param_1[0x12a4] = '\0'" (subscript_expression "param_1[0x12a4]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a5] = '\0';" (assignment_expression "param_1[0x12a5] = '\0'" (subscript_expression "param_1[0x12a5]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a6] = '\0';" (assignment_expression "param_1[0x12a6] = '\0'" (subscript_expression "param_1[0x12a6]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a7] = '\0';" (assignment_expression "param_1[0x12a7] = '\0'" (subscript_expression "param_1[0x12a7]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(undefined4 *)(param_1 + 0x12a8) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x12a8) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x12a8)" * (cast_expression "(undefined4 *)(param_1 + 0x12a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a8)" ( (binary_expression "param_1 + 0x12a8" identifier + number_literal) )))) = identifier) ;) (expression_statement "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar3 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar3 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(__ptr)" ( identifier ))) ;) }) (else_clause "else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" else (compound_statement "{\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" { (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(__ptr)" ( identifier ))) ;) }))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return (ulong)uVar5;" return (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) ;) })) (expression_statement "uVar6 = 0xd;" (assignment_expression "uVar6 = 0xd" identifier = number_literal) ;) }) (else_clause "else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" else (if_statement "if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" if (parenthesized_expression "((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff))" ( (binary_expression "(ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)" (call_expression "(ulong)((long)(int)uVar4 * 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(int)uVar4 * 2)" ( (binary_expression "(long)(int)uVar4 * 2" (cast_expression "(long)(int)uVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) * number_literal) ))) <= (parenthesized_expression "(param_4 & 0xffffffffffff7fff)" ( (binary_expression "param_4 & 0xffffffffffff7fff" identifier & number_literal) ))) )) (compound_statement "{\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" { (expression_statement "uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);" (assignment_expression "uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2)" identifier = (binary_expression "(param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2)" (parenthesized_expression "(param_4 & 0xffffffffffff7fff)" ( (binary_expression "param_4 & 0xffffffffffff7fff" identifier & number_literal) )) - (cast_expression "(long)(int)(uVar4 * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(uVar4 * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar4 * 2)" ( (binary_expression "uVar4 * 2" identifier * number_literal) )))))) ;) (expression_statement "memcpy(param_1,param_3,uVar6);" (call_expression "memcpy(param_1,param_3,uVar6)" identifier (argument_list "(param_1,param_3,uVar6)" ( identifier , identifier , identifier ))) ;) (expression_statement "memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x80" identifier + number_literal) , (cast_expression "(void *)((long)param_3 + uVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + uVar6)" ( (binary_expression "(long)param_3 + uVar6" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x100" identifier + number_literal) , (cast_expression "(void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3)" ( (binary_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3" (binary_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6" (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) + identifier) + (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) , (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);" (assignment_expression "uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" identifier = (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x20)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" ( identifier , (binary_expression "uVar6 & 0xffffffff" identifier & number_literal) , number_literal , (binary_expression "param_1 + 0x200" identifier + number_literal) )))) ;) (expression_statement "zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" identifier (argument_list "(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" ( (binary_expression "param_1 + 0x180" identifier + number_literal) , (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ))) ;) (expression_statement "uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" * (cast_expression "(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x12a0) = param_2;" (assignment_expression "*(int *)(param_1 + 0x12a0) = param_2" (pointer_expression "*(int *)(param_1 + 0x12a0)" * (cast_expression "(int *)(param_1 + 0x12a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a0)" ( (binary_expression "param_1 + 0x12a0" identifier + number_literal) )))) = identifier) ;) (expression_statement "param_1[0x12a4] = '\0';" (assignment_expression "param_1[0x12a4] = '\0'" (subscript_expression "param_1[0x12a4]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a5] = '\0';" (assignment_expression "param_1[0x12a5] = '\0'" (subscript_expression "param_1[0x12a5]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a6] = '\0';" (assignment_expression "param_1[0x12a6] = '\0'" (subscript_expression "param_1[0x12a6]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "param_1[0x12a7] = '\0';" (assignment_expression "param_1[0x12a7] = '\0'" (subscript_expression "param_1[0x12a7]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(undefined4 *)(param_1 + 0x12a8) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x12a8) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x12a8)" * (cast_expression "(undefined4 *)(param_1 + 0x12a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12a8)" ( (binary_expression "param_1 + 0x12a8" identifier + number_literal) )))) = identifier) ;) (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))" ( (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" * (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x40)" ( (binary_expression "puVar2 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar2 + lVar7 * 0xc0" identifier + (binary_expression "lVar7 * 0xc0" identifier * number_literal)) + number_literal) ))))) )) (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar6 = (ulong)uVar4;" (assignment_expression "uVar6 = (ulong)uVar4" identifier = (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })))) })) })) (return_statement "return uVar6;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) ;) (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) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( IDENT , (binary_expression IDENT & LIT) , LIT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) )))) + LIT) == (binary_expression IDENT + LIT)) )) (goto_statement goto statement_identifier ;)) })) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) )))) + LIT) != IDENT) )) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;)) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( IDENT , IDENT , LIT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + 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 (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (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 (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( IDENT ))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE) ) IDENT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) * LIT) ))) <= (parenthesized_expression ( (binary_expression IDENT & LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT * LIT) )))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) + IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) ))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( IDENT , (binary_expression IDENT & LIT) , LIT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + 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 (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (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 (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) )) (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })))) })) })) (return_statement return IDENT ;) })))
(function_definition "ulong xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)\n\n{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}" (type_identifier "ulong") (function_declarator "xcbc_init(char *param_1,int param_2,void *param_3,ulong param_4)" (identifier "xcbc_init") (parameter_list "(char *param_1,int param_2,void *param_3,ulong param_4)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "void *param_3" (primitive_type "void") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  long lVar7;\n  void *__ptr;\n  uint uVar8;\n  char *pcVar9;\n  char *pcVar10;\n  char *pcVar11;\n  char cVar12;\n  \n  if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }\n  if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }\n  uVar6 = cipher_is_valid(param_2);\n  puVar2 = PTR_cipher_descriptor_001dded0;\n  if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }\n  return uVar6;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "void *__ptr;" (primitive_type "void") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "char *pcVar9;" (primitive_type "char") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "char *pcVar10;" (primitive_type "char") (pointer_declarator "*pcVar10" (* "*") (identifier "pcVar10")) (; ";")) (declaration "char *pcVar11;" (primitive_type "char") (pointer_declarator "*pcVar11" (* "*") (identifier "pcVar11")) (; ";")) (declaration "char cVar12;" (primitive_type "char") (identifier "cVar12") (; ";")) (if_statement "if (param_1 == (char *)0x0) {\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" (if "if") (parenthesized_expression "(param_1 == (char *)0x0)" (( "(") (binary_expression "param_1 == (char *)0x0" (identifier "param_1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);\n  }" ({ "{") (expression_statement "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);" (call_expression "crypt_argchk("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" (identifier "crypt_argchk") (argument_list "("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f)" (( "(") (string_literal ""xcbc != NULL"" (" """) (string_content "xcbc != NULL") (" """)) (, ",") (string_literal ""src/mac/xcbc/xcbc_init.c"" (" """) (string_content "src/mac/xcbc/xcbc_init.c") (" """)) (, ",") (number_literal "0x1f") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_3 == (void *)0x0) {\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" (if "if") (parenthesized_expression "(param_3 == (void *)0x0)" (( "(") (binary_expression "param_3 == (void *)0x0" (identifier "param_3") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);\n  }" ({ "{") (expression_statement "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);" (call_expression "crypt_argchk("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" (identifier "crypt_argchk") (argument_list "("key != NULL","src/mac/xcbc/xcbc_init.c",0x20)" (( "(") (string_literal ""key != NULL"" (" """) (string_content "key != NULL") (" """)) (, ",") (string_literal ""src/mac/xcbc/xcbc_init.c"" (" """) (string_content "src/mac/xcbc/xcbc_init.c") (" """)) (, ",") (number_literal "0x20") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = cipher_is_valid(param_2);" (assignment_expression "uVar6 = cipher_is_valid(param_2)" (identifier "uVar6") (= "=") (call_expression "cipher_is_valid(param_2)" (identifier "cipher_is_valid") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (expression_statement "puVar2 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar2 = PTR_cipher_descriptor_001dded0" (identifier "puVar2") (= "=") (identifier "PTR_cipher_descriptor_001dded0")) (; ";")) (if_statement "if ((int)uVar6 == 0) {\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }" (if "if") (parenthesized_expression "((int)uVar6 == 0)" (( "(") (binary_expression "(int)uVar6 == 0" (cast_expression "(int)uVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar6")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    lVar7 = (long)param_2;\n    uVar6 = 0x10;\n    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);\n    if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }\n  }" ({ "{") (expression_statement "lVar7 = (long)param_2;" (assignment_expression "lVar7 = (long)param_2" (identifier "lVar7") (= "=") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) (; ";")) (expression_statement "uVar6 = 0x10;" (assignment_expression "uVar6 = 0x10" (identifier "uVar6") (= "=") (number_literal "0x10")) (; ";")) (expression_statement "uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" (identifier "PTR_cipher_descriptor_001dded0") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if ((uVar4 & 7) == 0) {\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }" (if "if") (parenthesized_expression "((uVar4 & 7) == 0)" (( "(") (binary_expression "(uVar4 & 7) == 0" (parenthesized_expression "(uVar4 & 7)" (( "(") (binary_expression "uVar4 & 7" (identifier "uVar4") (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }\n    }" ({ "{") (if_statement "if ((param_4 & 0x8000) == 0) {\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }\n      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" (if "if") (parenthesized_expression "((param_4 & 0x8000) == 0)" (( "(") (binary_expression "(param_4 & 0x8000) == 0" (parenthesized_expression "(param_4 & 0x8000)" (( "(") (binary_expression "param_4 & 0x8000" (identifier "param_4") (& "&") (number_literal "0x8000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        __ptr = calloc(1,0x10a0);\n        if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }\n        uVar6 = 0xd;\n      }" ({ "{") (expression_statement "__ptr = calloc(1,0x10a0);" (assignment_expression "__ptr = calloc(1,0x10a0)" (identifier "__ptr") (= "=") (call_expression "calloc(1,0x10a0)" (identifier "calloc") (argument_list "(1,0x10a0)" (( "(") (number_literal "1") (, ",") (number_literal "0x10a0") () ")")))) (; ";")) (if_statement "if (__ptr != (void *)0x0) {\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }" (if "if") (parenthesized_expression "(__ptr != (void *)0x0)" (( "(") (binary_expression "__ptr != (void *)0x0" (identifier "__ptr") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);\n          if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          free(__ptr);\n          return (ulong)uVar5;\n        }" ({ "{") (expression_statement "uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);" (assignment_expression "uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr)" (identifier "uVar5") (= "=") (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))" (( "(") (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" (* "*") (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" (* "*") (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x20)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(param_3,param_4 & 0xffffffff,0,__ptr)" (( "(") (identifier "param_3") (, ",") (binary_expression "param_4 & 0xffffffff" (identifier "param_4") (& "&") (number_literal "0xffffffff")) (, ",") (number_literal "0") (, ",") (identifier "__ptr") () ")")))) (; ";")) (if_statement "if (uVar5 == 0) {\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }\n          else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            cVar12 = '\x01';\n            pcVar11 = param_1;\n            do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');\n            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);\n            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));\n            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);\n            *(int *)(param_1 + 0x12a0) = param_2;\n            param_1[0x12a4] = '\0';\n            param_1[0x12a5] = '\0';\n            param_1[0x12a6] = '\0';\n            param_1[0x12a7] = '\0';\n            *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" ({ "{") (expression_statement "cVar12 = '\x01';" (assignment_expression "cVar12 = '\x01'" (identifier "cVar12") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (expression_statement "pcVar11 = param_1;" (assignment_expression "pcVar11 = param_1" (identifier "pcVar11") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            } while (cVar12 != '\x04');" (do "do") (compound_statement "{\n              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);\n              if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }\nLAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';\n              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);\n              puVar3 = PTR_cipher_descriptor_001dded0;\n              pcVar11 = pcVar11 + 0x80;\n            }" ({ "{") (expression_statement "uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(uint *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if (0 < (int)uVar5) {\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }" (if "if") (parenthesized_expression "(0 < (int)uVar5)" (( "(") (binary_expression "0 < (int)uVar5" (number_literal "0") (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (compound_statement "{\n                uVar8 = uVar5 & 7;\n                pcVar10 = pcVar11;\n                if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }\n                do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);\n              }" ({ "{") (expression_statement "uVar8 = uVar5 & 7;" (assignment_expression "uVar8 = uVar5 & 7" (identifier "uVar8") (= "=") (binary_expression "uVar5 & 7" (identifier "uVar5") (& "&") (number_literal "7"))) (; ";")) (expression_statement "pcVar10 = pcVar11;" (assignment_expression "pcVar10 = pcVar11" (identifier "pcVar10") (= "=") (identifier "pcVar11")) (; ";")) (if_statement "if (uVar8 != 0) {\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }" (if "if") (parenthesized_expression "(uVar8 != 0)" (( "(") (binary_expression "uVar8 != 0" (identifier "uVar8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                  pcVar9 = pcVar11;\n                  if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }\n                  *pcVar9 = cVar12;\n                  pcVar10 = pcVar9 + 1;\n                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;\n                }" ({ "{") (expression_statement "pcVar9 = pcVar11;" (assignment_expression "pcVar9 = pcVar11" (identifier "pcVar9") (= "=") (identifier "pcVar11")) (; ";")) (if_statement "if (uVar8 != 1) {\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }" (if "if") (parenthesized_expression "(uVar8 != 1)" (( "(") (binary_expression "uVar8 != 1" (identifier "uVar8") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n                    if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }\n                    *pcVar9 = cVar12;\n                    pcVar9 = pcVar9 + 1;\n                  }" ({ "{") (if_statement "if (uVar8 != 2) {\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }" (if "if") (parenthesized_expression "(uVar8 != 2)" (( "(") (binary_expression "uVar8 != 2" (identifier "uVar8") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n                      if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }\n                      *pcVar9 = cVar12;\n                      pcVar9 = pcVar9 + 1;\n                    }" ({ "{") (if_statement "if (uVar8 != 3) {\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }" (if "if") (parenthesized_expression "(uVar8 != 3)" (( "(") (binary_expression "uVar8 != 3" (identifier "uVar8") (!= "!=") (number_literal "3")) () ")")) (compound_statement "{\n                        if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }\n                        *pcVar9 = cVar12;\n                        pcVar9 = pcVar9 + 1;\n                      }" ({ "{") (if_statement "if (uVar8 != 4) {\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }" (if "if") (parenthesized_expression "(uVar8 != 4)" (( "(") (binary_expression "uVar8 != 4" (identifier "uVar8") (!= "!=") (number_literal "4")) () ")")) (compound_statement "{\n                          if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }\n                          *pcVar9 = cVar12;\n                          pcVar9 = pcVar9 + 1;\n                        }" ({ "{") (if_statement "if (uVar8 != 5) {\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }" (if "if") (parenthesized_expression "(uVar8 != 5)" (( "(") (binary_expression "uVar8 != 5" (identifier "uVar8") (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n                            if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }\n                            *pcVar9 = cVar12;\n                            pcVar9 = pcVar9 + 1;\n                          }" ({ "{") (if_statement "if (uVar8 != 6) {\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }" (if "if") (parenthesized_expression "(uVar8 != 6)" (( "(") (binary_expression "uVar8 != 6" (identifier "uVar8") (!= "!=") (number_literal "6")) () ")")) (compound_statement "{\n                              *pcVar11 = cVar12;\n                              pcVar9 = pcVar11 + 1;\n                            }" ({ "{") (expression_statement "*pcVar11 = cVar12;" (assignment_expression "*pcVar11 = cVar12" (pointer_expression "*pcVar11" (* "*") (identifier "pcVar11")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar11 + 1;" (assignment_expression "pcVar9 = pcVar11 + 1" (identifier "pcVar9") (= "=") (binary_expression "pcVar11 + 1" (identifier "pcVar11") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" (identifier "pcVar9") (= "=") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" (identifier "pcVar9") (= "=") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" (identifier "pcVar9") (= "=") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" (identifier "pcVar9") (= "=") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar9 + 1;" (assignment_expression "pcVar9 = pcVar9 + 1" (identifier "pcVar9") (= "=") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*pcVar9 = cVar12;" (assignment_expression "*pcVar9 = cVar12" (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10 = pcVar9 + 1;" (assignment_expression "pcVar10 = pcVar9 + 1" (identifier "pcVar10") (= "=") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;" (if "if") (parenthesized_expression "(pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1)" (( "(") (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1)" (identifier "pcVar11") (+ "+") (call_expression "(ulong)(uVar5 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar5 - 1)" (( "(") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1")) () ")")))) (+ "+") (number_literal "1")) (== "==") (binary_expression "pcVar9 + 1" (identifier "pcVar9") (+ "+") (number_literal "1"))) () ")")) (goto_statement "goto LAB_0015f0fe;" (goto "goto") (statement_identifier "LAB_0015f0fe") (; ";"))) (} "}"))) (do_statement "do {\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);" (do "do") (compound_statement "{\n                  *pcVar10 = cVar12;\n                  pcVar9 = pcVar10 + 8;\n                  pcVar10[1] = cVar12;\n                  pcVar10[2] = cVar12;\n                  pcVar10[3] = cVar12;\n                  pcVar10[4] = cVar12;\n                  pcVar10[5] = cVar12;\n                  pcVar10[6] = cVar12;\n                  pcVar10[7] = cVar12;\n                  pcVar10 = pcVar9;\n                }" ({ "{") (expression_statement "*pcVar10 = cVar12;" (assignment_expression "*pcVar10 = cVar12" (pointer_expression "*pcVar10" (* "*") (identifier "pcVar10")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar9 = pcVar10 + 8;" (assignment_expression "pcVar9 = pcVar10 + 8" (identifier "pcVar9") (= "=") (binary_expression "pcVar10 + 8" (identifier "pcVar10") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "pcVar10[1] = cVar12;" (assignment_expression "pcVar10[1] = cVar12" (subscript_expression "pcVar10[1]" (identifier "pcVar10") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10[2] = cVar12;" (assignment_expression "pcVar10[2] = cVar12" (subscript_expression "pcVar10[2]" (identifier "pcVar10") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10[3] = cVar12;" (assignment_expression "pcVar10[3] = cVar12" (subscript_expression "pcVar10[3]" (identifier "pcVar10") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10[4] = cVar12;" (assignment_expression "pcVar10[4] = cVar12" (subscript_expression "pcVar10[4]" (identifier "pcVar10") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10[5] = cVar12;" (assignment_expression "pcVar10[5] = cVar12" (subscript_expression "pcVar10[5]" (identifier "pcVar10") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10[6] = cVar12;" (assignment_expression "pcVar10[6] = cVar12" (subscript_expression "pcVar10[6]" (identifier "pcVar10") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10[7] = cVar12;" (assignment_expression "pcVar10[7] = cVar12" (subscript_expression "pcVar10[7]" (identifier "pcVar10") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "cVar12")) (; ";")) (expression_statement "pcVar10 = pcVar9;" (assignment_expression "pcVar10 = pcVar9" (identifier "pcVar10") (= "=") (identifier "pcVar9")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9)" (( "(") (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9" (binary_expression "pcVar11 + (ulong)(uVar5 - 1) + 1" (binary_expression "pcVar11 + (ulong)(uVar5 - 1)" (identifier "pcVar11") (+ "+") (call_expression "(ulong)(uVar5 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar5 - 1)" (( "(") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1")) () ")")))) (+ "+") (number_literal "1")) (!= "!=") (identifier "pcVar9")) () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_0015f0fe:\n              cVar12 = cVar12 + '\x01';" (statement_identifier "LAB_0015f0fe") (: ":") (expression_statement "cVar12 = cVar12 + '\x01';" (assignment_expression "cVar12 = cVar12 + '\x01'" (identifier "cVar12") (= "=") (binary_expression "cVar12 + '\x01'" (identifier "cVar12") (+ "+") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'")))) (; ";"))) (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))" (( "(") (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" (* "*") (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" (* "*") (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x28)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x28" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(pcVar11,pcVar11,__ptr)" (( "(") (identifier "pcVar11") (, ",") (identifier "pcVar11") (, ",") (identifier "__ptr") () ")"))) (; ";")) (expression_statement "puVar3 = PTR_cipher_descriptor_001dded0;" (assignment_expression "puVar3 = PTR_cipher_descriptor_001dded0" (identifier "puVar3") (= "=") (identifier "PTR_cipher_descriptor_001dded0")) (; ";")) (expression_statement "pcVar11 = pcVar11 + 0x80;" (assignment_expression "pcVar11 = pcVar11 + 0x80" (identifier "pcVar11") (= "=") (binary_expression "pcVar11 + 0x80" (identifier "pcVar11") (+ "+") (number_literal "0x80"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar12 != '\x04')" (( "(") (binary_expression "cVar12 != '\x04'" (identifier "cVar12") (!= "!=") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (; ";")) (expression_statement "uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200);" (assignment_expression "uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200)" (identifier "uVar5") (= "=") (call_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))\n                              (param_1,uVar4,0,param_1 + 0x200)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))" (( "(") (pointer_expression "**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" (* "*") (pointer_expression "*(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" (* "*") (cast_expression "(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20)" (( "(") (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0" (identifier "PTR_cipher_descriptor_001dded0") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(param_1,uVar4,0,param_1 + 0x200)" (( "(") (identifier "param_1") (, ",") (identifier "uVar4") (, ",") (number_literal "0") (, ",") (binary_expression "param_1 + 0x200" (identifier "param_1") (+ "+") (number_literal "0x200")) () ")")))) (; ";")) (expression_statement "zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14))" (identifier "zeromem") (argument_list "(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14))" (( "(") (binary_expression "param_1 + 0x180" (identifier "param_1") (+ "+") (number_literal "0x180")) (, ",") (cast_expression "(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(int *)(puVar3 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar3 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar3 + lVar7 * 0xc0" (identifier "puVar3") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";")) (expression_statement "uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar3 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar3 + lVar7 * 0xc0" (identifier "puVar3") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x12a0) = param_2;" (assignment_expression "*(int *)(param_1 + 0x12a0) = param_2" (pointer_expression "*(int *)(param_1 + 0x12a0)" (* "*") (cast_expression "(int *)(param_1 + 0x12a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x12a0)" (( "(") (binary_expression "param_1 + 0x12a0" (identifier "param_1") (+ "+") (number_literal "0x12a0")) () ")")))) (= "=") (identifier "param_2")) (; ";")) (expression_statement "param_1[0x12a4] = '\0';" (assignment_expression "param_1[0x12a4] = '\0'" (subscript_expression "param_1[0x12a4]" (identifier "param_1") ([ "[") (number_literal "0x12a4") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[0x12a5] = '\0';" (assignment_expression "param_1[0x12a5] = '\0'" (subscript_expression "param_1[0x12a5]" (identifier "param_1") ([ "[") (number_literal "0x12a5") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[0x12a6] = '\0';" (assignment_expression "param_1[0x12a6] = '\0'" (subscript_expression "param_1[0x12a6]" (identifier "param_1") ([ "[") (number_literal "0x12a6") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[0x12a7] = '\0';" (assignment_expression "param_1[0x12a7] = '\0'" (subscript_expression "param_1[0x12a7]" (identifier "param_1") ([ "[") (number_literal "0x12a7") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x12a8) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x12a8) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x12a8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x12a8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x12a8)" (( "(") (binary_expression "param_1 + 0x12a8" (identifier "param_1") (+ "+") (number_literal "0x12a8")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))" (( "(") (pointer_expression "**(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" (* "*") (pointer_expression "*(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" (* "*") (cast_expression "(code **)(puVar3 + lVar7 * 0xc0 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar3 + lVar7 * 0xc0 + 0x40)" (( "(") (binary_expression "puVar3 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar3 + lVar7 * 0xc0" (identifier "puVar3") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (} "}")) (else_clause "else {\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" (else "else") (compound_statement "{\n            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);\n          }" ({ "{") (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))" (( "(") (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" (* "*") (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" (* "*") (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x40)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (} "}")))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (return_statement "return (ulong)uVar5;" (return "return") (cast_expression "(ulong)uVar5" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar5")) (; ";")) (} "}"))) (expression_statement "uVar6 = 0xd;" (assignment_expression "uVar6 = 0xd" (identifier "uVar6") (= "=") (number_literal "0xd")) (; ";")) (} "}")) (else_clause "else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" (else "else") (if_statement "if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" (if "if") (parenthesized_expression "((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff))" (( "(") (binary_expression "(ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)" (call_expression "(ulong)((long)(int)uVar4 * 2)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((long)(int)uVar4 * 2)" (( "(") (binary_expression "(long)(int)uVar4 * 2" (cast_expression "(long)(int)uVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) (* "*") (number_literal "2")) () ")"))) (<= "<=") (parenthesized_expression "(param_4 & 0xffffffffffff7fff)" (( "(") (binary_expression "param_4 & 0xffffffffffff7fff" (identifier "param_4") (& "&") (number_literal "0xffffffffffff7fff")) () ")"))) () ")")) (compound_statement "{\n        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);\n        memcpy(param_1,param_3,uVar6);\n        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);\n        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));\n        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);\n        *(int *)(param_1 + 0x12a0) = param_2;\n        param_1[0x12a4] = '\0';\n        param_1[0x12a5] = '\0';\n        param_1[0x12a6] = '\0';\n        param_1[0x12a7] = '\0';\n        *(undefined4 *)(param_1 + 0x12a8) = uVar1;\n        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);\n        uVar6 = (ulong)uVar4;\n      }" ({ "{") (expression_statement "uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);" (assignment_expression "uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2)" (identifier "uVar6") (= "=") (binary_expression "(param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2)" (parenthesized_expression "(param_4 & 0xffffffffffff7fff)" (( "(") (binary_expression "param_4 & 0xffffffffffff7fff" (identifier "param_4") (& "&") (number_literal "0xffffffffffff7fff")) () ")")) (- "-") (cast_expression "(long)(int)(uVar4 * 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)(uVar4 * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar4 * 2)" (( "(") (binary_expression "uVar4 * 2" (identifier "uVar4") (* "*") (number_literal "2")) () ")")))))) (; ";")) (expression_statement "memcpy(param_1,param_3,uVar6);" (call_expression "memcpy(param_1,param_3,uVar6)" (identifier "memcpy") (argument_list "(param_1,param_3,uVar6)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") (, ",") (identifier "uVar6") () ")"))) (; ";")) (expression_statement "memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" (identifier "memcpy") (argument_list "(param_1 + 0x80,(void *)((long)param_3 + uVar6),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" (( "(") (binary_expression "param_1 + 0x80" (identifier "param_1") (+ "+") (number_literal "0x80")) (, ",") (cast_expression "(void *)((long)param_3 + uVar6)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + uVar6)" (( "(") (binary_expression "(long)param_3 + uVar6" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (identifier "uVar6")) () ")"))) (, ",") (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";")) (expression_statement "memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "memcpy(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" (identifier "memcpy") (argument_list "(param_1 + 0x100,\n               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),\n               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" (( "(") (binary_expression "param_1 + 0x100" (identifier "param_1") (+ "+") (number_literal "0x100")) (, ",") (cast_expression "(void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3)" (( "(") (binary_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3" (binary_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6" (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) (+ "+") (identifier "uVar6")) (+ "+") (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3"))) () ")"))) (, ",") (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";")) (expression_statement "uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);" (assignment_expression "uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))\n                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))" (( "(") (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" (* "*") (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" (* "*") (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x20)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x20" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(param_1,uVar6 & 0xffffffff,0,param_1 + 0x200)" (( "(") (identifier "param_1") (, ",") (binary_expression "uVar6 & 0xffffffff" (identifier "uVar6") (& "&") (number_literal "0xffffffff")) (, ",") (number_literal "0") (, ",") (binary_expression "param_1 + 0x200" (identifier "param_1") (+ "+") (number_literal "0x200")) () ")")))) (; ";")) (expression_statement "zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));" (call_expression "zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" (identifier "zeromem") (argument_list "(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14))" (( "(") (binary_expression "param_1 + 0x180" (identifier "param_1") (+ "+") (number_literal "0x180")) (, ",") (cast_expression "(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(int *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";")) (expression_statement "uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);" (assignment_expression "uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" (* "*") (cast_expression "(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x14)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x14" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x12a0) = param_2;" (assignment_expression "*(int *)(param_1 + 0x12a0) = param_2" (pointer_expression "*(int *)(param_1 + 0x12a0)" (* "*") (cast_expression "(int *)(param_1 + 0x12a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x12a0)" (( "(") (binary_expression "param_1 + 0x12a0" (identifier "param_1") (+ "+") (number_literal "0x12a0")) () ")")))) (= "=") (identifier "param_2")) (; ";")) (expression_statement "param_1[0x12a4] = '\0';" (assignment_expression "param_1[0x12a4] = '\0'" (subscript_expression "param_1[0x12a4]" (identifier "param_1") ([ "[") (number_literal "0x12a4") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[0x12a5] = '\0';" (assignment_expression "param_1[0x12a5] = '\0'" (subscript_expression "param_1[0x12a5]" (identifier "param_1") ([ "[") (number_literal "0x12a5") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[0x12a6] = '\0';" (assignment_expression "param_1[0x12a6] = '\0'" (subscript_expression "param_1[0x12a6]" (identifier "param_1") ([ "[") (number_literal "0x12a6") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[0x12a7] = '\0';" (assignment_expression "param_1[0x12a7] = '\0'" (subscript_expression "param_1[0x12a7]" (identifier "param_1") ([ "[") (number_literal "0x12a7") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x12a8) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x12a8) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x12a8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x12a8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x12a8)" (( "(") (binary_expression "param_1 + 0x12a8" (identifier "param_1") (+ "+") (number_literal "0x12a8")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);" (call_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0)" (parenthesized_expression "(**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))" (( "(") (pointer_expression "**(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" (* "*") (pointer_expression "*(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" (* "*") (cast_expression "(code **)(puVar2 + lVar7 * 0xc0 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar2 + lVar7 * 0xc0 + 0x40)" (( "(") (binary_expression "puVar2 + lVar7 * 0xc0 + 0x40" (binary_expression "puVar2 + lVar7 * 0xc0" (identifier "puVar2") (+ "+") (binary_expression "lVar7 * 0xc0" (identifier "lVar7") (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar6 = (ulong)uVar4;" (assignment_expression "uVar6 = (ulong)uVar4" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar4" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar4"))) (; ";")) (} "}"))))) (} "}"))) (} "}"))) (return_statement "return uVar6;" (return "return") (identifier "uVar6") (; ";")) (} "}")))

int function_1(type_1 *var_1,int cipher,type_2 *var_3,type_3 var_9)

{
  type_1 *var_14;
  type_4 var_8;
  int iVar3;
  type_5 *var_12;
  type_5 *var_19;
  int var_5;
  long var_7;
  void *var_11;
  type_4 var_13;
  type_1 *var_15;
  type_1 *var_16;
  type_3 var_22;
  type_1 *pxVar11;
  type_2 var_17;
  
  if (var_1 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("xcbc != NULL","src/mac/xcbc/xcbc_init.c",0x1f);
  }
  if (var_3 == (type_2 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("key != NULL","src/mac/xcbc/xcbc_init.c",0x20);
  }
  var_5 = var_4(cipher);
  var_12 = var_6;
  if (var_5 == 0) {
    var_7 = (long)cipher;
    var_5 = 0x10;
    var_8 = *(type_4 *)(var_6 + var_7 * 0xc0 + 0x14);
    if ((var_8 & 7) == 0) {
      if ((var_9 & 0x8000) == 0) {
        var_11 = var_10(1,0x10a0);
        if (var_11 != (void *)0x0) {
          var_5 = (**(type_6 **)(var_12 + var_7 * 0xc0 + 0x20))(var_3,var_9 & 0xffffffff,0,var_11);
          if (var_5 == 0) {
            var_17 = '\x01';
            pxVar11 = var_1;
            do {
              var_13 = *(type_4 *)(var_12 + var_7 * 0xc0 + 0x14);
              if (0 < (int)var_13) {
                var_14 = (type_1 *)(pxVar11->K[0] + (type_3)(var_13 - 1) + 1);
                var_13 = var_13 & 7;
                var_15 = pxVar11;
                if (var_13 != 0) {
                  if (var_13 != 1) {
                    if (var_13 != 2) {
                      if (var_13 != 3) {
                        if (var_13 != 4) {
                          if (var_13 != 5) {
                            if (var_13 != 6) {
                              pxVar11->K[0][0] = var_17;
                              var_15 = (type_1 *)(pxVar11->K[0] + 1);
                            }
                            var_15->K[0][0] = var_17;
                            var_15 = (type_1 *)(var_15->K[0] + 1);
                          }
                          var_15->K[0][0] = var_17;
                          var_15 = (type_1 *)(var_15->K[0] + 1);
                        }
                        var_15->K[0][0] = var_17;
                        var_15 = (type_1 *)(var_15->K[0] + 1);
                      }
                      var_15->K[0][0] = var_17;
                      var_15 = (type_1 *)(var_15->K[0] + 1);
                    }
                    var_15->K[0][0] = var_17;
                    var_15 = (type_1 *)(var_15->K[0] + 1);
                  }
                  var_15->K[0][0] = var_17;
                  var_15 = (type_1 *)(var_15->K[0] + 1);
                  if (var_14 == var_15) goto LAB_0015f0fe;
                }
                do {
                  var_15->K[0][0] = var_17;
                  var_16 = (type_1 *)(var_15->K[0] + 8);
                  var_15->K[0][1] = var_17;
                  var_15->K[0][2] = var_17;
                  var_15->K[0][3] = var_17;
                  var_15->K[0][4] = var_17;
                  var_15->K[0][5] = var_17;
                  var_15->K[0][6] = var_17;
                  var_15->K[0][7] = var_17;
                  var_15 = var_16;
                } while (var_14 != var_16);
              }
LAB_0015f0fe:
              var_17 = var_17 + '\x01';
              (**(type_6 **)(var_12 + var_7 * 0xc0 + 0x28))(pxVar11,pxVar11,var_11);
              var_19 = var_6;
              pxVar11 = (type_1 *)(pxVar11->K + 1);
            } while (var_17 != '\x04');
            var_5 = (**(type_6 **)(var_6 + var_7 * 0xc0 + 0x20))
                              (var_1,var_8,0,&var_1->var_3);
            var_18(var_1->IV,(long)*(int *)(var_19 + var_7 * 0xc0 + 0x14));
            iVar3 = *(int *)(var_19 + var_7 * 0xc0 + 0x14);
            var_1->cipher = cipher;
            var_1->buflen = 0;
            var_1->blocksize = iVar3;
            (**(type_6 **)(var_19 + var_7 * 0xc0 + 0x40))(var_11);
          }
          else {
            (**(type_6 **)(var_12 + var_7 * 0xc0 + 0x40))(var_11);
          }
          var_20(var_11);
          return var_5;
        }
        var_5 = 0xd;
      }
      else if ((type_3)((long)(int)var_8 * 2) <= (var_9 & 0xffffffffffff7fff)) {
        var_22 = (var_9 & 0xffffffffffff7fff) - (long)(int)(var_8 * 2);
        var_21(var_1,var_3,var_22);
        var_21(var_1->K + 1,var_3 + var_22,(long)*(int *)(var_12 + var_7 * 0xc0 + 0x14));
        var_21(var_1->K + 2,var_3 + (long)*(int *)(var_12 + var_7 * 0xc0 + 0x14) + var_22,
               (long)*(int *)(var_12 + var_7 * 0xc0 + 0x14));
        var_5 = (**(type_6 **)(var_12 + var_7 * 0xc0 + 0x20))(var_1,var_22 & 0xffffffff,0,&var_1->var_3);
        var_18(var_1->IV,(long)*(int *)(var_12 + var_7 * 0xc0 + 0x14));
        iVar3 = *(int *)(var_12 + var_7 * 0xc0 + 0x14);
        var_1->cipher = cipher;
        var_1->buflen = 0;
        var_1->blocksize = iVar3;
        (**(type_6 **)(var_12 + var_7 * 0xc0 + 0x40))(0);
      }
    }
  }
  return var_5;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (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: (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: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (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: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (number_literal) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) 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: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) 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: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (goto_statement label: (statement_identifier))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (char_literal (escape_sequence)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (number_literal) (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) 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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (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: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (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: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)))) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) right: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) 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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (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: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (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: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) arguments: (argument_list (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))))))))) (return_statement (identifier)))))

ulong MASKED(char *param_1,int param_2,void *param_3,ulong param_4)

{
  undefined4 uVar1;
  undefined *puVar2;
  undefined *puVar3;
  uint uVar4;
  uint uVar5;
  ulong uVar6;
  long lVar7;
  void *__ptr;
  uint uVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char cVar12;
  
  if (param_1 == (char *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("xcbc != NULL","src/mac/xcbc/MASKED.c",0x1f);
  }
  if (param_3 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/mac/xcbc/MASKED.c",0x20);
  }
  uVar6 = cipher_is_valid(param_2);
  puVar2 = PTR_cipher_descriptor_001dded0;
  if ((int)uVar6 == 0) {
    lVar7 = (long)param_2;
    uVar6 = 0x10;
    uVar4 = *(uint *)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x14);
    if ((uVar4 & 7) == 0) {
      if ((param_4 & 0x8000) == 0) {
        __ptr = calloc(1,0x10a0);
        if (__ptr != (void *)0x0) {
          uVar5 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))(param_3,param_4 & 0xffffffff,0,__ptr);
          if (uVar5 == 0) {
            cVar12 = '\x01';
            pcVar11 = param_1;
            do {
              uVar5 = *(uint *)(puVar2 + lVar7 * 0xc0 + 0x14);
              if (0 < (int)uVar5) {
                uVar8 = uVar5 & 7;
                pcVar10 = pcVar11;
                if (uVar8 != 0) {
                  pcVar9 = pcVar11;
                  if (uVar8 != 1) {
                    if (uVar8 != 2) {
                      if (uVar8 != 3) {
                        if (uVar8 != 4) {
                          if (uVar8 != 5) {
                            if (uVar8 != 6) {
                              *pcVar11 = cVar12;
                              pcVar9 = pcVar11 + 1;
                            }
                            *pcVar9 = cVar12;
                            pcVar9 = pcVar9 + 1;
                          }
                          *pcVar9 = cVar12;
                          pcVar9 = pcVar9 + 1;
                        }
                        *pcVar9 = cVar12;
                        pcVar9 = pcVar9 + 1;
                      }
                      *pcVar9 = cVar12;
                      pcVar9 = pcVar9 + 1;
                    }
                    *pcVar9 = cVar12;
                    pcVar9 = pcVar9 + 1;
                  }
                  *pcVar9 = cVar12;
                  pcVar10 = pcVar9 + 1;
                  if (pcVar11 + (ulong)(uVar5 - 1) + 1 == pcVar9 + 1) goto LAB_0015f0fe;
                }
                do {
                  *pcVar10 = cVar12;
                  pcVar9 = pcVar10 + 8;
                  pcVar10[1] = cVar12;
                  pcVar10[2] = cVar12;
                  pcVar10[3] = cVar12;
                  pcVar10[4] = cVar12;
                  pcVar10[5] = cVar12;
                  pcVar10[6] = cVar12;
                  pcVar10[7] = cVar12;
                  pcVar10 = pcVar9;
                } while (pcVar11 + (ulong)(uVar5 - 1) + 1 != pcVar9);
              }
LAB_0015f0fe:
              cVar12 = cVar12 + '\x01';
              (**(code **)(puVar2 + lVar7 * 0xc0 + 0x28))(pcVar11,pcVar11,__ptr);
              puVar3 = PTR_cipher_descriptor_001dded0;
              pcVar11 = pcVar11 + 0x80;
            } while (cVar12 != '\x04');
            uVar5 = (**(code **)(PTR_cipher_descriptor_001dded0 + lVar7 * 0xc0 + 0x20))
                              (param_1,uVar4,0,param_1 + 0x200);
            zeromem(param_1 + 0x180,(long)*(int *)(puVar3 + lVar7 * 0xc0 + 0x14));
            uVar1 = *(undefined4 *)(puVar3 + lVar7 * 0xc0 + 0x14);
            *(int *)(param_1 + 0x12a0) = param_2;
            param_1[0x12a4] = '\0';
            param_1[0x12a5] = '\0';
            param_1[0x12a6] = '\0';
            param_1[0x12a7] = '\0';
            *(undefined4 *)(param_1 + 0x12a8) = uVar1;
            (**(code **)(puVar3 + lVar7 * 0xc0 + 0x40))(__ptr);
          }
          else {
            (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(__ptr);
          }
          free(__ptr);
          return (ulong)uVar5;
        }
        uVar6 = 0xd;
      }
      else if ((ulong)((long)(int)uVar4 * 2) <= (param_4 & 0xffffffffffff7fff)) {
        uVar6 = (param_4 & 0xffffffffffff7fff) - (long)(int)(uVar4 * 2);
        memcpy(param_1,param_3,uVar6);
        memcpy(param_1 + 0x80,(void *)((long)param_3 + uVar6),
               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));
        memcpy(param_1 + 0x100,
               (void *)((long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14) + uVar6 + (long)param_3),
               (long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));
        uVar4 = (**(code **)(puVar2 + lVar7 * 0xc0 + 0x20))
                          (param_1,uVar6 & 0xffffffff,0,param_1 + 0x200);
        zeromem(param_1 + 0x180,(long)*(int *)(puVar2 + lVar7 * 0xc0 + 0x14));
        uVar1 = *(undefined4 *)(puVar2 + lVar7 * 0xc0 + 0x14);
        *(int *)(param_1 + 0x12a0) = param_2;
        param_1[0x12a4] = '\0';
        param_1[0x12a5] = '\0';
        param_1[0x12a6] = '\0';
        param_1[0x12a7] = '\0';
        *(undefined4 *)(param_1 + 0x12a8) = uVar1;
        (**(code **)(puVar2 + lVar7 * 0xc0 + 0x40))(0);
        uVar6 = (ulong)uVar4;
      }
    }
  }
  return uVar6;
}

