
int blake2b_init(hash_state *md,ulong outlen,uchar *key,ulong keylen)

{
  long lVar1;
  int iVar2;
  uchar *puVar3;
  ulong uVar4;
  long lVar5;
  undefined8 *puVar6;
  long in_FS_OFFSET;
  uchar P [64];
  uchar block [128];
  
  lVar1 = *(long *)(in_FS_OFFSET + 0x28);
  if (md == (hash_state *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);
  }
  iVar2 = 0x10;
  if (outlen - 1 < 0x40) {
    if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {
      (md->whirlpool).state[7] = 0;
      *(char *)((long)md + 0xf0) = '\0';
      *(char *)((long)md + 0xf1) = '\0';
      *(char *)((long)md + 0xf2) = '\0';
      *(char *)((long)md + 0xf3) = '\0';
      *(char *)((long)md + 0xf4) = '\0';
      *(char *)((long)md + 0xf5) = '\0';
      *(char *)((long)md + 0xf6) = '\0';
      *(char *)((long)md + 0xf7) = '\0';
      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);
      for (uVar4 = (ulong)(((int)md -
                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +
                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {
        *puVar6 = 0;
        puVar6 = puVar6 + 1;
      }
      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;
      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;
      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;
      (md->whirlpool).state[3] = 0x510e527fade682d1;
      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;
      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;
      (md->whirlpool).state[6] = 0x5be0cd19137e2179;
      (md->whirlpool).state[0] = (md->whirlpool).state[0];
      (md->whirlpool).state[1] = (md->whirlpool).state[1];
      (md->chc).length =
           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;
      (md->whirlpool).state[2] = (md->whirlpool).state[2];
      (md->whirlpool).state[3] = (md->whirlpool).state[3];
      (md->blake2b).outlen = outlen;
      (md->whirlpool).state[4] = (md->whirlpool).state[4];
      (md->whirlpool).state[5] = (md->whirlpool).state[5];
      (md->whirlpool).state[6] = (md->whirlpool).state[6];
      if (key != (uchar *)0x0) {
        puVar3 = block;
        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {
          puVar3[0] = '\0';
          puVar3[1] = '\0';
          puVar3[2] = '\0';
          puVar3[3] = '\0';
          puVar3[4] = '\0';
          puVar3[5] = '\0';
          puVar3[6] = '\0';
          puVar3[7] = '\0';
          puVar3 = puVar3 + 8;
        }
        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);
        blake2b_process(md,puVar3,0x80);
      }
      iVar2 = 0;
    }
    else {
      iVar2 = 0x10;
    }
  }
  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}



undefined8 blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)

