code: function Event(component, options) {
      if (!(component instanceof ICAL.Component)) {
        options = component;
        component = null;
      }
  
      if (component) {
        this.component = component;
      } else {
        this.component = new ICAL.Component('vevent');
      }
  
      this._rangeExceptionCache = Object.create(null);
      this.exceptions = Object.create(null);
      this.rangeExceptions = [];
  
      if (options && options.strictExceptions) {
        this.strictExceptions = options.strictExceptions;
      }
  
      if (options && options.exceptions) {
        options.exceptions.forEach(this.relateException, this);
      } else if (this.component.parent && !this.isRecurrenceException()) {
        this.component.parent.getAllSubcomponents('vevent').forEach(function(event) {
          if (event.hasProperty('recurrence-id')) {
            this.relateException(event);
          }
        }, this);
      }
    }
docs: @classdesc
  ICAL.js is organized into multiple layers. The bottom layer is a raw jCal
  object, followed by the component/property layer. The highest level is the
  event representation, which this class is part of. See the
  {@tutorial layers} guide for more details.
  
  @class
  @alias ICAL.Event
  @param {ICAL.Component=} component         The ICAL.Component to base this event on
  @param {Object} options                    Options for this event
  @param {Boolean} options.strictExceptions
  When true, will verify exceptions are related by their UUID
  @param {Array<ICAL.Component|ICAL.Event>} options.exceptions
  Exceptions to this event, either as components or events. If not
  specified exceptions will automatically be set in relation of
  component's parent