<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def unmarshal( compoundSignature, data, offset = 0, lendian = True ):
 """ Unmarshals DBus encoded data. @type compoundSignature: C{string} @param compoundSignature: DBus signature specifying the encoded value types @type data: C{string} @param data: Binary data @type offset: C{int} @param offset: Offset within data at which data for compoundSignature starts (used during recursion) @type lendian: C{bool} @param lendian: True if data is encoded in little-endian format @returns: (number_of_bytes_decoded, list_of_values) """

    values       = list()
    start_offset = offset

    for ct in genCompleteTypes( compoundSignature ):
        tcode   = ct[0]
        offset += len(pad[tcode]( offset ))
                
        nbytes, value = unmarshallers[ tcode ]( ct, data, offset, lendian )

        offset += nbytes
        values.append( value )


    return offset - start_offset, values