{
  undefined8 uVar1;
  ulong uVar2;
  long lVar3;
  undefined8 *puVar4;
  long in_FS_OFFSET;
  undefined8 local_98 [17];
  long local_10;
  
  local_10 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_1 == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);
  }
  uVar1 = 0x10;
  if (param_2 - 1 < 0x40) {
    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {
      param_1[8] = 0;
      param_1[0x1e] = 0;
      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);
      for (uVar2 = (ulong)(((int)param_1 -
                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U
                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {
        *puVar4 = 0;
        puVar4 = puVar4 + 1;
      }
      param_1[1] = 0xbb67ae8584caa73b;
      param_1[2] = 0x3c6ef372fe94f82b;
      param_1[3] = 0xa54ff53a5f1d36f1;
      param_1[4] = 0x510e527fade682d1;
      param_1[5] = 0x9b05688c2b3e6c1f;
      param_1[6] = 0x1f83d9abfb41bd6b;
      param_1[7] = 0x5be0cd19137e2179;
      param_1[1] = param_1[1];
      param_1[2] = param_1[2];
      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;
      param_1[3] = param_1[3];
      param_1[4] = param_1[4];
      param_1[0x1d] = param_2;
      param_1[5] = param_1[5];
      param_1[6] = param_1[6];
      param_1[7] = param_1[7];
      if (param_3 != 0) {
        puVar4 = local_98;
        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {
          *puVar4 = 0;
          puVar4 = puVar4 + 1;
        }
        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);
        blake2b_process(param_1,uVar1,0x80);
      }
      uVar1 = 0;
    }
    else {
      uVar1 = 0x10;
    }
  }
  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


PUSH RBX
SUB RSP,0xd0
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0xc8],RAX
XOR EAX,EAX
TEST RDI,RDI
JZ 0x0014376c
MOV R8,RDX
MOV RDX,RCX
LEA RCX,[RSI + -0x1]
MOV EAX,0x10
CMP RCX,0x3f
JA 0x00143741
TEST R8,R8
SETNZ BL
TEST RDX,RDX
SETNZ AL
CMP BL,AL
JNZ 0x00143760
CMP RDX,0x40
JA 0x00143760
MOV RBX,RDI
MOV EDI,0x101
PXOR XMM0,XMM0
XOR EAX,EAX
MOV word ptr [RSP + 0x2],DI
LEA RDI,[RBX + 0x48]
MOV ECX,EBX
MOV R9,-0x4498517a7b3558c5
AND RDI,-0x8
MOVUPS xmmword ptr [RSP + 0x4],XMM0
MOV R10,0x3c6ef372fe94f82b
MOV R11,-0x5ab00ac5a0e2c90f
SUB ECX,EDI
MOVUPS xmmword ptr [RSP + 0x14],XMM0
ADD ECX,0xf8
MOVUPS xmmword ptr [RSP + 0x24],XMM0
SHR ECX,0x3
MOV byte ptr [RSP],SIL
MOV byte ptr [RSP + 0x1],DL
MOV qword ptr [RSP + 0x34],0x0
MOV dword ptr [RSP + 0x3c],0x0
MOV qword ptr [RBX + 0x40],0x0
MOV qword ptr [RBX + 0xf0],0x0
STOSQ.REP RDI
MOV qword ptr [RBX + 0x8],R9
MOV RCX,0x510e527fade682d1
MOV RDI,-0x64fa9773d4c193e1
MOV R9,0x1f83d9abfb41bd6b
MOV qword ptr [RBX + 0x10],R10
MOV R10,0x5be0cd19137e2179
MOV qword ptr [RBX + 0x18],R11
MOV R11,0x6a09e667f3bcc908
XOR R11,qword ptr [RSP]
MOV qword ptr [RBX + 0x20],RCX
MOV RCX,qword ptr [RSP + 0x8]
MOV qword ptr [RBX + 0x28],RDI
MOV RDI,qword ptr [RSP + 0x10]
MOV qword ptr [RBX + 0x30],R9
MOV R9,qword ptr [RSP + 0x18]
MOV qword ptr [RBX + 0x38],R10
MOV R10,qword ptr [RSP + 0x20]
XOR qword ptr [RBX + 0x8],RCX
XOR qword ptr [RBX + 0x10],RDI
MOV qword ptr [RBX],R11
XOR qword ptr [RBX + 0x18],R9
XOR qword ptr [RBX + 0x20],R10
MOV R11,qword ptr [RSP + 0x28]
MOV RCX,qword ptr [RSP + 0x30]
MOV RDI,qword ptr [RSP + 0x38]
MOV qword ptr [RBX + 0xe8],RSI
XOR qword ptr [RBX + 0x28],R11
XOR qword ptr [RBX + 0x30],RCX
XOR qword ptr [RBX + 0x38],RDI
TEST R8,R8
JZ 0x0014373f
LEA R9,[RSP + 0x40]
MOV ECX,0x10
MOV RSI,R8
MOV RDI,R9
STOSQ.REP RDI
MOV RDI,R9
MOV ECX,0x80
CALL 0x00113e90
MOV EDX,0x80
MOV RDI,RBX
MOV RSI,RAX
CALL 0x001136b0
XOR EAX,EAX
MOV RDI,qword ptr [RSP + 0xc8]
XOR RDI,qword ptr FS:[0x28]
JNZ 0x00143767
ADD RSP,0xd0
POP RBX
RET
MOV EAX,0x10
JMP 0x00143741
CALL 0x00113880
MOV EDX,0xcf
LEA RSI,[0x1ae580]
LEA RDI,[0x1ae595]
CALL 0x00114270
(translation_unit "undefined8 blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "undefined8 blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" type_identifier (function_declarator "blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)" identifier (parameter_list "(ulong *param_1,ulong param_2,long param_3,ulong param_4)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 local_98 [17];" type_identifier (array_declarator "local_98 [17]" identifier [ number_literal ]) ;) (declaration "long local_10;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_10 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_10 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_1 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" if (parenthesized_expression "(param_1 == (ulong *)0x0)" ( (binary_expression "param_1 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" { comment (expression_statement "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);" (call_expression "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf)" identifier (argument_list "("md != NULL","src/hashes/blake2b.c",0xcf)" ( (string_literal ""md != NULL"" " string_content ") , (string_literal ""src/hashes/blake2b.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) (if_statement "if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }" if (parenthesized_expression "(param_2 - 1 < 0x40)" ( (binary_expression "param_2 - 1 < 0x40" (binary_expression "param_2 - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }" { (if_statement "if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }" if (parenthesized_expression "(((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41))" ( (binary_expression "((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)" (parenthesized_expression "((param_3 != 0) == (param_4 != 0))" ( (binary_expression "(param_3 != 0) == (param_4 != 0)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) == (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) ))) )) && (parenthesized_expression "(param_4 < 0x41)" ( (binary_expression "param_4 < 0x41" identifier < number_literal) ))) )) (compound_statement "{\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }" { (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1e] = 0;" (assignment_expression "param_1[0x1e] = 0" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);" (assignment_expression "puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" identifier = (cast_expression "(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(param_1 + 9) & 0xfffffffffffffff8" (call_expression "(ulong)(param_1 + 9)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }" for ( (assignment_expression "uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" identifier = (call_expression "(ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" ( (binary_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3" (binary_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U" (parenthesized_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8))" ( (binary_expression "(int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (type_descriptor "int" primitive_type) ) (cast_expression "(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(param_1 + 9) & 0xfffffffffffffff8" (call_expression "(ulong)(param_1 + 9)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) ))) & number_literal) ))))) )) + number_literal) >> number_literal) )))) ; (binary_expression "uVar2 != 0" identifier != number_literal) ; (assignment_expression "uVar2 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ) (compound_statement "{\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }" { (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "param_1[1] = 0xbb67ae8584caa73b;" (assignment_expression "param_1[1] = 0xbb67ae8584caa73b" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0x3c6ef372fe94f82b;" (assignment_expression "param_1[2] = 0x3c6ef372fe94f82b" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0xa54ff53a5f1d36f1;" (assignment_expression "param_1[3] = 0xa54ff53a5f1d36f1" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[4] = 0x510e527fade682d1;" (assignment_expression "param_1[4] = 0x510e527fade682d1" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[5] = 0x9b05688c2b3e6c1f;" (assignment_expression "param_1[5] = 0x9b05688c2b3e6c1f" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0x1f83d9abfb41bd6b;" (assignment_expression "param_1[6] = 0x1f83d9abfb41bd6b" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = 0x5be0cd19137e2179;" (assignment_expression "param_1[7] = 0x5be0cd19137e2179" (subscript_expression "param_1[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = param_1[1];" (assignment_expression "param_1[1] = param_1[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "param_1[2] = param_1[2];" (assignment_expression "param_1[2] = param_1[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "*param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;" (assignment_expression "*param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908" (pointer_expression "*param_1" * identifier) = (binary_expression "(ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908" (cast_expression "(ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2))" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2))" identifier (argument_list "(0x101,CONCAT11((char)param_4,(char)param_2))" ( number_literal , (call_expression "CONCAT11((char)param_4,(char)param_2)" identifier (argument_list "((char)param_4,(char)param_2)" ( (cast_expression "(char)param_4" ( (type_descriptor "char" primitive_type) ) identifier) , (cast_expression "(char)param_2" ( (type_descriptor "char" primitive_type) ) identifier) ))) )))) ^ number_literal)) ;) (expression_statement "param_1[3] = param_1[3];" (assignment_expression "param_1[3] = param_1[3]" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_1[4] = param_1[4];" (assignment_expression "param_1[4] = param_1[4]" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1d] = param_2;" (assignment_expression "param_1[0x1d] = param_2" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[5] = param_1[5];" (assignment_expression "param_1[5] = param_1[5]" (subscript_expression "param_1[5]" identifier [ number_literal ]) = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "param_1[6] = param_1[6];" (assignment_expression "param_1[6] = param_1[6]" (subscript_expression "param_1[6]" identifier [ number_literal ]) = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "param_1[7] = param_1[7];" (assignment_expression "param_1[7] = param_1[7]" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (if_statement "if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }" { (expression_statement "puVar4 = local_98;" (assignment_expression "puVar4 = local_98" identifier = identifier) ;) (for_statement "for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }" for ( (assignment_expression "lVar3 = 0x10" identifier = number_literal) ; (binary_expression "lVar3 != 0" identifier != number_literal) ; (assignment_expression "lVar3 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ) (compound_statement "{\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }" { (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);" (assignment_expression "uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80)" identifier = (call_expression "__memcpy_chk(local_98,param_3,param_4,0x80)" identifier (argument_list "(local_98,param_3,param_4,0x80)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "blake2b_process(param_1,uVar1,0x80);" (call_expression "blake2b_process(param_1,uVar1,0x80)" identifier (argument_list "(param_1,uVar1,0x80)" ( identifier , identifier , number_literal ))) ;) })) (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar1 = 0x10;\n    }" else (compound_statement "{\n      uVar1 = 0x10;\n    }" { (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) }))) })) (if_statement "if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }" if (parenthesized_expression "(local_10 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_10 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return uVar1;\n  }" { (return_statement "return uVar1;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "int blake2b_init(hash_state *md,ulong outlen,uchar *key,ulong keylen)\n\n{\n  long lVar1;\n  int iVar2;\n  uchar *puVar3;\n  ulong uVar4;\n  long lVar5;\n  undefined8 *puVar6;\n  long in_FS_OFFSET;\n  uchar P [64];\n  uchar block [128];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  if (md == (hash_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  iVar2 = 0x10;\n  if (outlen - 1 < 0x40) {\n    if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }\n    else {\n      iVar2 = 0x10;\n    }\n  }\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "int blake2b_init(hash_state *md,ulong outlen,uchar *key,ulong keylen)\n\n{\n  long lVar1;\n  int iVar2;\n  uchar *puVar3;\n  ulong uVar4;\n  long lVar5;\n  undefined8 *puVar6;\n  long in_FS_OFFSET;\n  uchar P [64];\n  uchar block [128];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  if (md == (hash_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  iVar2 = 0x10;\n  if (outlen - 1 < 0x40) {\n    if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }\n    else {\n      iVar2 = 0x10;\n    }\n  }\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" primitive_type (function_declarator "blake2b_init(hash_state *md,ulong outlen,uchar *key,ulong keylen)" identifier (parameter_list "(hash_state *md,ulong outlen,uchar *key,ulong keylen)" ( (parameter_declaration "hash_state *md" type_identifier (pointer_declarator "*md" * identifier)) , (parameter_declaration "ulong outlen" type_identifier identifier) , (parameter_declaration "uchar *key" type_identifier (pointer_declarator "*key" * identifier)) , (parameter_declaration "ulong keylen" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  int iVar2;\n  uchar *puVar3;\n  ulong uVar4;\n  long lVar5;\n  undefined8 *puVar6;\n  long in_FS_OFFSET;\n  uchar P [64];\n  uchar block [128];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  if (md == (hash_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  iVar2 = 0x10;\n  if (outlen - 1 < 0x40) {\n    if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }\n    else {\n      iVar2 = 0x10;\n    }\n  }\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uchar *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "uchar P [64];" type_identifier (array_declarator "P [64]" identifier [ number_literal ]) ;) (declaration "uchar block [128];" type_identifier (array_declarator "block [128]" identifier [ number_literal ]) ;) (expression_statement "lVar1 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar1 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (md == (hash_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" if (parenthesized_expression "(md == (hash_state *)0x0)" ( (binary_expression "md == (hash_state *)0x0" identifier == (cast_expression "(hash_state *)0x0" ( (type_descriptor "hash_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" { comment (expression_statement "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);" (call_expression "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf)" identifier (argument_list "("md != NULL","src/hashes/blake2b.c",0xcf)" ( (string_literal ""md != NULL"" " string_content ") , (string_literal ""src/hashes/blake2b.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "iVar2 = 0x10;" (assignment_expression "iVar2 = 0x10" identifier = number_literal) ;) (if_statement "if (outlen - 1 < 0x40) {\n    if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }\n    else {\n      iVar2 = 0x10;\n    }\n  }" if (parenthesized_expression "(outlen - 1 < 0x40)" ( (binary_expression "outlen - 1 < 0x40" (binary_expression "outlen - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n    if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }\n    else {\n      iVar2 = 0x10;\n    }\n  }" { (if_statement "if (((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)) {\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }\n    else {\n      iVar2 = 0x10;\n    }" if (parenthesized_expression "(((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41))" ( (binary_expression "((key != (uchar *)0x0) == (keylen != 0)) && (keylen < 0x41)" (parenthesized_expression "((key != (uchar *)0x0) == (keylen != 0))" ( (binary_expression "(key != (uchar *)0x0) == (keylen != 0)" (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)) )) == (parenthesized_expression "(keylen != 0)" ( (binary_expression "keylen != 0" identifier != number_literal) ))) )) && (parenthesized_expression "(keylen < 0x41)" ( (binary_expression "keylen < 0x41" identifier < number_literal) ))) )) (compound_statement "{\n      (md->whirlpool).state[7] = 0;\n      *(char *)((long)md + 0xf0) = '\0';\n      *(char *)((long)md + 0xf1) = '\0';\n      *(char *)((long)md + 0xf2) = '\0';\n      *(char *)((long)md + 0xf3) = '\0';\n      *(char *)((long)md + 0xf4) = '\0';\n      *(char *)((long)md + 0xf5) = '\0';\n      *(char *)((long)md + 0xf6) = '\0';\n      *(char *)((long)md + 0xf7) = '\0';\n      puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);\n      for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }\n      (md->whirlpool).state[0] = 0xbb67ae8584caa73b;\n      (md->whirlpool).state[1] = 0x3c6ef372fe94f82b;\n      (md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;\n      (md->whirlpool).state[3] = 0x510e527fade682d1;\n      (md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;\n      (md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;\n      (md->whirlpool).state[6] = 0x5be0cd19137e2179;\n      (md->whirlpool).state[0] = (md->whirlpool).state[0];\n      (md->whirlpool).state[1] = (md->whirlpool).state[1];\n      (md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;\n      (md->whirlpool).state[2] = (md->whirlpool).state[2];\n      (md->whirlpool).state[3] = (md->whirlpool).state[3];\n      (md->blake2b).outlen = outlen;\n      (md->whirlpool).state[4] = (md->whirlpool).state[4];\n      (md->whirlpool).state[5] = (md->whirlpool).state[5];\n      (md->whirlpool).state[6] = (md->whirlpool).state[6];\n      if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }\n      iVar2 = 0;\n    }" { (expression_statement "(md->whirlpool).state[7] = 0;" (assignment_expression "(md->whirlpool).state[7] = 0" (subscript_expression "(md->whirlpool).state[7]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "*(char *)((long)md + 0xf0) = '\0';" (assignment_expression "*(char *)((long)md + 0xf0) = '\0'" (pointer_expression "*(char *)((long)md + 0xf0)" * (cast_expression "(char *)((long)md + 0xf0)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf0)" ( (binary_expression "(long)md + 0xf0" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf1) = '\0';" (assignment_expression "*(char *)((long)md + 0xf1) = '\0'" (pointer_expression "*(char *)((long)md + 0xf1)" * (cast_expression "(char *)((long)md + 0xf1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf1)" ( (binary_expression "(long)md + 0xf1" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf2) = '\0';" (assignment_expression "*(char *)((long)md + 0xf2) = '\0'" (pointer_expression "*(char *)((long)md + 0xf2)" * (cast_expression "(char *)((long)md + 0xf2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf2)" ( (binary_expression "(long)md + 0xf2" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf3) = '\0';" (assignment_expression "*(char *)((long)md + 0xf3) = '\0'" (pointer_expression "*(char *)((long)md + 0xf3)" * (cast_expression "(char *)((long)md + 0xf3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf3)" ( (binary_expression "(long)md + 0xf3" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf4) = '\0';" (assignment_expression "*(char *)((long)md + 0xf4) = '\0'" (pointer_expression "*(char *)((long)md + 0xf4)" * (cast_expression "(char *)((long)md + 0xf4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf4)" ( (binary_expression "(long)md + 0xf4" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf5) = '\0';" (assignment_expression "*(char *)((long)md + 0xf5) = '\0'" (pointer_expression "*(char *)((long)md + 0xf5)" * (cast_expression "(char *)((long)md + 0xf5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf5)" ( (binary_expression "(long)md + 0xf5" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf6) = '\0';" (assignment_expression "*(char *)((long)md + 0xf6) = '\0'" (pointer_expression "*(char *)((long)md + 0xf6)" * (cast_expression "(char *)((long)md + 0xf6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf6)" ( (binary_expression "(long)md + 0xf6" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char *)((long)md + 0xf7) = '\0';" (assignment_expression "*(char *)((long)md + 0xf7) = '\0'" (pointer_expression "*(char *)((long)md + 0xf7)" * (cast_expression "(char *)((long)md + 0xf7)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + 0xf7)" ( (binary_expression "(long)md + 0xf7" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8);" (assignment_expression "puVar6 = (undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" identifier = (cast_expression "(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(md->dummy + 0x48) & 0xfffffffffffffff8" (call_expression "(ulong)(md->dummy + 0x48)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(md->dummy + 0x48)" ( (binary_expression "md->dummy + 0x48" (field_expression "md->dummy" identifier -> field_identifier) + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3); uVar4 != 0; uVar4 = uVar4 - 1) {\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }" for ( (assignment_expression "uVar4 = (ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3)" identifier = (call_expression "(ulong)(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3)" ( (binary_expression "((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U >> 3" (binary_expression "((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)) +\n                           0xf8U" (parenthesized_expression "((int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8))" ( (binary_expression "(int)md -\n                           (int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" (cast_expression "(int)md" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" ( (type_descriptor "int" primitive_type) ) (cast_expression "(undefined8 *)((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(md->dummy + 0x48) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(md->dummy + 0x48) & 0xfffffffffffffff8" (call_expression "(ulong)(md->dummy + 0x48)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(md->dummy + 0x48)" ( (binary_expression "md->dummy + 0x48" (field_expression "md->dummy" identifier -> field_identifier) + number_literal) ))) & number_literal) ))))) )) + number_literal) >> number_literal) )))) ; (binary_expression "uVar4 != 0" identifier != number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n        *puVar6 = 0;\n        puVar6 = puVar6 + 1;\n      }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) })) (expression_statement "(md->whirlpool).state[0] = 0xbb67ae8584caa73b;" (assignment_expression "(md->whirlpool).state[0] = 0xbb67ae8584caa73b" (subscript_expression "(md->whirlpool).state[0]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[1] = 0x3c6ef372fe94f82b;" (assignment_expression "(md->whirlpool).state[1] = 0x3c6ef372fe94f82b" (subscript_expression "(md->whirlpool).state[1]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[2] = 0xa54ff53a5f1d36f1;" (assignment_expression "(md->whirlpool).state[2] = 0xa54ff53a5f1d36f1" (subscript_expression "(md->whirlpool).state[2]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[3] = 0x510e527fade682d1;" (assignment_expression "(md->whirlpool).state[3] = 0x510e527fade682d1" (subscript_expression "(md->whirlpool).state[3]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[4] = 0x9b05688c2b3e6c1f;" (assignment_expression "(md->whirlpool).state[4] = 0x9b05688c2b3e6c1f" (subscript_expression "(md->whirlpool).state[4]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[5] = 0x1f83d9abfb41bd6b;" (assignment_expression "(md->whirlpool).state[5] = 0x1f83d9abfb41bd6b" (subscript_expression "(md->whirlpool).state[5]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[6] = 0x5be0cd19137e2179;" (assignment_expression "(md->whirlpool).state[6] = 0x5be0cd19137e2179" (subscript_expression "(md->whirlpool).state[6]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "(md->whirlpool).state[0] = (md->whirlpool).state[0];" (assignment_expression "(md->whirlpool).state[0] = (md->whirlpool).state[0]" (subscript_expression "(md->whirlpool).state[0]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[0]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(md->whirlpool).state[1] = (md->whirlpool).state[1];" (assignment_expression "(md->whirlpool).state[1] = (md->whirlpool).state[1]" (subscript_expression "(md->whirlpool).state[1]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[1]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908;" (assignment_expression "(md->chc).length =\n           (ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908" (field_expression "(md->chc).length" (parenthesized_expression "(md->chc)" ( (field_expression "md->chc" identifier -> field_identifier) )) . field_identifier) = (binary_expression "(ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen)) ^ 0x6a09e667f3bcc908" (cast_expression "(ulong)CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen))" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT22(0x101,CONCAT11((char)keylen,(char)outlen))" identifier (argument_list "(0x101,CONCAT11((char)keylen,(char)outlen))" ( number_literal , (call_expression "CONCAT11((char)keylen,(char)outlen)" identifier (argument_list "((char)keylen,(char)outlen)" ( (cast_expression "(char)keylen" ( (type_descriptor "char" primitive_type) ) identifier) , (cast_expression "(char)outlen" ( (type_descriptor "char" primitive_type) ) identifier) ))) )))) ^ number_literal)) ;) (expression_statement "(md->whirlpool).state[2] = (md->whirlpool).state[2];" (assignment_expression "(md->whirlpool).state[2] = (md->whirlpool).state[2]" (subscript_expression "(md->whirlpool).state[2]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[2]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(md->whirlpool).state[3] = (md->whirlpool).state[3];" (assignment_expression "(md->whirlpool).state[3] = (md->whirlpool).state[3]" (subscript_expression "(md->whirlpool).state[3]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[3]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(md->blake2b).outlen = outlen;" (assignment_expression "(md->blake2b).outlen = outlen" (field_expression "(md->blake2b).outlen" (parenthesized_expression "(md->blake2b)" ( (field_expression "md->blake2b" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "(md->whirlpool).state[4] = (md->whirlpool).state[4];" (assignment_expression "(md->whirlpool).state[4] = (md->whirlpool).state[4]" (subscript_expression "(md->whirlpool).state[4]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[4]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(md->whirlpool).state[5] = (md->whirlpool).state[5];" (assignment_expression "(md->whirlpool).state[5] = (md->whirlpool).state[5]" (subscript_expression "(md->whirlpool).state[5]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[5]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(md->whirlpool).state[6] = (md->whirlpool).state[6];" (assignment_expression "(md->whirlpool).state[6] = (md->whirlpool).state[6]" (subscript_expression "(md->whirlpool).state[6]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (subscript_expression "(md->whirlpool).state[6]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (if_statement "if (key != (uchar *)0x0) {\n        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\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        puVar3 = block;\n        for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }\n        puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);\n        blake2b_process(md,puVar3,0x80);\n      }" { (expression_statement "puVar3 = block;" (assignment_expression "puVar3 = block" identifier = identifier) ;) (for_statement "for (lVar5 = 0x10; lVar5 != 0; lVar5 = lVar5 + -1) {\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }" for ( (assignment_expression "lVar5 = 0x10" identifier = number_literal) ; (binary_expression "lVar5 != 0" identifier != number_literal) ; (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ) (compound_statement "{\n          puVar3[0] = '\0';\n          puVar3[1] = '\0';\n          puVar3[2] = '\0';\n          puVar3[3] = '\0';\n          puVar3[4] = '\0';\n          puVar3[5] = '\0';\n          puVar3[6] = '\0';\n          puVar3[7] = '\0';\n          puVar3 = puVar3 + 8;\n        }" { (expression_statement "puVar3[0] = '\0';" (assignment_expression "puVar3[0] = '\0'" (subscript_expression "puVar3[0]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[1] = '\0';" (assignment_expression "puVar3[1] = '\0'" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[2] = '\0';" (assignment_expression "puVar3[2] = '\0'" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[3] = '\0';" (assignment_expression "puVar3[3] = '\0'" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[4] = '\0';" (assignment_expression "puVar3[4] = '\0'" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[5] = '\0';" (assignment_expression "puVar3[5] = '\0'" (subscript_expression "puVar3[5]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[6] = '\0';" (assignment_expression "puVar3[6] = '\0'" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[7] = '\0';" (assignment_expression "puVar3[7] = '\0'" (subscript_expression "puVar3[7]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3 = puVar3 + 8;" (assignment_expression "puVar3 = puVar3 + 8" identifier = (binary_expression "puVar3 + 8" identifier + number_literal)) ;) })) (expression_statement "puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80);" (assignment_expression "puVar3 = (uchar *)__memcpy_chk(block,key,keylen,0x80)" identifier = (cast_expression "(uchar *)__memcpy_chk(block,key,keylen,0x80)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__memcpy_chk(block,key,keylen,0x80)" identifier (argument_list "(block,key,keylen,0x80)" ( identifier , identifier , identifier , number_literal ))))) ;) (expression_statement "blake2b_process(md,puVar3,0x80);" (call_expression "blake2b_process(md,puVar3,0x80)" identifier (argument_list "(md,puVar3,0x80)" ( identifier , identifier , number_literal ))) ;) })) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar2 = 0x10;\n    }" else (compound_statement "{\n      iVar2 = 0x10;\n    }" { (expression_statement "iVar2 = 0x10;" (assignment_expression "iVar2 = 0x10" identifier = number_literal) ;) }))) })) (if_statement "if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar2;\n  }" if (parenthesized_expression "(lVar1 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar1 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return iVar2;\n  }" { (return_statement "return iVar2;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "undefined8 blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    \n  __stack_chk_fail();\n}\n\n" (function_definition "undefined8 blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    \n  __stack_chk_fail();\n}" type_identifier (function_declarator "blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)" identifier (parameter_list "(ulong *param_1,ulong param_2,long param_3,ulong param_4)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    \n  __stack_chk_fail();\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 local_98 [17];" type_identifier (array_declarator "local_98 [17]" identifier [ number_literal ]) ;) (declaration "long local_10;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_10 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_10 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" if (parenthesized_expression "(param_1 == (ulong *)0x0)" ( (binary_expression "param_1 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" { (expression_statement "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);" (call_expression "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf)" identifier (argument_list "("md != NULL","src/hashes/blake2b.c",0xcf)" ( (string_literal ""md != NULL"" " string_content ") , (string_literal ""src/hashes/blake2b.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) (if_statement "if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }" if (parenthesized_expression "(param_2 - 1 < 0x40)" ( (binary_expression "param_2 - 1 < 0x40" (binary_expression "param_2 - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }" { (if_statement "if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }" if (parenthesized_expression "(((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41))" ( (binary_expression "((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)" (parenthesized_expression "((param_3 != 0) == (param_4 != 0))" ( (binary_expression "(param_3 != 0) == (param_4 != 0)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) == (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) ))) )) && (parenthesized_expression "(param_4 < 0x41)" ( (binary_expression "param_4 < 0x41" identifier < number_literal) ))) )) (compound_statement "{\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }" { (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1e] = 0;" (assignment_expression "param_1[0x1e] = 0" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);" (assignment_expression "puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" identifier = (cast_expression "(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(param_1 + 9) & 0xfffffffffffffff8" (call_expression "(ulong)(param_1 + 9)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }" for ( (assignment_expression "uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" identifier = (call_expression "(ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" ( (binary_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3" (binary_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U" (parenthesized_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8))" ( (binary_expression "(int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (type_descriptor "int" primitive_type) ) (cast_expression "(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(param_1 + 9) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(param_1 + 9) & 0xfffffffffffffff8" (call_expression "(ulong)(param_1 + 9)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) ))) & number_literal) ))))) )) + number_literal) >> number_literal) )))) ; (binary_expression "uVar2 != 0" identifier != number_literal) ; (assignment_expression "uVar2 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ) (compound_statement "{\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }" { (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "param_1[1] = 0xbb67ae8584caa73b;" (assignment_expression "param_1[1] = 0xbb67ae8584caa73b" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0x3c6ef372fe94f82b;" (assignment_expression "param_1[2] = 0x3c6ef372fe94f82b" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0xa54ff53a5f1d36f1;" (assignment_expression "param_1[3] = 0xa54ff53a5f1d36f1" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[4] = 0x510e527fade682d1;" (assignment_expression "param_1[4] = 0x510e527fade682d1" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[5] = 0x9b05688c2b3e6c1f;" (assignment_expression "param_1[5] = 0x9b05688c2b3e6c1f" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0x1f83d9abfb41bd6b;" (assignment_expression "param_1[6] = 0x1f83d9abfb41bd6b" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = 0x5be0cd19137e2179;" (assignment_expression "param_1[7] = 0x5be0cd19137e2179" (subscript_expression "param_1[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = param_1[1];" (assignment_expression "param_1[1] = param_1[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "param_1[2] = param_1[2];" (assignment_expression "param_1[2] = param_1[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "*param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;" (assignment_expression "*param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908" (pointer_expression "*param_1" * identifier) = (binary_expression "(ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908" (cast_expression "(ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2))" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2))" identifier (argument_list "(0x101,CONCAT11((char)param_4,(char)param_2))" ( number_literal , (call_expression "CONCAT11((char)param_4,(char)param_2)" identifier (argument_list "((char)param_4,(char)param_2)" ( (cast_expression "(char)param_4" ( (type_descriptor "char" primitive_type) ) identifier) , (cast_expression "(char)param_2" ( (type_descriptor "char" primitive_type) ) identifier) ))) )))) ^ number_literal)) ;) (expression_statement "param_1[3] = param_1[3];" (assignment_expression "param_1[3] = param_1[3]" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_1[4] = param_1[4];" (assignment_expression "param_1[4] = param_1[4]" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1d] = param_2;" (assignment_expression "param_1[0x1d] = param_2" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[5] = param_1[5];" (assignment_expression "param_1[5] = param_1[5]" (subscript_expression "param_1[5]" identifier [ number_literal ]) = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "param_1[6] = param_1[6];" (assignment_expression "param_1[6] = param_1[6]" (subscript_expression "param_1[6]" identifier [ number_literal ]) = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "param_1[7] = param_1[7];" (assignment_expression "param_1[7] = param_1[7]" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (if_statement "if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }" { (expression_statement "puVar4 = local_98;" (assignment_expression "puVar4 = local_98" identifier = identifier) ;) (for_statement "for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }" for ( (assignment_expression "lVar3 = 0x10" identifier = number_literal) ; (binary_expression "lVar3 != 0" identifier != number_literal) ; (assignment_expression "lVar3 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ) (compound_statement "{\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }" { (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);" (assignment_expression "uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80)" identifier = (call_expression "__memcpy_chk(local_98,param_3,param_4,0x80)" identifier (argument_list "(local_98,param_3,param_4,0x80)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "blake2b_process(param_1,uVar1,0x80);" (call_expression "blake2b_process(param_1,uVar1,0x80)" identifier (argument_list "(param_1,uVar1,0x80)" ( identifier , identifier , number_literal ))) ;) })) (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar1 = 0x10;\n    }" else (compound_statement "{\n      uVar1 = 0x10;\n    }" { (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) }))) })) (if_statement "if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }" if (parenthesized_expression "(local_10 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_10 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return uVar1;\n  }" { (return_statement "return uVar1;" return identifier ;) })) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + 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 = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) == (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) && (parenthesized_expression ( (binary_expression IDENT < LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ;) (for_statement for ( (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) ))))) )) + LIT) >> LIT) )))) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT - LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( LIT , (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))) )))) ^ LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (for_statement for ( (assignment_expression IDENT = LIT) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "undefined8 blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    \n  __stack_chk_fail();\n}" (type_identifier "undefined8") (function_declarator "blake2b_init(ulong *param_1,ulong param_2,long param_3,ulong param_4)" (identifier "blake2b_init") (parameter_list "(ulong *param_1,ulong param_2,long param_3,ulong param_4)" (( "(") (parameter_declaration "ulong *param_1" (type_identifier "ulong") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long in_FS_OFFSET;\n  undefined8 local_98 [17];\n  long local_10;\n  \n  local_10 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }\n  uVar1 = 0x10;\n  if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }\n  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }\n                    \n  __stack_chk_fail();\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "undefined8 local_98 [17];" (type_identifier "undefined8") (array_declarator "local_98 [17]" (identifier "local_98") ([ "[") (number_literal "17") (] "]")) (; ";")) (declaration "long local_10;" (sized_type_specifier "long" (long "long")) (identifier "local_10") (; ";")) (expression_statement "local_10 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_10 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_10") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (param_1 == (ulong *)0x0) {\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" (if "if") (parenthesized_expression "(param_1 == (ulong *)0x0)" (( "(") (binary_expression "param_1 == (ulong *)0x0" (identifier "param_1") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);\n  }" ({ "{") (expression_statement "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);" (call_expression "crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf)" (identifier "crypt_argchk") (argument_list "("md != NULL","src/hashes/blake2b.c",0xcf)" (( "(") (string_literal ""md != NULL"" (" """) (string_content "md != NULL") (" """)) (, ",") (string_literal ""src/hashes/blake2b.c"" (" """) (string_content "src/hashes/blake2b.c") (" """)) (, ",") (number_literal "0xcf") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" (identifier "uVar1") (= "=") (number_literal "0x10")) (; ";")) (if_statement "if (param_2 - 1 < 0x40) {\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 - 1 < 0x40)" (( "(") (binary_expression "param_2 - 1 < 0x40" (binary_expression "param_2 - 1" (identifier "param_2") (- "-") (number_literal "1")) (< "<") (number_literal "0x40")) () ")")) (compound_statement "{\n    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }\n  }" ({ "{") (if_statement "if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }\n    else {\n      uVar1 = 0x10;\n    }" (if "if") (parenthesized_expression "(((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41))" (( "(") (binary_expression "((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)" (parenthesized_expression "((param_3 != 0) == (param_4 != 0))" (( "(") (binary_expression "(param_3 != 0) == (param_4 != 0)" (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (== "==") (parenthesized_expression "(param_4 != 0)" (( "(") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(param_4 < 0x41)" (( "(") (binary_expression "param_4 < 0x41" (identifier "param_4") (< "<") (number_literal "0x41")) () ")"))) () ")")) (compound_statement "{\n      param_1[8] = 0;\n      param_1[0x1e] = 0;\n      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);\n      for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }\n      param_1[1] = 0xbb67ae8584caa73b;\n      param_1[2] = 0x3c6ef372fe94f82b;\n      param_1[3] = 0xa54ff53a5f1d36f1;\n      param_1[4] = 0x510e527fade682d1;\n      param_1[5] = 0x9b05688c2b3e6c1f;\n      param_1[6] = 0x1f83d9abfb41bd6b;\n      param_1[7] = 0x5be0cd19137e2179;\n      param_1[1] = param_1[1];\n      param_1[2] = param_1[2];\n      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;\n      param_1[3] = param_1[3];\n      param_1[4] = param_1[4];\n      param_1[0x1d] = param_2;\n      param_1[5] = param_1[5];\n      param_1[6] = param_1[6];\n      param_1[7] = param_1[7];\n      if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }\n      uVar1 = 0;\n    }" ({ "{") (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x1e] = 0;" (assignment_expression "param_1[0x1e] = 0" (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);" (assignment_expression "puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (identifier "puVar4") (= "=") (cast_expression "(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (( "(") (binary_expression "(ulong)(param_1 + 9) & 0xfffffffffffffff8" (call_expression "(ulong)(param_1 + 9)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1 + 9)" (( "(") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) () ")"))) (& "&") (number_literal "0xfffffffffffffff8")) () ")")))) (; ";")) (for_statement "for (uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }" (for "for") (( "(") (assignment_expression "uVar2 = (ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" (identifier "uVar2") (= "=") (call_expression "(ulong)(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3)" (( "(") (binary_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U\n                          >> 3" (binary_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U" (parenthesized_expression "((int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8))" (( "(") (binary_expression "(int)param_1 -\n                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (- "-") (cast_expression "(int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(param_1 + 9) & 0xfffffffffffffff8)" (( "(") (binary_expression "(ulong)(param_1 + 9) & 0xfffffffffffffff8" (call_expression "(ulong)(param_1 + 9)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1 + 9)" (( "(") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) () ")"))) (& "&") (number_literal "0xfffffffffffffff8")) () ")"))))) () ")")) (+ "+") (number_literal "0xf8U")) (>> ">>") (number_literal "3")) () ")")))) (; ";") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "uVar2 = uVar2 - 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 - 1" (identifier "uVar2") (- "-") (number_literal "1"))) () ")") (compound_statement "{\n        *puVar4 = 0;\n        puVar4 = puVar4 + 1;\n      }" ({ "{") (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "param_1[1] = 0xbb67ae8584caa73b;" (assignment_expression "param_1[1] = 0xbb67ae8584caa73b" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0xbb67ae8584caa73b")) (; ";")) (expression_statement "param_1[2] = 0x3c6ef372fe94f82b;" (assignment_expression "param_1[2] = 0x3c6ef372fe94f82b" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0x3c6ef372fe94f82b")) (; ";")) (expression_statement "param_1[3] = 0xa54ff53a5f1d36f1;" (assignment_expression "param_1[3] = 0xa54ff53a5f1d36f1" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0xa54ff53a5f1d36f1")) (; ";")) (expression_statement "param_1[4] = 0x510e527fade682d1;" (assignment_expression "param_1[4] = 0x510e527fade682d1" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0x510e527fade682d1")) (; ";")) (expression_statement "param_1[5] = 0x9b05688c2b3e6c1f;" (assignment_expression "param_1[5] = 0x9b05688c2b3e6c1f" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0x9b05688c2b3e6c1f")) (; ";")) (expression_statement "param_1[6] = 0x1f83d9abfb41bd6b;" (assignment_expression "param_1[6] = 0x1f83d9abfb41bd6b" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0x1f83d9abfb41bd6b")) (; ";")) (expression_statement "param_1[7] = 0x5be0cd19137e2179;" (assignment_expression "param_1[7] = 0x5be0cd19137e2179" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0x5be0cd19137e2179")) (; ";")) (expression_statement "param_1[1] = param_1[1];" (assignment_expression "param_1[1] = param_1[1]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "param_1[2] = param_1[2];" (assignment_expression "param_1[2] = param_1[2]" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "*param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;" (assignment_expression "*param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "(ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908" (cast_expression "(ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2))" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (call_expression "CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2))" (identifier "CONCAT22") (argument_list "(0x101,CONCAT11((char)param_4,(char)param_2))" (( "(") (number_literal "0x101") (, ",") (call_expression "CONCAT11((char)param_4,(char)param_2)" (identifier "CONCAT11") (argument_list "((char)param_4,(char)param_2)" (( "(") (cast_expression "(char)param_4" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_4")) (, ",") (cast_expression "(char)param_2" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_2")) () ")"))) () ")")))) (^ "^") (number_literal "0x6a09e667f3bcc908"))) (; ";")) (expression_statement "param_1[3] = param_1[3];" (assignment_expression "param_1[3] = param_1[3]" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "param_1[4] = param_1[4];" (assignment_expression "param_1[4] = param_1[4]" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "param_1[0x1d] = param_2;" (assignment_expression "param_1[0x1d] = param_2" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "param_1[5] = param_1[5];" (assignment_expression "param_1[5] = param_1[5]" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "param_1[6] = param_1[6];" (assignment_expression "param_1[6] = param_1[6]" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "param_1[7] = param_1[7];" (assignment_expression "param_1[7] = param_1[7]" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (if_statement "if (param_3 != 0) {\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }" (if "if") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        puVar4 = local_98;\n        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }\n        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);\n        blake2b_process(param_1,uVar1,0x80);\n      }" ({ "{") (expression_statement "puVar4 = local_98;" (assignment_expression "puVar4 = local_98" (identifier "puVar4") (= "=") (identifier "local_98")) (; ";")) (for_statement "for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }" (for "for") (( "(") (assignment_expression "lVar3 = 0x10" (identifier "lVar3") (= "=") (number_literal "0x10")) (; ";") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "lVar3 = lVar3 + -1" (identifier "lVar3") (= "=") (binary_expression "lVar3 + -1" (identifier "lVar3") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n          *puVar4 = 0;\n          puVar4 = puVar4 + 1;\n        }" ({ "{") (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);" (assignment_expression "uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80)" (identifier "uVar1") (= "=") (call_expression "__memcpy_chk(local_98,param_3,param_4,0x80)" (identifier "__memcpy_chk") (argument_list "(local_98,param_3,param_4,0x80)" (( "(") (identifier "local_98") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (number_literal "0x80") () ")")))) (; ";")) (expression_statement "blake2b_process(param_1,uVar1,0x80);" (call_expression "blake2b_process(param_1,uVar1,0x80)" (identifier "blake2b_process") (argument_list "(param_1,uVar1,0x80)" (( "(") (identifier "param_1") (, ",") (identifier "uVar1") (, ",") (number_literal "0x80") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" (identifier "uVar1") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      uVar1 = 0x10;\n    }" (else "else") (compound_statement "{\n      uVar1 = 0x10;\n    }" ({ "{") (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" (identifier "uVar1") (= "=") (number_literal "0x10")) (; ";")) (} "}")))) (} "}"))) (if_statement "if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar1;\n  }" (if "if") (parenthesized_expression "(local_10 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_10 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_10") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n    return uVar1;\n  }" ({ "{") (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

int function_1(type_1 *var_2,type_2 var_4,type_3 *var_5,type_2 var_6)

{
  long var_15;
  int iVar2;
  type_3 *var_12;
  type_2 var_7;
  long var_11;
  type_4 *var_8;
  long var_1;
  type_3 P [64];
  type_3 block [128];
  
  var_15 = *(long *)(var_1 + 0x28);
  if (var_2 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("md != NULL","src/hashes/blake2b.c",0xcf);
  }
  iVar2 = 0x10;
  if (var_4 - 1 < 0x40) {
    if (((var_5 != (type_3 *)0x0) == (var_6 != 0)) && (var_6 < 0x41)) {
      (var_2->whirlpool).state[7] = 0;
      *(char *)((long)var_2 + 0xf0) = '\0';
      *(char *)((long)var_2 + 0xf1) = '\0';
      *(char *)((long)var_2 + 0xf2) = '\0';
      *(char *)((long)var_2 + 0xf3) = '\0';
      *(char *)((long)var_2 + 0xf4) = '\0';
      *(char *)((long)var_2 + 0xf5) = '\0';
      *(char *)((long)var_2 + 0xf6) = '\0';
      *(char *)((long)var_2 + 0xf7) = '\0';
      var_8 = (type_4 *)((type_2)(var_2->dummy + 0x48) & 0xfffffffffffffff8);
      for (var_7 = (type_2)(((int)var_2 -
                           (int)(type_4 *)((type_2)(var_2->dummy + 0x48) & 0xfffffffffffffff8)) +
                           0xf8U >> 3); var_7 != 0; var_7 = var_7 - 1) {
        *var_8 = 0;
        var_8 = var_8 + 1;
      }
      (var_2->whirlpool).state[0] = 0xbb67ae8584caa73b;
      (var_2->whirlpool).state[1] = 0x3c6ef372fe94f82b;
      (var_2->whirlpool).state[2] = 0xa54ff53a5f1d36f1;
      (var_2->whirlpool).state[3] = 0x510e527fade682d1;
      (var_2->whirlpool).state[4] = 0x9b05688c2b3e6c1f;
      (var_2->whirlpool).state[5] = 0x1f83d9abfb41bd6b;
      (var_2->whirlpool).state[6] = 0x5be0cd19137e2179;
      (var_2->whirlpool).state[0] = (var_2->whirlpool).state[0];
      (var_2->whirlpool).state[1] = (var_2->whirlpool).state[1];
      (var_2->chc).length =
           (type_2)var_9(0x101,var_10((char)var_6,(char)var_4)) ^ 0x6a09e667f3bcc908;
      (var_2->whirlpool).state[2] = (var_2->whirlpool).state[2];
      (var_2->whirlpool).state[3] = (var_2->whirlpool).state[3];
      (var_2->blake2b).var_4 = var_4;
      (var_2->whirlpool).state[4] = (var_2->whirlpool).state[4];
      (var_2->whirlpool).state[5] = (var_2->whirlpool).state[5];
      (var_2->whirlpool).state[6] = (var_2->whirlpool).state[6];
      if (var_5 != (type_3 *)0x0) {
        var_12 = block;
        for (var_11 = 0x10; var_11 != 0; var_11 = var_11 + -1) {
          var_12[0] = '\0';
          var_12[1] = '\0';
          var_12[2] = '\0';
          var_12[3] = '\0';
          var_12[4] = '\0';
          var_12[5] = '\0';
          var_12[6] = '\0';
          var_12[7] = '\0';
          var_12 = var_12 + 8;
        }
        var_12 = (type_3 *)var_13(block,var_5,var_6,0x80);
        var_14(var_2,var_12,0x80);
      }
      iVar2 = 0;
    }
    else {
      iVar2 = 0x10;
    }
  }
  if (var_15 == *(long *)(var_1 + 0x28)) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  var_16();
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) 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: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))) (for_statement initializer: (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))))))) right: (number_literal)) right: (number_literal))))) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (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: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal) (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (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: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (for_statement initializer: (assignment_expression left: (identifier) right: (number_literal)) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))))

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

{
  undefined8 uVar1;
  ulong uVar2;
  long lVar3;
  undefined8 *puVar4;
  long in_FS_OFFSET;
  undefined8 local_98 [17];
  long local_10;
  
  local_10 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_1 == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("md != NULL","src/hashes/blake2b.c",0xcf);
  }
  uVar1 = 0x10;
  if (param_2 - 1 < 0x40) {
    if (((param_3 != 0) == (param_4 != 0)) && (param_4 < 0x41)) {
      param_1[8] = 0;
      param_1[0x1e] = 0;
      puVar4 = (undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8);
      for (uVar2 = (ulong)(((int)param_1 -
                           (int)(undefined8 *)((ulong)(param_1 + 9) & 0xfffffffffffffff8)) + 0xf8U
                          >> 3); uVar2 != 0; uVar2 = uVar2 - 1) {
        *puVar4 = 0;
        puVar4 = puVar4 + 1;
      }
      param_1[1] = 0xbb67ae8584caa73b;
      param_1[2] = 0x3c6ef372fe94f82b;
      param_1[3] = 0xa54ff53a5f1d36f1;
      param_1[4] = 0x510e527fade682d1;
      param_1[5] = 0x9b05688c2b3e6c1f;
      param_1[6] = 0x1f83d9abfb41bd6b;
      param_1[7] = 0x5be0cd19137e2179;
      param_1[1] = param_1[1];
      param_1[2] = param_1[2];
      *param_1 = (ulong)CONCAT22(0x101,CONCAT11((char)param_4,(char)param_2)) ^ 0x6a09e667f3bcc908;
      param_1[3] = param_1[3];
      param_1[4] = param_1[4];
      param_1[0x1d] = param_2;
      param_1[5] = param_1[5];
      param_1[6] = param_1[6];
      param_1[7] = param_1[7];
      if (param_3 != 0) {
        puVar4 = local_98;
        for (lVar3 = 0x10; lVar3 != 0; lVar3 = lVar3 + -1) {
          *puVar4 = 0;
          puVar4 = puVar4 + 1;
        }
        uVar1 = __memcpy_chk(local_98,param_3,param_4,0x80);
        blake2b_process(param_1,uVar1,0x80);
      }
      uVar1 = 0;
    }
    else {
      uVar1 = 0x10;
    }
  }
  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

