@Override
    public Ticket expand(final String ticketId) throws Throwable {
        val structure = parse(ticketId);
        val transientSessionTicketFactory = (TransientSessionTicketFactory) ticketFactory.getObject().get(getTicketType());
        val url = structure.ticketElements().get(CompactTicketIndexes.SERVICE.getIndex());
        val service = StringUtils.isNotBlank(url) ? serviceFactory.createService(url) : null;
        val properties = new HashMap<>();
        val compressProperties = structure.ticketElements().get(3);
        val keyValueProps = Splitter.on("|").splitToList(compressProperties);
        for (val keyValue : keyValueProps) {
            val key = StringUtils.substringBefore(keyValue, "=");
            val values = Splitter.on(";").splitToList(StringUtils.substringAfter(keyValue, "="));
            if (!values.isEmpty()) {
                properties.put(key, values.size() == 1 ? values.getFirst() : values);
            }
        }
        val transientTicket = transientSessionTicketFactory.create(service, properties);
        transientTicket.setExpirationPolicy(new FixedInstantExpirationPolicy(structure.expirationTime()));
        transientTicket.setCreationTime(DateTimeUtils.zonedDateTimeOf(structure.creationTime()));
        return transientTicket;
    }
This is {@link TransientSessionTicketCompactor}.

@author Misagh Moayyed
@since 7.0.0
support/cas-server-support-stateless-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/compact/TransientSessionTicketCompactor.java