docs: MACAddressSegment[] toEUISegments(boolean extended) {
  		IPv6AddressSegment seg0, seg1, seg2, seg3;
  		int start = addressSegmentIndex;
  		int segmentCount = getSegmentCount();
  		int segmentIndex;
  		if(start < 4) {
  			start = 0;
  			segmentIndex = 4 - start;
  		} else {
  			start -= 4;
  			segmentIndex = 0;
  		}
  		int originalSegmentIndex = segmentIndex;
  		seg0 = (start == 0 && segmentIndex < segmentCount) ? getSegment(segmentIndex++) : null;
  		seg1 = (start <= 1 && segmentIndex < segmentCount) ? getSegment(segmentIndex++) : null;
  		seg2 = (start <= 2 && segmentIndex < segmentCount) ? getSegment(segmentIndex++) : null;
  		seg3 = (start <= 3 && segmentIndex < segmentCount) ? getSegment(segmentIndex++) : null;
  		int macSegCount = (segmentIndex - originalSegmentIndex) << 1;
  		if(!extended) {
  			macSegCount -= 2;
  		}
  		if((seg1 != null && !seg1.matchesWithMask(0xff, 0xff)) || (seg2 != null && !seg2.matchesWithMask(0xfe00, 0xff00)) || macSegCount == 0) {
  			return null;
  		}
  		MACAddressCreator creator = getMACNetwork().getAddressCreator();
  		MACAddressSegment ZERO_SEGMENT = creator.createSegment(0);
  		MACAddressSegment newSegs[] = creator.createSegmentArray(macSegCount);
  		int macStartIndex = 0;
  		if(seg0 != null) {
  			seg0.getSplitSegments(newSegs, macStartIndex, creator);
  			//toggle the u/l bit
  			MACAddressSegment macSegment0 = newSegs[0];
  			int lower0 = macSegment0.getSegmentValue();
  			int upper0 = macSegment0.getUpperSegmentValue();
  			int mask2ndBit = 0x2;
  			if(!macSegment0.matchesWithMask(mask2ndBit & lower0, mask2ndBit)) {
  				return null;
  			}
  			//you can use matches with mask
  			lower0 ^= mask2ndBit;//flip the universal/local bit
  			upper0 ^= mask2ndBit;
  			newSegs[0] = creator.createSegment(lower0, upper0, null);
  			macStartIndex += 2;
  		}
  		if(seg1 != null) {
  			seg1.getSplitSegments(newSegs, macStartIndex, creator);  //a ff fe b
  			if(!extended) {
  				newSegs[macStartIndex + 1] = ZERO_SEGMENT;
  			}
  			macStartIndex += 2;
  		}
  		if(seg2 != null) {
  			if(!extended) {
  				if(seg1 != null) {
  					macStartIndex -= 2;
  					MACAddressSegment first = newSegs[macStartIndex];
  					seg2.getSplitSegments(newSegs, macStartIndex, creator);
  					newSegs[macStartIndex] = first;
  				} else {
  					seg2.getSplitSegments(newSegs, macStartIndex, creator);
  					newSegs[macStartIndex] = ZERO_SEGMENT;
  				}
  			} else {
  				seg2.getSplitSegments(newSegs, macStartIndex, creator);
  			}
  			macStartIndex += 2;
  		}
  		if(seg3 != null) {
  			seg3.getSplitSegments(newSegs, macStartIndex, creator);
  		}
  		return newSegs;
  	}