public void decode(Decoder decoder) throws DecoderException {
		int el = decoder.openElement();
		if (el == ELEM_CONST_REAL.id()) {
			type = REAL;
			value_real = decoder.readUnsignedInteger(ATTRIB_VAL);
		}
		else if (el == ELEM_CONST_HANDLE.id()) {
			type = HANDLE;
			handle_index = (short) decoder.readSignedInteger(ATTRIB_VAL);
			select = (short) decoder.readSignedInteger(ATTRIB_S);
			if (select < 0 || select > V_OFFSET_PLUS) {
				throw new DecoderException("Bad handle selector encoding");
			}
			if (select == V_OFFSET_PLUS) {
				value_real = decoder.readUnsignedInteger(ATTRIB_PLUS);
			}
		}
		else if (el == ELEM_CONST_START.id()) {
			type = J_START;
		}
		else if (el == ELEM_CONST_NEXT.id()) {
			type = J_NEXT;
		}
		else if (el == ELEM_CONST_NEXT2.id()) {
			type = J_NEXT2;
		}
		else if (el == ELEM_CONST_CURSPACE.id()) {
			type = J_CURSPACE;
		}
		else if (el == ELEM_CONST_CURSPACE_SIZE.id()) {
			type = J_CURSPACE_SIZE;
		}
		else if (el == ELEM_CONST_SPACEID.id()) {
			type = SPACEID;
			value_spaceid = decoder.readSpace(ATTRIB_SPACE);
		}
		else if (el == ELEM_CONST_RELATIVE.id()) {
			type = J_RELATIVE;
			value_real = decoder.readUnsignedInteger(ATTRIB_VAL);
		}
		else if (el == ELEM_CONST_FLOWREF.id()) {
			type = J_FLOWREF;
		}
		else if (el == ELEM_CONST_FLOWREF_SIZE.id()) {
			type = J_FLOWREF_SIZE;
		}
		else if (el == ELEM_CONST_FLOWDEST.id()) {
			type = J_FLOWDEST;
		}
		else if (el == ELEM_CONST_FLOWDEST_SIZE.id()) {
			type = J_FLOWDEST_SIZE;
		}
		else {
			throw new SleighException("Bad encoding for ConstTpl");
		}
		decoder.closeElement(el);
	}
Fillin the offset portion of a FixedHandle based on this
const. If the offset value is dynamic, fill in the handle
appropriately.  We don't just fill in the temporary
variable offset, like "fix". Assume that hand.space is
already filled in
@param hand handle to fillin
@param walker current parser walker
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java