/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ssize_t FUN_00402f38(int *param_1,void *param_2,int param_3)

{
  FILE *__stream;
  uint uVar1;
  ssize_t sVar2;
  int *piVar3;
  char *pcVar4;
  undefined4 *puVar5;
  int iVar6;
  uint __n;
  int iVar7;
  sockaddr local_fe0;
  undefined1 auStack_fd0 [16];
  undefined1 uStack_fc0;
  ushort uStack_fbf;
  undefined1 auStack_fbd [3];
  ushort local_fba;
  byte local_fb6;
  undefined1 auStack_fb4 [3992];
  
  local_fe0.sa_data._0_2_ = *(ushort *)(param_1 + 1) << 8 | *(ushort *)(param_1 + 1) >> 8;
  local_fe0.sa_family = 2;
  local_fe0.sa_data[2] = -1;
  local_fe0.sa_data[3] = -1;
  local_fe0.sa_data[4] = -1;
  local_fe0.sa_data[5] = -1;
  local_fe0.sa_data[6] = '\0';
  local_fe0.sa_data[7] = '\0';
  local_fe0.sa_data[8] = '\0';
  local_fe0.sa_data[9] = '\0';
  local_fe0.sa_data[10] = '\0';
  local_fe0.sa_data[0xb] = '\0';
  local_fe0.sa_data[0xc] = '\0';
  local_fe0.sa_data[0xd] = '\0';
  memcpy(&uStack_fc0,param_2,0x24)   //possible issue identified - semgrep
  puVar5 = *(undefined4 **)((int)param_2 + 0x24);
  __n = 0x24;
  while( true ) {
    if (puVar5 == (undefined4 *)0x0) break;
    memcpy(&uStack_fc0 + __n,puVar5 + 1,*(byte *)(puVar5 + 1) + 1)   //possible issue identified - semgrep
    uVar1 = *(ushort *)(puVar5 + 9) + 3 + (uint)*(byte *)(puVar5 + 1) & 0xffff;
    iVar6 = *(byte *)(puVar5 + 1) + 1 + __n;
    *(ushort *)(&uStack_fc0 + iVar6) = (ushort)(uVar1 << 8) | (ushort)(uVar1 >> 8);
    __n = iVar6 + 2;
    if (*(ushort *)(puVar5 + 9) != 0) {
      if ((void *)puVar5[10] != (void *)0x0) {
        memcpy(&uStack_fc0 + __n,(void *)puVar5[10],(uint)*(ushort *)(puVar5 + 9))   //possible issue identified - semgrep
        __n = __n + *(ushort *)(puVar5 + 9);
      }
    }
    puVar5 = (undefined4 *)*puVar5;
  }
  local_fba = (ushort)((__n & 0xffff) << 8) | (ushort)((__n & 0xffff) >> 8);
  local_fb6 = local_fb6 & 0xf;
  memset(auStack_fb4,0,0x10)   //possible issue identified - semgrep
  if ((param_3 != 0) && (*(char *)((int)param_1 + 0x17) == '\x01')) {
    local_fb6 = local_fb6 & 0x8f | 0x10;
    hmac_md5(&uStack_fc0,__n,param_1[6],param_1[7],auStack_fd0);
    memcpy(auStack_fb4,auStack_fd0,0x10)   //possible issue identified - semgrep
  }
  sVar2 = sendto(*param_1,&uStack_fc0,__n,0,&local_fe0,0x10);
  __stream = _stderr;
  if (sVar2 < 0) {
    iVar7 = *param_1;
    piVar3 = __errno_location();
    iVar6 = *piVar3;
    pcVar4 = strerror(iVar6);
    fprintf(__stream,"%d sento error %d %s\n",iVar7,iVar6,pcVar4);
  }
  return sVar2;
}