func (i *IE) HasEPFAR() bool {
	switch i.Type {
	case UPFunctionFeatures:
		if len(i.Payload) < 2 {
			return false
		}
		return has8thBit(i.Payload[1])
	case CPFunctionFeatures:
		if len(i.Payload) < 1 {
			return false
		}
		return has3rdBit(i.Payload[0])
	default:
		return false
	}
}
HasEPFAR reports whether an IE has EPFAR bit.
package ie
func NewUPFunctionFeatures(features ...uint8) *IE {
	var l int
	if len(features) >= 3 {
		l = 4
	} else {
		l = 2
	}
	ie := New(UPFunctionFeatures, make([]byte, l))
	for i, feature := range features {
		if i > 3 {
			break
		}
		ie.Payload[i] = feature
	}
	return ie
}
func (i *IE) UPFunctionFeatures() ([]byte, error) {
	if i.Type != UPFunctionFeatures {
		return nil, &InvalidTypeError{Type: i.Type}
	}
	return i.Payload, nil
}
func (i *IE) HasBUCP() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has1stBit(i.Payload[0])
}
func (i *IE) HasDDND() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has2ndBit(i.Payload[0])
}
func (i *IE) HasDLBD() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has3rdBit(i.Payload[0])
}
func (i *IE) HasTRST() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has4thBit(i.Payload[0])
}
func (i *IE) HasFTUP() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has5thBit(i.Payload[0])
}
func (i *IE) HasPFDM() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has6thBit(i.Payload[0])
}
func (i *IE) HasHEEU() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has7thBit(i.Payload[0])
}
func (i *IE) HasTREU() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has8thBit(i.Payload[0])
}
func (i *IE) HasEMPU() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has1stBit(i.Payload[1])
}
func (i *IE) HasPDIU() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has2ndBit(i.Payload[1])
}
func (i *IE) HasUDBC() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has3rdBit(i.Payload[1])
}
func (i *IE) HasQUOAC() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has4thBit(i.Payload[1])
}
func (i *IE) HasTRACE() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has5thBit(i.Payload[1])
}
func (i *IE) HasFRRT() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has6thBit(i.Payload[1])
}
func (i *IE) HasPFDE() bool {
	if i.Type != UPFunctionFeatures {
		return false
	}
	if len(i.Payload) < 2 {
		return false
	}
	return has7thBit(i.Payload[1])
}