human
Write me a the Python code you requested given the following:
Complete the below
def load_crypto_meta(value):

    ''''Build the crypto_meta from the json object.
    Note that json.loads always produces unicode strings.
to ensure the
    resultant crypto_meta matches the original object:
    * cast all keys to str (effectively a no-op on py3),
    * base64 decode \'key\' and \'iv\' values to bytes, and
    * encode remaining string values as UTF-8 on py2 (while leaving them
    as native unicode strings on py3).
    :param value: a string serialization of a crypto meta dict
    :returns: a dict containing crypto meta items
    :raises EncryptionException: if an error occurs while parsing the
    crypto meta'
    '''
assistant
#Here is the Python code you requested.
    def b64_decode_meta(crypto_meta):
        return {str(name): (base64.b64decode(val) if (name in ('iv', 'key')) else (b64_decode_meta(val) if isinstance(val, dict) else (val.encode('utf8') if six.PY2 else val))) for (name, val) in crypto_meta.items()}
    try:
        if (not isinstance(value, six.string_types)):
            raise ValueError('crypto    meta    not    a    string')
        val = json.loads(urlparse.unquote_plus(value))
        if (not isinstance(val, collections.Mapping)):
            raise ValueError('crypto    meta    not    a    Mapping')
        return b64_decode_meta(val)
    except (KeyError, ValueError, TypeError) as err:
        msg = ('Bad    crypto    meta    %r:    %s' % (value, err))
        raise EncryptionException(msg)