undefined4 FUN_00405924(int param_1,undefined4 param_2,undefined4 param_3)

{
  int iVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  int *piVar5;
  
  iVar1 = FUN_00404330(param_3,0,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc));
  if (iVar1 == 0) {
    iVar1 = FUN_00403984(*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),3,param_2);
    if (iVar1 != 0) {
      dprintf(5,"release_binding_ia","failed to make an option list");
      return 0xffffffff;
    }
  }
  else {
    piVar5 = *(int **)(param_1 + 0x28);
    if (piVar5 != (int *)0x0) {
      do {
        while (*(int *)(iVar1 + 8) == 0) {
          piVar2 = (int *)dhcp6_find_listval(iVar1 + 0x1c,piVar5[2],piVar5 + 3,0);
          if (piVar2 != (int *)0x0) {
            if (*(int *)(iVar1 + 0x14) == 4) {
              uVar3 = in6addr2str(piVar2 + 5,0);
              dprintf(7,"release_binding_ia","bound prefix %s/%d has been released",uVar3,piVar2[9])
              ;
              iVar4 = *piVar2;
              if (iVar4 == 0) goto LAB_00405b34;
LAB_00405a44:
              *(int *)(iVar4 + 4) = piVar2[1];
              *(int *)piVar2[1] = iVar4;
              dhcp6_clear_listval(piVar2);
              iVar4 = *(int *)(iVar1 + 0x1c);
            }
            else {
              if (*(int *)(iVar1 + 0x14) == 6) {
                release_address(piVar2 + 5);
                uVar3 = in6addr2str(piVar2 + 5,0);
                dprintf(7,"release_binding_ia","bound address %s has been released",uVar3);
              }
              iVar4 = *piVar2;
              if (iVar4 != 0) goto LAB_00405a44;
LAB_00405b34:
              *(int *)(iVar1 + 0x20) = piVar2[1];
              *(int *)piVar2[1] = *piVar2;
              dhcp6_clear_listval(piVar2);
              iVar4 = *(int *)(iVar1 + 0x1c);
            }
            if (iVar4 == 0) {
              FUN_004055f0(iVar1);
              return 0;
            }
          }
          piVar5 = (int *)*piVar5;
          if (piVar5 == (int *)0x0) {
            return 0;
          }
        }
        dprintf(3,"find_binding_ia","unknown binding type %d");
        piVar5 = (int *)*piVar5;
      } while (piVar5 != (int *)0x0);
    }
  }
  return 0;
}