<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def render(raw_config, environment=None):
 """Renders a config, using it as a template with the environment. Args: raw_config (str):
 the raw stacker configuration string. environment (dict, optional):
 any environment values that should be passed to the config Returns: str: the stacker configuration populated with any values passed from the environment """


    t = Template(raw_config)
    buff = StringIO()
    if not environment:
        environment = {}
    try:
        substituted = t.substitute(environment)
    except KeyError as e:
        raise exceptions.MissingEnvironment(e.args[0])
    except ValueError:
        # Support "invalid" placeholders for lookup placeholders.
        substituted = t.safe_substitute(environment)

    if not isinstance(substituted, str):
        substituted = substituted.decode('utf-8')

    buff.write(substituted)
    buff.seek(0)
    return buff.read()