undefined4 sendOffer(int param_1)

{
  uint uVar1;
  uint uVar2;
  bool bVar3;
  int iVar4;
  char *pcVar5;
  undefined4 uVar6;
  int iVar7;
  uint uVar8;
  void *__src;
  uint uVar9;
  uint *puVar10;
  char *__fmt;
  undefined1 *__dest;
  undefined4 *puVar11;
  uint local_34c;
  undefined1 auStack_348 [256];
  undefined1 auStack_248 [16];
  in_addr local_238;
  undefined1 auStack_22c [212];
  undefined1 auStack_158 [316];
  
  local_34c = DAT_0041bc60;
  FUN_004043f0(auStack_248,param_1,2);
  iVar4 = find_static_lease_by_chaddr(param_1 + 0x1c);
  if (iVar4 != 0) {
    local_238.s_addr = *(uint *)(iVar4 + 0x10);
    bVar3 = true;
    local_34c = 0xffffffff;
    goto LAB_00404afc;
  }
  iVar4 = find_lease_by_chaddr(param_1 + 0x1c);
  if (iVar4 == 0) {
    puVar10 = (uint *)get_option(param_1,0x32);
    if (puVar10 != (uint *)0x0) {
      uVar8 = *puVar10;
      uVar9 = uVar8 << 0x18 | uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8;
      if (((((DAT_0041bc44 << 0x18 | DAT_0041bc44 >> 0x18 | (DAT_0041bc44 & 0xff0000) >> 8 |
             (DAT_0041bc44 & 0xff00) << 8) <= uVar9) &&
           (uVar9 <= (DAT_0041bc48 << 0x18 | DAT_0041bc48 >> 0x18 | (DAT_0041bc48 & 0xff0000) >> 8 |
                     (DAT_0041bc48 & 0xff00) << 8))) &&
          (iVar4 = find_static_lease_by_yiaddr(uVar8), iVar4 == 0)) &&
         ((iVar4 = find_lease_by_yiaddr(uVar8), iVar4 == 0 ||
          (iVar4 = lease_expired(iVar4), iVar4 != 0)))) goto LAB_00404c60;
    }
LAB_00404d54:
    local_238.s_addr = find_address(0);
    if ((local_238.s_addr == 0) && (local_238.s_addr = find_address(1), local_238.s_addr == 0)) {
      return 0xffffffff;
    }
  }
  else {
    iVar7 = lease_expired(iVar4);
    if (iVar7 == 0) {
      local_34c = *(uint *)(iVar4 + 0x14);
    }
    uVar8 = *(uint *)(iVar4 + 0x10);
LAB_00404c60:
    local_238.s_addr = uVar8;
    if (uVar8 == 0) goto LAB_00404d54;
  }
  __src = (void *)get_option(param_1,0xc);
  if (__src == (void *)0x0) {
    __dest = (undefined1 *)0x0;
  }
  else {
    __dest = auStack_348;
    memcpy(__dest,__src,(uint)*(byte *)((int)__src + -1))   //possible issue identified - semgrep
    auStack_348[*(byte *)((int)__src + -1)] = 0;
  }
  uVar8 = DAT_0041bc78;
  iVar4 = add_lease(auStack_22c,local_238.s_addr,DAT_0041bc78,__dest);
  if (iVar4 == 0) {
    syslog(0xe5,"DHCP: Server lease pool is full, OFFER abandoned.");
    return 0xffffffff;
  }
  uVar9 = get_option(param_1,0x33);
  if (uVar9 != 0) {
    uVar1 = uVar9 + 3 & 3;
    uVar2 = uVar9 & 3;
    uVar8 = (*(int *)((uVar9 + 3) - uVar1) << (3 - uVar1) * 8 |
            uVar8 & 0xffffffffU >> (uVar1 + 1) * 8) & -1 << (4 - uVar2) * 8 |
            *(uint *)(uVar9 - uVar2) >> uVar2 * 8;
    local_34c = uVar8 << 0x18 | uVar8 >> 0x18 | uVar8 >> 8 & 0xff00 | (uVar8 & 0xff00) << 8;
    if (DAT_0041bc60 < local_34c) {
      local_34c = DAT_0041bc60;
    }
  }
  if (local_34c < DAT_0041bc7c) {
    bVar3 = false;
    local_34c = DAT_0041bc60;
  }
  else {
    bVar3 = false;
  }
LAB_00404afc:
  add_simple_option(auStack_158,0x33,
                    local_34c << 0x18 | local_34c >> 0x18 | local_34c >> 8 & 0xff00 |
                    (local_34c & 0xff00) << 8);
  for (puVar11 = DAT_0041bc4c; puVar11 != (undefined4 *)0x0; puVar11 = (undefined4 *)puVar11[1]) {
    if (*(char *)*puVar11 != '3') {
      add_option_string(auStack_158);
    }
  }
  FUN_00404494(auStack_248);
  if (bVar3) {
    pcVar5 = inet_ntoa(local_238);
    __fmt = "DHCP: Server sending OFFER of %s for static DHCP client.";
  }
  else {
    pcVar5 = inet_ntoa(local_238);
    __fmt = "DHCP: Server sending OFFER of %s.";
  }
  syslog(0xe5,__fmt,pcVar5);
  uVar6 = FUN_00404520(auStack_248,0);
  return uVar6;
}