text:   // Defaults
    var noop = Rx.helpers.noop = function () { },
      notDefined = Rx.helpers.notDefined = function (x) { return typeof x === 'undefined'; },
      isScheduler = Rx.helpers.isScheduler = function (x) { return x instanceof Rx.Scheduler; },
      identity = Rx.helpers.identity = function (x) { return x; },
      pluck = Rx.helpers.pluck = function (property) { return function (x) { return x[property]; }; },
      just = Rx.helpers.just = function (value) { return function () { return value; }; },
      defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()),
      defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); },
      defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); },
      defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); },
      defaultError = Rx.helpers.defaultError = function (err) { throw err; },
      isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.then === 'function'; },
      asArray = Rx.helpers.asArray = function () { return Array.prototype.slice.call(arguments); },
      not = Rx.helpers.not = function (a) { return !a; },
      isFunction = Rx.helpers.isFunction = (function () {
  
        var isFn = function (value) {
          return typeof value == 'function' || false;
        }
  
        // fallback for older versions of Chrome and Safari
        if (isFn(/x/)) {
          isFn = function(value) {
            return typeof value == 'function' && toString.call(value) == '[object Function]';
          };
        }
  
        return isFn;
      }());
  
    // Errors
    var sequenceContainsNoElements = 'Sequence contains no elements.';
    var argumentOutOfRange = 'Argument out of range';
    var objectDisposed = 'Object has been disposed';
    function checkDisposed() { if (this.isDisposed) { throw new Error(objectDisposed); } }
  