def METHOD_NAME(event, start=None, end=None):
    # Expands the rrule on event to return a list of arrow datetimes
    # representing start times for its recurring instances.
    # If start and/or end are supplied, will return times within that range,
    # otherwise defaults to the event start date and now + 1 year;
    # this can return a lot of instances if the event recurs more frequently
    # than weekly!
    if isinstance(event, RecurringEvent):
        # Localize first so that expansion covers DST
        if event.start_timezone:
            # FIXME @karim: This hotfix was added because of
            # https://phab.nylas.com/T3612. Remove it after
            # running the timezones migration.
            tz = event.start_timezone
            tz = timezones_table.get(tz, tz)
            event.start = event.start.to(tz)
        if not start:
            start = event.start
        else:
            start = arrow.get(start)
        if not end:
            end = arrow.utcnow().shift(years=+EXPAND_RECURRING_YEARS)
        else:
            end = arrow.get(end)
        rrules = parse_rrule(event)
        if not rrules:
            log.warn("Tried to expand a non-recurring event", event_id=event.id)
            return [event.start]
        excl_dates = parse_exdate(event)
        if len(excl_dates) > 0:
            if not isinstance(rrules, rruleset):
                rrules = rruleset().rrule(rrules)
            # We want naive-everything for all-day events.
            if event.all_day:
                excl_dates = [x.naive for x in excl_dates]
            for excl_date in excl_dates:
                rrules.exdate(excl_date)
        # Return all start times between start and end, including start and
        # end themselves if they obey the rule.
        if event.all_day:
            # compare naive times, since date handling in rrulestr is naive
            # when UNTIL takes the form YYYYMMDD
            start = start.to("utc").naive
            end = end.to("utc").naive
        start_times = rrules.between(start, end, inc=True)
        # Convert back to UTC, which covers daylight savings differences
        start_times = [arrow.get(t).to("utc") for t in start_times]
        return start_times
    return [event.start]