text: "use strict";require = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require == "function" && require;if(!u && a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '" + o + "'");throw (f.code = "MODULE_NOT_FOUND",f);}var l=n[o] = {exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e);},l,l.exports,e,t,n,r);}return n[o].exports;}var i=typeof require == "function" && require;for(var o=0;o < r.length;o++) s(r[o]);return s;})({1:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();exports['default'] = makeAction;function _interopRequireWildcard(obj){if(obj && obj.__esModule){return obj;}else {var newObj={};if(obj != null){for(var key in obj) {if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}}var _utilsFunctions=require('../../utils/functions');var fn=_interopRequireWildcard(_utilsFunctions);var _utilsAltUtils=require('../utils/AltUtils');var utils=_interopRequireWildcard(_utilsAltUtils);var AltAction=(function(){function AltAction(alt,id,action,actions,actionDetails){_classCallCheck(this,AltAction);this.id = id;this._dispatch = action.bind(this);this.actions = actions;this.actionDetails = actionDetails;this.alt = alt;}_createClass(AltAction,[{key:'dispatch',value:function dispatch(data){this.dispatched = true;this.alt.dispatch(this.id,data,this.actionDetails);}}]);return AltAction;})();function makeAction(alt,namespace,name,implementation,obj){var id=utils.uid(alt._actionsRegistry,namespace + '.' + name);alt._actionsRegistry[id] = 1;var data={id:id,namespace:namespace,name:name}; // Wrap the action so we can provide a dispatch method
  var newAction=new AltAction(alt,id,implementation,obj,data);var dispatch=function dispatch(payload){return alt.dispatch(id,payload,data);}; // the action itself
  var action=function action(){newAction.dispatched = false;var result=newAction._dispatch.apply(newAction,arguments); // async functions that return promises should not be dispatched
  if(!newAction.dispatched && result !== undefined && !fn.isPromise(result)){if(fn.isFunction(result)){result(dispatch);}else {dispatch(result);}}return result;};action.defer = function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key < _len;_key++) {args[_key] = arguments[_key];}setTimeout(function(){newAction._dispatch.apply(null,args);});};action.id = id;action.data = data; // ensure each reference is unique in the namespace
  var container=alt.actions[namespace];var namespaceId=utils.uid(container,name);container[namespaceId] = action;return action;}module.exports = exports['default'];},{"../../utils/functions":11,"../utils/AltUtils":5}],2:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();function _interopRequireDefault(obj){return obj && obj.__esModule?obj:{'default':obj};}function _interopRequireWildcard(obj){if(obj && obj.__esModule){return obj;}else {var newObj={};if(obj != null){for(var key in obj) {if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}}var _utilsFunctions=require('../../utils/functions');var fn=_interopRequireWildcard(_utilsFunctions);var _transmitter=require('transmitter');var _transmitter2=_interopRequireDefault(_transmitter);var AltStore=(function(){function AltStore(alt,model,state,StoreModel){var _this=this;_classCallCheck(this,AltStore);var lifecycleEvents=model.lifecycleEvents;this.transmitter = (0,_transmitter2['default'])();this.lifecycle = function(event,x){if(lifecycleEvents[event])lifecycleEvents[event].push(x);};this.state = state;this.preventDefault = false;this.displayName = model.displayName;this.boundListeners = model.boundListeners;this.StoreModel = StoreModel;this.reduce = model.reduce || function(x){return x;};var output=model.output || function(x){return x;};this.emitChange = function(){return _this.transmitter.push(output(_this.state));};var handleDispatch=function handleDispatch(f,payload){try{return f();}catch(e) {if(model.handlesOwnErrors){_this.lifecycle('error',{error:e,payload:payload,state:_this.state});return false;}else {throw e;}}};fn.assign(this,model.publicMethods); // Register dispatcher
  this.dispatchToken = alt.dispatcher.register(function(payload){_this.preventDefault = false;_this.lifecycle('beforeEach',{payload:payload,state:_this.state});var actionHandlers=model.actionListeners[payload.action];if(actionHandlers || model.otherwise){var result=undefined;if(actionHandlers){result = handleDispatch(function(){return actionHandlers.filter(Boolean).every(function(handler){return handler.call(model,payload.data,payload.action) !== false;});},payload);}else {result = handleDispatch(function(){return model.otherwise(payload.data,payload.action);},payload);}if(result !== false && !_this.preventDefault)_this.emitChange();}if(model.reduce){handleDispatch(function(){_this.state = model.reduce(_this.state,payload);},payload);if(!_this.preventDefault)_this.emitChange();}_this.lifecycle('afterEach',{payload:payload,state:_this.state});});this.lifecycle('init');}_createClass(AltStore,[{key:'listen',value:function listen(cb){var _this2=this;if(!fn.isFunction(cb))throw new TypeError('listen expects a function');this.transmitter.subscribe(cb);return function(){return _this2.unlisten(cb);};}},{key:'unlisten',value:function unlisten(cb){this.lifecycle('unlisten');this.transmitter.unsubscribe(cb);}},{key:'getState',value:function getState(){return this.StoreModel.config.getState.call(this,this.state);}}]);return AltStore;})();exports['default'] = AltStore;module.exports = exports['default'];},{"../../utils/functions":11,"transmitter":10}],3:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});function _interopRequireWildcard(obj){if(obj && obj.__esModule){return obj;}else {var newObj={};if(obj != null){for(var key in obj) {if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _interopRequireDefault(obj){return obj && obj.__esModule?obj:{'default':obj};}var _transmitter=require('transmitter');var _transmitter2=_interopRequireDefault(_transmitter);var _utilsFunctions=require('../../utils/functions');var fn=_interopRequireWildcard(_utilsFunctions);var StoreMixin={waitFor:function waitFor(){for(var _len=arguments.length,sources=Array(_len),_key=0;_key < _len;_key++) {sources[_key] = arguments[_key];}if(!sources.length){throw new ReferenceError('Dispatch tokens not provided');}var sourcesArray=sources;if(sources.length === 1){sourcesArray = Array.isArray(sources[0])?sources[0]:sources;}var tokens=sourcesArray.map(function(source){return source.dispatchToken || source;});this.dispatcher.waitFor(tokens);},exportAsync:function exportAsync(asyncMethods){this.registerAsync(asyncMethods);},registerAsync:function registerAsync(asyncDef){var _this=this;var loadCounter=0;var asyncMethods=fn.isFunction(asyncDef)?asyncDef(this.alt):asyncDef;var toExport=Object.keys(asyncMethods).reduce(function(publicMethods,methodName){var desc=asyncMethods[methodName];var spec=fn.isFunction(desc)?desc(_this):desc;var validHandlers=['success','error','loading'];validHandlers.forEach(function(handler){if(spec[handler] && !spec[handler].id){throw new Error(handler + ' handler must be an action function');}});publicMethods[methodName] = function(){for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2 < _len2;_key2++) {args[_key2] = arguments[_key2];}var state=_this.getInstance().getState();var value=spec.local && spec.local.apply(spec,[state].concat(args));var shouldFetch=spec.shouldFetch?spec.shouldFetch.apply(spec,[state].concat(args)):value == null;var intercept=spec.interceptResponse || function(x){return x;};var makeActionHandler=function makeActionHandler(action,isError){return function(x){var fire=function fire(){loadCounter -= 1;action(intercept(x,action,args));if(isError)throw x;};return _this.alt.trapAsync?function(){return fire();}:fire();};}; // if we don't have it in cache then fetch it
  if(shouldFetch){loadCounter += 1; /* istanbul ignore else */if(spec.loading)spec.loading(intercept(null,spec.loading,args));return spec.remote.apply(spec,[state].concat(args)).then(makeActionHandler(spec.success),makeActionHandler(spec.error,1));}else { // otherwise emit the change now
  _this.emitChange();return value;}};return publicMethods;},{});this.exportPublicMethods(toExport);this.exportPublicMethods({isLoading:function isLoading(){return loadCounter > 0;}});},exportPublicMethods:function exportPublicMethods(methods){var _this2=this;fn.eachObject(function(methodName,value){if(!fn.isFunction(value)){throw new TypeError('exportPublicMethods expects a function');}_this2.publicMethods[methodName] = value;},[methods]);},emitChange:function emitChange(){this.getInstance().emitChange();},on:function on(lifecycleEvent,handler){if(lifecycleEvent === 'error')this.handlesOwnErrors = true;var bus=this.lifecycleEvents[lifecycleEvent] || (0,_transmitter2['default'])();this.lifecycleEvents[lifecycleEvent] = bus;return bus.subscribe(handler.bind(this));},bindAction:function bindAction(symbol,handler){if(!symbol){throw new ReferenceError('Invalid action reference passed in');}if(!fn.isFunction(handler)){throw new TypeError('bindAction expects a function');}if(handler.length > 1){throw new TypeError('Action handler in store ' + this.displayName + ' for ' + ((symbol.id || symbol).toString() + ' was defined with ') + 'two parameters. Only a single parameter is passed through the ' + 'dispatcher, did you mean to pass in an Object instead?');} // You can pass in the constant or the function itself
  var key=symbol.id?symbol.id:symbol;this.actionListeners[key] = this.actionListeners[key] || [];this.actionListeners[key].push(handler.bind(this));this.boundListeners.push(key);},bindActions:function bindActions(actions){var _this3=this;fn.eachObject(function(action,symbol){var matchFirstCharacter=/./;var assumedEventHandler=action.replace(matchFirstCharacter,function(x){return 'on' + x[0].toUpperCase();});var handler=null;if(_this3[action] && _this3[assumedEventHandler]){ // If you have both action and onAction
  throw new ReferenceError('You have multiple action handlers bound to an action: ' + (action + ' and ' + assumedEventHandler));}else if(_this3[action]){ // action
  handler = _this3[action];}else if(_this3[assumedEventHandler]){ // onAction
  handler = _this3[assumedEventHandler];}if(handler){_this3.bindAction(symbol,handler);}},[actions]);},bindListeners:function bindListeners(obj){var _this4=this;fn.eachObject(function(methodName,symbol){var listener=_this4[methodName];if(!listener){throw new ReferenceError(methodName + ' defined but does not exist in ' + _this4.displayName);}if(Array.isArray(symbol)){symbol.forEach(function(action){_this4.bindAction(action,listener);});}else {_this4.bindAction(symbol,listener);}},[obj]);}};exports['default'] = StoreMixin;module.exports = exports['default'];},{"../../utils/functions":11,"transmitter":10}],4:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _bind=Function.prototype.bind;var _get=function get(_x,_x2,_x3){var _again=true;_function: while(_again) {var object=_x,property=_x2,receiver=_x3;desc = parent = getter = undefined;_again = false;if(object === null)object = Function.prototype;var desc=Object.getOwnPropertyDescriptor(object,property);if(desc === undefined){var parent=Object.getPrototypeOf(object);if(parent === null){return undefined;}else {_x = parent;_x2 = property;_x3 = receiver;_again = true;continue _function;}}else if('value' in desc){return desc.value;}else {var getter=desc.get;if(getter === undefined){return undefined;}return getter.call(receiver);}}};exports.createStoreConfig = createStoreConfig;exports.transformStore = transformStore;exports.createStoreFromObject = createStoreFromObject;exports.createStoreFromClass = createStoreFromClass;function _interopRequireDefault(obj){return obj && obj.__esModule?obj:{'default':obj};}function _interopRequireWildcard(obj){if(obj && obj.__esModule){return obj;}else {var newObj={};if(obj != null){for(var key in obj) {if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}}function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;}var _utilsAltUtils=require('../utils/AltUtils');var utils=_interopRequireWildcard(_utilsAltUtils);var _utilsFunctions=require('../../utils/functions');var fn=_interopRequireWildcard(_utilsFunctions);var _AltStore=require('./AltStore');var _AltStore2=_interopRequireDefault(_AltStore);var _StoreMixin=require('./StoreMixin');var _StoreMixin2=_interopRequireDefault(_StoreMixin);function doSetState(store,storeInstance,state){if(!state){return;}var config=storeInstance.StoreModel.config;var nextState=fn.isFunction(state)?state(storeInstance.state):state;storeInstance.state = config.setState.call(store,storeInstance.state,nextState);if(!store.alt.dispatcher.isDispatching()){store.emitChange();}}function createPrototype(proto,alt,key,extras){proto.boundListeners = [];proto.lifecycleEvents = {};proto.actionListeners = {};proto.publicMethods = {};proto.handlesOwnErrors = false;return fn.assign(proto,_StoreMixin2['default'],{displayName:key,alt:alt,dispatcher:alt.dispatcher,preventDefault:function preventDefault(){this.getInstance().preventDefault = true;}},extras);}function createStoreConfig(globalConfig,StoreModel){StoreModel.config = fn.assign({getState:function getState(state){if(Array.isArray(state)){return state.slice();}else if(Object.prototype.toString.call(state) === '[object Object]'){return fn.assign({},state);}else {return state;}},setState:fn.assign},globalConfig,StoreModel.config);}function transformStore(transforms,StoreModel){return transforms.reduce(function(Store,transform){return transform(Store);},StoreModel);}function createStoreFromObject(alt,StoreModel,key){var storeInstance=undefined;var StoreProto=createPrototype({},alt,key,fn.assign({getInstance:function getInstance(){return storeInstance;},setState:function setState(nextState){doSetState(this,storeInstance,nextState);}},StoreModel)); // bind the store listeners
  /* istanbul ignore else */if(StoreProto.bindListeners){_StoreMixin2['default'].bindListeners.call(StoreProto,StoreProto.bindListeners);} /* istanbul ignore else */if(StoreProto.observe){_StoreMixin2['default'].bindListeners.call(StoreProto,StoreProto.observe(alt));} // bind the lifecycle events
  /* istanbul ignore else */if(StoreProto.lifecycle){fn.eachObject(function(eventName,event){_StoreMixin2['default'].on.call(StoreProto,eventName,event);},[StoreProto.lifecycle]);} // create the instance and fn.assign the public methods to the instance
  storeInstance = fn.assign(new _AltStore2['default'](alt,StoreProto,StoreProto.state !== undefined?StoreProto.state:{},StoreModel),StoreProto.publicMethods,{displayName:key});return storeInstance;}function createStoreFromClass(alt,StoreModel,key){var storeInstance=undefined;var config=StoreModel.config; // Creating a class here so we don't overload the provided store's
  // prototype with the mixin behaviour and I'm extending from StoreModel
  // so we can inherit any extensions from the provided store.
  var Store=(function(_StoreModel){function Store(){_classCallCheck(this,Store);for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2 < _len2;_key2++) {args[_key2] = arguments[_key2];}_get(Object.getPrototypeOf(Store.prototype),'constructor',this).apply(this,args);}_inherits(Store,_StoreModel);return Store;})(StoreModel);createPrototype(Store.prototype,alt,key,{getInstance:function getInstance(){return storeInstance;},setState:function setState(nextState){doSetState(this,storeInstance,nextState);}});for(var _len=arguments.length,argsForClass=Array(_len > 3?_len - 3:0),_key=3;_key < _len;_key++) {argsForClass[_key - 3] = arguments[_key];}var store=new (_bind.apply(Store,[null].concat(argsForClass)))();if(config.bindListeners)store.bindListeners(config.bindListeners);if(config.datasource)store.registerAsync(config.datasource);storeInstance = fn.assign(new _AltStore2['default'](alt,store,store.state !== undefined?store.state:store,StoreModel),utils.getInternalMethods(StoreModel),config.publicMethods,{displayName:key});return storeInstance;}},{"../../utils/functions":11,"../utils/AltUtils":5,"./AltStore":2,"./StoreMixin":3}],5:[function(require,module,exports){ /*eslint-disable*/'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.getInternalMethods = getInternalMethods;exports.warn = warn;exports.uid = uid;exports.formatAsConstant = formatAsConstant;exports.dispatchIdentity = dispatchIdentity;var builtIns=Object.getOwnPropertyNames(NoopClass);var builtInProto=Object.getOwnPropertyNames(NoopClass.prototype); /*eslint-enable*/function getInternalMethods(Obj,isProto){var excluded=isProto?builtInProto:builtIns;var obj=isProto?Obj.prototype:Obj;return Object.getOwnPropertyNames(obj).reduce(function(value,m){if(excluded.indexOf(m) !== -1){return value;}value[m] = obj[m];return value;},{});}function warn(msg){ /* istanbul ignore else */if(typeof console !== 'undefined'){console.warn(new ReferenceError(msg));}}function uid(container,name){var count=0;var key=name;while(Object.hasOwnProperty.call(container,key)) {key = name + String(++count);}return key;}function formatAsConstant(name){return name.replace(/[a-z]([A-Z])/g,function(i){return i[0] + '_' + i[1].toLowerCase();}).toUpperCase();}function dispatchIdentity(x){for(var _len=arguments.length,a=Array(_len > 1?_len - 1:0),_key=1;_key < _len;_key++) {a[_key - 1] = arguments[_key];}this.dispatch(a.length?[x].concat(a):x);} /* istanbul ignore next */function NoopClass(){}},{}],6:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.setAppState = setAppState;exports.snapshot = snapshot;exports.saveInitialSnapshot = saveInitialSnapshot;exports.filterSnapshots = filterSnapshots;function _interopRequireWildcard(obj){if(obj && obj.__esModule){return obj;}else {var newObj={};if(obj != null){for(var key in obj) {if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}var _utilsFunctions=require('../../utils/functions');var fn=_interopRequireWildcard(_utilsFunctions);function setAppState(instance,data,onStore){var obj=instance.deserialize(data);fn.eachObject(function(key,value){var store=instance.stores[key];if(store){(function(){var config=store.StoreModel.config;var state=store.state;if(config.onDeserialize)obj[key] = config.onDeserialize(value) || value;if(Object.prototype.toString.call(state) === '[object Object]'){fn.eachObject(function(k){return delete state[k];},[state]);fn.assign(state,obj[key]);}else {store.state = obj[key];}onStore(store);})();}},[obj]);}function snapshot(instance){var storeNames=arguments[1] === undefined?[]:arguments[1];var stores=storeNames.length?storeNames:Object.keys(instance.stores);return stores.reduce(function(obj,storeHandle){var storeName=storeHandle.displayName || storeHandle;var store=instance.stores[storeName];var config=store.StoreModel.config;store.lifecycle('snapshot');var customSnapshot=config.onSerialize && config.onSerialize(store.state);obj[storeName] = customSnapshot?customSnapshot:store.getState();return obj;},{});}function saveInitialSnapshot(instance,key){var state=instance.deserialize(instance.serialize(instance.stores[key].state));instance._initSnapshot[key] = state;instance._lastSnapshot[key] = state;}function filterSnapshots(instance,state,stores){return stores.reduce(function(obj,store){var storeName=store.displayName || store;if(!state[storeName]){throw new ReferenceError(storeName + ' is not a valid store');}obj[storeName] = state[storeName];return obj;},{});}},{"../../utils/functions":11}],7:[function(require,module,exports){ /**
   * Copyright (c) 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   */module.exports.Dispatcher = require('./lib/Dispatcher');},{"./lib/Dispatcher":8}],8:[function(require,module,exports){ /*
   * Copyright (c) 2014, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule Dispatcher
   * @typechecks
   */"use strict";var invariant=require('./invariant');var _lastID=1;var _prefix='ID_'; /**
   * Dispatcher is used to broadcast payloads to registered callbacks. This is
   * different from generic pub-sub systems in two ways:
   *
   *   1) Callbacks are not subscribed to particular events. Every payload is
   *      dispatched to every registered callback.
   *   2) Callbacks can be deferred in whole or part until other callbacks have
   *      been executed.
   *
   * For example, consider this hypothetical flight destination form, which
   * selects a default city when a country is selected:
   *
   *   var flightDispatcher = new Dispatcher();
   *
   *   // Keeps track of which country is selected
   *   var CountryStore = {country: null};
   *
   *   // Keeps track of which city is selected
   *   var CityStore = {city: null};
   *
   *   // Keeps track of the base flight price of the selected city
   *   var FlightPriceStore = {price: null}
   *
   * When a user changes the selected city, we dispatch the payload:
   *
   *   flightDispatcher.dispatch({
   *     actionType: 'city-update',
   *     selectedCity: 'paris'
   *   });
   *
   * This payload is digested by `CityStore`:
   *
   *   flightDispatcher.register(function(payload) {
   *     if (payload.actionType === 'city-update') {
   *       CityStore.city = payload.selectedCity;
   *     }
   *   });
   *
   * When the user selects a country, we dispatch the payload:
   *
   *   flightDispatcher.dispatch({
   *     actionType: 'country-update',
   *     selectedCountry: 'australia'
   *   });
   *
   * This payload is digested by both stores:
   *
   *    CountryStore.dispatchToken = flightDispatcher.register(function(payload) {
   *     if (payload.actionType === 'country-update') {
   *       CountryStore.country = payload.selectedCountry;
   *     }
   *   });
   *
   * When the callback to update `CountryStore` is registered, we save a reference
   * to the returned token. Using this token with `waitFor()`, we can guarantee
   * that `CountryStore` is updated before the callback that updates `CityStore`
   * needs to query its data.
   *
   *   CityStore.dispatchToken = flightDispatcher.register(function(payload) {
   *     if (payload.actionType === 'country-update') {
   *       // `CountryStore.country` may not be updated.
   *       flightDispatcher.waitFor([CountryStore.dispatchToken]);
   *       // `CountryStore.country` is now guaranteed to be updated.
   *
   *       // Select the default city for the new country
   *       CityStore.city = getDefaultCityForCountry(CountryStore.country);
   *     }
   *   });
   *
   * The usage of `waitFor()` can be chained, for example:
   *
   *   FlightPriceStore.dispatchToken =
   *     flightDispatcher.register(function(payload) {
   *       switch (payload.actionType) {
   *         case 'country-update':
   *           flightDispatcher.waitFor([CityStore.dispatchToken]);
   *           FlightPriceStore.price =
   *             getFlightPriceStore(CountryStore.country, CityStore.city);
   *           break;
   *
   *         case 'city-update':
   *           FlightPriceStore.price =
   *             FlightPriceStore(CountryStore.country, CityStore.city);
   *           break;
   *     }
   *   });
   *
   * The `country-update` payload will be guaranteed to invoke the stores'
   * registered callbacks in order: `CountryStore`, `CityStore`, then
   * `FlightPriceStore`.
   */function Dispatcher(){this.$Dispatcher_callbacks = {};this.$Dispatcher_isPending = {};this.$Dispatcher_isHandled = {};this.$Dispatcher_isDispatching = false;this.$Dispatcher_pendingPayload = null;} /**
     * Registers a callback to be invoked with every dispatched payload. Returns
     * a token that can be used with `waitFor()`.
     *
     * @param {function} callback
     * @return {string}
     */Dispatcher.prototype.register = function(callback){var id=_prefix + _lastID++;this.$Dispatcher_callbacks[id] = callback;return id;}; /**
     * Removes a callback based on its token.
     *
     * @param {string} id
     */Dispatcher.prototype.unregister = function(id){invariant(this.$Dispatcher_callbacks[id],'Dispatcher.unregister(...): `%s` does not map to a registered callback.',id);delete this.$Dispatcher_callbacks[id];}; /**
     * Waits for the callbacks specified to be invoked before continuing execution
     * of the current callback. This method should only be used by a callback in
     * response to a dispatched payload.
     *
     * @param {array<string>} ids
     */Dispatcher.prototype.waitFor = function(ids){invariant(this.$Dispatcher_isDispatching,'Dispatcher.waitFor(...): Must be invoked while dispatching.');for(var ii=0;ii < ids.length;ii++) {var id=ids[ii];if(this.$Dispatcher_isPending[id]){invariant(this.$Dispatcher_isHandled[id],'Dispatcher.waitFor(...): Circular dependency detected while ' + 'waiting for `%s`.',id);continue;}invariant(this.$Dispatcher_callbacks[id],'Dispatcher.waitFor(...): `%s` does not map to a registered callback.',id);this.$Dispatcher_invokeCallback(id);}}; /**
     * Dispatches a payload to all registered callbacks.
     *
     * @param {object} payload
     */Dispatcher.prototype.dispatch = function(payload){invariant(!this.$Dispatcher_isDispatching,'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.');this.$Dispatcher_startDispatching(payload);try{for(var id in this.$Dispatcher_callbacks) {if(this.$Dispatcher_isPending[id]){continue;}this.$Dispatcher_invokeCallback(id);}}finally {this.$Dispatcher_stopDispatching();}}; /**
     * Is this Dispatcher currently dispatching.
     *
     * @return {boolean}
     */Dispatcher.prototype.isDispatching = function(){return this.$Dispatcher_isDispatching;}; /**
     * Call the callback stored with the given id. Also do some internal
     * bookkeeping.
     *
     * @param {string} id
     * @internal
     */Dispatcher.prototype.$Dispatcher_invokeCallback = function(id){this.$Dispatcher_isPending[id] = true;this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload);this.$Dispatcher_isHandled[id] = true;}; /**
     * Set up bookkeeping needed when dispatching.
     *
     * @param {object} payload
     * @internal
     */Dispatcher.prototype.$Dispatcher_startDispatching = function(payload){for(var id in this.$Dispatcher_callbacks) {this.$Dispatcher_isPending[id] = false;this.$Dispatcher_isHandled[id] = false;}this.$Dispatcher_pendingPayload = payload;this.$Dispatcher_isDispatching = true;}; /**
     * Clear bookkeeping used for dispatching.
     *
     * @internal
     */Dispatcher.prototype.$Dispatcher_stopDispatching = function(){this.$Dispatcher_pendingPayload = null;this.$Dispatcher_isDispatching = false;};module.exports = Dispatcher;},{"./invariant":9}],9:[function(require,module,exports){ /**
   * Copyright (c) 2014, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule invariant
   */"use strict"; /**
   * Use invariant() to assert state which your program assumes to be true.
   *
   * Provide sprintf-style format (only %s is supported) and arguments
   * to provide information about what broke and what you were
   * expecting.
   *
   * The invariant message will be stripped in production, but the invariant
   * will remain to ensure logic does not differ in production.
   */var invariant=function invariant(condition,format,a,b,c,d,e,f){if(false){if(format === undefined){throw new Error('invariant requires an error message argument');}}if(!condition){var error;if(format === undefined){error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');}else {var args=[a,b,c,d,e,f];var argIndex=0;error = new Error('Invariant Violation: ' + format.replace(/%s/g,function(){return args[argIndex++];}));}error.framesToPop = 1; // we don't care about invariant's own frame
  throw error;}};module.exports = invariant;},{}],10:[function(require,module,exports){"use strict";function transmitter(){var subscriptions=[];var unsubscribe=function unsubscribe(onChange){var id=subscriptions.indexOf(onChange);if(id >= 0)subscriptions.splice(id,1);};var subscribe=function subscribe(onChange){subscriptions.push(onChange);var dispose=function dispose(){return unsubscribe(onChange);};return {dispose:dispose};};var push=function push(value){subscriptions.forEach(function(subscription){return subscription(value);});};return {subscribe:subscribe,push:push,unsubscribe:unsubscribe};}module.exports = transmitter;},{}],11:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.isPromise = isPromise;exports.eachObject = eachObject;exports.assign = assign;var isFunction=function isFunction(x){return typeof x === 'function';};exports.isFunction = isFunction;function isPromise(obj){return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';}function eachObject(f,o){o.forEach(function(from){Object.keys(Object(from)).forEach(function(key){f(key,from[key]);});});}function assign(target){for(var _len=arguments.length,source=Array(_len > 1?_len - 1:0),_key=1;_key < _len;_key++) {source[_key - 1] = arguments[_key];}eachObject(function(key,value){return target[key] = value;},source);return target;}},{}],12:[function(require,module,exports){ // shim for using process in browser
  var process=module.exports = {};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining = false;if(currentQueue.length){queue = currentQueue.concat(queue);}else {queueIndex = -1;}if(queue.length){drainQueue();}}function drainQueue(){if(draining){return;}var timeout=setTimeout(cleanUpNextTick);draining = true;var len=queue.length;while(len) {currentQueue = queue;queue = [];while(++queueIndex < len) {if(currentQueue){currentQueue[queueIndex].run();}}queueIndex = -1;len = queue.length;}currentQueue = null;draining = false;clearTimeout(timeout);}process.nextTick = function(fun){var args=new Array(arguments.length - 1);if(arguments.length > 1){for(var i=1;i < arguments.length;i++) {args[i - 1] = arguments[i];}}queue.push(new Item(fun,args));if(queue.length === 1 && !draining){setTimeout(drainQueue,0);}}; // v8 likes predictible objects
  function Item(fun,array){this.fun = fun;this.array = array;}Item.prototype.run = function(){this.fun.apply(null,this.array);};process.title = 'browser';process.browser = true;process.env = {};process.argv = [];process.version = ''; // empty string to avoid regexp issues
  process.versions = {};function noop(){}process.on = noop;process.addListener = noop;process.once = noop;process.off = noop;process.removeListener = noop;process.removeAllListeners = noop;process.emit = noop;process.binding = function(name){throw new Error('process.binding is not supported');};process.cwd = function(){return '/';};process.chdir = function(dir){throw new Error('process.chdir is not supported');};process.umask = function(){return 0;};},{}],13:[function(require,module,exports){ /**
   * Represents a cancellation caused by navigating away
   * before the previous transition has fully resolved.
   */"use strict";function Cancellation(){}module.exports = Cancellation;},{}],14:[function(require,module,exports){'use strict';var invariant=require('react/lib/invariant');var canUseDOM=require('react/lib/ExecutionEnvironment').canUseDOM;var History={ /**
     * The current number of entries in the history.
     *
     * Note: This property is read-only.
     */length:1, /**
     * Sends the browser back one entry in the history.
     */back:function back(){invariant(canUseDOM,'Cannot use History.back without a DOM'); // Do this first so that History.length will
  // be accurate in location change listeners.
  History.length -= 1;window.history.back();}};module.exports = History;},{"react/lib/ExecutionEnvironment":70,"react/lib/invariant":185}],15:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})(); /* jshint -W084 */var PathUtils=require('./PathUtils');function deepSearch(route,pathname,query){ // Check the subtree first to find the most deeply-nested match.
  var childRoutes=route.childRoutes;if(childRoutes){var match,childRoute;for(var i=0,len=childRoutes.length;i < len;++i) {childRoute = childRoutes[i];if(childRoute.isDefault || childRoute.isNotFound)continue; // Check these in order later.
  if(match = deepSearch(childRoute,pathname,query)){ // A route in the subtree matched! Add this route and we're done.
  match.routes.unshift(route);return match;}}} // No child routes matched; try the default route.
  var defaultRoute=route.defaultRoute;if(defaultRoute && (params = PathUtils.extractParams(defaultRoute.path,pathname))){return new Match(pathname,params,query,[route,defaultRoute]);} // Does the "not found" route match?
  var notFoundRoute=route.notFoundRoute;if(notFoundRoute && (params = PathUtils.extractParams(notFoundRoute.path,pathname))){return new Match(pathname,params,query,[route,notFoundRoute]);} // Last attempt: check this route.
  var params=PathUtils.extractParams(route.path,pathname);if(params){return new Match(pathname,params,query,[route]);}return null;}var Match=(function(){function Match(pathname,params,query,routes){_classCallCheck(this,Match);this.pathname = pathname;this.params = params;this.query = query;this.routes = routes;}_createClass(Match,null,[{key:'findMatch', /**
       * Attempts to match depth-first a route in the given route's
       * subtree against the given path and returns the match if it
       * succeeds, null if no match can be made.
       */value:function findMatch(routes,path){var pathname=PathUtils.withoutQuery(path);var query=PathUtils.extractQuery(path);var match=null;for(var i=0,len=routes.length;match == null && i < len;++i) match = deepSearch(routes[i],pathname,query);return match;}}]);return Match;})();module.exports = Match;},{"./PathUtils":17}],16:[function(require,module,exports){'use strict';var PropTypes=require('./PropTypes'); /**
   * A mixin for components that modify the URL.
   *
   * Example:
   *
   *   var MyLink = React.createClass({
   *     mixins: [ Router.Navigation ],
   *     handleClick(event) {
   *       event.preventDefault();
   *       this.transitionTo('aRoute', { the: 'params' }, { the: 'query' });
   *     },
   *     render() {
   *       return (
   *         <a onClick={this.handleClick}>Click me!</a>
   *       );
   *     }
   *   });
   */var Navigation={contextTypes:{router:PropTypes.router.isRequired}, /**
     * Returns an absolute URL path created from the given route
     * name, URL parameters, and query values.
     */makePath:function makePath(to,params,query){return this.context.router.makePath(to,params,query);}, /**
     * Returns a string that may safely be used as the href of a
     * link to the route with the given name.
     */makeHref:function makeHref(to,params,query){return this.context.router.makeHref(to,params,query);}, /**
     * Transitions to the URL specified in the arguments by pushing
     * a new URL onto the history stack.
     */transitionTo:function transitionTo(to,params,query){this.context.router.transitionTo(to,params,query);}, /**
     * Transitions to the URL specified in the arguments by replacing
     * the current URL in the history stack.
     */replaceWith:function replaceWith(to,params,query){this.context.router.replaceWith(to,params,query);}, /**
     * Transitions to the previous URL.
     */goBack:function goBack(){return this.context.router.goBack();}};module.exports = Navigation;},{"./PropTypes":18}],17:[function(require,module,exports){'use strict';var invariant=require('react/lib/invariant');var assign=require('object-assign');var qs=require('qs');var paramCompileMatcher=/:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*.()\[\]\\+|{}^$]/g;var paramInjectMatcher=/:([a-zA-Z_$][a-zA-Z0-9_$?]*[?]?)|[*]/g;var paramInjectTrailingSlashMatcher=/\/\/\?|\/\?\/|\/\?/g;var queryMatcher=/\?(.*)$/;var _compiledPatterns={};function compilePattern(pattern){if(!(pattern in _compiledPatterns)){var paramNames=[];var source=pattern.replace(paramCompileMatcher,function(match,paramName){if(paramName){paramNames.push(paramName);return '([^/?#]+)';}else if(match === '*'){paramNames.push('splat');return '(.*?)';}else {return '\\' + match;}});_compiledPatterns[pattern] = {matcher:new RegExp('^' + source + '$','i'),paramNames:paramNames};}return _compiledPatterns[pattern];}var PathUtils={ /**
     * Returns true if the given path is absolute.
     */isAbsolute:function isAbsolute(path){return path.charAt(0) === '/';}, /**
     * Joins two URL paths together.
     */join:function join(a,b){return a.replace(/\/*$/,'/') + b;}, /**
     * Returns an array of the names of all parameters in the given pattern.
     */extractParamNames:function extractParamNames(pattern){return compilePattern(pattern).paramNames;}, /**
     * Extracts the portions of the given URL path that match the given pattern
     * and returns an object of param name => value pairs. Returns null if the
     * pattern does not match the given path.
     */extractParams:function extractParams(pattern,path){var _compilePattern=compilePattern(pattern);var matcher=_compilePattern.matcher;var paramNames=_compilePattern.paramNames;var match=path.match(matcher);if(!match){return null;}var params={};paramNames.forEach(function(paramName,index){params[paramName] = match[index + 1];});return params;}, /**
     * Returns a version of the given route path with params interpolated. Throws
     * if there is a dynamic segment of the route path for which there is no param.
     */injectParams:function injectParams(pattern,params){params = params || {};var splatIndex=0;return pattern.replace(paramInjectMatcher,function(match,paramName){paramName = paramName || 'splat'; // If param is optional don't check for existence
  if(paramName.slice(-1) === '?'){paramName = paramName.slice(0,-1);if(params[paramName] == null)return '';}else {invariant(params[paramName] != null,'Missing "%s" parameter for path "%s"',paramName,pattern);}var segment;if(paramName === 'splat' && Array.isArray(params[paramName])){segment = params[paramName][splatIndex++];invariant(segment != null,'Missing splat # %s for path "%s"',splatIndex,pattern);}else {segment = params[paramName];}return segment;}).replace(paramInjectTrailingSlashMatcher,'/');}, /**
     * Returns an object that is the result of parsing any query string contained
     * in the given path, null if the path contains no query string.
     */extractQuery:function extractQuery(path){var match=path.match(queryMatcher);return match && qs.parse(match[1]);}, /**
     * Returns a version of the given path without the query string.
     */withoutQuery:function withoutQuery(path){return path.replace(queryMatcher,'');}, /**
     * Returns a version of the given path with the parameters in the given
     * query merged into the query string.
     */withQuery:function withQuery(path,query){var existingQuery=PathUtils.extractQuery(path);if(existingQuery)query = query?assign(existingQuery,query):existingQuery;var queryString=qs.stringify(query,{arrayFormat:'brackets'});if(queryString){return PathUtils.withoutQuery(path) + '?' + queryString;}return PathUtils.withoutQuery(path);}};module.exports = PathUtils;},{"object-assign":45,"qs":46,"react/lib/invariant":185}],18:[function(require,module,exports){'use strict';var assign=require('react/lib/Object.assign');var ReactPropTypes=require('react').PropTypes;var Route=require('./Route');var PropTypes=assign({},ReactPropTypes,{ /**
     * Indicates that a prop should be falsy.
     */falsy:function falsy(props,propName,componentName){if(props[propName]){return new Error('<' + componentName + '> should not have a "' + propName + '" prop');}}, /**
     * Indicates that a prop should be a Route object.
     */route:ReactPropTypes.instanceOf(Route), /**
     * Indicates that a prop should be a Router object.
     */ //router: ReactPropTypes.instanceOf(Router) // TODO
  router:ReactPropTypes.func});module.exports = PropTypes;},{"./Route":20,"react":"react","react/lib/Object.assign":76}],19:[function(require,module,exports){ /**
   * Encapsulates a redirect to the given route.
   */"use strict";function Redirect(to,params,query){this.to = to;this.params = params;this.query = query;}module.exports = Redirect;},{}],20:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var assign=require('react/lib/Object.assign');var invariant=require('react/lib/invariant');var warning=require('react/lib/warning');var PathUtils=require('./PathUtils');var _currentRoute;var Route=(function(){function Route(name,path,ignoreScrollBehavior,isDefault,isNotFound,onEnter,onLeave,handler){_classCallCheck(this,Route);this.name = name;this.path = path;this.paramNames = PathUtils.extractParamNames(this.path);this.ignoreScrollBehavior = !!ignoreScrollBehavior;this.isDefault = !!isDefault;this.isNotFound = !!isNotFound;this.onEnter = onEnter;this.onLeave = onLeave;this.handler = handler;}_createClass(Route,[{key:'appendChild', /**
       * Appends the given route to this route's child routes.
       */value:function appendChild(route){invariant(route instanceof Route,'route.appendChild must use a valid Route');if(!this.childRoutes)this.childRoutes = [];this.childRoutes.push(route);}},{key:'toString',value:function toString(){var string='<Route';if(this.name)string += ' name="' + this.name + '"';string += ' path="' + this.path + '">';return string;}}],[{key:'createRoute', /**
       * Creates and returns a new route. Options may be a URL pathname string
       * with placeholders for named params or an object with any of the following
       * properties:
       *
       * - name                     The name of the route. This is used to lookup a
       *                            route relative to its parent route and should be
       *                            unique among all child routes of the same parent
       * - path                     A URL pathname string with optional placeholders
       *                            that specify the names of params to extract from
       *                            the URL when the path matches. Defaults to `/${name}`
       *                            when there is a name given, or the path of the parent
       *                            route, or /
       * - ignoreScrollBehavior     True to make this route (and all descendants) ignore
       *                            the scroll behavior of the router
       * - isDefault                True to make this route the default route among all
       *                            its siblings
       * - isNotFound               True to make this route the "not found" route among
       *                            all its siblings
       * - onEnter                  A transition hook that will be called when the
       *                            router is going to enter this route
       * - onLeave                  A transition hook that will be called when the
       *                            router is going to leave this route
       * - handler                  A React component that will be rendered when
       *                            this route is active
       * - parentRoute              The parent route to use for this route. This option
       *                            is automatically supplied when creating routes inside
       *                            the callback to another invocation of createRoute. You
       *                            only ever need to use this when declaring routes
       *                            independently of one another to manually piece together
       *                            the route hierarchy
       *
       * The callback may be used to structure your route hierarchy. Any call to
       * createRoute, createDefaultRoute, createNotFoundRoute, or createRedirect
       * inside the callback automatically uses this route as its parent.
       */value:function createRoute(options,callback){options = options || {};if(typeof options === 'string')options = {path:options};var parentRoute=_currentRoute;if(parentRoute){warning(options.parentRoute == null || options.parentRoute === parentRoute,'You should not use parentRoute with createRoute inside another route\'s child callback; it is ignored');}else {parentRoute = options.parentRoute;}var name=options.name;var path=options.path || name;if(path && !(options.isDefault || options.isNotFound)){if(PathUtils.isAbsolute(path)){if(parentRoute){invariant(path === parentRoute.path || parentRoute.paramNames.length === 0,'You cannot nest path "%s" inside "%s"; the parent requires URL parameters',path,parentRoute.path);}}else if(parentRoute){ // Relative paths extend their parent.
  path = PathUtils.join(parentRoute.path,path);}else {path = '/' + path;}}else {path = parentRoute?parentRoute.path:'/';}if(options.isNotFound && !/\*$/.test(path))path += '*'; // Auto-append * to the path of not found routes.
  var route=new Route(name,path,options.ignoreScrollBehavior,options.isDefault,options.isNotFound,options.onEnter,options.onLeave,options.handler);if(parentRoute){if(route.isDefault){invariant(parentRoute.defaultRoute == null,'%s may not have more than one default route',parentRoute);parentRoute.defaultRoute = route;}else if(route.isNotFound){invariant(parentRoute.notFoundRoute == null,'%s may not have more than one not found route',parentRoute);parentRoute.notFoundRoute = route;}parentRoute.appendChild(route);} // Any routes created in the callback
  // use this route as their parent.
  if(typeof callback === 'function'){var currentRoute=_currentRoute;_currentRoute = route;callback.call(route,route);_currentRoute = currentRoute;}return route;}},{key:'createDefaultRoute', /**
       * Creates and returns a route that is rendered when its parent matches
       * the current URL.
       */value:function createDefaultRoute(options){return Route.createRoute(assign({},options,{isDefault:true}));}},{key:'createNotFoundRoute', /**
       * Creates and returns a route that is rendered when its parent matches
       * the current URL but none of its siblings do.
       */value:function createNotFoundRoute(options){return Route.createRoute(assign({},options,{isNotFound:true}));}},{key:'createRedirect', /**
       * Creates and returns a route that automatically redirects the transition
       * to another route. In addition to the normal options to createRoute, this
       * function accepts the following options:
       *
       * - from         An alias for the `path` option. Defaults to *
       * - to           The path/route/route name to redirect to
       * - params       The params to use in the redirect URL. Defaults
       *                to using the current params
       * - query        The query to use in the redirect URL. Defaults
       *                to using the current query
       */value:function createRedirect(options){return Route.createRoute(assign({},options,{path:options.path || options.from || '*',onEnter:function onEnter(transition,params,query){transition.redirect(options.to,options.params || params,options.query || query);}}));}}]);return Route;})();module.exports = Route;},{"./PathUtils":17,"react/lib/Object.assign":76,"react/lib/invariant":185,"react/lib/warning":204}],21:[function(require,module,exports){'use strict';var invariant=require('react/lib/invariant');var canUseDOM=require('react/lib/ExecutionEnvironment').canUseDOM;var getWindowScrollPosition=require('./getWindowScrollPosition');function shouldUpdateScroll(state,prevState){if(!prevState){return true;} // Don't update scroll position when only the query has changed.
  if(state.pathname === prevState.pathname){return false;}var routes=state.routes;var prevRoutes=prevState.routes;var sharedAncestorRoutes=routes.filter(function(route){return prevRoutes.indexOf(route) !== -1;});return !sharedAncestorRoutes.some(function(route){return route.ignoreScrollBehavior;});} /**
   * Provides the router with the ability to manage window scroll position
   * according to its scroll behavior.
   */var ScrollHistory={statics:{ /**
       * Records curent scroll position as the last known position for the given URL path.
       */recordScrollPosition:function recordScrollPosition(path){if(!this.scrollHistory)this.scrollHistory = {};this.scrollHistory[path] = getWindowScrollPosition();}, /**
       * Returns the last known scroll position for the given URL path.
       */getScrollPosition:function getScrollPosition(path){if(!this.scrollHistory)this.scrollHistory = {};return this.scrollHistory[path] || null;}},componentWillMount:function componentWillMount(){invariant(this.constructor.getScrollBehavior() == null || canUseDOM,'Cannot use scroll behavior without a DOM');},componentDidMount:function componentDidMount(){this._updateScroll();},componentDidUpdate:function componentDidUpdate(prevProps,prevState){this._updateScroll(prevState);},_updateScroll:function _updateScroll(prevState){if(!shouldUpdateScroll(this.state,prevState)){return;}var scrollBehavior=this.constructor.getScrollBehavior();if(scrollBehavior)scrollBehavior.updateScrollPosition(this.constructor.getScrollPosition(this.state.path),this.state.action);}};module.exports = ScrollHistory;},{"./getWindowScrollPosition":36,"react/lib/ExecutionEnvironment":70,"react/lib/invariant":185}],22:[function(require,module,exports){'use strict';var PropTypes=require('./PropTypes'); /**
   * A mixin for components that need to know the path, routes, URL
   * params and query that are currently active.
   *
   * Example:
   *
   *   var AboutLink = React.createClass({
   *     mixins: [ Router.State ],
   *     render() {
   *       var className = this.props.className;
   *
   *       if (this.isActive('about'))
   *         className += ' is-active';
   *
   *       return React.DOM.a({ className: className }, this.props.children);
   *     }
   *   });
   */var State={contextTypes:{router:PropTypes.router.isRequired}, /**
     * Returns the current URL path.
     */getPath:function getPath(){return this.context.router.getCurrentPath();}, /**
     * Returns the current URL path without the query string.
     */getPathname:function getPathname(){return this.context.router.getCurrentPathname();}, /**
     * Returns an object of the URL params that are currently active.
     */getParams:function getParams(){return this.context.router.getCurrentParams();}, /**
     * Returns an object of the query params that are currently active.
     */getQuery:function getQuery(){return this.context.router.getCurrentQuery();}, /**
     * Returns an array of the routes that are currently active.
     */getRoutes:function getRoutes(){return this.context.router.getCurrentRoutes();}, /**
     * A helper method to determine if a given route, params, and query
     * are active.
     */isActive:function isActive(to,params,query){return this.context.router.isActive(to,params,query);}};module.exports = State;},{"./PropTypes":18}],23:[function(require,module,exports){ /* jshint -W058 */'use strict';var Cancellation=require('./Cancellation');var Redirect=require('./Redirect'); /**
   * Encapsulates a transition to a given path.
   *
   * The willTransitionTo and willTransitionFrom handlers receive
   * an instance of this class as their first argument.
   */function Transition(path,retry){this.path = path;this.abortReason = null; // TODO: Change this to router.retryTransition(transition)
  this.retry = retry.bind(this);}Transition.prototype.abort = function(reason){if(this.abortReason == null)this.abortReason = reason || 'ABORT';};Transition.prototype.redirect = function(to,params,query){this.abort(new Redirect(to,params,query));};Transition.prototype.cancel = function(){this.abort(new Cancellation());};Transition.from = function(transition,routes,components,callback){routes.reduce(function(callback,route,index){return function(error){if(error || transition.abortReason){callback(error);}else if(route.onLeave){try{route.onLeave(transition,components[index],callback); // If there is no callback in the argument list, call it automatically.
  if(route.onLeave.length < 3)callback();}catch(e) {callback(e);}}else {callback();}};},callback)();};Transition.to = function(transition,routes,params,query,callback){routes.reduceRight(function(callback,route){return function(error){if(error || transition.abortReason){callback(error);}else if(route.onEnter){try{route.onEnter(transition,params,query,callback); // If there is no callback in the argument list, call it automatically.
  if(route.onEnter.length < 4)callback();}catch(e) {callback(e);}}else {callback();}};},callback)();};module.exports = Transition;},{"./Cancellation":13,"./Redirect":19}],24:[function(require,module,exports){ /**
   * Actions that modify the URL.
   */'use strict';var LocationActions={ /**
     * Indicates a new location is being pushed to the history stack.
     */PUSH:'push', /**
     * Indicates the current location should be replaced.
     */REPLACE:'replace', /**
     * Indicates the most recent entry should be removed from the history stack.
     */POP:'pop'};module.exports = LocationActions;},{}],25:[function(require,module,exports){'use strict';var LocationActions=require('../actions/LocationActions'); /**
   * A scroll behavior that attempts to imitate the default behavior
   * of modern browsers.
   */var ImitateBrowserBehavior={updateScrollPosition:function updateScrollPosition(position,actionType){switch(actionType){case LocationActions.PUSH:case LocationActions.REPLACE:window.scrollTo(0,0);break;case LocationActions.POP:if(position){window.scrollTo(position.x,position.y);}else {window.scrollTo(0,0);}break;}}};module.exports = ImitateBrowserBehavior;},{"../actions/LocationActions":24}],26:[function(require,module,exports){ /**
   * A scroll behavior that always scrolls to the top of the page
   * after a transition.
   */"use strict";var ScrollToTopBehavior={updateScrollPosition:function updateScrollPosition(){window.scrollTo(0,0);}};module.exports = ScrollToTopBehavior;},{}],27:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;}; /**
   * This component is necessary to get around a context warning
   * present in React 0.13.0. It sovles this by providing a separation
   * between the "owner" and "parent" contexts.
   */var React=require('react');var ContextWrapper=(function(_React$Component){function ContextWrapper(){_classCallCheck(this,ContextWrapper);if(_React$Component != null){_React$Component.apply(this,arguments);}}_inherits(ContextWrapper,_React$Component);_createClass(ContextWrapper,[{key:'render',value:function render(){return this.props.children;}}]);return ContextWrapper;})(React.Component);module.exports = ContextWrapper;},{"react":"react"}],28:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;};var PropTypes=require('../PropTypes');var RouteHandler=require('./RouteHandler');var Route=require('./Route'); /**
   * A <DefaultRoute> component is a special kind of <Route> that
   * renders when its parent matches but none of its siblings do.
   * Only one such route may be used at any given level in the
   * route hierarchy.
   */var DefaultRoute=(function(_Route){function DefaultRoute(){_classCallCheck(this,DefaultRoute);if(_Route != null){_Route.apply(this,arguments);}}_inherits(DefaultRoute,_Route);return DefaultRoute;})(Route); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  DefaultRoute.propTypes = {name:PropTypes.string,path:PropTypes.falsy,children:PropTypes.falsy,handler:PropTypes.func.isRequired};DefaultRoute.defaultProps = {handler:RouteHandler};module.exports = DefaultRoute;},{"../PropTypes":18,"./Route":32,"./RouteHandler":33}],29:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;};var React=require('react');var assign=require('react/lib/Object.assign');var PropTypes=require('../PropTypes');function isLeftClickEvent(event){return event.button === 0;}function isModifiedEvent(event){return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);} /**
   * <Link> components are used to create an <a> element that links to a route.
   * When that route is active, the link gets an "active" class name (or the
   * value of its `activeClassName` prop).
   *
   * For example, assuming you have the following route:
   *
   *   <Route name="showPost" path="/posts/:postID" handler={Post}/>
   *
   * You could use the following component to link to that route:
   *
   *   <Link to="showPost" params={{ postID: "123" }} />
   *
   * In addition to params, links may pass along query string parameters
   * using the `query` prop.
   *
   *   <Link to="showPost" params={{ postID: "123" }} query={{ show:true }}/>
   */var Link=(function(_React$Component){function Link(){_classCallCheck(this,Link);if(_React$Component != null){_React$Component.apply(this,arguments);}}_inherits(Link,_React$Component);_createClass(Link,[{key:'handleClick',value:function handleClick(event){var allowTransition=true;var clickResult;if(this.props.onClick)clickResult = this.props.onClick(event);if(isModifiedEvent(event) || !isLeftClickEvent(event)){return;}if(clickResult === false || event.defaultPrevented === true)allowTransition = false;event.preventDefault();if(allowTransition)this.context.router.transitionTo(this.props.to,this.props.params,this.props.query);}},{key:'getHref', /**
       * Returns the value of the "href" attribute to use on the DOM element.
       */value:function getHref(){return this.context.router.makeHref(this.props.to,this.props.params,this.props.query);}},{key:'getClassName', /**
       * Returns the value of the "class" attribute to use on the DOM element, which contains
       * the value of the activeClassName property when this <Link> is active.
       */value:function getClassName(){var className=this.props.className;if(this.getActiveState())className += ' ' + this.props.activeClassName;return className;}},{key:'getActiveState',value:function getActiveState(){return this.context.router.isActive(this.props.to,this.props.params,this.props.query);}},{key:'render',value:function render(){var props=assign({},this.props,{href:this.getHref(),className:this.getClassName(),onClick:this.handleClick.bind(this)});if(props.activeStyle && this.getActiveState())props.style = props.activeStyle;return React.DOM.a(props,this.props.children);}}]);return Link;})(React.Component); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  Link.contextTypes = {router:PropTypes.router.isRequired};Link.propTypes = {activeClassName:PropTypes.string.isRequired,to:PropTypes.oneOfType([PropTypes.string,PropTypes.route]).isRequired,params:PropTypes.object,query:PropTypes.object,activeStyle:PropTypes.object,onClick:PropTypes.func};Link.defaultProps = {activeClassName:'active',className:''};module.exports = Link;},{"../PropTypes":18,"react":"react","react/lib/Object.assign":76}],30:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;};var PropTypes=require('../PropTypes');var RouteHandler=require('./RouteHandler');var Route=require('./Route'); /**
   * A <NotFoundRoute> is a special kind of <Route> that
   * renders when the beginning of its parent's path matches
   * but none of its siblings do, including any <DefaultRoute>.
   * Only one such route may be used at any given level in the
   * route hierarchy.
   */var NotFoundRoute=(function(_Route){function NotFoundRoute(){_classCallCheck(this,NotFoundRoute);if(_Route != null){_Route.apply(this,arguments);}}_inherits(NotFoundRoute,_Route);return NotFoundRoute;})(Route); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  NotFoundRoute.propTypes = {name:PropTypes.string,path:PropTypes.falsy,children:PropTypes.falsy,handler:PropTypes.func.isRequired};NotFoundRoute.defaultProps = {handler:RouteHandler};module.exports = NotFoundRoute;},{"../PropTypes":18,"./Route":32,"./RouteHandler":33}],31:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;};var PropTypes=require('../PropTypes');var Route=require('./Route'); /**
   * A <Redirect> component is a special kind of <Route> that always
   * redirects to another route when it matches.
   */var Redirect=(function(_Route){function Redirect(){_classCallCheck(this,Redirect);if(_Route != null){_Route.apply(this,arguments);}}_inherits(Redirect,_Route);return Redirect;})(Route); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  Redirect.propTypes = {path:PropTypes.string,from:PropTypes.string, // Alias for path.
  to:PropTypes.string,handler:PropTypes.falsy}; // Redirects should not have a default handler
  Redirect.defaultProps = {};module.exports = Redirect;},{"../PropTypes":18,"./Route":32}],32:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;};var React=require('react');var invariant=require('react/lib/invariant');var PropTypes=require('../PropTypes');var RouteHandler=require('./RouteHandler'); /**
   * <Route> components specify components that are rendered to the page when the
   * URL matches a given pattern.
   *
   * Routes are arranged in a nested tree structure. When a new URL is requested,
   * the tree is searched depth-first to find a route whose path matches the URL.
   * When one is found, all routes in the tree that lead to it are considered
   * "active" and their components are rendered into the DOM, nested in the same
   * order as they are in the tree.
   *
   * The preferred way to configure a router is using JSX. The XML-like syntax is
   * a great way to visualize how routes are laid out in an application.
   *
   *   var routes = [
   *     <Route handler={App}>
   *       <Route name="login" handler={Login}/>
   *       <Route name="logout" handler={Logout}/>
   *       <Route name="about" handler={About}/>
   *     </Route>
   *   ];
   *   
   *   Router.run(routes, function (Handler) {
   *     React.render(<Handler/>, document.body);
   *   });
   *
   * Handlers for Route components that contain children can render their active
   * child route using a <RouteHandler> element.
   *
   *   var App = React.createClass({
   *     render: function () {
   *       return (
   *         <div class="application">
   *           <RouteHandler/>
   *         </div>
   *       );
   *     }
   *   });
   *
   * If no handler is provided for the route, it will render a matched child route.
   */var Route=(function(_React$Component){function Route(){_classCallCheck(this,Route);if(_React$Component != null){_React$Component.apply(this,arguments);}}_inherits(Route,_React$Component);_createClass(Route,[{key:'render',value:function render(){invariant(false,'%s elements are for router configuration only and should not be rendered',this.constructor.name);}}]);return Route;})(React.Component); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  Route.propTypes = {name:PropTypes.string,path:PropTypes.string,handler:PropTypes.func,ignoreScrollBehavior:PropTypes.bool};Route.defaultProps = {handler:RouteHandler};module.exports = Route;},{"../PropTypes":18,"./RouteHandler":33,"react":"react","react/lib/invariant":185}],33:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var _inherits=function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;};var React=require('react');var ContextWrapper=require('./ContextWrapper');var assign=require('react/lib/Object.assign');var PropTypes=require('../PropTypes');var REF_NAME='__routeHandler__'; /**
   * A <RouteHandler> component renders the active child route handler
   * when routes are nested.
   */var RouteHandler=(function(_React$Component){function RouteHandler(){_classCallCheck(this,RouteHandler);if(_React$Component != null){_React$Component.apply(this,arguments);}}_inherits(RouteHandler,_React$Component);_createClass(RouteHandler,[{key:'getChildContext',value:function getChildContext(){return {routeDepth:this.context.routeDepth + 1};}},{key:'componentDidMount',value:function componentDidMount(){this._updateRouteComponent(this.refs[REF_NAME]);}},{key:'componentDidUpdate',value:function componentDidUpdate(){this._updateRouteComponent(this.refs[REF_NAME]);}},{key:'componentWillUnmount',value:function componentWillUnmount(){this._updateRouteComponent(null);}},{key:'_updateRouteComponent',value:function _updateRouteComponent(component){this.context.router.setRouteComponentAtDepth(this.getRouteDepth(),component);}},{key:'getRouteDepth',value:function getRouteDepth(){return this.context.routeDepth;}},{key:'createChildRouteHandler',value:function createChildRouteHandler(props){var route=this.context.router.getRouteAtDepth(this.getRouteDepth());if(route == null){return null;}var childProps=assign({},props || this.props,{ref:REF_NAME,params:this.context.router.getCurrentParams(),query:this.context.router.getCurrentQuery()});return React.createElement(route.handler,childProps);}},{key:'render',value:function render(){var handler=this.createChildRouteHandler(); // <script/> for things like <CSSTransitionGroup/> that don't like null
  return handler?React.createElement(ContextWrapper,null,handler):React.createElement('script',null);}}]);return RouteHandler;})(React.Component); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  RouteHandler.contextTypes = {routeDepth:PropTypes.number.isRequired,router:PropTypes.router.isRequired};RouteHandler.childContextTypes = {routeDepth:PropTypes.number.isRequired};module.exports = RouteHandler;},{"../PropTypes":18,"./ContextWrapper":27,"react":"react","react/lib/Object.assign":76}],34:[function(require,module,exports){(function(process){ /* jshint -W058 */'use strict';var React=require('react');var warning=require('react/lib/warning');var invariant=require('react/lib/invariant');var canUseDOM=require('react/lib/ExecutionEnvironment').canUseDOM;var LocationActions=require('./actions/LocationActions');var ImitateBrowserBehavior=require('./behaviors/ImitateBrowserBehavior');var HashLocation=require('./locations/HashLocation');var HistoryLocation=require('./locations/HistoryLocation');var RefreshLocation=require('./locations/RefreshLocation');var StaticLocation=require('./locations/StaticLocation');var ScrollHistory=require('./ScrollHistory');var createRoutesFromReactChildren=require('./createRoutesFromReactChildren');var isReactChildren=require('./isReactChildren');var Transition=require('./Transition');var PropTypes=require('./PropTypes');var Redirect=require('./Redirect');var History=require('./History');var Cancellation=require('./Cancellation');var Match=require('./Match');var Route=require('./Route');var supportsHistory=require('./supportsHistory');var PathUtils=require('./PathUtils'); /**
   * The default location for new routers.
   */var DEFAULT_LOCATION=canUseDOM?HashLocation:'/'; /**
   * The default scroll behavior for new routers.
   */var DEFAULT_SCROLL_BEHAVIOR=canUseDOM?ImitateBrowserBehavior:null;function hasProperties(object,properties){for(var propertyName in properties) if(properties.hasOwnProperty(propertyName) && object[propertyName] !== properties[propertyName]){return false;}return true;}function hasMatch(routes,route,prevParams,nextParams,prevQuery,nextQuery){return routes.some(function(r){if(r !== route)return false;var paramNames=route.paramNames;var paramName; // Ensure that all params the route cares about did not change.
  for(var i=0,len=paramNames.length;i < len;++i) {paramName = paramNames[i];if(nextParams[paramName] !== prevParams[paramName])return false;} // Ensure the query hasn't changed.
  return hasProperties(prevQuery,nextQuery) && hasProperties(nextQuery,prevQuery);});}function addRoutesToNamedRoutes(routes,namedRoutes){var route;for(var i=0,len=routes.length;i < len;++i) {route = routes[i];if(route.name){invariant(namedRoutes[route.name] == null,'You may not have more than one route named "%s"',route.name);namedRoutes[route.name] = route;}if(route.childRoutes)addRoutesToNamedRoutes(route.childRoutes,namedRoutes);}}function routeIsActive(activeRoutes,routeName){return activeRoutes.some(function(route){return route.name === routeName;});}function paramsAreActive(activeParams,params){for(var property in params) if(String(activeParams[property]) !== String(params[property])){return false;}return true;}function queryIsActive(activeQuery,query){for(var property in query) if(String(activeQuery[property]) !== String(query[property])){return false;}return true;} /**
   * Creates and returns a new router using the given options. A router
   * is a ReactComponent class that knows how to react to changes in the
   * URL and keep the contents of the page in sync.
   *
   * Options may be any of the following:
   *
   * - routes           (required) The route config
   * - location         The location to use. Defaults to HashLocation when
   *                    the DOM is available, "/" otherwise
   * - scrollBehavior   The scroll behavior to use. Defaults to ImitateBrowserBehavior
   *                    when the DOM is available, null otherwise
   * - onError          A function that is used to handle errors
   * - onAbort          A function that is used to handle aborted transitions
   *
   * When rendering in a server-side environment, the location should simply
   * be the URL path that was used in the request, including the query string.
   */function createRouter(options){options = options || {};if(isReactChildren(options))options = {routes:options};var mountedComponents=[];var location=options.location || DEFAULT_LOCATION;var scrollBehavior=options.scrollBehavior || DEFAULT_SCROLL_BEHAVIOR;var state={};var nextState={};var pendingTransition=null;var dispatchHandler=null;if(typeof location === 'string')location = new StaticLocation(location);if(location instanceof StaticLocation){warning(!canUseDOM || process.env.NODE_ENV === 'test','You should not use a static location in a DOM environment because ' + 'the router will not be kept in sync with the current URL');}else {invariant(canUseDOM || location.needsDOM === false,'You cannot use %s without a DOM',location);} // Automatically fall back to full page refreshes in
  // browsers that don't support the HTML history API.
  if(location === HistoryLocation && !supportsHistory())location = RefreshLocation;var Router=React.createClass({displayName:'Router',statics:{isRunning:false,cancelPendingTransition:function cancelPendingTransition(){if(pendingTransition){pendingTransition.cancel();pendingTransition = null;}},clearAllRoutes:function clearAllRoutes(){Router.cancelPendingTransition();Router.namedRoutes = {};Router.routes = [];}, /**
         * Adds routes to this router from the given children object (see ReactChildren).
         */addRoutes:function addRoutes(routes){if(isReactChildren(routes))routes = createRoutesFromReactChildren(routes);addRoutesToNamedRoutes(routes,Router.namedRoutes);Router.routes.push.apply(Router.routes,routes);}, /**
         * Replaces routes of this router from the given children object (see ReactChildren).
         */replaceRoutes:function replaceRoutes(routes){Router.clearAllRoutes();Router.addRoutes(routes);Router.refresh();}, /**
         * Performs a match of the given path against this router and returns an object
         * with the { routes, params, pathname, query } that match. Returns null if no
         * match can be made.
         */match:function match(path){return Match.findMatch(Router.routes,path);}, /**
         * Returns an absolute URL path created from the given route
         * name, URL parameters, and query.
         */makePath:function makePath(to,params,query){var path;if(PathUtils.isAbsolute(to)){path = to;}else {var route=to instanceof Route?to:Router.namedRoutes[to];invariant(route instanceof Route,'Cannot find a route named "%s"',to);path = route.path;}return PathUtils.withQuery(PathUtils.injectParams(path,params),query);}, /**
         * Returns a string that may safely be used as the href of a link
         * to the route with the given name, URL parameters, and query.
         */makeHref:function makeHref(to,params,query){var path=Router.makePath(to,params,query);return location === HashLocation?'#' + path:path;}, /**
         * Transitions to the URL specified in the arguments by pushing
         * a new URL onto the history stack.
         */transitionTo:function transitionTo(to,params,query){var path=Router.makePath(to,params,query);if(pendingTransition){ // Replace so pending location does not stay in history.
  location.replace(path);}else {location.push(path);}}, /**
         * Transitions to the URL specified in the arguments by replacing
         * the current URL in the history stack.
         */replaceWith:function replaceWith(to,params,query){location.replace(Router.makePath(to,params,query));}, /**
         * Transitions to the previous URL if one is available. Returns true if the
         * router was able to go back, false otherwise.
         *
         * Note: The router only tracks history entries in your application, not the
         * current browser session, so you can safely call this function without guarding
         * against sending the user back to some other site. However, when using
         * RefreshLocation (which is the fallback for HistoryLocation in browsers that
         * don't support HTML5 history) this method will *always* send the client back
         * because we cannot reliably track history length.
         */goBack:function goBack(){if(History.length > 1 || location === RefreshLocation){location.pop();return true;}warning(false,'goBack() was ignored because there is no router history');return false;},handleAbort:options.onAbort || function(abortReason){if(location instanceof StaticLocation)throw new Error('Unhandled aborted transition! Reason: ' + abortReason);if(abortReason instanceof Cancellation){return;}else if(abortReason instanceof Redirect){location.replace(Router.makePath(abortReason.to,abortReason.params,abortReason.query));}else {location.pop();}},handleError:options.onError || function(error){ // Throw so we don't silently swallow async errors.
  throw error; // This error probably originated in a transition hook.
  },handleLocationChange:function handleLocationChange(change){Router.dispatch(change.path,change.type);}, /**
         * Performs a transition to the given path and calls callback(error, abortReason)
         * when the transition is finished. If both arguments are null the router's state
         * was updated. Otherwise the transition did not complete.
         *
         * In a transition, a router first determines which routes are involved by beginning
         * with the current route, up the route tree to the first parent route that is shared
         * with the destination route, and back down the tree to the destination route. The
         * willTransitionFrom hook is invoked on all route handlers we're transitioning away
         * from, in reverse nesting order. Likewise, the willTransitionTo hook is invoked on
         * all route handlers we're transitioning to.
         *
         * Both willTransitionFrom and willTransitionTo hooks may either abort or redirect the
         * transition. To resolve asynchronously, they may use the callback argument. If no
         * hooks wait, the transition is fully synchronous.
         */dispatch:function dispatch(path,action){Router.cancelPendingTransition();var prevPath=state.path;var isRefreshing=action == null;if(prevPath === path && !isRefreshing){return;} // Nothing to do!
  // Record the scroll position as early as possible to
  // get it before browsers try update it automatically.
  if(prevPath && action === LocationActions.PUSH)Router.recordScrollPosition(prevPath);var match=Router.match(path);warning(match != null,'No route matches path "%s". Make sure you have <Route path="%s"> somewhere in your routes',path,path);if(match == null)match = {};var prevRoutes=state.routes || [];var prevParams=state.params || {};var prevQuery=state.query || {};var nextRoutes=match.routes || [];var nextParams=match.params || {};var nextQuery=match.query || {};var fromRoutes,toRoutes;if(prevRoutes.length){fromRoutes = prevRoutes.filter(function(route){return !hasMatch(nextRoutes,route,prevParams,nextParams,prevQuery,nextQuery);});toRoutes = nextRoutes.filter(function(route){return !hasMatch(prevRoutes,route,prevParams,nextParams,prevQuery,nextQuery);});}else {fromRoutes = [];toRoutes = nextRoutes;}var transition=new Transition(path,Router.replaceWith.bind(Router,path));pendingTransition = transition;var fromComponents=mountedComponents.slice(prevRoutes.length - fromRoutes.length);Transition.from(transition,fromRoutes,fromComponents,function(error){if(error || transition.abortReason)return dispatchHandler.call(Router,error,transition); // No need to continue.
  Transition.to(transition,toRoutes,nextParams,nextQuery,function(error){dispatchHandler.call(Router,error,transition,{path:path,action:action,pathname:match.pathname,routes:nextRoutes,params:nextParams,query:nextQuery});});});}, /**
         * Starts this router and calls callback(router, state) when the route changes.
         *
         * If the router's location is static (i.e. a URL path in a server environment)
         * the callback is called only once. Otherwise, the location should be one of the
         * Router.*Location objects (e.g. Router.HashLocation or Router.HistoryLocation).
         */run:function run(callback){invariant(!Router.isRunning,'Router is already running');dispatchHandler = function(error,transition,newState){if(error)Router.handleError(error);if(pendingTransition !== transition)return;pendingTransition = null;if(transition.abortReason){Router.handleAbort(transition.abortReason);}else {callback.call(Router,Router,nextState = newState);}};if(!(location instanceof StaticLocation)){if(location.addChangeListener)location.addChangeListener(Router.handleLocationChange);Router.isRunning = true;} // Bootstrap using the current path.
  Router.refresh();},refresh:function refresh(){Router.dispatch(location.getCurrentPath(),null);},stop:function stop(){Router.cancelPendingTransition();if(location.removeChangeListener)location.removeChangeListener(Router.handleLocationChange);Router.isRunning = false;},getLocation:function getLocation(){return location;},getScrollBehavior:function getScrollBehavior(){return scrollBehavior;},getRouteAtDepth:function getRouteAtDepth(routeDepth){var routes=state.routes;return routes && routes[routeDepth];},setRouteComponentAtDepth:function setRouteComponentAtDepth(routeDepth,component){mountedComponents[routeDepth] = component;}, /**
         * Returns the current URL path + query string.
         */getCurrentPath:function getCurrentPath(){return state.path;}, /**
         * Returns the current URL path without the query string.
         */getCurrentPathname:function getCurrentPathname(){return state.pathname;}, /**
         * Returns an object of the currently active URL parameters.
         */getCurrentParams:function getCurrentParams(){return state.params;}, /**
         * Returns an object of the currently active query parameters.
         */getCurrentQuery:function getCurrentQuery(){return state.query;}, /**
         * Returns an array of the currently active routes.
         */getCurrentRoutes:function getCurrentRoutes(){return state.routes;}, /**
         * Returns true if the given route, params, and query are active.
         */isActive:function isActive(to,params,query){if(PathUtils.isAbsolute(to)){return to === state.path;}return routeIsActive(state.routes,to) && paramsAreActive(state.params,params) && (query == null || queryIsActive(state.query,query));}},mixins:[ScrollHistory],propTypes:{children:PropTypes.falsy},childContextTypes:{routeDepth:PropTypes.number.isRequired,router:PropTypes.router.isRequired},getChildContext:function getChildContext(){return {routeDepth:1,router:Router};},getInitialState:function getInitialState(){return state = nextState;},componentWillReceiveProps:function componentWillReceiveProps(){this.setState(state = nextState);},componentWillUnmount:function componentWillUnmount(){Router.stop();},render:function render(){var route=Router.getRouteAtDepth(0);return route?React.createElement(route.handler,this.props):null;}});Router.clearAllRoutes();if(options.routes)Router.addRoutes(options.routes);return Router;}module.exports = createRouter;}).call(this,require('_process'));},{"./Cancellation":13,"./History":14,"./Match":15,"./PathUtils":17,"./PropTypes":18,"./Redirect":19,"./Route":20,"./ScrollHistory":21,"./Transition":23,"./actions/LocationActions":24,"./behaviors/ImitateBrowserBehavior":25,"./createRoutesFromReactChildren":35,"./isReactChildren":37,"./locations/HashLocation":38,"./locations/HistoryLocation":39,"./locations/RefreshLocation":40,"./locations/StaticLocation":41,"./supportsHistory":44,"_process":12,"react":"react","react/lib/ExecutionEnvironment":70,"react/lib/invariant":185,"react/lib/warning":204}],35:[function(require,module,exports){ /* jshint -W084 */'use strict';var React=require('react');var assign=require('react/lib/Object.assign');var warning=require('react/lib/warning');var DefaultRoute=require('./components/DefaultRoute');var NotFoundRoute=require('./components/NotFoundRoute');var Redirect=require('./components/Redirect');var Route=require('./Route');function checkPropTypes(componentName,propTypes,props){componentName = componentName || 'UnknownComponent';for(var propName in propTypes) {if(propTypes.hasOwnProperty(propName)){var error=propTypes[propName](props,propName,componentName);if(error instanceof Error)warning(false,error.message);}}}function createRouteOptions(props){var options=assign({},props);var handler=options.handler;if(handler){options.onEnter = handler.willTransitionTo;options.onLeave = handler.willTransitionFrom;}return options;}function createRouteFromReactElement(element){if(!React.isValidElement(element)){return;}var type=element.type;var props=assign({},type.defaultProps,element.props);if(type.propTypes)checkPropTypes(type.displayName,type.propTypes,props);if(type === DefaultRoute){return Route.createDefaultRoute(createRouteOptions(props));}if(type === NotFoundRoute){return Route.createNotFoundRoute(createRouteOptions(props));}if(type === Redirect){return Route.createRedirect(createRouteOptions(props));}return Route.createRoute(createRouteOptions(props),function(){if(props.children)createRoutesFromReactChildren(props.children);});} /**
   * Creates and returns an array of routes created from the given
   * ReactChildren, all of which should be one of <Route>, <DefaultRoute>,
   * <NotFoundRoute>, or <Redirect>, e.g.:
   *
   *   var { createRoutesFromReactChildren, Route, Redirect } = require('react-router');
   *
   *   var routes = createRoutesFromReactChildren(
   *     <Route path="/" handler={App}>
   *       <Route name="user" path="/user/:userId" handler={User}>
   *         <Route name="task" path="tasks/:taskId" handler={Task}/>
   *         <Redirect from="todos/:taskId" to="task"/>
   *       </Route>
   *     </Route>
   *   );
   */function createRoutesFromReactChildren(children){var routes=[];React.Children.forEach(children,function(child){if(child = createRouteFromReactElement(child))routes.push(child);});return routes;}module.exports = createRoutesFromReactChildren;},{"./Route":20,"./components/DefaultRoute":28,"./components/NotFoundRoute":30,"./components/Redirect":31,"react":"react","react/lib/Object.assign":76,"react/lib/warning":204}],36:[function(require,module,exports){'use strict';var invariant=require('react/lib/invariant');var canUseDOM=require('react/lib/ExecutionEnvironment').canUseDOM; /**
   * Returns the current scroll position of the window as { x, y }.
   */function getWindowScrollPosition(){invariant(canUseDOM,'Cannot get current scroll position without a DOM');return {x:window.pageXOffset || document.documentElement.scrollLeft,y:window.pageYOffset || document.documentElement.scrollTop};}module.exports = getWindowScrollPosition;},{"react/lib/ExecutionEnvironment":70,"react/lib/invariant":185}],37:[function(require,module,exports){'use strict';var React=require('react');function isValidChild(object){return object == null || React.isValidElement(object);}function isReactChildren(object){return isValidChild(object) || Array.isArray(object) && object.every(isValidChild);}module.exports = isReactChildren;},{"react":"react"}],38:[function(require,module,exports){'use strict';var LocationActions=require('../actions/LocationActions');var History=require('../History');var _listeners=[];var _isListening=false;var _actionType;function notifyChange(type){if(type === LocationActions.PUSH)History.length += 1;var change={path:HashLocation.getCurrentPath(),type:type};_listeners.forEach(function(listener){listener.call(HashLocation,change);});}function ensureSlash(){var path=HashLocation.getCurrentPath();if(path.charAt(0) === '/'){return true;}HashLocation.replace('/' + path);return false;}function onHashChange(){if(ensureSlash()){ // If we don't have an _actionType then all we know is the hash
  // changed. It was probably caused by the user clicking the Back
  // button, but may have also been the Forward button or manual
  // manipulation. So just guess 'pop'.
  var curActionType=_actionType;_actionType = null;notifyChange(curActionType || LocationActions.POP);}} /**
   * A Location that uses `window.location.hash`.
   */var HashLocation={addChangeListener:function addChangeListener(listener){_listeners.push(listener); // Do this BEFORE listening for hashchange.
  ensureSlash();if(!_isListening){if(window.addEventListener){window.addEventListener('hashchange',onHashChange,false);}else {window.attachEvent('onhashchange',onHashChange);}_isListening = true;}},removeChangeListener:function removeChangeListener(listener){_listeners = _listeners.filter(function(l){return l !== listener;});if(_listeners.length === 0){if(window.removeEventListener){window.removeEventListener('hashchange',onHashChange,false);}else {window.removeEvent('onhashchange',onHashChange);}_isListening = false;}},push:function push(path){_actionType = LocationActions.PUSH;window.location.hash = path;},replace:function replace(path){_actionType = LocationActions.REPLACE;window.location.replace(window.location.pathname + window.location.search + '#' + path);},pop:function pop(){_actionType = LocationActions.POP;History.back();},getCurrentPath:function getCurrentPath(){return decodeURI( // We can't use window.location.hash here because it's not
  // consistent across browsers - Firefox will pre-decode it!
  window.location.href.split('#')[1] || '');},toString:function toString(){return '<HashLocation>';}};module.exports = HashLocation;},{"../History":14,"../actions/LocationActions":24}],39:[function(require,module,exports){'use strict';var LocationActions=require('../actions/LocationActions');var History=require('../History');var _listeners=[];var _isListening=false;function notifyChange(type){var change={path:HistoryLocation.getCurrentPath(),type:type};_listeners.forEach(function(listener){listener.call(HistoryLocation,change);});}function onPopState(event){if(event.state === undefined){return;} // Ignore extraneous popstate events in WebKit.
  notifyChange(LocationActions.POP);} /**
   * A Location that uses HTML5 history.
   */var HistoryLocation={addChangeListener:function addChangeListener(listener){_listeners.push(listener);if(!_isListening){if(window.addEventListener){window.addEventListener('popstate',onPopState,false);}else {window.attachEvent('onpopstate',onPopState);}_isListening = true;}},removeChangeListener:function removeChangeListener(listener){_listeners = _listeners.filter(function(l){return l !== listener;});if(_listeners.length === 0){if(window.addEventListener){window.removeEventListener('popstate',onPopState,false);}else {window.removeEvent('onpopstate',onPopState);}_isListening = false;}},push:function push(path){window.history.pushState({path:path},'',path);History.length += 1;notifyChange(LocationActions.PUSH);},replace:function replace(path){window.history.replaceState({path:path},'',path);notifyChange(LocationActions.REPLACE);},pop:History.back,getCurrentPath:function getCurrentPath(){return decodeURI(window.location.pathname + window.location.search);},toString:function toString(){return '<HistoryLocation>';}};module.exports = HistoryLocation;},{"../History":14,"../actions/LocationActions":24}],40:[function(require,module,exports){'use strict';var HistoryLocation=require('./HistoryLocation');var History=require('../History'); /**
   * A Location that uses full page refreshes. This is used as
   * the fallback for HistoryLocation in browsers that do not
   * support the HTML5 history API.
   */var RefreshLocation={push:function push(path){window.location = path;},replace:function replace(path){window.location.replace(path);},pop:History.back,getCurrentPath:HistoryLocation.getCurrentPath,toString:function toString(){return '<RefreshLocation>';}};module.exports = RefreshLocation;},{"../History":14,"./HistoryLocation":39}],41:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var invariant=require('react/lib/invariant');function throwCannotModify(){invariant(false,'You cannot modify a static location');} /**
   * A location that only ever contains a single path. Useful in
   * stateless environments like servers where there is no path history,
   * only the path that was used in the request.
   */var StaticLocation=(function(){function StaticLocation(path){_classCallCheck(this,StaticLocation);this.path = path;}_createClass(StaticLocation,[{key:'getCurrentPath',value:function getCurrentPath(){return this.path;}},{key:'toString',value:function toString(){return '<StaticLocation path="' + this.path + '">';}}]);return StaticLocation;})(); // TODO: Include these in the above class definition
  // once we can use ES7 property initializers.
  // https://github.com/babel/babel/issues/619
  StaticLocation.prototype.push = throwCannotModify;StaticLocation.prototype.replace = throwCannotModify;StaticLocation.prototype.pop = throwCannotModify;module.exports = StaticLocation;},{"react/lib/invariant":185}],42:[function(require,module,exports){'use strict';var _classCallCheck=function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();var invariant=require('react/lib/invariant');var LocationActions=require('../actions/LocationActions');var History=require('../History'); /**
   * A location that is convenient for testing and does not require a DOM.
   */var TestLocation=(function(){function TestLocation(history){_classCallCheck(this,TestLocation);this.history = history || [];this.listeners = [];this._updateHistoryLength();}_createClass(TestLocation,[{key:'needsDOM',get:function get(){return false;}},{key:'_updateHistoryLength',value:function _updateHistoryLength(){History.length = this.history.length;}},{key:'_notifyChange',value:function _notifyChange(type){var change={path:this.getCurrentPath(),type:type};for(var i=0,len=this.listeners.length;i < len;++i) this.listeners[i].call(this,change);}},{key:'addChangeListener',value:function addChangeListener(listener){this.listeners.push(listener);}},{key:'removeChangeListener',value:function removeChangeListener(listener){this.listeners = this.listeners.filter(function(l){return l !== listener;});}},{key:'push',value:function push(path){this.history.push(path);this._updateHistoryLength();this._notifyChange(LocationActions.PUSH);}},{key:'replace',value:function replace(path){invariant(this.history.length,'You cannot replace the current path with no history');this.history[this.history.length - 1] = path;this._notifyChange(LocationActions.REPLACE);}},{key:'pop',value:function pop(){this.history.pop();this._updateHistoryLength();this._notifyChange(LocationActions.POP);}},{key:'getCurrentPath',value:function getCurrentPath(){return this.history[this.history.length - 1];}},{key:'toString',value:function toString(){return '<TestLocation>';}}]);return TestLocation;})();module.exports = TestLocation;},{"../History":14,"../actions/LocationActions":24,"react/lib/invariant":185}],43:[function(require,module,exports){'use strict';var createRouter=require('./createRouter'); /**
   * A high-level convenience method that creates, configures, and
   * runs a router in one shot. The method signature is:
   *
   *   Router.run(routes[, location ], callback);
   *
   * Using `window.location.hash` to manage the URL, you could do:
   *
   *   Router.run(routes, function (Handler) {
   *     React.render(<Handler/>, document.body);
   *   });
   * 
   * Using HTML5 history and a custom "cursor" prop:
   * 
   *   Router.run(routes, Router.HistoryLocation, function (Handler) {
   *     React.render(<Handler cursor={cursor}/>, document.body);
   *   });
   *
   * Returns the newly created router.
   *
   * Note: If you need to specify further options for your router such
   * as error/abort handling or custom scroll behavior, use Router.create
   * instead.
   *
   *   var router = Router.create(options);
   *   router.run(function (Handler) {
   *     // ...
   *   });
   */function runRouter(routes,location,callback){if(typeof location === 'function'){callback = location;location = null;}var router=createRouter({routes:routes,location:location});router.run(callback);return router;}module.exports = runRouter;},{"./createRouter":34}],44:[function(require,module,exports){'use strict';function supportsHistory(){ /*! taken from modernizr
     * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
     * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
     * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586
     */var ua=navigator.userAgent;if((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1){return false;}return window.history && 'pushState' in window.history;}module.exports = supportsHistory;},{}],45:[function(require,module,exports){'use strict';function ToObject(val){if(val == null){throw new TypeError('Object.assign cannot be called with null or undefined');}return Object(val);}module.exports = Object.assign || function(target,source){var from;var keys;var to=ToObject(target);for(var s=1;s < arguments.length;s++) {from = arguments[s];keys = Object.keys(Object(from));for(var i=0;i < keys.length;i++) {to[keys[i]] = from[keys[i]];}}return to;};},{}],46:[function(require,module,exports){module.exports = require('./lib/');},{"./lib/":47}],47:[function(require,module,exports){ // Load modules
  var Stringify=require('./stringify');var Parse=require('./parse'); // Declare internals
  var internals={};module.exports = {stringify:Stringify,parse:Parse};},{"./parse":48,"./stringify":49}],48:[function(require,module,exports){ // Load modules
  var Utils=require('./utils'); // Declare internals
  var internals={delimiter:'&',depth:5,arrayLimit:20,parameterLimit:1000};internals.parseValues = function(str,options){var obj={};var parts=str.split(options.delimiter,options.parameterLimit === Infinity?undefined:options.parameterLimit);for(var i=0,il=parts.length;i < il;++i) {var part=parts[i];var pos=part.indexOf(']=') === -1?part.indexOf('='):part.indexOf(']=') + 1;if(pos === -1){obj[Utils.decode(part)] = '';}else {var key=Utils.decode(part.slice(0,pos));var val=Utils.decode(part.slice(pos + 1));if(Object.prototype.hasOwnProperty(key)){continue;}if(!obj.hasOwnProperty(key)){obj[key] = val;}else {obj[key] = [].concat(obj[key]).concat(val);}}}return obj;};internals.parseObject = function(chain,val,options){if(!chain.length){return val;}var root=chain.shift();var obj={};if(root === '[]'){obj = [];obj = obj.concat(internals.parseObject(chain,val,options));}else {var cleanRoot=root[0] === '[' && root[root.length - 1] === ']'?root.slice(1,root.length - 1):root;var index=parseInt(cleanRoot,10);var indexString='' + index;if(!isNaN(index) && root !== cleanRoot && indexString === cleanRoot && index >= 0 && index <= options.arrayLimit){obj = [];obj[index] = internals.parseObject(chain,val,options);}else {obj[cleanRoot] = internals.parseObject(chain,val,options);}}return obj;};internals.parseKeys = function(key,val,options){if(!key){return;} // The regex chunks
  var parent=/^([^\[\]]*)/;var child=/(\[[^\[\]]*\])/g; // Get the parent
  var segment=parent.exec(key); // Don't allow them to overwrite object prototype properties
  if(Object.prototype.hasOwnProperty(segment[1])){return;} // Stash the parent if it exists
  var keys=[];if(segment[1]){keys.push(segment[1]);} // Loop through children appending to the array until we hit depth
  var i=0;while((segment = child.exec(key)) !== null && i < options.depth) {++i;if(!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g,''))){keys.push(segment[1]);}} // If there's a remainder, just add whatever is left
  if(segment){keys.push('[' + key.slice(segment.index) + ']');}return internals.parseObject(keys,val,options);};module.exports = function(str,options){if(str === '' || str === null || typeof str === 'undefined'){return {};}options = options || {};options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter)?options.delimiter:internals.delimiter;options.depth = typeof options.depth === 'number'?options.depth:internals.depth;options.arrayLimit = typeof options.arrayLimit === 'number'?options.arrayLimit:internals.arrayLimit;options.parameterLimit = typeof options.parameterLimit === 'number'?options.parameterLimit:internals.parameterLimit;var tempObj=typeof str === 'string'?internals.parseValues(str,options):str;var obj={}; // Iterate over the keys and setup the new object
  var keys=Object.keys(tempObj);for(var i=0,il=keys.length;i < il;++i) {var key=keys[i];var newObj=internals.parseKeys(key,tempObj[key],options);obj = Utils.merge(obj,newObj);}return Utils.compact(obj);};},{"./utils":50}],49:[function(require,module,exports){ // Load modules
  var Utils=require('./utils'); // Declare internals
  var internals={delimiter:'&',arrayPrefixGenerators:{brackets:function brackets(prefix,key){return prefix + '[]';},indices:function indices(prefix,key){return prefix + '[' + key + ']';},repeat:function repeat(prefix,key){return prefix;}}};internals.stringify = function(obj,prefix,generateArrayPrefix){if(Utils.isBuffer(obj)){obj = obj.toString();}else if(obj instanceof Date){obj = obj.toISOString();}else if(obj === null){obj = '';}if(typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean'){return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)];}var values=[];if(typeof obj === 'undefined'){return values;}var objKeys=Object.keys(obj);for(var i=0,il=objKeys.length;i < il;++i) {var key=objKeys[i];if(Array.isArray(obj)){values = values.concat(internals.stringify(obj[key],generateArrayPrefix(prefix,key),generateArrayPrefix));}else {values = values.concat(internals.stringify(obj[key],prefix + '[' + key + ']',generateArrayPrefix));}}return values;};module.exports = function(obj,options){options = options || {};var delimiter=typeof options.delimiter === 'undefined'?internals.delimiter:options.delimiter;var keys=[];if(typeof obj !== 'object' || obj === null){return '';}var arrayFormat;if(options.arrayFormat in internals.arrayPrefixGenerators){arrayFormat = options.arrayFormat;}else if('indices' in options){arrayFormat = options.indices?'indices':'repeat';}else {arrayFormat = 'indices';}var generateArrayPrefix=internals.arrayPrefixGenerators[arrayFormat];var objKeys=Object.keys(obj);for(var i=0,il=objKeys.length;i < il;++i) {var key=objKeys[i];keys = keys.concat(internals.stringify(obj[key],key,generateArrayPrefix));}return keys.join(delimiter);};},{"./utils":50}],50:[function(require,module,exports){ // Load modules
  // Declare internals
  var internals={};exports.arrayToObject = function(source){var obj={};for(var i=0,il=source.length;i < il;++i) {if(typeof source[i] !== 'undefined'){obj[i] = source[i];}}return obj;};exports.merge = function(target,source){if(!source){return target;}if(typeof source !== 'object'){if(Array.isArray(target)){target.push(source);}else {target[source] = true;}return target;}if(typeof target !== 'object'){target = [target].concat(source);return target;}if(Array.isArray(target) && !Array.isArray(source)){target = exports.arrayToObject(target);}var keys=Object.keys(source);for(var k=0,kl=keys.length;k < kl;++k) {var key=keys[k];var value=source[key];if(!target[key]){target[key] = value;}else {target[key] = exports.merge(target[key],value);}}return target;};exports.decode = function(str){try{return decodeURIComponent(str.replace(/\+/g,' '));}catch(e) {return str;}};exports.compact = function(obj,refs){if(typeof obj !== 'object' || obj === null){return obj;}refs = refs || [];var lookup=refs.indexOf(obj);if(lookup !== -1){return refs[lookup];}refs.push(obj);if(Array.isArray(obj)){var compacted=[];for(var i=0,il=obj.length;i < il;++i) {if(typeof obj[i] !== 'undefined'){compacted.push(obj[i]);}}return compacted;}var keys=Object.keys(obj);for(i = 0,il = keys.length;i < il;++i) {var key=keys[i];obj[key] = exports.compact(obj[key],refs);}return obj;};exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]';};exports.isBuffer = function(obj){if(obj === null || typeof obj === 'undefined'){return false;}return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));};},{}],51:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule AutoFocusMixin
   * @typechecks static-only
   */'use strict';var focusNode=require("./focusNode");var AutoFocusMixin={componentDidMount:function componentDidMount(){if(this.props.autoFocus){focusNode(this.getDOMNode());}}};module.exports = AutoFocusMixin;},{"./focusNode":169}],52:[function(require,module,exports){ /**
   * Copyright 2013-2015 Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule BeforeInputEventPlugin
   * @typechecks static-only
   */'use strict';var EventConstants=require("./EventConstants");var EventPropagators=require("./EventPropagators");var ExecutionEnvironment=require("./ExecutionEnvironment");var FallbackCompositionState=require("./FallbackCompositionState");var SyntheticCompositionEvent=require("./SyntheticCompositionEvent");var SyntheticInputEvent=require("./SyntheticInputEvent");var keyOf=require("./keyOf");var END_KEYCODES=[9,13,27,32]; // Tab, Return, Esc, Space
  var START_KEYCODE=229;var canUseCompositionEvent=ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;var documentMode=null;if(ExecutionEnvironment.canUseDOM && 'documentMode' in document){documentMode = document.documentMode;} // Webkit offers a very useful `textInput` event that can be used to
  // directly represent `beforeInput`. The IE `textinput` event is not as
  // useful, so we don't use it.
  var canUseTextInputEvent=ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto(); // In IE9+, we have access to composition events, but the data supplied
  // by the native compositionend event may be incorrect. Japanese ideographic
  // spaces, for instance (\u3000) are not recorded correctly.
  var useFallbackCompositionData=ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11); /**
   * Opera <= 12 includes TextEvent in window, but does not fire
   * text input events. Rely on keypress instead.
   */function isPresto(){var opera=window.opera;return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(),10) <= 12;}var SPACEBAR_CODE=32;var SPACEBAR_CHAR=String.fromCharCode(SPACEBAR_CODE);var topLevelTypes=EventConstants.topLevelTypes; // Events and their corresponding property names.
  var eventTypes={beforeInput:{phasedRegistrationNames:{bubbled:keyOf({onBeforeInput:null}),captured:keyOf({onBeforeInputCapture:null})},dependencies:[topLevelTypes.topCompositionEnd,topLevelTypes.topKeyPress,topLevelTypes.topTextInput,topLevelTypes.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:keyOf({onCompositionEnd:null}),captured:keyOf({onCompositionEndCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topCompositionEnd,topLevelTypes.topKeyDown,topLevelTypes.topKeyPress,topLevelTypes.topKeyUp,topLevelTypes.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:keyOf({onCompositionStart:null}),captured:keyOf({onCompositionStartCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topCompositionStart,topLevelTypes.topKeyDown,topLevelTypes.topKeyPress,topLevelTypes.topKeyUp,topLevelTypes.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:keyOf({onCompositionUpdate:null}),captured:keyOf({onCompositionUpdateCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topCompositionUpdate,topLevelTypes.topKeyDown,topLevelTypes.topKeyPress,topLevelTypes.topKeyUp,topLevelTypes.topMouseDown]}}; // Track whether we've ever handled a keypress on the space key.
  var hasSpaceKeypress=false; /**
   * Return whether a native keypress event is assumed to be a command.
   * This is required because Firefox fires `keypress` events for key commands
   * (cut, copy, select-all, etc.) even though no character is inserted.
   */function isKeypressCommand(nativeEvent){return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&  // ctrlKey && altKey is equivalent to AltGr, and is not a command.
  !(nativeEvent.ctrlKey && nativeEvent.altKey);} /**
   * Translate native top level events into event types.
   *
   * @param {string} topLevelType
   * @return {object}
   */function getCompositionEventType(topLevelType){switch(topLevelType){case topLevelTypes.topCompositionStart:return eventTypes.compositionStart;case topLevelTypes.topCompositionEnd:return eventTypes.compositionEnd;case topLevelTypes.topCompositionUpdate:return eventTypes.compositionUpdate;}} /**
   * Does our fallback best-guess model think this event signifies that
   * composition has begun?
   *
   * @param {string} topLevelType
   * @param {object} nativeEvent
   * @return {boolean}
   */function isFallbackCompositionStart(topLevelType,nativeEvent){return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;} /**
   * Does our fallback mode think that this event is the end of composition?
   *
   * @param {string} topLevelType
   * @param {object} nativeEvent
   * @return {boolean}
   */function isFallbackCompositionEnd(topLevelType,nativeEvent){switch(topLevelType){case topLevelTypes.topKeyUp: // Command keys insert or clear IME input.
  return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;case topLevelTypes.topKeyDown: // Expect IME keyCode on each keydown. If we get any other
  // code we must have exited earlier.
  return nativeEvent.keyCode !== START_KEYCODE;case topLevelTypes.topKeyPress:case topLevelTypes.topMouseDown:case topLevelTypes.topBlur: // Events are not possible without cancelling IME.
  return true;default:return false;}} /**
   * Google Input Tools provides composition data via a CustomEvent,
   * with the `data` property populated in the `detail` object. If this
   * is available on the event object, use it. If not, this is a plain
   * composition event and we have nothing special to extract.
   *
   * @param {object} nativeEvent
   * @return {?string}
   */function getDataFromCustomEvent(nativeEvent){var detail=nativeEvent.detail;if(typeof detail === 'object' && 'data' in detail){return detail.data;}return null;} // Track the current IME composition fallback object, if any.
  var currentComposition=null; /**
   * @param {string} topLevelType Record from `EventConstants`.
   * @param {DOMEventTarget} topLevelTarget The listening component root node.
   * @param {string} topLevelTargetID ID of `topLevelTarget`.
   * @param {object} nativeEvent Native browser event.
   * @return {?object} A SyntheticCompositionEvent.
   */function extractCompositionEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var eventType;var fallbackData;if(canUseCompositionEvent){eventType = getCompositionEventType(topLevelType);}else if(!currentComposition){if(isFallbackCompositionStart(topLevelType,nativeEvent)){eventType = eventTypes.compositionStart;}}else if(isFallbackCompositionEnd(topLevelType,nativeEvent)){eventType = eventTypes.compositionEnd;}if(!eventType){return null;}if(useFallbackCompositionData){ // The current composition is stored statically and must not be
  // overwritten while composition continues.
  if(!currentComposition && eventType === eventTypes.compositionStart){currentComposition = FallbackCompositionState.getPooled(topLevelTarget);}else if(eventType === eventTypes.compositionEnd){if(currentComposition){fallbackData = currentComposition.getData();}}}var event=SyntheticCompositionEvent.getPooled(eventType,topLevelTargetID,nativeEvent);if(fallbackData){ // Inject data generated from fallback path into the synthetic event.
  // This matches the property of native CompositionEventInterface.
  event.data = fallbackData;}else {var customData=getDataFromCustomEvent(nativeEvent);if(customData !== null){event.data = customData;}}EventPropagators.accumulateTwoPhaseDispatches(event);return event;} /**
   * @param {string} topLevelType Record from `EventConstants`.
   * @param {object} nativeEvent Native browser event.
   * @return {?string} The string corresponding to this `beforeInput` event.
   */function getNativeBeforeInputChars(topLevelType,nativeEvent){switch(topLevelType){case topLevelTypes.topCompositionEnd:return getDataFromCustomEvent(nativeEvent);case topLevelTypes.topKeyPress: /**
         * If native `textInput` events are available, our goal is to make
         * use of them. However, there is a special case: the spacebar key.
         * In Webkit, preventing default on a spacebar `textInput` event
         * cancels character insertion, but it *also* causes the browser
         * to fall back to its default spacebar behavior of scrolling the
         * page.
         *
         * Tracking at:
         * https://code.google.com/p/chromium/issues/detail?id=355103
         *
         * To avoid this issue, use the keypress event as if no `textInput`
         * event is available.
         */var which=nativeEvent.which;if(which !== SPACEBAR_CODE){return null;}hasSpaceKeypress = true;return SPACEBAR_CHAR;case topLevelTypes.topTextInput: // Record the characters to be added to the DOM.
  var chars=nativeEvent.data; // If it's a spacebar character, assume that we have already handled
  // it at the keypress level and bail immediately. Android Chrome
  // doesn't give us keycodes, so we need to blacklist it.
  if(chars === SPACEBAR_CHAR && hasSpaceKeypress){return null;}return chars;default: // For other native event types, do nothing.
  return null;}} /**
   * For browsers that do not provide the `textInput` event, extract the
   * appropriate string to use for SyntheticInputEvent.
   *
   * @param {string} topLevelType Record from `EventConstants`.
   * @param {object} nativeEvent Native browser event.
   * @return {?string} The fallback string for this `beforeInput` event.
   */function getFallbackBeforeInputChars(topLevelType,nativeEvent){ // If we are currently composing (IME) and using a fallback to do so,
  // try to extract the composed characters from the fallback object.
  if(currentComposition){if(topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType,nativeEvent)){var chars=currentComposition.getData();FallbackCompositionState.release(currentComposition);currentComposition = null;return chars;}return null;}switch(topLevelType){case topLevelTypes.topPaste: // If a paste event occurs after a keypress, throw out the input
  // chars. Paste events should not lead to BeforeInput events.
  return null;case topLevelTypes.topKeyPress: /**
         * As of v27, Firefox may fire keypress events even when no character
         * will be inserted. A few possibilities:
         *
         * - `which` is `0`. Arrow keys, Esc key, etc.
         *
         * - `which` is the pressed key code, but no char is available.
         *   Ex: 'AltGr + d` in Polish. There is no modified character for
         *   this key combination and no character is inserted into the
         *   document, but FF fires the keypress for char code `100` anyway.
         *   No `input` event will occur.
         *
         * - `which` is the pressed key code, but a command combination is
         *   being used. Ex: `Cmd+C`. No character is inserted, and no
         *   `input` event will occur.
         */if(nativeEvent.which && !isKeypressCommand(nativeEvent)){return String.fromCharCode(nativeEvent.which);}return null;case topLevelTypes.topCompositionEnd:return useFallbackCompositionData?null:nativeEvent.data;default:return null;}} /**
   * Extract a SyntheticInputEvent for `beforeInput`, based on either native
   * `textInput` or fallback behavior.
   *
   * @param {string} topLevelType Record from `EventConstants`.
   * @param {DOMEventTarget} topLevelTarget The listening component root node.
   * @param {string} topLevelTargetID ID of `topLevelTarget`.
   * @param {object} nativeEvent Native browser event.
   * @return {?object} A SyntheticInputEvent.
   */function extractBeforeInputEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var chars;if(canUseTextInputEvent){chars = getNativeBeforeInputChars(topLevelType,nativeEvent);}else {chars = getFallbackBeforeInputChars(topLevelType,nativeEvent);} // If no characters are being inserted, no BeforeInput event should
  // be fired.
  if(!chars){return null;}var event=SyntheticInputEvent.getPooled(eventTypes.beforeInput,topLevelTargetID,nativeEvent);event.data = chars;EventPropagators.accumulateTwoPhaseDispatches(event);return event;} /**
   * Create an `onBeforeInput` event to match
   * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
   *
   * This event plugin is based on the native `textInput` event
   * available in Chrome, Safari, Opera, and IE. This event fires after
   * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
   *
   * `beforeInput` is spec'd but not implemented in any browsers, and
   * the `input` event does not provide any useful information about what has
   * actually been added, contrary to the spec. Thus, `textInput` is the best
   * available event to identify the characters that have actually been inserted
   * into the target node.
   *
   * This plugin is also responsible for emitting `composition` events, thus
   * allowing us to share composition fallback code for both `beforeInput` and
   * `composition` event types.
   */var BeforeInputEventPlugin={eventTypes:eventTypes, /**
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @see {EventPluginHub.extractEvents}
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){return [extractCompositionEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent),extractBeforeInputEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent)];}};module.exports = BeforeInputEventPlugin;},{"./EventConstants":64,"./EventPropagators":69,"./ExecutionEnvironment":70,"./FallbackCompositionState":71,"./SyntheticCompositionEvent":143,"./SyntheticInputEvent":147,"./keyOf":191}],53:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule CSSProperty
   */'use strict'; /**
   * CSS properties which accept numbers but are not in units of "px".
   */var isUnitlessNumber={boxFlex:true,boxFlexGroup:true,columnCount:true,flex:true,flexGrow:true,flexPositive:true,flexShrink:true,flexNegative:true,fontWeight:true,lineClamp:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true, // SVG-related properties
  fillOpacity:true,strokeDashoffset:true,strokeOpacity:true,strokeWidth:true}; /**
   * @param {string} prefix vendor-specific prefix, eg: Webkit
   * @param {string} key style name, eg: transitionDuration
   * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
   * WebkitTransitionDuration
   */function prefixKey(prefix,key){return prefix + key.charAt(0).toUpperCase() + key.substring(1);} /**
   * Support style names that may come passed in prefixed by adding permutations
   * of vendor prefixes.
   */var prefixes=['Webkit','ms','Moz','O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
  // infinite loop, because it iterates over the newly added props too.
  Object.keys(isUnitlessNumber).forEach(function(prop){prefixes.forEach(function(prefix){isUnitlessNumber[prefixKey(prefix,prop)] = isUnitlessNumber[prop];});}); /**
   * Most style properties can be unset by doing .style[prop] = '' but IE8
   * doesn't like doing that with shorthand properties so for the properties that
   * IE8 breaks on, which are listed here, we instead unset each of the
   * individual properties. See http://bugs.jquery.com/ticket/12385.
   * The 4-value 'clock' properties like margin, padding, border-width seem to
   * behave without any problems. Curiously, list-style works too without any
   * special prodding.
   */var shorthandPropertyExpansions={background:{backgroundImage:true,backgroundPosition:true,backgroundRepeat:true,backgroundColor:true},border:{borderWidth:true,borderStyle:true,borderColor:true},borderBottom:{borderBottomWidth:true,borderBottomStyle:true,borderBottomColor:true},borderLeft:{borderLeftWidth:true,borderLeftStyle:true,borderLeftColor:true},borderRight:{borderRightWidth:true,borderRightStyle:true,borderRightColor:true},borderTop:{borderTopWidth:true,borderTopStyle:true,borderTopColor:true},font:{fontStyle:true,fontVariant:true,fontWeight:true,fontSize:true,lineHeight:true,fontFamily:true}};var CSSProperty={isUnitlessNumber:isUnitlessNumber,shorthandPropertyExpansions:shorthandPropertyExpansions};module.exports = CSSProperty;},{}],54:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule CSSPropertyOperations
   * @typechecks static-only
   */'use strict';var CSSProperty=require("./CSSProperty");var ExecutionEnvironment=require("./ExecutionEnvironment");var camelizeStyleName=require("./camelizeStyleName");var dangerousStyleValue=require("./dangerousStyleValue");var hyphenateStyleName=require("./hyphenateStyleName");var memoizeStringOnly=require("./memoizeStringOnly");var warning=require("./warning");var processStyleName=memoizeStringOnly(function(styleName){return hyphenateStyleName(styleName);});var styleFloatAccessor='cssFloat';if(ExecutionEnvironment.canUseDOM){ // IE8 only supports accessing cssFloat (standard) as styleFloat
  if(document.documentElement.style.cssFloat === undefined){styleFloatAccessor = 'styleFloat';}}if("production" !== process.env.NODE_ENV){ // 'msTransform' is correct, but the other prefixes should be capitalized
  var badVendoredStyleNamePattern=/^(?:webkit|moz|o)[A-Z]/; // style values shouldn't contain a semicolon
  var badStyleValueWithSemicolonPattern=/;\s*$/;var warnedStyleNames={};var warnedStyleValues={};var warnHyphenatedStyleName=function warnHyphenatedStyleName(name){if(warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]){return;}warnedStyleNames[name] = true;"production" !== process.env.NODE_ENV?warning(false,'Unsupported style property %s. Did you mean %s?',name,camelizeStyleName(name)):null;};var warnBadVendoredStyleName=function warnBadVendoredStyleName(name){if(warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]){return;}warnedStyleNames[name] = true;"production" !== process.env.NODE_ENV?warning(false,'Unsupported vendor-prefixed style property %s. Did you mean %s?',name,name.charAt(0).toUpperCase() + name.slice(1)):null;};var warnStyleValueWithSemicolon=function warnStyleValueWithSemicolon(name,value){if(warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]){return;}warnedStyleValues[value] = true;"production" !== process.env.NODE_ENV?warning(false,'Style property values shouldn\'t contain a semicolon. ' + 'Try "%s: %s" instead.',name,value.replace(badStyleValueWithSemicolonPattern,'')):null;}; /**
     * @param {string} name
     * @param {*} value
     */var warnValidStyle=function warnValidStyle(name,value){if(name.indexOf('-') > -1){warnHyphenatedStyleName(name);}else if(badVendoredStyleNamePattern.test(name)){warnBadVendoredStyleName(name);}else if(badStyleValueWithSemicolonPattern.test(value)){warnStyleValueWithSemicolon(name,value);}};} /**
   * Operations for dealing with CSS properties.
   */var CSSPropertyOperations={ /**
     * Serializes a mapping of style properties for use as inline styles:
     *
     *   > createMarkupForStyles({width: '200px', height: 0})
     *   "width:200px;height:0;"
     *
     * Undefined values are ignored so that declarative programming is easier.
     * The result should be HTML-escaped before insertion into the DOM.
     *
     * @param {object} styles
     * @return {?string}
     */createMarkupForStyles:function createMarkupForStyles(styles){var serialized='';for(var styleName in styles) {if(!styles.hasOwnProperty(styleName)){continue;}var styleValue=styles[styleName];if("production" !== process.env.NODE_ENV){warnValidStyle(styleName,styleValue);}if(styleValue != null){serialized += processStyleName(styleName) + ':';serialized += dangerousStyleValue(styleName,styleValue) + ';';}}return serialized || null;}, /**
     * Sets the value for multiple styles on a node.  If a value is specified as
     * '' (empty string), the corresponding style property will be unset.
     *
     * @param {DOMElement} node
     * @param {object} styles
     */setValueForStyles:function setValueForStyles(node,styles){var style=node.style;for(var styleName in styles) {if(!styles.hasOwnProperty(styleName)){continue;}if("production" !== process.env.NODE_ENV){warnValidStyle(styleName,styles[styleName]);}var styleValue=dangerousStyleValue(styleName,styles[styleName]);if(styleName === 'float'){styleName = styleFloatAccessor;}if(styleValue){style[styleName] = styleValue;}else {var expansion=CSSProperty.shorthandPropertyExpansions[styleName];if(expansion){ // Shorthand property that IE8 won't like unsetting, so unset each
  // component to placate it
  for(var individualStyleName in expansion) {style[individualStyleName] = '';}}else {style[styleName] = '';}}}}};module.exports = CSSPropertyOperations;}).call(this,require('_process'));},{"./CSSProperty":53,"./ExecutionEnvironment":70,"./camelizeStyleName":158,"./dangerousStyleValue":163,"./hyphenateStyleName":183,"./memoizeStringOnly":193,"./warning":204,"_process":12}],55:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule CallbackQueue
   */'use strict';var PooledClass=require("./PooledClass");var assign=require("./Object.assign");var invariant=require("./invariant"); /**
   * A specialized pseudo-event module to help keep track of components waiting to
   * be notified when their DOM representations are available for use.
   *
   * This implements `PooledClass`, so you should never need to instantiate this.
   * Instead, use `CallbackQueue.getPooled()`.
   *
   * @class ReactMountReady
   * @implements PooledClass
   * @internal
   */function CallbackQueue(){this._callbacks = null;this._contexts = null;}assign(CallbackQueue.prototype,{ /**
     * Enqueues a callback to be invoked when `notifyAll` is invoked.
     *
     * @param {function} callback Invoked when `notifyAll` is invoked.
     * @param {?object} context Context to call `callback` with.
     * @internal
     */enqueue:function enqueue(callback,context){this._callbacks = this._callbacks || [];this._contexts = this._contexts || [];this._callbacks.push(callback);this._contexts.push(context);}, /**
     * Invokes all enqueued callbacks and clears the queue. This is invoked after
     * the DOM representation of a component has been created or updated.
     *
     * @internal
     */notifyAll:function notifyAll(){var callbacks=this._callbacks;var contexts=this._contexts;if(callbacks){"production" !== process.env.NODE_ENV?invariant(callbacks.length === contexts.length,'Mismatched list of contexts in callback queue'):invariant(callbacks.length === contexts.length);this._callbacks = null;this._contexts = null;for(var i=0,l=callbacks.length;i < l;i++) {callbacks[i].call(contexts[i]);}callbacks.length = 0;contexts.length = 0;}}, /**
     * Resets the internal queue.
     *
     * @internal
     */reset:function reset(){this._callbacks = null;this._contexts = null;}, /**
     * `PooledClass` looks for this.
     */destructor:function destructor(){this.reset();}});PooledClass.addPoolingTo(CallbackQueue);module.exports = CallbackQueue;}).call(this,require('_process'));},{"./Object.assign":76,"./PooledClass":77,"./invariant":185,"_process":12}],56:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ChangeEventPlugin
   */'use strict';var EventConstants=require("./EventConstants");var EventPluginHub=require("./EventPluginHub");var EventPropagators=require("./EventPropagators");var ExecutionEnvironment=require("./ExecutionEnvironment");var ReactUpdates=require("./ReactUpdates");var SyntheticEvent=require("./SyntheticEvent");var isEventSupported=require("./isEventSupported");var isTextInputElement=require("./isTextInputElement");var keyOf=require("./keyOf");var topLevelTypes=EventConstants.topLevelTypes;var eventTypes={change:{phasedRegistrationNames:{bubbled:keyOf({onChange:null}),captured:keyOf({onChangeCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topChange,topLevelTypes.topClick,topLevelTypes.topFocus,topLevelTypes.topInput,topLevelTypes.topKeyDown,topLevelTypes.topKeyUp,topLevelTypes.topSelectionChange]}}; /**
   * For IE shims
   */var activeElement=null;var activeElementID=null;var activeElementValue=null;var activeElementValueProp=null; /**
   * SECTION: handle `change` event
   */function shouldUseChangeEvent(elem){return elem.nodeName === 'SELECT' || elem.nodeName === 'INPUT' && elem.type === 'file';}var doesChangeEventBubble=false;if(ExecutionEnvironment.canUseDOM){ // See `handleChange` comment below
  doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);}function manualDispatchChangeEvent(nativeEvent){var event=SyntheticEvent.getPooled(eventTypes.change,activeElementID,nativeEvent);EventPropagators.accumulateTwoPhaseDispatches(event); // If change and propertychange bubbled, we'd just bind to it like all the
  // other events and have it go through ReactBrowserEventEmitter. Since it
  // doesn't, we manually listen for the events and so we have to enqueue and
  // process the abstract event manually.
  //
  // Batching is necessary here in order to ensure that all event handlers run
  // before the next rerender (including event handlers attached to ancestor
  // elements instead of directly on the input). Without this, controlled
  // components don't work properly in conjunction with event bubbling because
  // the component is rerendered and the value reverted before all the event
  // handlers can run. See https://github.com/facebook/react/issues/708.
  ReactUpdates.batchedUpdates(runEventInBatch,event);}function runEventInBatch(event){EventPluginHub.enqueueEvents(event);EventPluginHub.processEventQueue();}function startWatchingForChangeEventIE8(target,targetID){activeElement = target;activeElementID = targetID;activeElement.attachEvent('onchange',manualDispatchChangeEvent);}function stopWatchingForChangeEventIE8(){if(!activeElement){return;}activeElement.detachEvent('onchange',manualDispatchChangeEvent);activeElement = null;activeElementID = null;}function getTargetIDForChangeEvent(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType === topLevelTypes.topChange){return topLevelTargetID;}}function handleEventsForChangeEventIE8(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType === topLevelTypes.topFocus){ // stopWatching() should be a noop here but we call it just in case we
  // missed a blur event somehow.
  stopWatchingForChangeEventIE8();startWatchingForChangeEventIE8(topLevelTarget,topLevelTargetID);}else if(topLevelType === topLevelTypes.topBlur){stopWatchingForChangeEventIE8();}} /**
   * SECTION: handle `input` event
   */var isInputEventSupported=false;if(ExecutionEnvironment.canUseDOM){ // IE9 claims to support the input event but fails to trigger it when
  // deleting text, so we ignore its input events
  isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);} /**
   * (For old IE.) Replacement getter/setter for the `value` property that gets
   * set on the active element.
   */var newValueProp={get:function get(){return activeElementValueProp.get.call(this);},set:function set(val){ // Cast to a string so we can do equality checks.
  activeElementValue = '' + val;activeElementValueProp.set.call(this,val);}}; /**
   * (For old IE.) Starts tracking propertychange events on the passed-in element
   * and override the value property so that we can distinguish user events from
   * value changes in JS.
   */function startWatchingForValueChange(target,targetID){activeElement = target;activeElementID = targetID;activeElementValue = target.value;activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype,'value');Object.defineProperty(activeElement,'value',newValueProp);activeElement.attachEvent('onpropertychange',handlePropertyChange);} /**
   * (For old IE.) Removes the event listeners from the currently-tracked element,
   * if any exists.
   */function stopWatchingForValueChange(){if(!activeElement){return;} // delete restores the original property definition
  delete activeElement.value;activeElement.detachEvent('onpropertychange',handlePropertyChange);activeElement = null;activeElementID = null;activeElementValue = null;activeElementValueProp = null;} /**
   * (For old IE.) Handles a propertychange event, sending a `change` event if
   * the value of the active element has changed.
   */function handlePropertyChange(nativeEvent){if(nativeEvent.propertyName !== 'value'){return;}var value=nativeEvent.srcElement.value;if(value === activeElementValue){return;}activeElementValue = value;manualDispatchChangeEvent(nativeEvent);} /**
   * If a `change` event should be fired, returns the target's ID.
   */function getTargetIDForInputEvent(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType === topLevelTypes.topInput){ // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
  // what we want so fall through here and trigger an abstract event
  return topLevelTargetID;}} // For IE8 and IE9.
  function handleEventsForInputEventIE(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType === topLevelTypes.topFocus){ // In IE8, we can capture almost all .value changes by adding a
  // propertychange handler and looking for events with propertyName
  // equal to 'value'
  // In IE9, propertychange fires for most input events but is buggy and
  // doesn't fire when text is deleted, but conveniently, selectionchange
  // appears to fire in all of the remaining cases so we catch those and
  // forward the event if the value has changed
  // In either case, we don't want to call the event handler if the value
  // is changed from JS so we redefine a setter for `.value` that updates
  // our activeElementValue variable, allowing us to ignore those changes
  //
  // stopWatching() should be a noop here but we call it just in case we
  // missed a blur event somehow.
  stopWatchingForValueChange();startWatchingForValueChange(topLevelTarget,topLevelTargetID);}else if(topLevelType === topLevelTypes.topBlur){stopWatchingForValueChange();}} // For IE8 and IE9.
  function getTargetIDForInputEventIE(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown){ // On the selectionchange event, the target is just document which isn't
  // helpful for us so just check activeElement instead.
  //
  // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
  // propertychange on the first input event after setting `value` from a
  // script and fires only keydown, keypress, keyup. Catching keyup usually
  // gets it and catching keydown lets us fire an event for the first
  // keystroke if user does a key repeat (it'll be a little delayed: right
  // before the second keystroke). Other input methods (e.g., paste) seem to
  // fire selectionchange normally.
  if(activeElement && activeElement.value !== activeElementValue){activeElementValue = activeElement.value;return activeElementID;}}} /**
   * SECTION: handle `click` event
   */function shouldUseClickEvent(elem){ // Use the `click` event to detect changes to checkbox and radio inputs.
  // This approach works across all browsers, whereas `change` does not fire
  // until `blur` in IE8.
  return elem.nodeName === 'INPUT' && (elem.type === 'checkbox' || elem.type === 'radio');}function getTargetIDForClickEvent(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType === topLevelTypes.topClick){return topLevelTargetID;}} /**
   * This plugin creates an `onChange` event that normalizes change events
   * across form elements. This event fires at a time when it's possible to
   * change the element's value without seeing a flicker.
   *
   * Supported elements are:
   * - input (see `isTextInputElement`)
   * - textarea
   * - select
   */var ChangeEventPlugin={eventTypes:eventTypes, /**
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @see {EventPluginHub.extractEvents}
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var getTargetIDFunc,handleEventFunc;if(shouldUseChangeEvent(topLevelTarget)){if(doesChangeEventBubble){getTargetIDFunc = getTargetIDForChangeEvent;}else {handleEventFunc = handleEventsForChangeEventIE8;}}else if(isTextInputElement(topLevelTarget)){if(isInputEventSupported){getTargetIDFunc = getTargetIDForInputEvent;}else {getTargetIDFunc = getTargetIDForInputEventIE;handleEventFunc = handleEventsForInputEventIE;}}else if(shouldUseClickEvent(topLevelTarget)){getTargetIDFunc = getTargetIDForClickEvent;}if(getTargetIDFunc){var targetID=getTargetIDFunc(topLevelType,topLevelTarget,topLevelTargetID);if(targetID){var event=SyntheticEvent.getPooled(eventTypes.change,targetID,nativeEvent);EventPropagators.accumulateTwoPhaseDispatches(event);return event;}}if(handleEventFunc){handleEventFunc(topLevelType,topLevelTarget,topLevelTargetID);}}};module.exports = ChangeEventPlugin;},{"./EventConstants":64,"./EventPluginHub":66,"./EventPropagators":69,"./ExecutionEnvironment":70,"./ReactUpdates":137,"./SyntheticEvent":145,"./isEventSupported":186,"./isTextInputElement":188,"./keyOf":191}],57:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ClientReactRootIndex
   * @typechecks
   */'use strict';var nextReactRootIndex=0;var ClientReactRootIndex={createReactRootIndex:function createReactRootIndex(){return nextReactRootIndex++;}};module.exports = ClientReactRootIndex;},{}],58:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule DOMChildrenOperations
   * @typechecks static-only
   */'use strict';var Danger=require("./Danger");var ReactMultiChildUpdateTypes=require("./ReactMultiChildUpdateTypes");var setTextContent=require("./setTextContent");var invariant=require("./invariant"); /**
   * Inserts `childNode` as a child of `parentNode` at the `index`.
   *
   * @param {DOMElement} parentNode Parent node in which to insert.
   * @param {DOMElement} childNode Child node to insert.
   * @param {number} index Index at which to insert the child.
   * @internal
   */function insertChildAt(parentNode,childNode,index){ // By exploiting arrays returning `undefined` for an undefined index, we can
  // rely exclusively on `insertBefore(node, null)` instead of also using
  // `appendChild(node)`. However, using `undefined` is not allowed by all
  // browsers so we must replace it with `null`.
  parentNode.insertBefore(childNode,parentNode.childNodes[index] || null);} /**
   * Operations for updating with DOM children.
   */var DOMChildrenOperations={dangerouslyReplaceNodeWithMarkup:Danger.dangerouslyReplaceNodeWithMarkup,updateTextContent:setTextContent, /**
     * Updates a component's children by processing a series of updates. The
     * update configurations are each expected to have a `parentNode` property.
     *
     * @param {array<object>} updates List of update configurations.
     * @param {array<string>} markupList List of markup strings.
     * @internal
     */processUpdates:function processUpdates(updates,markupList){var update; // Mapping from parent IDs to initial child orderings.
  var initialChildren=null; // List of children that will be moved or removed.
  var updatedChildren=null;for(var i=0;i < updates.length;i++) {update = updates[i];if(update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE){var updatedIndex=update.fromIndex;var updatedChild=update.parentNode.childNodes[updatedIndex];var parentID=update.parentID;"production" !== process.env.NODE_ENV?invariant(updatedChild,'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.',updatedIndex,parentID):invariant(updatedChild);initialChildren = initialChildren || {};initialChildren[parentID] = initialChildren[parentID] || [];initialChildren[parentID][updatedIndex] = updatedChild;updatedChildren = updatedChildren || [];updatedChildren.push(updatedChild);}}var renderedMarkup=Danger.dangerouslyRenderMarkup(markupList); // Remove updated children first so that `toIndex` is consistent.
  if(updatedChildren){for(var j=0;j < updatedChildren.length;j++) {updatedChildren[j].parentNode.removeChild(updatedChildren[j]);}}for(var k=0;k < updates.length;k++) {update = updates[k];switch(update.type){case ReactMultiChildUpdateTypes.INSERT_MARKUP:insertChildAt(update.parentNode,renderedMarkup[update.markupIndex],update.toIndex);break;case ReactMultiChildUpdateTypes.MOVE_EXISTING:insertChildAt(update.parentNode,initialChildren[update.parentID][update.fromIndex],update.toIndex);break;case ReactMultiChildUpdateTypes.TEXT_CONTENT:setTextContent(update.parentNode,update.textContent);break;case ReactMultiChildUpdateTypes.REMOVE_NODE: // Already removed by the for-loop above.
  break;}}}};module.exports = DOMChildrenOperations;}).call(this,require('_process'));},{"./Danger":61,"./ReactMultiChildUpdateTypes":122,"./invariant":185,"./setTextContent":199,"_process":12}],59:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule DOMProperty
   * @typechecks static-only
   */ /*jslint bitwise: true */'use strict';var invariant=require("./invariant");function checkMask(value,bitmask){return (value & bitmask) === bitmask;}var DOMPropertyInjection={ /**
     * Mapping from normalized, camelcased property names to a configuration that
     * specifies how the associated DOM property should be accessed or rendered.
     */MUST_USE_ATTRIBUTE:0x1,MUST_USE_PROPERTY:0x2,HAS_SIDE_EFFECTS:0x4,HAS_BOOLEAN_VALUE:0x8,HAS_NUMERIC_VALUE:0x10,HAS_POSITIVE_NUMERIC_VALUE:0x20 | 0x10,HAS_OVERLOADED_BOOLEAN_VALUE:0x40, /**
     * Inject some specialized knowledge about the DOM. This takes a config object
     * with the following properties:
     *
     * isCustomAttribute: function that given an attribute name will return true
     * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
     * attributes where it's impossible to enumerate all of the possible
     * attribute names,
     *
     * Properties: object mapping DOM property name to one of the
     * DOMPropertyInjection constants or null. If your attribute isn't in here,
     * it won't get written to the DOM.
     *
     * DOMAttributeNames: object mapping React attribute name to the DOM
     * attribute name. Attribute names not specified use the **lowercase**
     * normalized name.
     *
     * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
     * Property names not specified use the normalized name.
     *
     * DOMMutationMethods: Properties that require special mutation methods. If
     * `value` is undefined, the mutation method should unset the property.
     *
     * @param {object} domPropertyConfig the config as described above.
     */injectDOMPropertyConfig:function injectDOMPropertyConfig(domPropertyConfig){var Properties=domPropertyConfig.Properties || {};var DOMAttributeNames=domPropertyConfig.DOMAttributeNames || {};var DOMPropertyNames=domPropertyConfig.DOMPropertyNames || {};var DOMMutationMethods=domPropertyConfig.DOMMutationMethods || {};if(domPropertyConfig.isCustomAttribute){DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);}for(var propName in Properties) {"production" !== process.env.NODE_ENV?invariant(!DOMProperty.isStandardName.hasOwnProperty(propName),'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.',propName):invariant(!DOMProperty.isStandardName.hasOwnProperty(propName));DOMProperty.isStandardName[propName] = true;var lowerCased=propName.toLowerCase();DOMProperty.getPossibleStandardName[lowerCased] = propName;if(DOMAttributeNames.hasOwnProperty(propName)){var attributeName=DOMAttributeNames[propName];DOMProperty.getPossibleStandardName[attributeName] = propName;DOMProperty.getAttributeName[propName] = attributeName;}else {DOMProperty.getAttributeName[propName] = lowerCased;}DOMProperty.getPropertyName[propName] = DOMPropertyNames.hasOwnProperty(propName)?DOMPropertyNames[propName]:propName;if(DOMMutationMethods.hasOwnProperty(propName)){DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName];}else {DOMProperty.getMutationMethod[propName] = null;}var propConfig=Properties[propName];DOMProperty.mustUseAttribute[propName] = checkMask(propConfig,DOMPropertyInjection.MUST_USE_ATTRIBUTE);DOMProperty.mustUseProperty[propName] = checkMask(propConfig,DOMPropertyInjection.MUST_USE_PROPERTY);DOMProperty.hasSideEffects[propName] = checkMask(propConfig,DOMPropertyInjection.HAS_SIDE_EFFECTS);DOMProperty.hasBooleanValue[propName] = checkMask(propConfig,DOMPropertyInjection.HAS_BOOLEAN_VALUE);DOMProperty.hasNumericValue[propName] = checkMask(propConfig,DOMPropertyInjection.HAS_NUMERIC_VALUE);DOMProperty.hasPositiveNumericValue[propName] = checkMask(propConfig,DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);DOMProperty.hasOverloadedBooleanValue[propName] = checkMask(propConfig,DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);"production" !== process.env.NODE_ENV?invariant(!DOMProperty.mustUseAttribute[propName] || !DOMProperty.mustUseProperty[propName],'DOMProperty: Cannot require using both attribute and property: %s',propName):invariant(!DOMProperty.mustUseAttribute[propName] || !DOMProperty.mustUseProperty[propName]);"production" !== process.env.NODE_ENV?invariant(DOMProperty.mustUseProperty[propName] || !DOMProperty.hasSideEffects[propName],'DOMProperty: Properties that have side effects must use property: %s',propName):invariant(DOMProperty.mustUseProperty[propName] || !DOMProperty.hasSideEffects[propName]);"production" !== process.env.NODE_ENV?invariant(!!DOMProperty.hasBooleanValue[propName] + !!DOMProperty.hasNumericValue[propName] + !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1,'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s',propName):invariant(!!DOMProperty.hasBooleanValue[propName] + !!DOMProperty.hasNumericValue[propName] + !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1);}}};var defaultValueCache={}; /**
   * DOMProperty exports lookup objects that can be used like functions:
   *
   *   > DOMProperty.isValid['id']
   *   true
   *   > DOMProperty.isValid['foobar']
   *   undefined
   *
   * Although this may be confusing, it performs better in general.
   *
   * @see http://jsperf.com/key-exists
   * @see http://jsperf.com/key-missing
   */var DOMProperty={ID_ATTRIBUTE_NAME:'data-reactid', /**
     * Checks whether a property name is a standard property.
     * @type {Object}
     */isStandardName:{}, /**
     * Mapping from lowercase property names to the properly cased version, used
     * to warn in the case of missing properties.
     * @type {Object}
     */getPossibleStandardName:{}, /**
     * Mapping from normalized names to attribute names that differ. Attribute
     * names are used when rendering markup or with `*Attribute()`.
     * @type {Object}
     */getAttributeName:{}, /**
     * Mapping from normalized names to properties on DOM node instances.
     * (This includes properties that mutate due to external factors.)
     * @type {Object}
     */getPropertyName:{}, /**
     * Mapping from normalized names to mutation methods. This will only exist if
     * mutation cannot be set simply by the property or `setAttribute()`.
     * @type {Object}
     */getMutationMethod:{}, /**
     * Whether the property must be accessed and mutated as an object property.
     * @type {Object}
     */mustUseAttribute:{}, /**
     * Whether the property must be accessed and mutated using `*Attribute()`.
     * (This includes anything that fails `<propName> in <element>`.)
     * @type {Object}
     */mustUseProperty:{}, /**
     * Whether or not setting a value causes side effects such as triggering
     * resources to be loaded or text selection changes. We must ensure that
     * the value is only set if it has changed.
     * @type {Object}
     */hasSideEffects:{}, /**
     * Whether the property should be removed when set to a falsey value.
     * @type {Object}
     */hasBooleanValue:{}, /**
     * Whether the property must be numeric or parse as a
     * numeric and should be removed when set to a falsey value.
     * @type {Object}
     */hasNumericValue:{}, /**
     * Whether the property must be positive numeric or parse as a positive
     * numeric and should be removed when set to a falsey value.
     * @type {Object}
     */hasPositiveNumericValue:{}, /**
     * Whether the property can be used as a flag as well as with a value. Removed
     * when strictly equal to false; present without a value when strictly equal
     * to true; present with a value otherwise.
     * @type {Object}
     */hasOverloadedBooleanValue:{}, /**
     * All of the isCustomAttribute() functions that have been injected.
     */_isCustomAttributeFunctions:[], /**
     * Checks whether a property name is a custom attribute.
     * @method
     */isCustomAttribute:function isCustomAttribute(attributeName){for(var i=0;i < DOMProperty._isCustomAttributeFunctions.length;i++) {var isCustomAttributeFn=DOMProperty._isCustomAttributeFunctions[i];if(isCustomAttributeFn(attributeName)){return true;}}return false;}, /**
     * Returns the default property value for a DOM property (i.e., not an
     * attribute). Most default values are '' or false, but not all. Worse yet,
     * some (in particular, `type`) vary depending on the type of element.
     *
     * TODO: Is it better to grab all the possible properties when creating an
     * element to avoid having to create the same element twice?
     */getDefaultValueForProperty:function getDefaultValueForProperty(nodeName,prop){var nodeDefaults=defaultValueCache[nodeName];var testElement;if(!nodeDefaults){defaultValueCache[nodeName] = nodeDefaults = {};}if(!(prop in nodeDefaults)){testElement = document.createElement(nodeName);nodeDefaults[prop] = testElement[prop];}return nodeDefaults[prop];},injection:DOMPropertyInjection};module.exports = DOMProperty;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],60:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule DOMPropertyOperations
   * @typechecks static-only
   */'use strict';var DOMProperty=require("./DOMProperty");var quoteAttributeValueForBrowser=require("./quoteAttributeValueForBrowser");var warning=require("./warning");function shouldIgnoreValue(name,value){return value == null || DOMProperty.hasBooleanValue[name] && !value || DOMProperty.hasNumericValue[name] && isNaN(value) || DOMProperty.hasPositiveNumericValue[name] && value < 1 || DOMProperty.hasOverloadedBooleanValue[name] && value === false;}if("production" !== process.env.NODE_ENV){var reactProps={children:true,dangerouslySetInnerHTML:true,key:true,ref:true};var warnedProperties={};var warnUnknownProperty=function warnUnknownProperty(name){if(reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]){return;}warnedProperties[name] = true;var lowerCasedName=name.toLowerCase(); // data-* attributes should be lowercase; suggest the lowercase version
  var standardName=DOMProperty.isCustomAttribute(lowerCasedName)?lowerCasedName:DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName)?DOMProperty.getPossibleStandardName[lowerCasedName]:null; // For now, only warn when we have a suggested correction. This prevents
  // logging too much when using transferPropsTo.
  "production" !== process.env.NODE_ENV?warning(standardName == null,'Unknown DOM property %s. Did you mean %s?',name,standardName):null;};} /**
   * Operations for dealing with DOM properties.
   */var DOMPropertyOperations={ /**
     * Creates markup for the ID property.
     *
     * @param {string} id Unescaped ID.
     * @return {string} Markup string.
     */createMarkupForID:function createMarkupForID(id){return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);}, /**
     * Creates markup for a property.
     *
     * @param {string} name
     * @param {*} value
     * @return {?string} Markup string, or null if the property was invalid.
     */createMarkupForProperty:function createMarkupForProperty(name,value){if(DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]){if(shouldIgnoreValue(name,value)){return '';}var attributeName=DOMProperty.getAttributeName[name];if(DOMProperty.hasBooleanValue[name] || DOMProperty.hasOverloadedBooleanValue[name] && value === true){return attributeName;}return attributeName + '=' + quoteAttributeValueForBrowser(value);}else if(DOMProperty.isCustomAttribute(name)){if(value == null){return '';}return name + '=' + quoteAttributeValueForBrowser(value);}else if("production" !== process.env.NODE_ENV){warnUnknownProperty(name);}return null;}, /**
     * Sets the value for a property on a node.
     *
     * @param {DOMElement} node
     * @param {string} name
     * @param {*} value
     */setValueForProperty:function setValueForProperty(node,name,value){if(DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]){var mutationMethod=DOMProperty.getMutationMethod[name];if(mutationMethod){mutationMethod(node,value);}else if(shouldIgnoreValue(name,value)){this.deleteValueForProperty(node,name);}else if(DOMProperty.mustUseAttribute[name]){ // `setAttribute` with objects becomes only `[object]` in IE8/9,
  // ('' + value) makes it output the correct toString()-value.
  node.setAttribute(DOMProperty.getAttributeName[name],'' + value);}else {var propName=DOMProperty.getPropertyName[name]; // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the
  // property type before comparing; only `value` does and is string.
  if(!DOMProperty.hasSideEffects[name] || '' + node[propName] !== '' + value){ // Contrary to `setAttribute`, object properties are properly
  // `toString`ed by IE8/9.
  node[propName] = value;}}}else if(DOMProperty.isCustomAttribute(name)){if(value == null){node.removeAttribute(name);}else {node.setAttribute(name,'' + value);}}else if("production" !== process.env.NODE_ENV){warnUnknownProperty(name);}}, /**
     * Deletes the value for a property on a node.
     *
     * @param {DOMElement} node
     * @param {string} name
     */deleteValueForProperty:function deleteValueForProperty(node,name){if(DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]){var mutationMethod=DOMProperty.getMutationMethod[name];if(mutationMethod){mutationMethod(node,undefined);}else if(DOMProperty.mustUseAttribute[name]){node.removeAttribute(DOMProperty.getAttributeName[name]);}else {var propName=DOMProperty.getPropertyName[name];var defaultValue=DOMProperty.getDefaultValueForProperty(node.nodeName,propName);if(!DOMProperty.hasSideEffects[name] || '' + node[propName] !== defaultValue){node[propName] = defaultValue;}}}else if(DOMProperty.isCustomAttribute(name)){node.removeAttribute(name);}else if("production" !== process.env.NODE_ENV){warnUnknownProperty(name);}}};module.exports = DOMPropertyOperations;}).call(this,require('_process'));},{"./DOMProperty":59,"./quoteAttributeValueForBrowser":197,"./warning":204,"_process":12}],61:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule Danger
   * @typechecks static-only
   */ /*jslint evil: true, sub: true */'use strict';var ExecutionEnvironment=require("./ExecutionEnvironment");var createNodesFromMarkup=require("./createNodesFromMarkup");var emptyFunction=require("./emptyFunction");var getMarkupWrap=require("./getMarkupWrap");var invariant=require("./invariant");var OPEN_TAG_NAME_EXP=/^(<[^ \/>]+)/;var RESULT_INDEX_ATTR='data-danger-index'; /**
   * Extracts the `nodeName` from a string of markup.
   *
   * NOTE: Extracting the `nodeName` does not require a regular expression match
   * because we make assumptions about React-generated markup (i.e. there are no
   * spaces surrounding the opening tag and there is at least one attribute).
   *
   * @param {string} markup String of markup.
   * @return {string} Node name of the supplied markup.
   * @see http://jsperf.com/extract-nodename
   */function getNodeName(markup){return markup.substring(1,markup.indexOf(' '));}var Danger={ /**
     * Renders markup into an array of nodes. The markup is expected to render
     * into a list of root nodes. Also, the length of `resultList` and
     * `markupList` should be the same.
     *
     * @param {array<string>} markupList List of markup strings to render.
     * @return {array<DOMElement>} List of rendered nodes.
     * @internal
     */dangerouslyRenderMarkup:function dangerouslyRenderMarkup(markupList){"production" !== process.env.NODE_ENV?invariant(ExecutionEnvironment.canUseDOM,'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'React.renderToString for server rendering.'):invariant(ExecutionEnvironment.canUseDOM);var nodeName;var markupByNodeName={}; // Group markup by `nodeName` if a wrap is necessary, else by '*'.
  for(var i=0;i < markupList.length;i++) {"production" !== process.env.NODE_ENV?invariant(markupList[i],'dangerouslyRenderMarkup(...): Missing markup.'):invariant(markupList[i]);nodeName = getNodeName(markupList[i]);nodeName = getMarkupWrap(nodeName)?nodeName:'*';markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];markupByNodeName[nodeName][i] = markupList[i];}var resultList=[];var resultListAssignmentCount=0;for(nodeName in markupByNodeName) {if(!markupByNodeName.hasOwnProperty(nodeName)){continue;}var markupListByNodeName=markupByNodeName[nodeName]; // This for-in loop skips the holes of the sparse array. The order of
  // iteration should follow the order of assignment, which happens to match
  // numerical index order, but we don't rely on that.
  var resultIndex;for(resultIndex in markupListByNodeName) {if(markupListByNodeName.hasOwnProperty(resultIndex)){var markup=markupListByNodeName[resultIndex]; // Push the requested markup with an additional RESULT_INDEX_ATTR
  // attribute.  If the markup does not start with a < character, it
  // will be discarded below (with an appropriate console.error).
  markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP, // This index will be parsed back out below.
  '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" ');}} // Render each group of markup with similar wrapping `nodeName`.
  var renderNodes=createNodesFromMarkup(markupListByNodeName.join(''),emptyFunction // Do nothing special with <script> tags.
  );for(var j=0;j < renderNodes.length;++j) {var renderNode=renderNodes[j];if(renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)){resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);renderNode.removeAttribute(RESULT_INDEX_ATTR);"production" !== process.env.NODE_ENV?invariant(!resultList.hasOwnProperty(resultIndex),'Danger: Assigning to an already-occupied result index.'):invariant(!resultList.hasOwnProperty(resultIndex));resultList[resultIndex] = renderNode; // This should match resultList.length and markupList.length when
  // we're done.
  resultListAssignmentCount += 1;}else if("production" !== process.env.NODE_ENV){console.error('Danger: Discarding unexpected node:',renderNode);}}} // Although resultList was populated out of order, it should now be a dense
  // array.
  "production" !== process.env.NODE_ENV?invariant(resultListAssignmentCount === resultList.length,'Danger: Did not assign to every index of resultList.'):invariant(resultListAssignmentCount === resultList.length);"production" !== process.env.NODE_ENV?invariant(resultList.length === markupList.length,'Danger: Expected markup to render %s nodes, but rendered %s.',markupList.length,resultList.length):invariant(resultList.length === markupList.length);return resultList;}, /**
     * Replaces a node with a string of markup at its current position within its
     * parent. The markup must render into a single root node.
     *
     * @param {DOMElement} oldChild Child node to replace.
     * @param {string} markup Markup to render in place of the child node.
     * @internal
     */dangerouslyReplaceNodeWithMarkup:function dangerouslyReplaceNodeWithMarkup(oldChild,markup){"production" !== process.env.NODE_ENV?invariant(ExecutionEnvironment.canUseDOM,'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'React.renderToString for server rendering.'):invariant(ExecutionEnvironment.canUseDOM);"production" !== process.env.NODE_ENV?invariant(markup,'dangerouslyReplaceNodeWithMarkup(...): Missing markup.'):invariant(markup);"production" !== process.env.NODE_ENV?invariant(oldChild.tagName.toLowerCase() !== 'html','dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See React.renderToString().'):invariant(oldChild.tagName.toLowerCase() !== 'html');var newChild=createNodesFromMarkup(markup,emptyFunction)[0];oldChild.parentNode.replaceChild(newChild,oldChild);}};module.exports = Danger;}).call(this,require('_process'));},{"./ExecutionEnvironment":70,"./createNodesFromMarkup":162,"./emptyFunction":164,"./getMarkupWrap":177,"./invariant":185,"_process":12}],62:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule DefaultEventPluginOrder
   */'use strict';var keyOf=require("./keyOf"); /**
   * Module that is injectable into `EventPluginHub`, that specifies a
   * deterministic ordering of `EventPlugin`s. A convenient way to reason about
   * plugins, without having to package every one of them. This is better than
   * having plugins be ordered in the same order that they are injected because
   * that ordering would be influenced by the packaging order.
   * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
   * preventing default on events is convenient in `SimpleEventPlugin` handlers.
   */var DefaultEventPluginOrder=[keyOf({ResponderEventPlugin:null}),keyOf({SimpleEventPlugin:null}),keyOf({TapEventPlugin:null}),keyOf({EnterLeaveEventPlugin:null}),keyOf({ChangeEventPlugin:null}),keyOf({SelectEventPlugin:null}),keyOf({BeforeInputEventPlugin:null}),keyOf({AnalyticsEventPlugin:null}),keyOf({MobileSafariClickEventPlugin:null})];module.exports = DefaultEventPluginOrder;},{"./keyOf":191}],63:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule EnterLeaveEventPlugin
   * @typechecks static-only
   */'use strict';var EventConstants=require("./EventConstants");var EventPropagators=require("./EventPropagators");var SyntheticMouseEvent=require("./SyntheticMouseEvent");var ReactMount=require("./ReactMount");var keyOf=require("./keyOf");var topLevelTypes=EventConstants.topLevelTypes;var getFirstReactDOM=ReactMount.getFirstReactDOM;var eventTypes={mouseEnter:{registrationName:keyOf({onMouseEnter:null}),dependencies:[topLevelTypes.topMouseOut,topLevelTypes.topMouseOver]},mouseLeave:{registrationName:keyOf({onMouseLeave:null}),dependencies:[topLevelTypes.topMouseOut,topLevelTypes.topMouseOver]}};var extractedEvents=[null,null];var EnterLeaveEventPlugin={eventTypes:eventTypes, /**
     * For almost every interaction we care about, there will be both a top-level
     * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
     * we do not extract duplicate events. However, moving the mouse into the
     * browser from outside will not fire a `mouseout` event. In this case, we use
     * the `mouseover` top-level event.
     *
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @see {EventPluginHub.extractEvents}
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){if(topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)){return null;}if(topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver){ // Must not be a mouse in or mouse out - ignoring.
  return null;}var win;if(topLevelTarget.window === topLevelTarget){ // `topLevelTarget` is probably a window object.
  win = topLevelTarget;}else { // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
  var doc=topLevelTarget.ownerDocument;if(doc){win = doc.defaultView || doc.parentWindow;}else {win = window;}}var from,to;if(topLevelType === topLevelTypes.topMouseOut){from = topLevelTarget;to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) || win;}else {from = win;to = topLevelTarget;}if(from === to){ // Nothing pertains to our managed components.
  return null;}var fromID=from?ReactMount.getID(from):'';var toID=to?ReactMount.getID(to):'';var leave=SyntheticMouseEvent.getPooled(eventTypes.mouseLeave,fromID,nativeEvent);leave.type = 'mouseleave';leave.target = from;leave.relatedTarget = to;var enter=SyntheticMouseEvent.getPooled(eventTypes.mouseEnter,toID,nativeEvent);enter.type = 'mouseenter';enter.target = to;enter.relatedTarget = from;EventPropagators.accumulateEnterLeaveDispatches(leave,enter,fromID,toID);extractedEvents[0] = leave;extractedEvents[1] = enter;return extractedEvents;}};module.exports = EnterLeaveEventPlugin;},{"./EventConstants":64,"./EventPropagators":69,"./ReactMount":120,"./SyntheticMouseEvent":149,"./keyOf":191}],64:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule EventConstants
   */'use strict';var keyMirror=require("./keyMirror");var PropagationPhases=keyMirror({bubbled:null,captured:null}); /**
   * Types of raw signals from the browser caught at the top level.
   */var topLevelTypes=keyMirror({topBlur:null,topChange:null,topClick:null,topCompositionEnd:null,topCompositionStart:null,topCompositionUpdate:null,topContextMenu:null,topCopy:null,topCut:null,topDoubleClick:null,topDrag:null,topDragEnd:null,topDragEnter:null,topDragExit:null,topDragLeave:null,topDragOver:null,topDragStart:null,topDrop:null,topError:null,topFocus:null,topInput:null,topKeyDown:null,topKeyPress:null,topKeyUp:null,topLoad:null,topMouseDown:null,topMouseMove:null,topMouseOut:null,topMouseOver:null,topMouseUp:null,topPaste:null,topReset:null,topScroll:null,topSelectionChange:null,topSubmit:null,topTextInput:null,topTouchCancel:null,topTouchEnd:null,topTouchMove:null,topTouchStart:null,topWheel:null});var EventConstants={topLevelTypes:topLevelTypes,PropagationPhases:PropagationPhases};module.exports = EventConstants;},{"./keyMirror":190}],65:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   * @providesModule EventListener
   * @typechecks
   */var emptyFunction=require("./emptyFunction"); /**
   * Upstream version of event listener. Does not take into account specific
   * nature of platform.
   */var EventListener={ /**
     * Listen to DOM events during the bubble phase.
     *
     * @param {DOMEventTarget} target DOM element to register listener on.
     * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
     * @param {function} callback Callback function.
     * @return {object} Object with a `remove` method.
     */listen:function listen(target,eventType,callback){if(target.addEventListener){target.addEventListener(eventType,callback,false);return {remove:function remove(){target.removeEventListener(eventType,callback,false);}};}else if(target.attachEvent){target.attachEvent('on' + eventType,callback);return {remove:function remove(){target.detachEvent('on' + eventType,callback);}};}}, /**
     * Listen to DOM events during the capture phase.
     *
     * @param {DOMEventTarget} target DOM element to register listener on.
     * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
     * @param {function} callback Callback function.
     * @return {object} Object with a `remove` method.
     */capture:function capture(target,eventType,callback){if(!target.addEventListener){if("production" !== process.env.NODE_ENV){console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');}return {remove:emptyFunction};}else {target.addEventListener(eventType,callback,true);return {remove:function remove(){target.removeEventListener(eventType,callback,true);}};}},registerDefault:function registerDefault(){}};module.exports = EventListener;}).call(this,require('_process'));},{"./emptyFunction":164,"_process":12}],66:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule EventPluginHub
   */'use strict';var EventPluginRegistry=require("./EventPluginRegistry");var EventPluginUtils=require("./EventPluginUtils");var accumulateInto=require("./accumulateInto");var forEachAccumulated=require("./forEachAccumulated");var invariant=require("./invariant"); /**
   * Internal store for event listeners
   */var listenerBank={}; /**
   * Internal queue of events that have accumulated their dispatches and are
   * waiting to have their dispatches executed.
   */var eventQueue=null; /**
   * Dispatches an event and releases it back into the pool, unless persistent.
   *
   * @param {?object} event Synthetic event to be dispatched.
   * @private
   */var executeDispatchesAndRelease=function executeDispatchesAndRelease(event){if(event){var executeDispatch=EventPluginUtils.executeDispatch; // Plugins can provide custom behavior when dispatching events.
  var PluginModule=EventPluginRegistry.getPluginModuleForEvent(event);if(PluginModule && PluginModule.executeDispatch){executeDispatch = PluginModule.executeDispatch;}EventPluginUtils.executeDispatchesInOrder(event,executeDispatch);if(!event.isPersistent()){event.constructor.release(event);}}}; /**
   * - `InstanceHandle`: [required] Module that performs logical traversals of DOM
   *   hierarchy given ids of the logical DOM elements involved.
   */var InstanceHandle=null;function validateInstanceHandle(){var valid=InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;"production" !== process.env.NODE_ENV?invariant(valid,'InstanceHandle not injected before use!'):invariant(valid);} /**
   * This is a unified interface for event plugins to be installed and configured.
   *
   * Event plugins can implement the following properties:
   *
   *   `extractEvents` {function(string, DOMEventTarget, string, object): *}
   *     Required. When a top-level event is fired, this method is expected to
   *     extract synthetic events that will in turn be queued and dispatched.
   *
   *   `eventTypes` {object}
   *     Optional, plugins that fire events must publish a mapping of registration
   *     names that are used to register listeners. Values of this mapping must
   *     be objects that contain `registrationName` or `phasedRegistrationNames`.
   *
   *   `executeDispatch` {function(object, function, string)}
   *     Optional, allows plugins to override how an event gets dispatched. By
   *     default, the listener is simply invoked.
   *
   * Each plugin that is injected into `EventsPluginHub` is immediately operable.
   *
   * @public
   */var EventPluginHub={ /**
     * Methods for injecting dependencies.
     */injection:{ /**
       * @param {object} InjectedMount
       * @public
       */injectMount:EventPluginUtils.injection.injectMount, /**
       * @param {object} InjectedInstanceHandle
       * @public
       */injectInstanceHandle:function injectInstanceHandle(InjectedInstanceHandle){InstanceHandle = InjectedInstanceHandle;if("production" !== process.env.NODE_ENV){validateInstanceHandle();}},getInstanceHandle:function getInstanceHandle(){if("production" !== process.env.NODE_ENV){validateInstanceHandle();}return InstanceHandle;}, /**
       * @param {array} InjectedEventPluginOrder
       * @public
       */injectEventPluginOrder:EventPluginRegistry.injectEventPluginOrder, /**
       * @param {object} injectedNamesToPlugins Map from names to plugin modules.
       */injectEventPluginsByName:EventPluginRegistry.injectEventPluginsByName},eventNameDispatchConfigs:EventPluginRegistry.eventNameDispatchConfigs,registrationNameModules:EventPluginRegistry.registrationNameModules, /**
     * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
     *
     * @param {string} id ID of the DOM element.
     * @param {string} registrationName Name of listener (e.g. `onClick`).
     * @param {?function} listener The callback to store.
     */putListener:function putListener(id,registrationName,listener){"production" !== process.env.NODE_ENV?invariant(!listener || typeof listener === 'function','Expected %s listener to be a function, instead got type %s',registrationName,typeof listener):invariant(!listener || typeof listener === 'function');var bankForRegistrationName=listenerBank[registrationName] || (listenerBank[registrationName] = {});bankForRegistrationName[id] = listener;}, /**
     * @param {string} id ID of the DOM element.
     * @param {string} registrationName Name of listener (e.g. `onClick`).
     * @return {?function} The stored callback.
     */getListener:function getListener(id,registrationName){var bankForRegistrationName=listenerBank[registrationName];return bankForRegistrationName && bankForRegistrationName[id];}, /**
     * Deletes a listener from the registration bank.
     *
     * @param {string} id ID of the DOM element.
     * @param {string} registrationName Name of listener (e.g. `onClick`).
     */deleteListener:function deleteListener(id,registrationName){var bankForRegistrationName=listenerBank[registrationName];if(bankForRegistrationName){delete bankForRegistrationName[id];}}, /**
     * Deletes all listeners for the DOM element with the supplied ID.
     *
     * @param {string} id ID of the DOM element.
     */deleteAllListeners:function deleteAllListeners(id){for(var registrationName in listenerBank) {delete listenerBank[registrationName][id];}}, /**
     * Allows registered plugins an opportunity to extract events from top-level
     * native browser events.
     *
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @internal
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var events;var plugins=EventPluginRegistry.plugins;for(var i=0,l=plugins.length;i < l;i++) { // Not every plugin in the ordering may be loaded at runtime.
  var possiblePlugin=plugins[i];if(possiblePlugin){var extractedEvents=possiblePlugin.extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent);if(extractedEvents){events = accumulateInto(events,extractedEvents);}}}return events;}, /**
     * Enqueues a synthetic event that should be dispatched when
     * `processEventQueue` is invoked.
     *
     * @param {*} events An accumulation of synthetic events.
     * @internal
     */enqueueEvents:function enqueueEvents(events){if(events){eventQueue = accumulateInto(eventQueue,events);}}, /**
     * Dispatches all synthetic events on the event queue.
     *
     * @internal
     */processEventQueue:function processEventQueue(){ // Set `eventQueue` to null before processing it so that we can tell if more
  // events get enqueued while processing.
  var processingEventQueue=eventQueue;eventQueue = null;forEachAccumulated(processingEventQueue,executeDispatchesAndRelease);"production" !== process.env.NODE_ENV?invariant(!eventQueue,'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.'):invariant(!eventQueue);}, /**
     * These are needed for tests only. Do not use!
     */__purge:function __purge(){listenerBank = {};},__getListenerBank:function __getListenerBank(){return listenerBank;}};module.exports = EventPluginHub;}).call(this,require('_process'));},{"./EventPluginRegistry":67,"./EventPluginUtils":68,"./accumulateInto":155,"./forEachAccumulated":170,"./invariant":185,"_process":12}],67:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule EventPluginRegistry
   * @typechecks static-only
   */'use strict';var invariant=require("./invariant"); /**
   * Injectable ordering of event plugins.
   */var EventPluginOrder=null; /**
   * Injectable mapping from names to event plugin modules.
   */var namesToPlugins={}; /**
   * Recomputes the plugin list using the injected plugins and plugin ordering.
   *
   * @private
   */function recomputePluginOrdering(){if(!EventPluginOrder){ // Wait until an `EventPluginOrder` is injected.
  return;}for(var pluginName in namesToPlugins) {var PluginModule=namesToPlugins[pluginName];var pluginIndex=EventPluginOrder.indexOf(pluginName);"production" !== process.env.NODE_ENV?invariant(pluginIndex > -1,'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.',pluginName):invariant(pluginIndex > -1);if(EventPluginRegistry.plugins[pluginIndex]){continue;}"production" !== process.env.NODE_ENV?invariant(PluginModule.extractEvents,'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.',pluginName):invariant(PluginModule.extractEvents);EventPluginRegistry.plugins[pluginIndex] = PluginModule;var publishedEvents=PluginModule.eventTypes;for(var eventName in publishedEvents) {"production" !== process.env.NODE_ENV?invariant(publishEventForPlugin(publishedEvents[eventName],PluginModule,eventName),'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.',eventName,pluginName):invariant(publishEventForPlugin(publishedEvents[eventName],PluginModule,eventName));}}} /**
   * Publishes an event so that it can be dispatched by the supplied plugin.
   *
   * @param {object} dispatchConfig Dispatch configuration for the event.
   * @param {object} PluginModule Plugin publishing the event.
   * @return {boolean} True if the event was successfully published.
   * @private
   */function publishEventForPlugin(dispatchConfig,PluginModule,eventName){"production" !== process.env.NODE_ENV?invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName),'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.',eventName):invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName));EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;var phasedRegistrationNames=dispatchConfig.phasedRegistrationNames;if(phasedRegistrationNames){for(var phaseName in phasedRegistrationNames) {if(phasedRegistrationNames.hasOwnProperty(phaseName)){var phasedRegistrationName=phasedRegistrationNames[phaseName];publishRegistrationName(phasedRegistrationName,PluginModule,eventName);}}return true;}else if(dispatchConfig.registrationName){publishRegistrationName(dispatchConfig.registrationName,PluginModule,eventName);return true;}return false;} /**
   * Publishes a registration name that is used to identify dispatched events and
   * can be used with `EventPluginHub.putListener` to register listeners.
   *
   * @param {string} registrationName Registration name to add.
   * @param {object} PluginModule Plugin publishing the event.
   * @private
   */function publishRegistrationName(registrationName,PluginModule,eventName){"production" !== process.env.NODE_ENV?invariant(!EventPluginRegistry.registrationNameModules[registrationName],'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.',registrationName):invariant(!EventPluginRegistry.registrationNameModules[registrationName]);EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;} /**
   * Registers plugins so that they can extract and dispatch events.
   *
   * @see {EventPluginHub}
   */var EventPluginRegistry={ /**
     * Ordered list of injected plugins.
     */plugins:[], /**
     * Mapping from event name to dispatch config
     */eventNameDispatchConfigs:{}, /**
     * Mapping from registration name to plugin module
     */registrationNameModules:{}, /**
     * Mapping from registration name to event name
     */registrationNameDependencies:{}, /**
     * Injects an ordering of plugins (by plugin name). This allows the ordering
     * to be decoupled from injection of the actual plugins so that ordering is
     * always deterministic regardless of packaging, on-the-fly injection, etc.
     *
     * @param {array} InjectedEventPluginOrder
     * @internal
     * @see {EventPluginHub.injection.injectEventPluginOrder}
     */injectEventPluginOrder:function injectEventPluginOrder(InjectedEventPluginOrder){"production" !== process.env.NODE_ENV?invariant(!EventPluginOrder,'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.'):invariant(!EventPluginOrder); // Clone the ordering so it cannot be dynamically mutated.
  EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);recomputePluginOrdering();}, /**
     * Injects plugins to be used by `EventPluginHub`. The plugin names must be
     * in the ordering injected by `injectEventPluginOrder`.
     *
     * Plugins can be injected as part of page initialization or on-the-fly.
     *
     * @param {object} injectedNamesToPlugins Map from names to plugin modules.
     * @internal
     * @see {EventPluginHub.injection.injectEventPluginsByName}
     */injectEventPluginsByName:function injectEventPluginsByName(injectedNamesToPlugins){var isOrderingDirty=false;for(var pluginName in injectedNamesToPlugins) {if(!injectedNamesToPlugins.hasOwnProperty(pluginName)){continue;}var PluginModule=injectedNamesToPlugins[pluginName];if(!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule){"production" !== process.env.NODE_ENV?invariant(!namesToPlugins[pluginName],'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.',pluginName):invariant(!namesToPlugins[pluginName]);namesToPlugins[pluginName] = PluginModule;isOrderingDirty = true;}}if(isOrderingDirty){recomputePluginOrdering();}}, /**
     * Looks up the plugin for the supplied event.
     *
     * @param {object} event A synthetic event.
     * @return {?object} The plugin that created the supplied event.
     * @internal
     */getPluginModuleForEvent:function getPluginModuleForEvent(event){var dispatchConfig=event.dispatchConfig;if(dispatchConfig.registrationName){return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;}for(var phase in dispatchConfig.phasedRegistrationNames) {if(!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)){continue;}var PluginModule=EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];if(PluginModule){return PluginModule;}}return null;}, /**
     * Exposed for unit testing.
     * @private
     */_resetEventPlugins:function _resetEventPlugins(){EventPluginOrder = null;for(var pluginName in namesToPlugins) {if(namesToPlugins.hasOwnProperty(pluginName)){delete namesToPlugins[pluginName];}}EventPluginRegistry.plugins.length = 0;var eventNameDispatchConfigs=EventPluginRegistry.eventNameDispatchConfigs;for(var eventName in eventNameDispatchConfigs) {if(eventNameDispatchConfigs.hasOwnProperty(eventName)){delete eventNameDispatchConfigs[eventName];}}var registrationNameModules=EventPluginRegistry.registrationNameModules;for(var registrationName in registrationNameModules) {if(registrationNameModules.hasOwnProperty(registrationName)){delete registrationNameModules[registrationName];}}}};module.exports = EventPluginRegistry;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],68:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule EventPluginUtils
   */'use strict';var EventConstants=require("./EventConstants");var invariant=require("./invariant"); /**
   * Injected dependencies:
   */ /**
   * - `Mount`: [required] Module that can convert between React dom IDs and
   *   actual node references.
   */var injection={Mount:null,injectMount:function injectMount(InjectedMount){injection.Mount = InjectedMount;if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?invariant(InjectedMount && InjectedMount.getNode,'EventPluginUtils.injection.injectMount(...): Injected Mount module ' + 'is missing getNode.'):invariant(InjectedMount && InjectedMount.getNode);}}};var topLevelTypes=EventConstants.topLevelTypes;function isEndish(topLevelType){return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;}function isMoveish(topLevelType){return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;}function isStartish(topLevelType){return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;}var validateEventDispatches;if("production" !== process.env.NODE_ENV){validateEventDispatches = function(event){var dispatchListeners=event._dispatchListeners;var dispatchIDs=event._dispatchIDs;var listenersIsArr=Array.isArray(dispatchListeners);var idsIsArr=Array.isArray(dispatchIDs);var IDsLen=idsIsArr?dispatchIDs.length:dispatchIDs?1:0;var listenersLen=listenersIsArr?dispatchListeners.length:dispatchListeners?1:0;"production" !== process.env.NODE_ENV?invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen,'EventPluginUtils: Invalid `event`.'):invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen);};} /**
   * Invokes `cb(event, listener, id)`. Avoids using call if no scope is
   * provided. The `(listener,id)` pair effectively forms the "dispatch" but are
   * kept separate to conserve memory.
   */function forEachEventDispatch(event,cb){var dispatchListeners=event._dispatchListeners;var dispatchIDs=event._dispatchIDs;if("production" !== process.env.NODE_ENV){validateEventDispatches(event);}if(Array.isArray(dispatchListeners)){for(var i=0;i < dispatchListeners.length;i++) {if(event.isPropagationStopped()){break;} // Listeners and IDs are two parallel arrays that are always in sync.
  cb(event,dispatchListeners[i],dispatchIDs[i]);}}else if(dispatchListeners){cb(event,dispatchListeners,dispatchIDs);}} /**
   * Default implementation of PluginModule.executeDispatch().
   * @param {SyntheticEvent} SyntheticEvent to handle
   * @param {function} Application-level callback
   * @param {string} domID DOM id to pass to the callback.
   */function executeDispatch(event,listener,domID){event.currentTarget = injection.Mount.getNode(domID);var returnValue=listener(event,domID);event.currentTarget = null;return returnValue;} /**
   * Standard/simple iteration through an event's collected dispatches.
   */function executeDispatchesInOrder(event,cb){forEachEventDispatch(event,cb);event._dispatchListeners = null;event._dispatchIDs = null;} /**
   * Standard/simple iteration through an event's collected dispatches, but stops
   * at the first dispatch execution returning true, and returns that id.
   *
   * @return id of the first dispatch execution who's listener returns true, or
   * null if no listener returned true.
   */function executeDispatchesInOrderStopAtTrueImpl(event){var dispatchListeners=event._dispatchListeners;var dispatchIDs=event._dispatchIDs;if("production" !== process.env.NODE_ENV){validateEventDispatches(event);}if(Array.isArray(dispatchListeners)){for(var i=0;i < dispatchListeners.length;i++) {if(event.isPropagationStopped()){break;} // Listeners and IDs are two parallel arrays that are always in sync.
  if(dispatchListeners[i](event,dispatchIDs[i])){return dispatchIDs[i];}}}else if(dispatchListeners){if(dispatchListeners(event,dispatchIDs)){return dispatchIDs;}}return null;} /**
   * @see executeDispatchesInOrderStopAtTrueImpl
   */function executeDispatchesInOrderStopAtTrue(event){var ret=executeDispatchesInOrderStopAtTrueImpl(event);event._dispatchIDs = null;event._dispatchListeners = null;return ret;} /**
   * Execution of a "direct" dispatch - there must be at most one dispatch
   * accumulated on the event or it is considered an error. It doesn't really make
   * sense for an event with multiple dispatches (bubbled) to keep track of the
   * return values at each dispatch execution, but it does tend to make sense when
   * dealing with "direct" dispatches.
   *
   * @return The return value of executing the single dispatch.
   */function executeDirectDispatch(event){if("production" !== process.env.NODE_ENV){validateEventDispatches(event);}var dispatchListener=event._dispatchListeners;var dispatchID=event._dispatchIDs;"production" !== process.env.NODE_ENV?invariant(!Array.isArray(dispatchListener),'executeDirectDispatch(...): Invalid `event`.'):invariant(!Array.isArray(dispatchListener));var res=dispatchListener?dispatchListener(event,dispatchID):null;event._dispatchListeners = null;event._dispatchIDs = null;return res;} /**
   * @param {SyntheticEvent} event
   * @return {bool} True iff number of dispatches accumulated is greater than 0.
   */function hasDispatches(event){return !!event._dispatchListeners;} /**
   * General utilities that are useful in creating custom Event Plugins.
   */var EventPluginUtils={isEndish:isEndish,isMoveish:isMoveish,isStartish:isStartish,executeDirectDispatch:executeDirectDispatch,executeDispatch:executeDispatch,executeDispatchesInOrder:executeDispatchesInOrder,executeDispatchesInOrderStopAtTrue:executeDispatchesInOrderStopAtTrue,hasDispatches:hasDispatches,injection:injection,useTouchEvents:false};module.exports = EventPluginUtils;}).call(this,require('_process'));},{"./EventConstants":64,"./invariant":185,"_process":12}],69:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule EventPropagators
   */'use strict';var EventConstants=require("./EventConstants");var EventPluginHub=require("./EventPluginHub");var accumulateInto=require("./accumulateInto");var forEachAccumulated=require("./forEachAccumulated");var PropagationPhases=EventConstants.PropagationPhases;var getListener=EventPluginHub.getListener; /**
   * Some event types have a notion of different registration names for different
   * "phases" of propagation. This finds listeners by a given phase.
   */function listenerAtPhase(id,event,propagationPhase){var registrationName=event.dispatchConfig.phasedRegistrationNames[propagationPhase];return getListener(id,registrationName);} /**
   * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
   * here, allows us to not have to bind or create functions for each event.
   * Mutating the event's members allows us to not have to create a wrapping
   * "dispatch" object that pairs the event with the listener.
   */function accumulateDirectionalDispatches(domID,upwards,event){if("production" !== process.env.NODE_ENV){if(!domID){throw new Error('Dispatching id must not be null');}}var phase=upwards?PropagationPhases.bubbled:PropagationPhases.captured;var listener=listenerAtPhase(domID,event,phase);if(listener){event._dispatchListeners = accumulateInto(event._dispatchListeners,listener);event._dispatchIDs = accumulateInto(event._dispatchIDs,domID);}} /**
   * Collect dispatches (must be entirely collected before dispatching - see unit
   * tests). Lazily allocate the array to conserve memory.  We must loop through
   * each event and perform the traversal for each one. We can not perform a
   * single traversal for the entire collection of events because each event may
   * have a different target.
   */function accumulateTwoPhaseDispatchesSingle(event){if(event && event.dispatchConfig.phasedRegistrationNames){EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker,accumulateDirectionalDispatches,event);}} /**
   * Accumulates without regard to direction, does not look for phased
   * registration names. Same as `accumulateDirectDispatchesSingle` but without
   * requiring that the `dispatchMarker` be the same as the dispatched ID.
   */function accumulateDispatches(id,ignoredDirection,event){if(event && event.dispatchConfig.registrationName){var registrationName=event.dispatchConfig.registrationName;var listener=getListener(id,registrationName);if(listener){event._dispatchListeners = accumulateInto(event._dispatchListeners,listener);event._dispatchIDs = accumulateInto(event._dispatchIDs,id);}}} /**
   * Accumulates dispatches on an `SyntheticEvent`, but only for the
   * `dispatchMarker`.
   * @param {SyntheticEvent} event
   */function accumulateDirectDispatchesSingle(event){if(event && event.dispatchConfig.registrationName){accumulateDispatches(event.dispatchMarker,null,event);}}function accumulateTwoPhaseDispatches(events){forEachAccumulated(events,accumulateTwoPhaseDispatchesSingle);}function accumulateEnterLeaveDispatches(leave,enter,fromID,toID){EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID,toID,accumulateDispatches,leave,enter);}function accumulateDirectDispatches(events){forEachAccumulated(events,accumulateDirectDispatchesSingle);} /**
   * A small set of propagation patterns, each of which will accept a small amount
   * of information, and generate a set of "dispatch ready event objects" - which
   * are sets of events that have already been annotated with a set of dispatched
   * listener functions/ids. The API is designed this way to discourage these
   * propagation strategies from actually executing the dispatches, since we
   * always want to collect the entire set of dispatches before executing event a
   * single one.
   *
   * @constructor EventPropagators
   */var EventPropagators={accumulateTwoPhaseDispatches:accumulateTwoPhaseDispatches,accumulateDirectDispatches:accumulateDirectDispatches,accumulateEnterLeaveDispatches:accumulateEnterLeaveDispatches};module.exports = EventPropagators;}).call(this,require('_process'));},{"./EventConstants":64,"./EventPluginHub":66,"./accumulateInto":155,"./forEachAccumulated":170,"_process":12}],70:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ExecutionEnvironment
   */ /*jslint evil: true */"use strict";var canUseDOM=!!(typeof window !== 'undefined' && window.document && window.document.createElement); /**
   * Simple, lightweight module assisting with the detection and context of
   * Worker. Helps avoid circular dependencies and allows code to reason about
   * whether or not they are in a Worker, even if they never include the main
   * `ReactWorker` dependency.
   */var ExecutionEnvironment={canUseDOM:canUseDOM,canUseWorkers:typeof Worker !== 'undefined',canUseEventListeners:canUseDOM && !!(window.addEventListener || window.attachEvent),canUseViewport:canUseDOM && !!window.screen,isInWorker:!canUseDOM // For now, this is true - might change in the future.
  };module.exports = ExecutionEnvironment;},{}],71:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule FallbackCompositionState
   * @typechecks static-only
   */'use strict';var PooledClass=require("./PooledClass");var assign=require("./Object.assign");var getTextContentAccessor=require("./getTextContentAccessor"); /**
   * This helper class stores information about text content of a target node,
   * allowing comparison of content before and after a given event.
   *
   * Identify the node where selection currently begins, then observe
   * both its text content and its current position in the DOM. Since the
   * browser may natively replace the target node during composition, we can
   * use its position to find its replacement.
   *
   * @param {DOMEventTarget} root
   */function FallbackCompositionState(root){this._root = root;this._startText = this.getText();this._fallbackText = null;}assign(FallbackCompositionState.prototype,{ /**
     * Get current text of input.
     *
     * @return {string}
     */getText:function getText(){if('value' in this._root){return this._root.value;}return this._root[getTextContentAccessor()];}, /**
     * Determine the differing substring between the initially stored
     * text content and the current content.
     *
     * @return {string}
     */getData:function getData(){if(this._fallbackText){return this._fallbackText;}var start;var startValue=this._startText;var startLength=startValue.length;var end;var endValue=this.getText();var endLength=endValue.length;for(start = 0;start < startLength;start++) {if(startValue[start] !== endValue[start]){break;}}var minEnd=startLength - start;for(end = 1;end <= minEnd;end++) {if(startValue[startLength - end] !== endValue[endLength - end]){break;}}var sliceTail=end > 1?1 - end:undefined;this._fallbackText = endValue.slice(start,sliceTail);return this._fallbackText;}});PooledClass.addPoolingTo(FallbackCompositionState);module.exports = FallbackCompositionState;},{"./Object.assign":76,"./PooledClass":77,"./getTextContentAccessor":180}],72:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule HTMLDOMPropertyConfig
   */ /*jslint bitwise: true*/'use strict';var DOMProperty=require("./DOMProperty");var ExecutionEnvironment=require("./ExecutionEnvironment");var MUST_USE_ATTRIBUTE=DOMProperty.injection.MUST_USE_ATTRIBUTE;var MUST_USE_PROPERTY=DOMProperty.injection.MUST_USE_PROPERTY;var HAS_BOOLEAN_VALUE=DOMProperty.injection.HAS_BOOLEAN_VALUE;var HAS_SIDE_EFFECTS=DOMProperty.injection.HAS_SIDE_EFFECTS;var HAS_NUMERIC_VALUE=DOMProperty.injection.HAS_NUMERIC_VALUE;var HAS_POSITIVE_NUMERIC_VALUE=DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;var HAS_OVERLOADED_BOOLEAN_VALUE=DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;var hasSVG;if(ExecutionEnvironment.canUseDOM){var implementation=document.implementation;hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure','1.1');}var HTMLDOMPropertyConfig={isCustomAttribute:RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),Properties:{ /**
       * Standard Properties
       */accept:null,acceptCharset:null,accessKey:null,action:null,allowFullScreen:MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,allowTransparency:MUST_USE_ATTRIBUTE,alt:null,async:HAS_BOOLEAN_VALUE,autoComplete:null, // autoFocus is polyfilled/normalized by AutoFocusMixin
  // autoFocus: HAS_BOOLEAN_VALUE,
  autoPlay:HAS_BOOLEAN_VALUE,cellPadding:null,cellSpacing:null,charSet:MUST_USE_ATTRIBUTE,checked:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,classID:MUST_USE_ATTRIBUTE, // To set className on SVG elements, it's necessary to use .setAttribute;
  // this works on HTML elements too in all browsers except IE8. Conveniently,
  // IE8 doesn't support SVG and so we can simply use the attribute in
  // browsers that support SVG and the property in browsers that don't,
  // regardless of whether the element is HTML or SVG.
  className:hasSVG?MUST_USE_ATTRIBUTE:MUST_USE_PROPERTY,cols:MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,colSpan:null,content:null,contentEditable:null,contextMenu:MUST_USE_ATTRIBUTE,controls:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,coords:null,crossOrigin:null,data:null, // For `<object />` acts as `src`.
  dateTime:MUST_USE_ATTRIBUTE,defer:HAS_BOOLEAN_VALUE,dir:null,disabled:MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,download:HAS_OVERLOADED_BOOLEAN_VALUE,draggable:null,encType:null,form:MUST_USE_ATTRIBUTE,formAction:MUST_USE_ATTRIBUTE,formEncType:MUST_USE_ATTRIBUTE,formMethod:MUST_USE_ATTRIBUTE,formNoValidate:HAS_BOOLEAN_VALUE,formTarget:MUST_USE_ATTRIBUTE,frameBorder:MUST_USE_ATTRIBUTE,headers:null,height:MUST_USE_ATTRIBUTE,hidden:MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,high:null,href:null,hrefLang:null,htmlFor:null,httpEquiv:null,icon:null,id:MUST_USE_PROPERTY,label:null,lang:null,list:MUST_USE_ATTRIBUTE,loop:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,low:null,manifest:MUST_USE_ATTRIBUTE,marginHeight:null,marginWidth:null,max:null,maxLength:MUST_USE_ATTRIBUTE,media:MUST_USE_ATTRIBUTE,mediaGroup:null,method:null,min:null,multiple:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,muted:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,name:null,noValidate:HAS_BOOLEAN_VALUE,open:HAS_BOOLEAN_VALUE,optimum:null,pattern:null,placeholder:null,poster:null,preload:null,radioGroup:null,readOnly:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,rel:null,required:HAS_BOOLEAN_VALUE,role:MUST_USE_ATTRIBUTE,rows:MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,rowSpan:null,sandbox:null,scope:null,scoped:HAS_BOOLEAN_VALUE,scrolling:null,seamless:MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,selected:MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,shape:null,size:MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,sizes:MUST_USE_ATTRIBUTE,span:HAS_POSITIVE_NUMERIC_VALUE,spellCheck:null,src:null,srcDoc:MUST_USE_PROPERTY,srcSet:MUST_USE_ATTRIBUTE,start:HAS_NUMERIC_VALUE,step:null,style:null,tabIndex:null,target:null,title:null,type:null,useMap:null,value:MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,width:MUST_USE_ATTRIBUTE,wmode:MUST_USE_ATTRIBUTE, /**
       * Non-standard Properties
       */ // autoCapitalize and autoCorrect are supported in Mobile Safari for
  // keyboard hints.
  autoCapitalize:null,autoCorrect:null, // itemProp, itemScope, itemType are for
  // Microdata support. See http://schema.org/docs/gs.html
  itemProp:MUST_USE_ATTRIBUTE,itemScope:MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,itemType:MUST_USE_ATTRIBUTE, // itemID and itemRef are for Microdata support as well but
  // only specified in the the WHATWG spec document. See
  // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
  itemID:MUST_USE_ATTRIBUTE,itemRef:MUST_USE_ATTRIBUTE, // property is supported for OpenGraph in meta tags.
  property:null, // IE-only attribute that controls focus behavior
  unselectable:MUST_USE_ATTRIBUTE},DOMAttributeNames:{acceptCharset:'accept-charset',className:'class',htmlFor:'for',httpEquiv:'http-equiv'},DOMPropertyNames:{autoCapitalize:'autocapitalize',autoComplete:'autocomplete',autoCorrect:'autocorrect',autoFocus:'autofocus',autoPlay:'autoplay', // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.
  // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding
  encType:'encoding',hrefLang:'hreflang',radioGroup:'radiogroup',spellCheck:'spellcheck',srcDoc:'srcdoc',srcSet:'srcset'}};module.exports = HTMLDOMPropertyConfig;},{"./DOMProperty":59,"./ExecutionEnvironment":70}],73:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule LinkedValueUtils
   * @typechecks static-only
   */'use strict';var ReactPropTypes=require("./ReactPropTypes");var invariant=require("./invariant");var hasReadOnlyValue={'button':true,'checkbox':true,'image':true,'hidden':true,'radio':true,'reset':true,'submit':true};function _assertSingleLink(input){"production" !== process.env.NODE_ENV?invariant(input.props.checkedLink == null || input.props.valueLink == null,'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.'):invariant(input.props.checkedLink == null || input.props.valueLink == null);}function _assertValueLink(input){_assertSingleLink(input);"production" !== process.env.NODE_ENV?invariant(input.props.value == null && input.props.onChange == null,'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.'):invariant(input.props.value == null && input.props.onChange == null);}function _assertCheckedLink(input){_assertSingleLink(input);"production" !== process.env.NODE_ENV?invariant(input.props.checked == null && input.props.onChange == null,'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink'):invariant(input.props.checked == null && input.props.onChange == null);} /**
   * @param {SyntheticEvent} e change event to handle
   */function _handleLinkedValueChange(e){ /*jshint validthis:true */this.props.valueLink.requestChange(e.target.value);} /**
    * @param {SyntheticEvent} e change event to handle
    */function _handleLinkedCheckChange(e){ /*jshint validthis:true */this.props.checkedLink.requestChange(e.target.checked);} /**
   * Provide a linked `value` attribute for controlled forms. You should not use
   * this outside of the ReactDOM controlled form components.
   */var LinkedValueUtils={Mixin:{propTypes:{value:function value(props,propName,componentName){if(!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled){return null;}return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');},checked:function checked(props,propName,componentName){if(!props[propName] || props.onChange || props.readOnly || props.disabled){return null;}return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');},onChange:ReactPropTypes.func}}, /**
     * @param {ReactComponent} input Form component
     * @return {*} current value of the input either from value prop or link.
     */getValue:function getValue(input){if(input.props.valueLink){_assertValueLink(input);return input.props.valueLink.value;}return input.props.value;}, /**
     * @param {ReactComponent} input Form component
     * @return {*} current checked status of the input either from checked prop
     *             or link.
     */getChecked:function getChecked(input){if(input.props.checkedLink){_assertCheckedLink(input);return input.props.checkedLink.value;}return input.props.checked;}, /**
     * @param {ReactComponent} input Form component
     * @return {function} change callback either from onChange prop or link.
     */getOnChange:function getOnChange(input){if(input.props.valueLink){_assertValueLink(input);return _handleLinkedValueChange;}else if(input.props.checkedLink){_assertCheckedLink(input);return _handleLinkedCheckChange;}return input.props.onChange;}};module.exports = LinkedValueUtils;}).call(this,require('_process'));},{"./ReactPropTypes":128,"./invariant":185,"_process":12}],74:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule LocalEventTrapMixin
   */'use strict';var ReactBrowserEventEmitter=require("./ReactBrowserEventEmitter");var accumulateInto=require("./accumulateInto");var forEachAccumulated=require("./forEachAccumulated");var invariant=require("./invariant");function remove(event){event.remove();}var LocalEventTrapMixin={trapBubbledEvent:function trapBubbledEvent(topLevelType,handlerBaseName){"production" !== process.env.NODE_ENV?invariant(this.isMounted(),'Must be mounted to trap events'):invariant(this.isMounted()); // If a component renders to null or if another component fatals and causes
  // the state of the tree to be corrupted, `node` here can be null.
  var node=this.getDOMNode();"production" !== process.env.NODE_ENV?invariant(node,'LocalEventTrapMixin.trapBubbledEvent(...): Requires node to be rendered.'):invariant(node);var listener=ReactBrowserEventEmitter.trapBubbledEvent(topLevelType,handlerBaseName,node);this._localEventListeners = accumulateInto(this._localEventListeners,listener);}, // trapCapturedEvent would look nearly identical. We don't implement that
  // method because it isn't currently needed.
  componentWillUnmount:function componentWillUnmount(){if(this._localEventListeners){forEachAccumulated(this._localEventListeners,remove);}}};module.exports = LocalEventTrapMixin;}).call(this,require('_process'));},{"./ReactBrowserEventEmitter":80,"./accumulateInto":155,"./forEachAccumulated":170,"./invariant":185,"_process":12}],75:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule MobileSafariClickEventPlugin
   * @typechecks static-only
   */'use strict';var EventConstants=require("./EventConstants");var emptyFunction=require("./emptyFunction");var topLevelTypes=EventConstants.topLevelTypes; /**
   * Mobile Safari does not fire properly bubble click events on non-interactive
   * elements, which means delegated click listeners do not fire. The workaround
   * for this bug involves attaching an empty click listener on the target node.
   *
   * This particular plugin works around the bug by attaching an empty click
   * listener on `touchstart` (which does fire on every element).
   */var MobileSafariClickEventPlugin={eventTypes:null, /**
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @see {EventPluginHub.extractEvents}
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){if(topLevelType === topLevelTypes.topTouchStart){var target=nativeEvent.target;if(target && !target.onclick){target.onclick = emptyFunction;}}}};module.exports = MobileSafariClickEventPlugin;},{"./EventConstants":64,"./emptyFunction":164}],76:[function(require,module,exports){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule Object.assign
   */ // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign
  'use strict';function assign(target,sources){if(target == null){throw new TypeError('Object.assign target cannot be null or undefined');}var to=Object(target);var hasOwnProperty=Object.prototype.hasOwnProperty;for(var nextIndex=1;nextIndex < arguments.length;nextIndex++) {var nextSource=arguments[nextIndex];if(nextSource == null){continue;}var from=Object(nextSource); // We don't currently support accessors nor proxies. Therefore this
  // copy cannot throw. If we ever supported this then we must handle
  // exceptions and side-effects. We don't support symbols so they won't
  // be transferred.
  for(var key in from) {if(hasOwnProperty.call(from,key)){to[key] = from[key];}}}return to;}module.exports = assign;},{}],77:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule PooledClass
   */'use strict';var invariant=require("./invariant"); /**
   * Static poolers. Several custom versions for each potential number of
   * arguments. A completely generic pooler is easy to implement, but would
   * require accessing the `arguments` object. In each of these, `this` refers to
   * the Class itself, not an instance. If any others are needed, simply add them
   * here, or in their own files.
   */var oneArgumentPooler=function oneArgumentPooler(copyFieldsFrom){var Klass=this;if(Klass.instancePool.length){var instance=Klass.instancePool.pop();Klass.call(instance,copyFieldsFrom);return instance;}else {return new Klass(copyFieldsFrom);}};var twoArgumentPooler=function twoArgumentPooler(a1,a2){var Klass=this;if(Klass.instancePool.length){var instance=Klass.instancePool.pop();Klass.call(instance,a1,a2);return instance;}else {return new Klass(a1,a2);}};var threeArgumentPooler=function threeArgumentPooler(a1,a2,a3){var Klass=this;if(Klass.instancePool.length){var instance=Klass.instancePool.pop();Klass.call(instance,a1,a2,a3);return instance;}else {return new Klass(a1,a2,a3);}};var fiveArgumentPooler=function fiveArgumentPooler(a1,a2,a3,a4,a5){var Klass=this;if(Klass.instancePool.length){var instance=Klass.instancePool.pop();Klass.call(instance,a1,a2,a3,a4,a5);return instance;}else {return new Klass(a1,a2,a3,a4,a5);}};var standardReleaser=function standardReleaser(instance){var Klass=this;"production" !== process.env.NODE_ENV?invariant(instance instanceof Klass,'Trying to release an instance into a pool of a different type.'):invariant(instance instanceof Klass);if(instance.destructor){instance.destructor();}if(Klass.instancePool.length < Klass.poolSize){Klass.instancePool.push(instance);}};var DEFAULT_POOL_SIZE=10;var DEFAULT_POOLER=oneArgumentPooler; /**
   * Augments `CopyConstructor` to be a poolable class, augmenting only the class
   * itself (statically) not adding any prototypical fields. Any CopyConstructor
   * you give this may have a `poolSize` property, and will look for a
   * prototypical `destructor` on instances (optional).
   *
   * @param {Function} CopyConstructor Constructor that can be used to reset.
   * @param {Function} pooler Customizable pooler.
   */var addPoolingTo=function addPoolingTo(CopyConstructor,pooler){var NewKlass=CopyConstructor;NewKlass.instancePool = [];NewKlass.getPooled = pooler || DEFAULT_POOLER;if(!NewKlass.poolSize){NewKlass.poolSize = DEFAULT_POOL_SIZE;}NewKlass.release = standardReleaser;return NewKlass;};var PooledClass={addPoolingTo:addPoolingTo,oneArgumentPooler:oneArgumentPooler,twoArgumentPooler:twoArgumentPooler,threeArgumentPooler:threeArgumentPooler,fiveArgumentPooler:fiveArgumentPooler};module.exports = PooledClass;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],78:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule React
   */ /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/'use strict';var EventPluginUtils=require("./EventPluginUtils");var ReactChildren=require("./ReactChildren");var ReactComponent=require("./ReactComponent");var ReactClass=require("./ReactClass");var ReactContext=require("./ReactContext");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactElement=require("./ReactElement");var ReactElementValidator=require("./ReactElementValidator");var ReactDOM=require("./ReactDOM");var ReactDOMTextComponent=require("./ReactDOMTextComponent");var ReactDefaultInjection=require("./ReactDefaultInjection");var ReactInstanceHandles=require("./ReactInstanceHandles");var ReactMount=require("./ReactMount");var ReactPerf=require("./ReactPerf");var ReactPropTypes=require("./ReactPropTypes");var ReactReconciler=require("./ReactReconciler");var ReactServerRendering=require("./ReactServerRendering");var assign=require("./Object.assign");var findDOMNode=require("./findDOMNode");var onlyChild=require("./onlyChild");ReactDefaultInjection.inject();var createElement=ReactElement.createElement;var createFactory=ReactElement.createFactory;var cloneElement=ReactElement.cloneElement;if("production" !== process.env.NODE_ENV){createElement = ReactElementValidator.createElement;createFactory = ReactElementValidator.createFactory;cloneElement = ReactElementValidator.cloneElement;}var render=ReactPerf.measure('React','render',ReactMount.render);var React={Children:{map:ReactChildren.map,forEach:ReactChildren.forEach,count:ReactChildren.count,only:onlyChild},Component:ReactComponent,DOM:ReactDOM,PropTypes:ReactPropTypes,initializeTouchEvents:function initializeTouchEvents(shouldUseTouch){EventPluginUtils.useTouchEvents = shouldUseTouch;},createClass:ReactClass.createClass,createElement:createElement,cloneElement:cloneElement,createFactory:createFactory,createMixin:function createMixin(mixin){ // Currently a noop. Will be used to validate and trace mixins.
  return mixin;},constructAndRenderComponent:ReactMount.constructAndRenderComponent,constructAndRenderComponentByID:ReactMount.constructAndRenderComponentByID,findDOMNode:findDOMNode,render:render,renderToString:ReactServerRendering.renderToString,renderToStaticMarkup:ReactServerRendering.renderToStaticMarkup,unmountComponentAtNode:ReactMount.unmountComponentAtNode,isValidElement:ReactElement.isValidElement,withContext:ReactContext.withContext, // Hook for JSX spread, don't use this for anything else.
  __spread:assign}; // Inject the runtime into a devtools global hook regardless of browser.
  // Allows for debugging when the hook is injected on the page.
  if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function'){__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({CurrentOwner:ReactCurrentOwner,InstanceHandles:ReactInstanceHandles,Mount:ReactMount,Reconciler:ReactReconciler,TextComponent:ReactDOMTextComponent});}if("production" !== process.env.NODE_ENV){var ExecutionEnvironment=require("./ExecutionEnvironment");if(ExecutionEnvironment.canUseDOM && window.top === window.self){ // If we're in Chrome, look for the devtools marker and provide a download
  // link if not installed.
  if(navigator.userAgent.indexOf('Chrome') > -1){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined'){console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');}}var expectedFeatures=[ // shims
  Array.isArray,Array.prototype.every,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.map,Date.now,Function.prototype.bind,Object.keys,String.prototype.split,String.prototype.trim, // shams
  Object.create,Object.freeze];for(var i=0;i < expectedFeatures.length;i++) {if(!expectedFeatures[i]){console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');break;}}}}React.version = '0.13.3';module.exports = React;}).call(this,require('_process'));},{"./EventPluginUtils":68,"./ExecutionEnvironment":70,"./Object.assign":76,"./ReactChildren":82,"./ReactClass":83,"./ReactComponent":84,"./ReactContext":88,"./ReactCurrentOwner":89,"./ReactDOM":90,"./ReactDOMTextComponent":101,"./ReactDefaultInjection":104,"./ReactElement":107,"./ReactElementValidator":108,"./ReactInstanceHandles":116,"./ReactMount":120,"./ReactPerf":125,"./ReactPropTypes":128,"./ReactReconciler":131,"./ReactServerRendering":134,"./findDOMNode":167,"./onlyChild":194,"_process":12}],79:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactBrowserComponentMixin
   */'use strict';var findDOMNode=require("./findDOMNode");var ReactBrowserComponentMixin={ /**
     * Returns the DOM node rendered by this component.
     *
     * @return {DOMElement} The root node of this component.
     * @final
     * @protected
     */getDOMNode:function getDOMNode(){return findDOMNode(this);}};module.exports = ReactBrowserComponentMixin;},{"./findDOMNode":167}],80:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactBrowserEventEmitter
   * @typechecks static-only
   */'use strict';var EventConstants=require("./EventConstants");var EventPluginHub=require("./EventPluginHub");var EventPluginRegistry=require("./EventPluginRegistry");var ReactEventEmitterMixin=require("./ReactEventEmitterMixin");var ViewportMetrics=require("./ViewportMetrics");var assign=require("./Object.assign");var isEventSupported=require("./isEventSupported"); /**
   * Summary of `ReactBrowserEventEmitter` event handling:
   *
   *  - Top-level delegation is used to trap most native browser events. This
   *    may only occur in the main thread and is the responsibility of
   *    ReactEventListener, which is injected and can therefore support pluggable
   *    event sources. This is the only work that occurs in the main thread.
   *
   *  - We normalize and de-duplicate events to account for browser quirks. This
   *    may be done in the worker thread.
   *
   *  - Forward these native events (with the associated top-level type used to
   *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want
   *    to extract any synthetic events.
   *
   *  - The `EventPluginHub` will then process each event by annotating them with
   *    "dispatches", a sequence of listeners and IDs that care about that event.
   *
   *  - The `EventPluginHub` then dispatches the events.
   *
   * Overview of React and the event system:
   *
   * +------------+    .
   * |    DOM     |    .
   * +------------+    .
   *       |           .
   *       v           .
   * +------------+    .
   * | ReactEvent |    .
   * |  Listener  |    .
   * +------------+    .                         +-----------+
   *       |           .               +--------+|SimpleEvent|
   *       |           .               |         |Plugin     |
   * +-----|------+    .               v         +-----------+
   * |     |      |    .    +--------------+                    +------------+
   * |     +-----------.--->|EventPluginHub|                    |    Event   |
   * |            |    .    |              |     +-----------+  | Propagators|
   * | ReactEvent |    .    |              |     |TapEvent   |  |------------|
   * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|
   * |            |    .    |              |     +-----------+  |  utilities |
   * |     +-----------.--->|              |                    +------------+
   * |     |      |    .    +--------------+
   * +-----|------+    .                ^        +-----------+
   *       |           .                |        |Enter/Leave|
   *       +           .                +-------+|Plugin     |
   * +-------------+   .                         +-----------+
   * | application |   .
   * |-------------|   .
   * |             |   .
   * |             |   .
   * +-------------+   .
   *                   .
   *    React Core     .  General Purpose Event Plugin System
   */var alreadyListeningTo={};var isMonitoringScrollValue=false;var reactTopListenersCounter=0; // For events like 'submit' which don't consistently bubble (which we trap at a
  // lower node than `document`), binding at `document` would cause duplicate
  // events so we don't include them here
  var topEventMapping={topBlur:'blur',topChange:'change',topClick:'click',topCompositionEnd:'compositionend',topCompositionStart:'compositionstart',topCompositionUpdate:'compositionupdate',topContextMenu:'contextmenu',topCopy:'copy',topCut:'cut',topDoubleClick:'dblclick',topDrag:'drag',topDragEnd:'dragend',topDragEnter:'dragenter',topDragExit:'dragexit',topDragLeave:'dragleave',topDragOver:'dragover',topDragStart:'dragstart',topDrop:'drop',topFocus:'focus',topInput:'input',topKeyDown:'keydown',topKeyPress:'keypress',topKeyUp:'keyup',topMouseDown:'mousedown',topMouseMove:'mousemove',topMouseOut:'mouseout',topMouseOver:'mouseover',topMouseUp:'mouseup',topPaste:'paste',topScroll:'scroll',topSelectionChange:'selectionchange',topTextInput:'textInput',topTouchCancel:'touchcancel',topTouchEnd:'touchend',topTouchMove:'touchmove',topTouchStart:'touchstart',topWheel:'wheel'}; /**
   * To ensure no conflicts with other potential React instances on the page
   */var topListenersIDKey='_reactListenersID' + String(Math.random()).slice(2);function getListeningForDocument(mountAt){ // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
  // directly.
  if(!Object.prototype.hasOwnProperty.call(mountAt,topListenersIDKey)){mountAt[topListenersIDKey] = reactTopListenersCounter++;alreadyListeningTo[mountAt[topListenersIDKey]] = {};}return alreadyListeningTo[mountAt[topListenersIDKey]];} /**
   * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
   * example:
   *
   *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
   *
   * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
   *
   * @internal
   */var ReactBrowserEventEmitter=assign({},ReactEventEmitterMixin,{ /**
     * Injectable event backend
     */ReactEventListener:null,injection:{ /**
       * @param {object} ReactEventListener
       */injectReactEventListener:function injectReactEventListener(ReactEventListener){ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;}}, /**
     * Sets whether or not any created callbacks should be enabled.
     *
     * @param {boolean} enabled True if callbacks should be enabled.
     */setEnabled:function setEnabled(enabled){if(ReactBrowserEventEmitter.ReactEventListener){ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);}}, /**
     * @return {boolean} True if callbacks are enabled.
     */isEnabled:function isEnabled(){return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());}, /**
     * We listen for bubbled touch events on the document object.
     *
     * Firefox v8.01 (and possibly others) exhibited strange behavior when
     * mounting `onmousemove` events at some node that was not the document
     * element. The symptoms were that if your mouse is not moving over something
     * contained within that mount point (for example on the background) the
     * top-level listeners for `onmousemove` won't be called. However, if you
     * register the `mousemove` on the document object, then it will of course
     * catch all `mousemove`s. This along with iOS quirks, justifies restricting
     * top-level listeners to the document object only, at least for these
     * movement types of events and possibly all events.
     *
     * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
     *
     * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
     * they bubble to document.
     *
     * @param {string} registrationName Name of listener (e.g. `onClick`).
     * @param {object} contentDocumentHandle Document which owns the container
     */listenTo:function listenTo(registrationName,contentDocumentHandle){var mountAt=contentDocumentHandle;var isListening=getListeningForDocument(mountAt);var dependencies=EventPluginRegistry.registrationNameDependencies[registrationName];var topLevelTypes=EventConstants.topLevelTypes;for(var i=0,l=dependencies.length;i < l;i++) {var dependency=dependencies[i];if(!(isListening.hasOwnProperty(dependency) && isListening[dependency])){if(dependency === topLevelTypes.topWheel){if(isEventSupported('wheel')){ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel,'wheel',mountAt);}else if(isEventSupported('mousewheel')){ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel,'mousewheel',mountAt);}else { // Firefox needs to capture a different mouse scroll event.
  // @see http://www.quirksmode.org/dom/events/tests/scroll.html
  ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel,'DOMMouseScroll',mountAt);}}else if(dependency === topLevelTypes.topScroll){if(isEventSupported('scroll',true)){ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll,'scroll',mountAt);}else {ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll,'scroll',ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);}}else if(dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur){if(isEventSupported('focus',true)){ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus,'focus',mountAt);ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur,'blur',mountAt);}else if(isEventSupported('focusin')){ // IE has `focusin` and `focusout` events which bubble.
  // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
  ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus,'focusin',mountAt);ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur,'focusout',mountAt);} // to make sure blur and focus event listeners are only attached once
  isListening[topLevelTypes.topBlur] = true;isListening[topLevelTypes.topFocus] = true;}else if(topEventMapping.hasOwnProperty(dependency)){ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency,topEventMapping[dependency],mountAt);}isListening[dependency] = true;}}},trapBubbledEvent:function trapBubbledEvent(topLevelType,handlerBaseName,handle){return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType,handlerBaseName,handle);},trapCapturedEvent:function trapCapturedEvent(topLevelType,handlerBaseName,handle){return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType,handlerBaseName,handle);}, /**
     * Listens to window scroll and resize events. We cache scroll values so that
     * application code can access them without triggering reflows.
     *
     * NOTE: Scroll events do not bubble.
     *
     * @see http://www.quirksmode.org/dom/events/scroll.html
     */ensureScrollValueMonitoring:function ensureScrollValueMonitoring(){if(!isMonitoringScrollValue){var refresh=ViewportMetrics.refreshScrollValues;ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);isMonitoringScrollValue = true;}},eventNameDispatchConfigs:EventPluginHub.eventNameDispatchConfigs,registrationNameModules:EventPluginHub.registrationNameModules,putListener:EventPluginHub.putListener,getListener:EventPluginHub.getListener,deleteListener:EventPluginHub.deleteListener,deleteAllListeners:EventPluginHub.deleteAllListeners});module.exports = ReactBrowserEventEmitter;},{"./EventConstants":64,"./EventPluginHub":66,"./EventPluginRegistry":67,"./Object.assign":76,"./ReactEventEmitterMixin":111,"./ViewportMetrics":154,"./isEventSupported":186}],81:[function(require,module,exports){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactChildReconciler
   * @typechecks static-only
   */'use strict';var ReactReconciler=require("./ReactReconciler");var flattenChildren=require("./flattenChildren");var instantiateReactComponent=require("./instantiateReactComponent");var shouldUpdateReactComponent=require("./shouldUpdateReactComponent"); /**
   * ReactChildReconciler provides helpers for initializing or updating a set of
   * children. Its output is suitable for passing it onto ReactMultiChild which
   * does diffed reordering and insertion.
   */var ReactChildReconciler={ /**
     * Generates a "mount image" for each of the supplied children. In the case
     * of `ReactDOMComponent`, a mount image is a string of markup.
     *
     * @param {?object} nestedChildNodes Nested child maps.
     * @return {?object} A set of child instances.
     * @internal
     */instantiateChildren:function instantiateChildren(nestedChildNodes,transaction,context){var children=flattenChildren(nestedChildNodes);for(var name in children) {if(children.hasOwnProperty(name)){var child=children[name]; // The rendered children must be turned into instances as they're
  // mounted.
  var childInstance=instantiateReactComponent(child,null);children[name] = childInstance;}}return children;}, /**
     * Updates the rendered children and returns a new set of children.
     *
     * @param {?object} prevChildren Previously initialized set of children.
     * @param {?object} nextNestedChildNodes Nested child maps.
     * @param {ReactReconcileTransaction} transaction
     * @param {object} context
     * @return {?object} A new set of child instances.
     * @internal
     */updateChildren:function updateChildren(prevChildren,nextNestedChildNodes,transaction,context){ // We currently don't have a way to track moves here but if we use iterators
  // instead of for..in we can zip the iterators and check if an item has
  // moved.
  // TODO: If nothing has changed, return the prevChildren object so that we
  // can quickly bailout if nothing has changed.
  var nextChildren=flattenChildren(nextNestedChildNodes);if(!nextChildren && !prevChildren){return null;}var name;for(name in nextChildren) {if(!nextChildren.hasOwnProperty(name)){continue;}var prevChild=prevChildren && prevChildren[name];var prevElement=prevChild && prevChild._currentElement;var nextElement=nextChildren[name];if(shouldUpdateReactComponent(prevElement,nextElement)){ReactReconciler.receiveComponent(prevChild,nextElement,transaction,context);nextChildren[name] = prevChild;}else {if(prevChild){ReactReconciler.unmountComponent(prevChild,name);} // The child must be instantiated before it's mounted.
  var nextChildInstance=instantiateReactComponent(nextElement,null);nextChildren[name] = nextChildInstance;}} // Unmount children that are no longer present.
  for(name in prevChildren) {if(prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))){ReactReconciler.unmountComponent(prevChildren[name]);}}return nextChildren;}, /**
     * Unmounts all rendered children. This should be used to clean up children
     * when this component is unmounted.
     *
     * @param {?object} renderedChildren Previously initialized set of children.
     * @internal
     */unmountChildren:function unmountChildren(renderedChildren){for(var name in renderedChildren) {var renderedChild=renderedChildren[name];ReactReconciler.unmountComponent(renderedChild);}}};module.exports = ReactChildReconciler;},{"./ReactReconciler":131,"./flattenChildren":168,"./instantiateReactComponent":184,"./shouldUpdateReactComponent":201}],82:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactChildren
   */'use strict';var PooledClass=require("./PooledClass");var ReactFragment=require("./ReactFragment");var traverseAllChildren=require("./traverseAllChildren");var warning=require("./warning");var twoArgumentPooler=PooledClass.twoArgumentPooler;var threeArgumentPooler=PooledClass.threeArgumentPooler; /**
   * PooledClass representing the bookkeeping associated with performing a child
   * traversal. Allows avoiding binding callbacks.
   *
   * @constructor ForEachBookKeeping
   * @param {!function} forEachFunction Function to perform traversal with.
   * @param {?*} forEachContext Context to perform context with.
   */function ForEachBookKeeping(forEachFunction,forEachContext){this.forEachFunction = forEachFunction;this.forEachContext = forEachContext;}PooledClass.addPoolingTo(ForEachBookKeeping,twoArgumentPooler);function forEachSingleChild(traverseContext,child,name,i){var forEachBookKeeping=traverseContext;forEachBookKeeping.forEachFunction.call(forEachBookKeeping.forEachContext,child,i);} /**
   * Iterates through children that are typically specified as `props.children`.
   *
   * The provided forEachFunc(child, index) will be called for each
   * leaf child.
   *
   * @param {?*} children Children tree container.
   * @param {function(*, int)} forEachFunc.
   * @param {*} forEachContext Context for forEachContext.
   */function forEachChildren(children,forEachFunc,forEachContext){if(children == null){return children;}var traverseContext=ForEachBookKeeping.getPooled(forEachFunc,forEachContext);traverseAllChildren(children,forEachSingleChild,traverseContext);ForEachBookKeeping.release(traverseContext);} /**
   * PooledClass representing the bookkeeping associated with performing a child
   * mapping. Allows avoiding binding callbacks.
   *
   * @constructor MapBookKeeping
   * @param {!*} mapResult Object containing the ordered map of results.
   * @param {!function} mapFunction Function to perform mapping with.
   * @param {?*} mapContext Context to perform mapping with.
   */function MapBookKeeping(mapResult,mapFunction,mapContext){this.mapResult = mapResult;this.mapFunction = mapFunction;this.mapContext = mapContext;}PooledClass.addPoolingTo(MapBookKeeping,threeArgumentPooler);function mapSingleChildIntoContext(traverseContext,child,name,i){var mapBookKeeping=traverseContext;var mapResult=mapBookKeeping.mapResult;var keyUnique=!mapResult.hasOwnProperty(name);if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(keyUnique,'ReactChildren.map(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.',name):null;}if(keyUnique){var mappedChild=mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext,child,i);mapResult[name] = mappedChild;}} /**
   * Maps children that are typically specified as `props.children`.
   *
   * The provided mapFunction(child, key, index) will be called for each
   * leaf child.
   *
   * TODO: This may likely break any calls to `ReactChildren.map` that were
   * previously relying on the fact that we guarded against null children.
   *
   * @param {?*} children Children tree container.
   * @param {function(*, int)} mapFunction.
   * @param {*} mapContext Context for mapFunction.
   * @return {object} Object containing the ordered map of results.
   */function mapChildren(children,func,context){if(children == null){return children;}var mapResult={};var traverseContext=MapBookKeeping.getPooled(mapResult,func,context);traverseAllChildren(children,mapSingleChildIntoContext,traverseContext);MapBookKeeping.release(traverseContext);return ReactFragment.create(mapResult);}function forEachSingleChildDummy(traverseContext,child,name,i){return null;} /**
   * Count the number of children that are typically specified as
   * `props.children`.
   *
   * @param {?*} children Children tree container.
   * @return {number} The number of children.
   */function countChildren(children,context){return traverseAllChildren(children,forEachSingleChildDummy,null);}var ReactChildren={forEach:forEachChildren,map:mapChildren,count:countChildren};module.exports = ReactChildren;}).call(this,require('_process'));},{"./PooledClass":77,"./ReactFragment":113,"./traverseAllChildren":203,"./warning":204,"_process":12}],83:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactClass
   */'use strict';var ReactComponent=require("./ReactComponent");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactElement=require("./ReactElement");var ReactErrorUtils=require("./ReactErrorUtils");var ReactInstanceMap=require("./ReactInstanceMap");var ReactLifeCycle=require("./ReactLifeCycle");var ReactPropTypeLocations=require("./ReactPropTypeLocations");var ReactPropTypeLocationNames=require("./ReactPropTypeLocationNames");var ReactUpdateQueue=require("./ReactUpdateQueue");var assign=require("./Object.assign");var invariant=require("./invariant");var keyMirror=require("./keyMirror");var keyOf=require("./keyOf");var warning=require("./warning");var MIXINS_KEY=keyOf({mixins:null}); /**
   * Policies that describe methods in `ReactClassInterface`.
   */var SpecPolicy=keyMirror({ /**
     * These methods may be defined only once by the class specification or mixin.
     */DEFINE_ONCE:null, /**
     * These methods may be defined by both the class specification and mixins.
     * Subsequent definitions will be chained. These methods must return void.
     */DEFINE_MANY:null, /**
     * These methods are overriding the base class.
     */OVERRIDE_BASE:null, /**
     * These methods are similar to DEFINE_MANY, except we assume they return
     * objects. We try to merge the keys of the return values of all the mixed in
     * functions. If there is a key conflict we throw.
     */DEFINE_MANY_MERGED:null});var injectedMixins=[]; /**
   * Composite components are higher-level components that compose other composite
   * or native components.
   *
   * To create a new type of `ReactClass`, pass a specification of
   * your new class to `React.createClass`. The only requirement of your class
   * specification is that you implement a `render` method.
   *
   *   var MyComponent = React.createClass({
   *     render: function() {
   *       return <div>Hello World</div>;
   *     }
   *   });
   *
   * The class specification supports a specific protocol of methods that have
   * special meaning (e.g. `render`). See `ReactClassInterface` for
   * more the comprehensive protocol. Any other properties and methods in the
   * class specification will available on the prototype.
   *
   * @interface ReactClassInterface
   * @internal
   */var ReactClassInterface={ /**
     * An array of Mixin objects to include when defining your component.
     *
     * @type {array}
     * @optional
     */mixins:SpecPolicy.DEFINE_MANY, /**
     * An object containing properties and methods that should be defined on
     * the component's constructor instead of its prototype (static methods).
     *
     * @type {object}
     * @optional
     */statics:SpecPolicy.DEFINE_MANY, /**
     * Definition of prop types for this component.
     *
     * @type {object}
     * @optional
     */propTypes:SpecPolicy.DEFINE_MANY, /**
     * Definition of context types for this component.
     *
     * @type {object}
     * @optional
     */contextTypes:SpecPolicy.DEFINE_MANY, /**
     * Definition of context types this component sets for its children.
     *
     * @type {object}
     * @optional
     */childContextTypes:SpecPolicy.DEFINE_MANY, // ==== Definition methods ====
  /**
     * Invoked when the component is mounted. Values in the mapping will be set on
     * `this.props` if that prop is not specified (i.e. using an `in` check).
     *
     * This method is invoked before `getInitialState` and therefore cannot rely
     * on `this.state` or use `this.setState`.
     *
     * @return {object}
     * @optional
     */getDefaultProps:SpecPolicy.DEFINE_MANY_MERGED, /**
     * Invoked once before the component is mounted. The return value will be used
     * as the initial value of `this.state`.
     *
     *   getInitialState: function() {
     *     return {
     *       isOn: false,
     *       fooBaz: new BazFoo()
     *     }
     *   }
     *
     * @return {object}
     * @optional
     */getInitialState:SpecPolicy.DEFINE_MANY_MERGED, /**
     * @return {object}
     * @optional
     */getChildContext:SpecPolicy.DEFINE_MANY_MERGED, /**
     * Uses props from `this.props` and state from `this.state` to render the
     * structure of the component.
     *
     * No guarantees are made about when or how often this method is invoked, so
     * it must not have side effects.
     *
     *   render: function() {
     *     var name = this.props.name;
     *     return <div>Hello, {name}!</div>;
     *   }
     *
     * @return {ReactComponent}
     * @nosideeffects
     * @required
     */render:SpecPolicy.DEFINE_ONCE, // ==== Delegate methods ====
  /**
     * Invoked when the component is initially created and about to be mounted.
     * This may have side effects, but any external subscriptions or data created
     * by this method must be cleaned up in `componentWillUnmount`.
     *
     * @optional
     */componentWillMount:SpecPolicy.DEFINE_MANY, /**
     * Invoked when the component has been mounted and has a DOM representation.
     * However, there is no guarantee that the DOM node is in the document.
     *
     * Use this as an opportunity to operate on the DOM when the component has
     * been mounted (initialized and rendered) for the first time.
     *
     * @param {DOMElement} rootNode DOM element representing the component.
     * @optional
     */componentDidMount:SpecPolicy.DEFINE_MANY, /**
     * Invoked before the component receives new props.
     *
     * Use this as an opportunity to react to a prop transition by updating the
     * state using `this.setState`. Current props are accessed via `this.props`.
     *
     *   componentWillReceiveProps: function(nextProps, nextContext) {
     *     this.setState({
     *       likesIncreasing: nextProps.likeCount > this.props.likeCount
     *     });
     *   }
     *
     * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
     * transition may cause a state change, but the opposite is not true. If you
     * need it, you are probably looking for `componentWillUpdate`.
     *
     * @param {object} nextProps
     * @optional
     */componentWillReceiveProps:SpecPolicy.DEFINE_MANY, /**
     * Invoked while deciding if the component should be updated as a result of
     * receiving new props, state and/or context.
     *
     * Use this as an opportunity to `return false` when you're certain that the
     * transition to the new props/state/context will not require a component
     * update.
     *
     *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
     *     return !equal(nextProps, this.props) ||
     *       !equal(nextState, this.state) ||
     *       !equal(nextContext, this.context);
     *   }
     *
     * @param {object} nextProps
     * @param {?object} nextState
     * @param {?object} nextContext
     * @return {boolean} True if the component should update.
     * @optional
     */shouldComponentUpdate:SpecPolicy.DEFINE_ONCE, /**
     * Invoked when the component is about to update due to a transition from
     * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
     * and `nextContext`.
     *
     * Use this as an opportunity to perform preparation before an update occurs.
     *
     * NOTE: You **cannot** use `this.setState()` in this method.
     *
     * @param {object} nextProps
     * @param {?object} nextState
     * @param {?object} nextContext
     * @param {ReactReconcileTransaction} transaction
     * @optional
     */componentWillUpdate:SpecPolicy.DEFINE_MANY, /**
     * Invoked when the component's DOM representation has been updated.
     *
     * Use this as an opportunity to operate on the DOM when the component has
     * been updated.
     *
     * @param {object} prevProps
     * @param {?object} prevState
     * @param {?object} prevContext
     * @param {DOMElement} rootNode DOM element representing the component.
     * @optional
     */componentDidUpdate:SpecPolicy.DEFINE_MANY, /**
     * Invoked when the component is about to be removed from its parent and have
     * its DOM representation destroyed.
     *
     * Use this as an opportunity to deallocate any external resources.
     *
     * NOTE: There is no `componentDidUnmount` since your component will have been
     * destroyed by that point.
     *
     * @optional
     */componentWillUnmount:SpecPolicy.DEFINE_MANY, // ==== Advanced methods ====
  /**
     * Updates the component's currently mounted DOM representation.
     *
     * By default, this implements React's rendering and reconciliation algorithm.
     * Sophisticated clients may wish to override this.
     *
     * @param {ReactReconcileTransaction} transaction
     * @internal
     * @overridable
     */updateComponent:SpecPolicy.OVERRIDE_BASE}; /**
   * Mapping from class specification keys to special processing functions.
   *
   * Although these are declared like instance properties in the specification
   * when defining classes using `React.createClass`, they are actually static
   * and are accessible on the constructor instead of the prototype. Despite
   * being static, they must be defined outside of the "statics" key under
   * which all other static methods are defined.
   */var RESERVED_SPEC_KEYS={displayName:function displayName(Constructor,_displayName){Constructor.displayName = _displayName;},mixins:function mixins(Constructor,_mixins){if(_mixins){for(var i=0;i < _mixins.length;i++) {mixSpecIntoComponent(Constructor,_mixins[i]);}}},childContextTypes:function childContextTypes(Constructor,_childContextTypes){if("production" !== process.env.NODE_ENV){validateTypeDef(Constructor,_childContextTypes,ReactPropTypeLocations.childContext);}Constructor.childContextTypes = assign({},Constructor.childContextTypes,_childContextTypes);},contextTypes:function contextTypes(Constructor,_contextTypes){if("production" !== process.env.NODE_ENV){validateTypeDef(Constructor,_contextTypes,ReactPropTypeLocations.context);}Constructor.contextTypes = assign({},Constructor.contextTypes,_contextTypes);}, /**
     * Special case getDefaultProps which should move into statics but requires
     * automatic merging.
     */getDefaultProps:function getDefaultProps(Constructor,_getDefaultProps){if(Constructor.getDefaultProps){Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps,_getDefaultProps);}else {Constructor.getDefaultProps = _getDefaultProps;}},propTypes:function propTypes(Constructor,_propTypes){if("production" !== process.env.NODE_ENV){validateTypeDef(Constructor,_propTypes,ReactPropTypeLocations.prop);}Constructor.propTypes = assign({},Constructor.propTypes,_propTypes);},statics:function statics(Constructor,_statics){mixStaticSpecIntoComponent(Constructor,_statics);}};function validateTypeDef(Constructor,typeDef,location){for(var propName in typeDef) {if(typeDef.hasOwnProperty(propName)){ // use a warning instead of an invariant so components
  // don't show up in prod but not in __DEV__
  "production" !== process.env.NODE_ENV?warning(typeof typeDef[propName] === 'function','%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.',Constructor.displayName || 'ReactClass',ReactPropTypeLocationNames[location],propName):null;}}}function validateMethodOverride(proto,name){var specPolicy=ReactClassInterface.hasOwnProperty(name)?ReactClassInterface[name]:null; // Disallow overriding of base class methods unless explicitly allowed.
  if(ReactClassMixin.hasOwnProperty(name)){"production" !== process.env.NODE_ENV?invariant(specPolicy === SpecPolicy.OVERRIDE_BASE,'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.',name):invariant(specPolicy === SpecPolicy.OVERRIDE_BASE);} // Disallow defining methods more than once unless explicitly allowed.
  if(proto.hasOwnProperty(name)){"production" !== process.env.NODE_ENV?invariant(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED,'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.',name):invariant(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED);}} /**
   * Mixin helper which handles policy validation and reserved
   * specification keys when building React classses.
   */function mixSpecIntoComponent(Constructor,spec){if(!spec){return;}"production" !== process.env.NODE_ENV?invariant(typeof spec !== 'function','ReactClass: You\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.'):invariant(typeof spec !== 'function');"production" !== process.env.NODE_ENV?invariant(!ReactElement.isValidElement(spec),'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.'):invariant(!ReactElement.isValidElement(spec));var proto=Constructor.prototype; // By handling mixins before any other properties, we ensure the same
  // chaining order is applied to methods with DEFINE_MANY policy, whether
  // mixins are listed before or after these methods in the spec.
  if(spec.hasOwnProperty(MIXINS_KEY)){RESERVED_SPEC_KEYS.mixins(Constructor,spec.mixins);}for(var name in spec) {if(!spec.hasOwnProperty(name)){continue;}if(name === MIXINS_KEY){ // We have already handled mixins in a special case above
  continue;}var property=spec[name];validateMethodOverride(proto,name);if(RESERVED_SPEC_KEYS.hasOwnProperty(name)){RESERVED_SPEC_KEYS[name](Constructor,property);}else { // Setup methods on prototype:
  // The following member methods should not be automatically bound:
  // 1. Expected ReactClass methods (in the "interface").
  // 2. Overridden methods (that were mixed in).
  var isReactClassMethod=ReactClassInterface.hasOwnProperty(name);var isAlreadyDefined=proto.hasOwnProperty(name);var markedDontBind=property && property.__reactDontBind;var isFunction=typeof property === 'function';var shouldAutoBind=isFunction && !isReactClassMethod && !isAlreadyDefined && !markedDontBind;if(shouldAutoBind){if(!proto.__reactAutoBindMap){proto.__reactAutoBindMap = {};}proto.__reactAutoBindMap[name] = property;proto[name] = property;}else {if(isAlreadyDefined){var specPolicy=ReactClassInterface[name]; // These cases should already be caught by validateMethodOverride
  "production" !== process.env.NODE_ENV?invariant(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY),'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.',specPolicy,name):invariant(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)); // For methods which are defined more than once, call the existing
  // methods before calling the new property, merging if appropriate.
  if(specPolicy === SpecPolicy.DEFINE_MANY_MERGED){proto[name] = createMergedResultFunction(proto[name],property);}else if(specPolicy === SpecPolicy.DEFINE_MANY){proto[name] = createChainedFunction(proto[name],property);}}else {proto[name] = property;if("production" !== process.env.NODE_ENV){ // Add verbose displayName to the function, which helps when looking
  // at profiling tools.
  if(typeof property === 'function' && spec.displayName){proto[name].displayName = spec.displayName + '_' + name;}}}}}}}function mixStaticSpecIntoComponent(Constructor,statics){if(!statics){return;}for(var name in statics) {var property=statics[name];if(!statics.hasOwnProperty(name)){continue;}var isReserved=(name in RESERVED_SPEC_KEYS);"production" !== process.env.NODE_ENV?invariant(!isReserved,'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.',name):invariant(!isReserved);var isInherited=(name in Constructor);"production" !== process.env.NODE_ENV?invariant(!isInherited,'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.',name):invariant(!isInherited);Constructor[name] = property;}} /**
   * Merge two objects, but throw if both contain the same key.
   *
   * @param {object} one The first object, which is mutated.
   * @param {object} two The second object
   * @return {object} one after it has been mutated to contain everything in two.
   */function mergeIntoWithNoDuplicateKeys(one,two){"production" !== process.env.NODE_ENV?invariant(one && two && typeof one === 'object' && typeof two === 'object','mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'):invariant(one && two && typeof one === 'object' && typeof two === 'object');for(var key in two) {if(two.hasOwnProperty(key)){"production" !== process.env.NODE_ENV?invariant(one[key] === undefined,'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.',key):invariant(one[key] === undefined);one[key] = two[key];}}return one;} /**
   * Creates a function that invokes two functions and merges their return values.
   *
   * @param {function} one Function to invoke first.
   * @param {function} two Function to invoke second.
   * @return {function} Function that invokes the two argument functions.
   * @private
   */function createMergedResultFunction(one,two){return function mergedResult(){var a=one.apply(this,arguments);var b=two.apply(this,arguments);if(a == null){return b;}else if(b == null){return a;}var c={};mergeIntoWithNoDuplicateKeys(c,a);mergeIntoWithNoDuplicateKeys(c,b);return c;};} /**
   * Creates a function that invokes two functions and ignores their return vales.
   *
   * @param {function} one Function to invoke first.
   * @param {function} two Function to invoke second.
   * @return {function} Function that invokes the two argument functions.
   * @private
   */function createChainedFunction(one,two){return function chainedFunction(){one.apply(this,arguments);two.apply(this,arguments);};} /**
   * Binds a method to the component.
   *
   * @param {object} component Component whose method is going to be bound.
   * @param {function} method Method to be bound.
   * @return {function} The bound method.
   */function bindAutoBindMethod(component,method){var boundMethod=method.bind(component);if("production" !== process.env.NODE_ENV){boundMethod.__reactBoundContext = component;boundMethod.__reactBoundMethod = method;boundMethod.__reactBoundArguments = null;var componentName=component.constructor.displayName;var _bind=boundMethod.bind; /* eslint-disable block-scoped-var, no-undef */boundMethod.bind = function(newThis){for(var args=[],$__0=1,$__1=arguments.length;$__0 < $__1;$__0++) args.push(arguments[$__0]); // User is trying to bind() an autobound method; we effectively will
  // ignore the value of "this" that the user is trying to use, so
  // let's warn.
  if(newThis !== component && newThis !== null){"production" !== process.env.NODE_ENV?warning(false,'bind(): React component methods may only be bound to the ' + 'component instance. See %s',componentName):null;}else if(!args.length){"production" !== process.env.NODE_ENV?warning(false,'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s',componentName):null;return boundMethod;}var reboundMethod=_bind.apply(boundMethod,arguments);reboundMethod.__reactBoundContext = component;reboundMethod.__reactBoundMethod = method;reboundMethod.__reactBoundArguments = args;return reboundMethod; /* eslint-enable */};}return boundMethod;} /**
   * Binds all auto-bound methods in a component.
   *
   * @param {object} component Component whose method is going to be bound.
   */function bindAutoBindMethods(component){for(var autoBindKey in component.__reactAutoBindMap) {if(component.__reactAutoBindMap.hasOwnProperty(autoBindKey)){var method=component.__reactAutoBindMap[autoBindKey];component[autoBindKey] = bindAutoBindMethod(component,ReactErrorUtils.guard(method,component.constructor.displayName + '.' + autoBindKey));}}}var typeDeprecationDescriptor={enumerable:false,get:function get(){var displayName=this.displayName || this.name || 'Component';"production" !== process.env.NODE_ENV?warning(false,'%s.type is deprecated. Use %s directly to access the class.',displayName,displayName):null;Object.defineProperty(this,'type',{value:this});return this;}}; /**
   * Add more to the ReactClass base class. These are all legacy features and
   * therefore not already part of the modern ReactComponent.
   */var ReactClassMixin={ /**
     * TODO: This will be deprecated because state should always keep a consistent
     * type signature and the only use case for this, is to avoid that.
     */replaceState:function replaceState(newState,callback){ReactUpdateQueue.enqueueReplaceState(this,newState);if(callback){ReactUpdateQueue.enqueueCallback(this,callback);}}, /**
     * Checks whether or not this composite component is mounted.
     * @return {boolean} True if mounted, false otherwise.
     * @protected
     * @final
     */isMounted:function isMounted(){if("production" !== process.env.NODE_ENV){var owner=ReactCurrentOwner.current;if(owner !== null){"production" !== process.env.NODE_ENV?warning(owner._warnedAboutRefsInRender,'%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.',owner.getName() || 'A component'):null;owner._warnedAboutRefsInRender = true;}}var internalInstance=ReactInstanceMap.get(this);return internalInstance && internalInstance !== ReactLifeCycle.currentlyMountingInstance;}, /**
     * Sets a subset of the props.
     *
     * @param {object} partialProps Subset of the next props.
     * @param {?function} callback Called after props are updated.
     * @final
     * @public
     * @deprecated
     */setProps:function setProps(partialProps,callback){ReactUpdateQueue.enqueueSetProps(this,partialProps);if(callback){ReactUpdateQueue.enqueueCallback(this,callback);}}, /**
     * Replace all the props.
     *
     * @param {object} newProps Subset of the next props.
     * @param {?function} callback Called after props are updated.
     * @final
     * @public
     * @deprecated
     */replaceProps:function replaceProps(newProps,callback){ReactUpdateQueue.enqueueReplaceProps(this,newProps);if(callback){ReactUpdateQueue.enqueueCallback(this,callback);}}};var ReactClassComponent=function ReactClassComponent(){};assign(ReactClassComponent.prototype,ReactComponent.prototype,ReactClassMixin); /**
   * Module for creating composite components.
   *
   * @class ReactClass
   */var ReactClass={ /**
     * Creates a composite component class given a class specification.
     *
     * @param {object} spec Class specification (which must define `render`).
     * @return {function} Component constructor function.
     * @public
     */createClass:function createClass(spec){var Constructor=function Constructor(props,context){ // This constructor is overridden by mocks. The argument is used
  // by mocks to assert on what gets mounted.
  if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(this instanceof Constructor,'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory'):null;} // Wire up auto-binding
  if(this.__reactAutoBindMap){bindAutoBindMethods(this);}this.props = props;this.context = context;this.state = null; // ReactClasses doesn't have constructors. Instead, they use the
  // getInitialState and componentWillMount methods for initialization.
  var initialState=this.getInitialState?this.getInitialState():null;if("production" !== process.env.NODE_ENV){ // We allow auto-mocks to proceed as if they're returning null.
  if(typeof initialState === 'undefined' && this.getInitialState._isMockFunction){ // This is probably bad practice. Consider warning here and
  // deprecating this convenience.
  initialState = null;}}"production" !== process.env.NODE_ENV?invariant(typeof initialState === 'object' && !Array.isArray(initialState),'%s.getInitialState(): must return an object or null',Constructor.displayName || 'ReactCompositeComponent'):invariant(typeof initialState === 'object' && !Array.isArray(initialState));this.state = initialState;};Constructor.prototype = new ReactClassComponent();Constructor.prototype.constructor = Constructor;injectedMixins.forEach(mixSpecIntoComponent.bind(null,Constructor));mixSpecIntoComponent(Constructor,spec); // Initialize the defaultProps property after all mixins have been merged
  if(Constructor.getDefaultProps){Constructor.defaultProps = Constructor.getDefaultProps();}if("production" !== process.env.NODE_ENV){ // This is a tag to indicate that the use of these method names is ok,
  // since it's used with createClass. If it's not, then it's likely a
  // mistake so we'll warn you to use the static property, property
  // initializer or constructor respectively.
  if(Constructor.getDefaultProps){Constructor.getDefaultProps.isReactClassApproved = {};}if(Constructor.prototype.getInitialState){Constructor.prototype.getInitialState.isReactClassApproved = {};}}"production" !== process.env.NODE_ENV?invariant(Constructor.prototype.render,'createClass(...): Class specification must implement a `render` method.'):invariant(Constructor.prototype.render);if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(!Constructor.prototype.componentShouldUpdate,'%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.',spec.displayName || 'A component'):null;} // Reduce time spent doing lookups by setting these on the prototype.
  for(var methodName in ReactClassInterface) {if(!Constructor.prototype[methodName]){Constructor.prototype[methodName] = null;}} // Legacy hook
  Constructor.type = Constructor;if("production" !== process.env.NODE_ENV){try{Object.defineProperty(Constructor,'type',typeDeprecationDescriptor);}catch(x) { // IE will fail on defineProperty (es5-shim/sham too)
  }}return Constructor;},injection:{injectMixin:function injectMixin(mixin){injectedMixins.push(mixin);}}};module.exports = ReactClass;}).call(this,require('_process'));},{"./Object.assign":76,"./ReactComponent":84,"./ReactCurrentOwner":89,"./ReactElement":107,"./ReactErrorUtils":110,"./ReactInstanceMap":117,"./ReactLifeCycle":118,"./ReactPropTypeLocationNames":126,"./ReactPropTypeLocations":127,"./ReactUpdateQueue":136,"./invariant":185,"./keyMirror":190,"./keyOf":191,"./warning":204,"_process":12}],84:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactComponent
   */'use strict';var ReactUpdateQueue=require("./ReactUpdateQueue");var invariant=require("./invariant");var warning=require("./warning"); /**
   * Base class helpers for the updating state of a component.
   */function ReactComponent(props,context){this.props = props;this.context = context;} /**
   * Sets a subset of the state. Always use this to mutate
   * state. You should treat `this.state` as immutable.
   *
   * There is no guarantee that `this.state` will be immediately updated, so
   * accessing `this.state` after calling this method may return the old value.
   *
   * There is no guarantee that calls to `setState` will run synchronously,
   * as they may eventually be batched together.  You can provide an optional
   * callback that will be executed when the call to setState is actually
   * completed.
   *
   * When a function is provided to setState, it will be called at some point in
   * the future (not synchronously). It will be called with the up to date
   * component arguments (state, props, context). These values can be different
   * from this.* because your function may be called after receiveProps but before
   * shouldComponentUpdate, and this new state, props, and context will not yet be
   * assigned to this.
   *
   * @param {object|function} partialState Next partial state or function to
   *        produce next partial state to be merged with current state.
   * @param {?function} callback Called after state is updated.
   * @final
   * @protected
   */ReactComponent.prototype.setState = function(partialState,callback){"production" !== process.env.NODE_ENV?invariant(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null,'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.'):invariant(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null);if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(partialState != null,'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().'):null;}ReactUpdateQueue.enqueueSetState(this,partialState);if(callback){ReactUpdateQueue.enqueueCallback(this,callback);}}; /**
   * Forces an update. This should only be invoked when it is known with
   * certainty that we are **not** in a DOM transaction.
   *
   * You may want to call this when you know that some deeper aspect of the
   * component's state has changed but `setState` was not called.
   *
   * This will not invoke `shouldComponentUpdate`, but it will invoke
   * `componentWillUpdate` and `componentDidUpdate`.
   *
   * @param {?function} callback Called after update is complete.
   * @final
   * @protected
   */ReactComponent.prototype.forceUpdate = function(callback){ReactUpdateQueue.enqueueForceUpdate(this);if(callback){ReactUpdateQueue.enqueueCallback(this,callback);}}; /**
   * Deprecated APIs. These APIs used to exist on classic React classes but since
   * we would like to deprecate them, we're not going to move them over to this
   * modern base class. Instead, we define a getter that warns if it's accessed.
   */if("production" !== process.env.NODE_ENV){var deprecatedAPIs={getDOMNode:['getDOMNode','Use React.findDOMNode(component) instead.'],isMounted:['isMounted','Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],replaceProps:['replaceProps','Instead, call React.render again at the top level.'],replaceState:['replaceState','Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],setProps:['setProps','Instead, call React.render again at the top level.']};var defineDeprecationWarning=function defineDeprecationWarning(methodName,info){try{Object.defineProperty(ReactComponent.prototype,methodName,{get:function get(){"production" !== process.env.NODE_ENV?warning(false,'%s(...) is deprecated in plain JavaScript React classes. %s',info[0],info[1]):null;return undefined;}});}catch(x) { // IE will fail on defineProperty (es5-shim/sham too)
  }};for(var fnName in deprecatedAPIs) {if(deprecatedAPIs.hasOwnProperty(fnName)){defineDeprecationWarning(fnName,deprecatedAPIs[fnName]);}}}module.exports = ReactComponent;}).call(this,require('_process'));},{"./ReactUpdateQueue":136,"./invariant":185,"./warning":204,"_process":12}],85:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactComponentBrowserEnvironment
   */ /*jslint evil: true */'use strict';var ReactDOMIDOperations=require("./ReactDOMIDOperations");var ReactMount=require("./ReactMount"); /**
   * Abstracts away all functionality of the reconciler that requires knowledge of
   * the browser context. TODO: These callers should be refactored to avoid the
   * need for this injection.
   */var ReactComponentBrowserEnvironment={processChildrenUpdates:ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,replaceNodeWithMarkupByID:ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID, /**
     * If a particular environment requires that some resources be cleaned up,
     * specify this in the injected Mixin. In the DOM, we would likely want to
     * purge any cached node ID lookups.
     *
     * @private
     */unmountIDFromEnvironment:function unmountIDFromEnvironment(rootNodeID){ReactMount.purgeID(rootNodeID);}};module.exports = ReactComponentBrowserEnvironment;},{"./ReactDOMIDOperations":94,"./ReactMount":120}],86:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactComponentEnvironment
   */'use strict';var invariant=require("./invariant");var injected=false;var ReactComponentEnvironment={ /**
     * Optionally injectable environment dependent cleanup hook. (server vs.
     * browser etc). Example: A browser system caches DOM nodes based on component
     * ID and must remove that cache entry when this instance is unmounted.
     */unmountIDFromEnvironment:null, /**
     * Optionally injectable hook for swapping out mount images in the middle of
     * the tree.
     */replaceNodeWithMarkupByID:null, /**
     * Optionally injectable hook for processing a queue of child updates. Will
     * later move into MultiChildComponents.
     */processChildrenUpdates:null,injection:{injectEnvironment:function injectEnvironment(environment){"production" !== process.env.NODE_ENV?invariant(!injected,'ReactCompositeComponent: injectEnvironment() can only be called once.'):invariant(!injected);ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;injected = true;}}};module.exports = ReactComponentEnvironment;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],87:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactCompositeComponent
   */'use strict';var ReactComponentEnvironment=require("./ReactComponentEnvironment");var ReactContext=require("./ReactContext");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactElement=require("./ReactElement");var ReactElementValidator=require("./ReactElementValidator");var ReactInstanceMap=require("./ReactInstanceMap");var ReactLifeCycle=require("./ReactLifeCycle");var ReactNativeComponent=require("./ReactNativeComponent");var ReactPerf=require("./ReactPerf");var ReactPropTypeLocations=require("./ReactPropTypeLocations");var ReactPropTypeLocationNames=require("./ReactPropTypeLocationNames");var ReactReconciler=require("./ReactReconciler");var ReactUpdates=require("./ReactUpdates");var assign=require("./Object.assign");var emptyObject=require("./emptyObject");var invariant=require("./invariant");var shouldUpdateReactComponent=require("./shouldUpdateReactComponent");var warning=require("./warning");function getDeclarationErrorAddendum(component){var owner=component._currentElement._owner || null;if(owner){var name=owner.getName();if(name){return ' Check the render method of `' + name + '`.';}}return '';} /**
   * ------------------ The Life-Cycle of a Composite Component ------------------
   *
   * - constructor: Initialization of state. The instance is now retained.
   *   - componentWillMount
   *   - render
   *   - [children's constructors]
   *     - [children's componentWillMount and render]
   *     - [children's componentDidMount]
   *     - componentDidMount
   *
   *       Update Phases:
   *       - componentWillReceiveProps (only called if parent updated)
   *       - shouldComponentUpdate
   *         - componentWillUpdate
   *           - render
   *           - [children's constructors or receive props phases]
   *         - componentDidUpdate
   *
   *     - componentWillUnmount
   *     - [children's componentWillUnmount]
   *   - [children destroyed]
   * - (destroyed): The instance is now blank, released by React and ready for GC.
   *
   * -----------------------------------------------------------------------------
   */ /**
   * An incrementing ID assigned to each component when it is mounted. This is
   * used to enforce the order in which `ReactUpdates` updates dirty components.
   *
   * @private
   */var nextMountID=1; /**
   * @lends {ReactCompositeComponent.prototype}
   */var ReactCompositeComponentMixin={ /**
     * Base constructor for all composite component.
     *
     * @param {ReactElement} element
     * @final
     * @internal
     */construct:function construct(element){this._currentElement = element;this._rootNodeID = null;this._instance = null; // See ReactUpdateQueue
  this._pendingElement = null;this._pendingStateQueue = null;this._pendingReplaceState = false;this._pendingForceUpdate = false;this._renderedComponent = null;this._context = null;this._mountOrder = 0;this._isTopLevel = false; // See ReactUpdates and ReactUpdateQueue.
  this._pendingCallbacks = null;}, /**
     * Initializes the component, renders markup, and registers event listeners.
     *
     * @param {string} rootID DOM ID of the root node.
     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
     * @return {?string} Rendered markup to be inserted into the DOM.
     * @final
     * @internal
     */mountComponent:function mountComponent(rootID,transaction,context){this._context = context;this._mountOrder = nextMountID++;this._rootNodeID = rootID;var publicProps=this._processProps(this._currentElement.props);var publicContext=this._processContext(this._currentElement._context);var Component=ReactNativeComponent.getComponentClassForElement(this._currentElement); // Initialize the public class
  var inst=new Component(publicProps,publicContext);if("production" !== process.env.NODE_ENV){ // This will throw later in _renderValidatedComponent, but add an early
  // warning now to help debugging
  "production" !== process.env.NODE_ENV?warning(inst.render != null,'%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render` in your ' + 'component or you may have accidentally tried to render an element ' + 'whose type is a function that isn\'t a React component.',Component.displayName || Component.name || 'Component'):null;} // These should be set up in the constructor, but as a convenience for
  // simpler class abstractions, we set them up after the fact.
  inst.props = publicProps;inst.context = publicContext;inst.refs = emptyObject;this._instance = inst; // Store a reference from the instance back to the internal representation
  ReactInstanceMap.set(inst,this);if("production" !== process.env.NODE_ENV){this._warnIfContextsDiffer(this._currentElement._context,context);}if("production" !== process.env.NODE_ENV){ // Since plain JS classes are defined without any special initialization
  // logic, we can not catch common errors early. Therefore, we have to
  // catch them here, at initialization time, instead.
  "production" !== process.env.NODE_ENV?warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved,'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?',this.getName() || 'a component'):null;"production" !== process.env.NODE_ENV?warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved,'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.',this.getName() || 'a component'):null;"production" !== process.env.NODE_ENV?warning(!inst.propTypes,'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.',this.getName() || 'a component'):null;"production" !== process.env.NODE_ENV?warning(!inst.contextTypes,'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.',this.getName() || 'a component'):null;"production" !== process.env.NODE_ENV?warning(typeof inst.componentShouldUpdate !== 'function','%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.',this.getName() || 'A component'):null;}var initialState=inst.state;if(initialState === undefined){inst.state = initialState = null;}"production" !== process.env.NODE_ENV?invariant(typeof initialState === 'object' && !Array.isArray(initialState),'%s.state: must be set to an object or null',this.getName() || 'ReactCompositeComponent'):invariant(typeof initialState === 'object' && !Array.isArray(initialState));this._pendingStateQueue = null;this._pendingReplaceState = false;this._pendingForceUpdate = false;var childContext;var renderedElement;var previouslyMounting=ReactLifeCycle.currentlyMountingInstance;ReactLifeCycle.currentlyMountingInstance = this;try{if(inst.componentWillMount){inst.componentWillMount(); // When mounting, calls to `setState` by `componentWillMount` will set
  // `this._pendingStateQueue` without triggering a re-render.
  if(this._pendingStateQueue){inst.state = this._processPendingState(inst.props,inst.context);}}childContext = this._getValidatedChildContext(context);renderedElement = this._renderValidatedComponent(childContext);}finally {ReactLifeCycle.currentlyMountingInstance = previouslyMounting;}this._renderedComponent = this._instantiateReactComponent(renderedElement,this._currentElement.type // The wrapping type
  );var markup=ReactReconciler.mountComponent(this._renderedComponent,rootID,transaction,this._mergeChildContext(context,childContext));if(inst.componentDidMount){transaction.getReactMountReady().enqueue(inst.componentDidMount,inst);}return markup;}, /**
     * Releases any resources allocated by `mountComponent`.
     *
     * @final
     * @internal
     */unmountComponent:function unmountComponent(){var inst=this._instance;if(inst.componentWillUnmount){var previouslyUnmounting=ReactLifeCycle.currentlyUnmountingInstance;ReactLifeCycle.currentlyUnmountingInstance = this;try{inst.componentWillUnmount();}finally {ReactLifeCycle.currentlyUnmountingInstance = previouslyUnmounting;}}ReactReconciler.unmountComponent(this._renderedComponent);this._renderedComponent = null; // Reset pending fields
  this._pendingStateQueue = null;this._pendingReplaceState = false;this._pendingForceUpdate = false;this._pendingCallbacks = null;this._pendingElement = null; // These fields do not really need to be reset since this object is no
  // longer accessible.
  this._context = null;this._rootNodeID = null; // Delete the reference from the instance to this internal representation
  // which allow the internals to be properly cleaned up even if the user
  // leaks a reference to the public instance.
  ReactInstanceMap.remove(inst); // Some existing components rely on inst.props even after they've been
  // destroyed (in event handlers).
  // TODO: inst.props = null;
  // TODO: inst.state = null;
  // TODO: inst.context = null;
  }, /**
     * Schedule a partial update to the props. Only used for internal testing.
     *
     * @param {object} partialProps Subset of the next props.
     * @param {?function} callback Called after props are updated.
     * @final
     * @internal
     */_setPropsInternal:function _setPropsInternal(partialProps,callback){ // This is a deoptimized path. We optimize for always having an element.
  // This creates an extra internal element.
  var element=this._pendingElement || this._currentElement;this._pendingElement = ReactElement.cloneAndReplaceProps(element,assign({},element.props,partialProps));ReactUpdates.enqueueUpdate(this,callback);}, /**
     * Filters the context object to only contain keys specified in
     * `contextTypes`
     *
     * @param {object} context
     * @return {?object}
     * @private
     */_maskContext:function _maskContext(context){var maskedContext=null; // This really should be getting the component class for the element,
  // but we know that we're not going to need it for built-ins.
  if(typeof this._currentElement.type === 'string'){return emptyObject;}var contextTypes=this._currentElement.type.contextTypes;if(!contextTypes){return emptyObject;}maskedContext = {};for(var contextName in contextTypes) {maskedContext[contextName] = context[contextName];}return maskedContext;}, /**
     * Filters the context object to only contain keys specified in
     * `contextTypes`, and asserts that they are valid.
     *
     * @param {object} context
     * @return {?object}
     * @private
     */_processContext:function _processContext(context){var maskedContext=this._maskContext(context);if("production" !== process.env.NODE_ENV){var Component=ReactNativeComponent.getComponentClassForElement(this._currentElement);if(Component.contextTypes){this._checkPropTypes(Component.contextTypes,maskedContext,ReactPropTypeLocations.context);}}return maskedContext;}, /**
     * @param {object} currentContext
     * @return {object}
     * @private
     */_getValidatedChildContext:function _getValidatedChildContext(currentContext){var inst=this._instance;var childContext=inst.getChildContext && inst.getChildContext();if(childContext){"production" !== process.env.NODE_ENV?invariant(typeof inst.constructor.childContextTypes === 'object','%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().',this.getName() || 'ReactCompositeComponent'):invariant(typeof inst.constructor.childContextTypes === 'object');if("production" !== process.env.NODE_ENV){this._checkPropTypes(inst.constructor.childContextTypes,childContext,ReactPropTypeLocations.childContext);}for(var name in childContext) {"production" !== process.env.NODE_ENV?invariant(name in inst.constructor.childContextTypes,'%s.getChildContext(): key "%s" is not defined in childContextTypes.',this.getName() || 'ReactCompositeComponent',name):invariant(name in inst.constructor.childContextTypes);}return childContext;}return null;},_mergeChildContext:function _mergeChildContext(currentContext,childContext){if(childContext){return assign({},currentContext,childContext);}return currentContext;}, /**
     * Processes props by setting default values for unspecified props and
     * asserting that the props are valid. Does not mutate its argument; returns
     * a new props object with defaults merged in.
     *
     * @param {object} newProps
     * @return {object}
     * @private
     */_processProps:function _processProps(newProps){if("production" !== process.env.NODE_ENV){var Component=ReactNativeComponent.getComponentClassForElement(this._currentElement);if(Component.propTypes){this._checkPropTypes(Component.propTypes,newProps,ReactPropTypeLocations.prop);}}return newProps;}, /**
     * Assert that the props are valid
     *
     * @param {object} propTypes Map of prop name to a ReactPropType
     * @param {object} props
     * @param {string} location e.g. "prop", "context", "child context"
     * @private
     */_checkPropTypes:function _checkPropTypes(propTypes,props,location){ // TODO: Stop validating prop types here and only use the element
  // validation.
  var componentName=this.getName();for(var propName in propTypes) {if(propTypes.hasOwnProperty(propName)){var error;try{ // This is intentionally an invariant that gets caught. It's the same
  // behavior as without this statement except with a better message.
  "production" !== process.env.NODE_ENV?invariant(typeof propTypes[propName] === 'function','%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.',componentName || 'React class',ReactPropTypeLocationNames[location],propName):invariant(typeof propTypes[propName] === 'function');error = propTypes[propName](props,propName,componentName,location);}catch(ex) {error = ex;}if(error instanceof Error){ // We may want to extend this logic for similar errors in
  // React.render calls, so I'm abstracting it away into
  // a function to minimize refactoring in the future
  var addendum=getDeclarationErrorAddendum(this);if(location === ReactPropTypeLocations.prop){ // Preface gives us something to blacklist in warning module
  "production" !== process.env.NODE_ENV?warning(false,'Failed Composite propType: %s%s',error.message,addendum):null;}else {"production" !== process.env.NODE_ENV?warning(false,'Failed Context Types: %s%s',error.message,addendum):null;}}}}},receiveComponent:function receiveComponent(nextElement,transaction,nextContext){var prevElement=this._currentElement;var prevContext=this._context;this._pendingElement = null;this.updateComponent(transaction,prevElement,nextElement,prevContext,nextContext);}, /**
     * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
     * is set, update the component.
     *
     * @param {ReactReconcileTransaction} transaction
     * @internal
     */performUpdateIfNecessary:function performUpdateIfNecessary(transaction){if(this._pendingElement != null){ReactReconciler.receiveComponent(this,this._pendingElement || this._currentElement,transaction,this._context);}if(this._pendingStateQueue !== null || this._pendingForceUpdate){if("production" !== process.env.NODE_ENV){ReactElementValidator.checkAndWarnForMutatedProps(this._currentElement);}this.updateComponent(transaction,this._currentElement,this._currentElement,this._context,this._context);}}, /**
     * Compare two contexts, warning if they are different
     * TODO: Remove this check when owner-context is removed
     */_warnIfContextsDiffer:function _warnIfContextsDiffer(ownerBasedContext,parentBasedContext){ownerBasedContext = this._maskContext(ownerBasedContext);parentBasedContext = this._maskContext(parentBasedContext);var parentKeys=Object.keys(parentBasedContext).sort();var displayName=this.getName() || 'ReactCompositeComponent';for(var i=0;i < parentKeys.length;i++) {var key=parentKeys[i];"production" !== process.env.NODE_ENV?warning(ownerBasedContext[key] === parentBasedContext[key],'owner-based and parent-based contexts differ ' + '(values: `%s` vs `%s`) for key (%s) while mounting %s ' + '(see: http://fb.me/react-context-by-parent)',ownerBasedContext[key],parentBasedContext[key],key,displayName):null;}}, /**
     * Perform an update to a mounted component. The componentWillReceiveProps and
     * shouldComponentUpdate methods are called, then (assuming the update isn't
     * skipped) the remaining update lifecycle methods are called and the DOM
     * representation is updated.
     *
     * By default, this implements React's rendering and reconciliation algorithm.
     * Sophisticated clients may wish to override this.
     *
     * @param {ReactReconcileTransaction} transaction
     * @param {ReactElement} prevParentElement
     * @param {ReactElement} nextParentElement
     * @internal
     * @overridable
     */updateComponent:function updateComponent(transaction,prevParentElement,nextParentElement,prevUnmaskedContext,nextUnmaskedContext){var inst=this._instance;var nextContext=inst.context;var nextProps=inst.props; // Distinguish between a props update versus a simple state update
  if(prevParentElement !== nextParentElement){nextContext = this._processContext(nextParentElement._context);nextProps = this._processProps(nextParentElement.props);if("production" !== process.env.NODE_ENV){if(nextUnmaskedContext != null){this._warnIfContextsDiffer(nextParentElement._context,nextUnmaskedContext);}} // An update here will schedule an update but immediately set
  // _pendingStateQueue which will ensure that any state updates gets
  // immediately reconciled instead of waiting for the next batch.
  if(inst.componentWillReceiveProps){inst.componentWillReceiveProps(nextProps,nextContext);}}var nextState=this._processPendingState(nextProps,nextContext);var shouldUpdate=this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps,nextState,nextContext);if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(typeof shouldUpdate !== 'undefined','%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.',this.getName() || 'ReactCompositeComponent'):null;}if(shouldUpdate){this._pendingForceUpdate = false; // Will set `this.props`, `this.state` and `this.context`.
  this._performComponentUpdate(nextParentElement,nextProps,nextState,nextContext,transaction,nextUnmaskedContext);}else { // If it's determined that a component should not update, we still want
  // to set props and state but we shortcut the rest of the update.
  this._currentElement = nextParentElement;this._context = nextUnmaskedContext;inst.props = nextProps;inst.state = nextState;inst.context = nextContext;}},_processPendingState:function _processPendingState(props,context){var inst=this._instance;var queue=this._pendingStateQueue;var replace=this._pendingReplaceState;this._pendingReplaceState = false;this._pendingStateQueue = null;if(!queue){return inst.state;}if(replace && queue.length === 1){return queue[0];}var nextState=assign({},replace?queue[0]:inst.state);for(var i=replace?1:0;i < queue.length;i++) {var partial=queue[i];assign(nextState,typeof partial === 'function'?partial.call(inst,nextState,props,context):partial);}return nextState;}, /**
     * Merges new props and state, notifies delegate methods of update and
     * performs update.
     *
     * @param {ReactElement} nextElement Next element
     * @param {object} nextProps Next public object to set as properties.
     * @param {?object} nextState Next object to set as state.
     * @param {?object} nextContext Next public object to set as context.
     * @param {ReactReconcileTransaction} transaction
     * @param {?object} unmaskedContext
     * @private
     */_performComponentUpdate:function _performComponentUpdate(nextElement,nextProps,nextState,nextContext,transaction,unmaskedContext){var inst=this._instance;var prevProps=inst.props;var prevState=inst.state;var prevContext=inst.context;if(inst.componentWillUpdate){inst.componentWillUpdate(nextProps,nextState,nextContext);}this._currentElement = nextElement;this._context = unmaskedContext;inst.props = nextProps;inst.state = nextState;inst.context = nextContext;this._updateRenderedComponent(transaction,unmaskedContext);if(inst.componentDidUpdate){transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst,prevProps,prevState,prevContext),inst);}}, /**
     * Call the component's `render` method and update the DOM accordingly.
     *
     * @param {ReactReconcileTransaction} transaction
     * @internal
     */_updateRenderedComponent:function _updateRenderedComponent(transaction,context){var prevComponentInstance=this._renderedComponent;var prevRenderedElement=prevComponentInstance._currentElement;var childContext=this._getValidatedChildContext();var nextRenderedElement=this._renderValidatedComponent(childContext);if(shouldUpdateReactComponent(prevRenderedElement,nextRenderedElement)){ReactReconciler.receiveComponent(prevComponentInstance,nextRenderedElement,transaction,this._mergeChildContext(context,childContext));}else { // These two IDs are actually the same! But nothing should rely on that.
  var thisID=this._rootNodeID;var prevComponentID=prevComponentInstance._rootNodeID;ReactReconciler.unmountComponent(prevComponentInstance);this._renderedComponent = this._instantiateReactComponent(nextRenderedElement,this._currentElement.type);var nextMarkup=ReactReconciler.mountComponent(this._renderedComponent,thisID,transaction,this._mergeChildContext(context,childContext));this._replaceNodeWithMarkupByID(prevComponentID,nextMarkup);}}, /**
     * @protected
     */_replaceNodeWithMarkupByID:function _replaceNodeWithMarkupByID(prevComponentID,nextMarkup){ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID,nextMarkup);}, /**
     * @protected
     */_renderValidatedComponentWithoutOwnerOrContext:function _renderValidatedComponentWithoutOwnerOrContext(){var inst=this._instance;var renderedComponent=inst.render();if("production" !== process.env.NODE_ENV){ // We allow auto-mocks to proceed as if they're returning null.
  if(typeof renderedComponent === 'undefined' && inst.render._isMockFunction){ // This is probably bad practice. Consider warning here and
  // deprecating this convenience.
  renderedComponent = null;}}return renderedComponent;}, /**
     * @private
     */_renderValidatedComponent:function _renderValidatedComponent(childContext){var renderedComponent;var previousContext=ReactContext.current;ReactContext.current = this._mergeChildContext(this._currentElement._context,childContext);ReactCurrentOwner.current = this;try{renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();}finally {ReactContext.current = previousContext;ReactCurrentOwner.current = null;}"production" !== process.env.NODE_ENV?invariant( // TODO: An `isValidNode` function would probably be more appropriate
  renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent),'%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.',this.getName() || 'ReactCompositeComponent'):invariant( // TODO: An `isValidNode` function would probably be more appropriate
  renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent));return renderedComponent;}, /**
     * Lazily allocates the refs object and stores `component` as `ref`.
     *
     * @param {string} ref Reference name.
     * @param {component} component Component to store as `ref`.
     * @final
     * @private
     */attachRef:function attachRef(ref,component){var inst=this.getPublicInstance();var refs=inst.refs === emptyObject?inst.refs = {}:inst.refs;refs[ref] = component.getPublicInstance();}, /**
     * Detaches a reference name.
     *
     * @param {string} ref Name to dereference.
     * @final
     * @private
     */detachRef:function detachRef(ref){var refs=this.getPublicInstance().refs;delete refs[ref];}, /**
     * Get a text description of the component that can be used to identify it
     * in error messages.
     * @return {string} The name or null.
     * @internal
     */getName:function getName(){var type=this._currentElement.type;var constructor=this._instance && this._instance.constructor;return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;}, /**
     * Get the publicly accessible representation of this component - i.e. what
     * is exposed by refs and returned by React.render. Can be null for stateless
     * components.
     *
     * @return {ReactComponent} the public component instance.
     * @internal
     */getPublicInstance:function getPublicInstance(){return this._instance;}, // Stub
  _instantiateReactComponent:null};ReactPerf.measureMethods(ReactCompositeComponentMixin,'ReactCompositeComponent',{mountComponent:'mountComponent',updateComponent:'updateComponent',_renderValidatedComponent:'_renderValidatedComponent'});var ReactCompositeComponent={Mixin:ReactCompositeComponentMixin};module.exports = ReactCompositeComponent;}).call(this,require('_process'));},{"./Object.assign":76,"./ReactComponentEnvironment":86,"./ReactContext":88,"./ReactCurrentOwner":89,"./ReactElement":107,"./ReactElementValidator":108,"./ReactInstanceMap":117,"./ReactLifeCycle":118,"./ReactNativeComponent":123,"./ReactPerf":125,"./ReactPropTypeLocationNames":126,"./ReactPropTypeLocations":127,"./ReactReconciler":131,"./ReactUpdates":137,"./emptyObject":165,"./invariant":185,"./shouldUpdateReactComponent":201,"./warning":204,"_process":12}],88:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactContext
   */'use strict';var assign=require("./Object.assign");var emptyObject=require("./emptyObject");var warning=require("./warning");var didWarn=false; /**
   * Keeps track of the current context.
   *
   * The context is automatically passed down the component ownership hierarchy
   * and is accessible via `this.context` on ReactCompositeComponents.
   */var ReactContext={ /**
     * @internal
     * @type {object}
     */current:emptyObject, /**
     * Temporarily extends the current context while executing scopedCallback.
     *
     * A typical use case might look like
     *
     *  render: function() {
     *    var children = ReactContext.withContext({foo: 'foo'}, () => (
     *
     *    ));
     *    return <div>{children}</div>;
     *  }
     *
     * @param {object} newContext New context to merge into the existing context
     * @param {function} scopedCallback Callback to run with the new context
     * @return {ReactComponent|array<ReactComponent>}
     */withContext:function withContext(newContext,scopedCallback){if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(didWarn,'withContext is deprecated and will be removed in a future version. ' + 'Use a wrapper component with getChildContext instead.'):null;didWarn = true;}var result;var previousContext=ReactContext.current;ReactContext.current = assign({},previousContext,newContext);try{result = scopedCallback();}finally {ReactContext.current = previousContext;}return result;}};module.exports = ReactContext;}).call(this,require('_process'));},{"./Object.assign":76,"./emptyObject":165,"./warning":204,"_process":12}],89:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactCurrentOwner
   */'use strict'; /**
   * Keeps track of the current owner.
   *
   * The current owner is the component who should own any components that are
   * currently being constructed.
   *
   * The depth indicate how many composite components are above this render level.
   */var ReactCurrentOwner={ /**
     * @internal
     * @type {ReactComponent}
     */current:null};module.exports = ReactCurrentOwner;},{}],90:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOM
   * @typechecks static-only
   */'use strict';var ReactElement=require("./ReactElement");var ReactElementValidator=require("./ReactElementValidator");var mapObject=require("./mapObject"); /**
   * Create a factory that creates HTML tag elements.
   *
   * @param {string} tag Tag name (e.g. `div`).
   * @private
   */function createDOMFactory(tag){if("production" !== process.env.NODE_ENV){return ReactElementValidator.createFactory(tag);}return ReactElement.createFactory(tag);} /**
   * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
   * This is also accessible via `React.DOM`.
   *
   * @public
   */var ReactDOM=mapObject({a:'a',abbr:'abbr',address:'address',area:'area',article:'article',aside:'aside',audio:'audio',b:'b',base:'base',bdi:'bdi',bdo:'bdo',big:'big',blockquote:'blockquote',body:'body',br:'br',button:'button',canvas:'canvas',caption:'caption',cite:'cite',code:'code',col:'col',colgroup:'colgroup',data:'data',datalist:'datalist',dd:'dd',del:'del',details:'details',dfn:'dfn',dialog:'dialog',div:'div',dl:'dl',dt:'dt',em:'em',embed:'embed',fieldset:'fieldset',figcaption:'figcaption',figure:'figure',footer:'footer',form:'form',h1:'h1',h2:'h2',h3:'h3',h4:'h4',h5:'h5',h6:'h6',head:'head',header:'header',hr:'hr',html:'html',i:'i',iframe:'iframe',img:'img',input:'input',ins:'ins',kbd:'kbd',keygen:'keygen',label:'label',legend:'legend',li:'li',link:'link',main:'main',map:'map',mark:'mark',menu:'menu',menuitem:'menuitem',meta:'meta',meter:'meter',nav:'nav',noscript:'noscript',object:'object',ol:'ol',optgroup:'optgroup',option:'option',output:'output',p:'p',param:'param',picture:'picture',pre:'pre',progress:'progress',q:'q',rp:'rp',rt:'rt',ruby:'ruby',s:'s',samp:'samp',script:'script',section:'section',select:'select',small:'small',source:'source',span:'span',strong:'strong',style:'style',sub:'sub',summary:'summary',sup:'sup',table:'table',tbody:'tbody',td:'td',textarea:'textarea',tfoot:'tfoot',th:'th',thead:'thead',time:'time',title:'title',tr:'tr',track:'track',u:'u',ul:'ul','var':'var',video:'video',wbr:'wbr', // SVG
  circle:'circle',clipPath:'clipPath',defs:'defs',ellipse:'ellipse',g:'g',line:'line',linearGradient:'linearGradient',mask:'mask',path:'path',pattern:'pattern',polygon:'polygon',polyline:'polyline',radialGradient:'radialGradient',rect:'rect',stop:'stop',svg:'svg',text:'text',tspan:'tspan'},createDOMFactory);module.exports = ReactDOM;}).call(this,require('_process'));},{"./ReactElement":107,"./ReactElementValidator":108,"./mapObject":192,"_process":12}],91:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMButton
   */'use strict';var AutoFocusMixin=require("./AutoFocusMixin");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var keyMirror=require("./keyMirror");var button=ReactElement.createFactory('button');var mouseListenerNames=keyMirror({onClick:true,onDoubleClick:true,onMouseDown:true,onMouseMove:true,onMouseUp:true,onClickCapture:true,onDoubleClickCapture:true,onMouseDownCapture:true,onMouseMoveCapture:true,onMouseUpCapture:true}); /**
   * Implements a <button> native component that does not receive mouse events
   * when `disabled` is set.
   */var ReactDOMButton=ReactClass.createClass({displayName:'ReactDOMButton',tagName:'BUTTON',mixins:[AutoFocusMixin,ReactBrowserComponentMixin],render:function render(){var props={}; // Copy the props; except the mouse listeners if we're disabled
  for(var key in this.props) {if(this.props.hasOwnProperty(key) && (!this.props.disabled || !mouseListenerNames[key])){props[key] = this.props[key];}}return button(props,this.props.children);}});module.exports = ReactDOMButton;},{"./AutoFocusMixin":51,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107,"./keyMirror":190}],92:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMComponent
   * @typechecks static-only
   */ /* global hasOwnProperty:true */'use strict';var CSSPropertyOperations=require("./CSSPropertyOperations");var DOMProperty=require("./DOMProperty");var DOMPropertyOperations=require("./DOMPropertyOperations");var ReactBrowserEventEmitter=require("./ReactBrowserEventEmitter");var ReactComponentBrowserEnvironment=require("./ReactComponentBrowserEnvironment");var ReactMount=require("./ReactMount");var ReactMultiChild=require("./ReactMultiChild");var ReactPerf=require("./ReactPerf");var assign=require("./Object.assign");var escapeTextContentForBrowser=require("./escapeTextContentForBrowser");var invariant=require("./invariant");var isEventSupported=require("./isEventSupported");var keyOf=require("./keyOf");var warning=require("./warning");var deleteListener=ReactBrowserEventEmitter.deleteListener;var listenTo=ReactBrowserEventEmitter.listenTo;var registrationNameModules=ReactBrowserEventEmitter.registrationNameModules; // For quickly matching children type, to test if can be treated as content.
  var CONTENT_TYPES={'string':true,'number':true};var STYLE=keyOf({style:null});var ELEMENT_NODE_TYPE=1; /**
   * Optionally injectable operations for mutating the DOM
   */var BackendIDOperations=null; /**
   * @param {?object} props
   */function assertValidProps(props){if(!props){return;} // Note the use of `==` which checks for null or undefined.
  if(props.dangerouslySetInnerHTML != null){"production" !== process.env.NODE_ENV?invariant(props.children == null,'Can only set one of `children` or `props.dangerouslySetInnerHTML`.'):invariant(props.children == null);"production" !== process.env.NODE_ENV?invariant(typeof props.dangerouslySetInnerHTML === 'object' && '__html' in props.dangerouslySetInnerHTML,'`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.'):invariant(typeof props.dangerouslySetInnerHTML === 'object' && '__html' in props.dangerouslySetInnerHTML);}if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(props.innerHTML == null,'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.'):null;"production" !== process.env.NODE_ENV?warning(!props.contentEditable || props.children == null,'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.'):null;}"production" !== process.env.NODE_ENV?invariant(props.style == null || typeof props.style === 'object','The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.'):invariant(props.style == null || typeof props.style === 'object');}function putListener(id,registrationName,listener,transaction){if("production" !== process.env.NODE_ENV){ // IE8 has no API for event capturing and the `onScroll` event doesn't
  // bubble.
  "production" !== process.env.NODE_ENV?warning(registrationName !== 'onScroll' || isEventSupported('scroll',true),'This browser doesn\'t support the `onScroll` event'):null;}var container=ReactMount.findReactContainerForID(id);if(container){var doc=container.nodeType === ELEMENT_NODE_TYPE?container.ownerDocument:container;listenTo(registrationName,doc);}transaction.getPutListenerQueue().enqueuePutListener(id,registrationName,listener);} // For HTML, certain tags should omit their close tag. We keep a whitelist for
  // those special cased tags.
  var omittedCloseTags={'area':true,'base':true,'br':true,'col':true,'embed':true,'hr':true,'img':true,'input':true,'keygen':true,'link':true,'meta':true,'param':true,'source':true,'track':true,'wbr':true // NOTE: menuitem's close tag should be omitted, but that causes problems.
  }; // We accept any tag to be rendered but since this gets injected into abitrary
  // HTML, we want to make sure that it's a safe tag.
  // http://www.w3.org/TR/REC-xml/#NT-Name
  var VALID_TAG_REGEX=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
  var validatedTagCache={};var hasOwnProperty=({}).hasOwnProperty;function validateDangerousTag(tag){if(!hasOwnProperty.call(validatedTagCache,tag)){"production" !== process.env.NODE_ENV?invariant(VALID_TAG_REGEX.test(tag),'Invalid tag: %s',tag):invariant(VALID_TAG_REGEX.test(tag));validatedTagCache[tag] = true;}} /**
   * Creates a new React class that is idempotent and capable of containing other
   * React components. It accepts event listeners and DOM properties that are
   * valid according to `DOMProperty`.
   *
   *  - Event listeners: `onClick`, `onMouseDown`, etc.
   *  - DOM properties: `className`, `name`, `title`, etc.
   *
   * The `style` property functions differently from the DOM API. It accepts an
   * object mapping of style properties to values.
   *
   * @constructor ReactDOMComponent
   * @extends ReactMultiChild
   */function ReactDOMComponent(tag){validateDangerousTag(tag);this._tag = tag;this._renderedChildren = null;this._previousStyleCopy = null;this._rootNodeID = null;}ReactDOMComponent.displayName = 'ReactDOMComponent';ReactDOMComponent.Mixin = {construct:function construct(element){this._currentElement = element;}, /**
     * Generates root tag markup then recurses. This method has side effects and
     * is not idempotent.
     *
     * @internal
     * @param {string} rootID The root DOM ID for this node.
     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
     * @return {string} The computed markup.
     */mountComponent:function mountComponent(rootID,transaction,context){this._rootNodeID = rootID;assertValidProps(this._currentElement.props);var closeTag=omittedCloseTags[this._tag]?'':'</' + this._tag + '>';return this._createOpenTagMarkupAndPutListeners(transaction) + this._createContentMarkup(transaction,context) + closeTag;}, /**
     * Creates markup for the open tag and all attributes.
     *
     * This method has side effects because events get registered.
     *
     * Iterating over object properties is faster than iterating over arrays.
     * @see http://jsperf.com/obj-vs-arr-iteration
     *
     * @private
     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
     * @return {string} Markup of opening tag.
     */_createOpenTagMarkupAndPutListeners:function _createOpenTagMarkupAndPutListeners(transaction){var props=this._currentElement.props;var ret='<' + this._tag;for(var propKey in props) {if(!props.hasOwnProperty(propKey)){continue;}var propValue=props[propKey];if(propValue == null){continue;}if(registrationNameModules.hasOwnProperty(propKey)){putListener(this._rootNodeID,propKey,propValue,transaction);}else {if(propKey === STYLE){if(propValue){propValue = this._previousStyleCopy = assign({},props.style);}propValue = CSSPropertyOperations.createMarkupForStyles(propValue);}var markup=DOMPropertyOperations.createMarkupForProperty(propKey,propValue);if(markup){ret += ' ' + markup;}}} // For static pages, no need to put React ID and checksum. Saves lots of
  // bytes.
  if(transaction.renderToStaticMarkup){return ret + '>';}var markupForID=DOMPropertyOperations.createMarkupForID(this._rootNodeID);return ret + ' ' + markupForID + '>';}, /**
     * Creates markup for the content between the tags.
     *
     * @private
     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
     * @param {object} context
     * @return {string} Content markup.
     */_createContentMarkup:function _createContentMarkup(transaction,context){var prefix='';if(this._tag === 'listing' || this._tag === 'pre' || this._tag === 'textarea'){ // Add an initial newline because browsers ignore the first newline in
  // a <listing>, <pre>, or <textarea> as an "authoring convenience" -- see
  // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody.
  prefix = '\n';}var props=this._currentElement.props; // Intentional use of != to avoid catching zero/false.
  var innerHTML=props.dangerouslySetInnerHTML;if(innerHTML != null){if(innerHTML.__html != null){return prefix + innerHTML.__html;}}else {var contentToUse=CONTENT_TYPES[typeof props.children]?props.children:null;var childrenToUse=contentToUse != null?null:props.children;if(contentToUse != null){return prefix + escapeTextContentForBrowser(contentToUse);}else if(childrenToUse != null){var mountImages=this.mountChildren(childrenToUse,transaction,context);return prefix + mountImages.join('');}}return prefix;},receiveComponent:function receiveComponent(nextElement,transaction,context){var prevElement=this._currentElement;this._currentElement = nextElement;this.updateComponent(transaction,prevElement,nextElement,context);}, /**
     * Updates a native DOM component after it has already been allocated and
     * attached to the DOM. Reconciles the root DOM node, then recurses.
     *
     * @param {ReactReconcileTransaction} transaction
     * @param {ReactElement} prevElement
     * @param {ReactElement} nextElement
     * @internal
     * @overridable
     */updateComponent:function updateComponent(transaction,prevElement,nextElement,context){assertValidProps(this._currentElement.props);this._updateDOMProperties(prevElement.props,transaction);this._updateDOMChildren(prevElement.props,transaction,context);}, /**
     * Reconciles the properties by detecting differences in property values and
     * updating the DOM as necessary. This function is probably the single most
     * critical path for performance optimization.
     *
     * TODO: Benchmark whether checking for changed values in memory actually
     *       improves performance (especially statically positioned elements).
     * TODO: Benchmark the effects of putting this at the top since 99% of props
     *       do not change for a given reconciliation.
     * TODO: Benchmark areas that can be improved with caching.
     *
     * @private
     * @param {object} lastProps
     * @param {ReactReconcileTransaction} transaction
     */_updateDOMProperties:function _updateDOMProperties(lastProps,transaction){var nextProps=this._currentElement.props;var propKey;var styleName;var styleUpdates;for(propKey in lastProps) {if(nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)){continue;}if(propKey === STYLE){var lastStyle=this._previousStyleCopy;for(styleName in lastStyle) {if(lastStyle.hasOwnProperty(styleName)){styleUpdates = styleUpdates || {};styleUpdates[styleName] = '';}}this._previousStyleCopy = null;}else if(registrationNameModules.hasOwnProperty(propKey)){deleteListener(this._rootNodeID,propKey);}else if(DOMProperty.isStandardName[propKey] || DOMProperty.isCustomAttribute(propKey)){BackendIDOperations.deletePropertyByID(this._rootNodeID,propKey);}}for(propKey in nextProps) {var nextProp=nextProps[propKey];var lastProp=propKey === STYLE?this._previousStyleCopy:lastProps[propKey];if(!nextProps.hasOwnProperty(propKey) || nextProp === lastProp){continue;}if(propKey === STYLE){if(nextProp){nextProp = this._previousStyleCopy = assign({},nextProp);}else {this._previousStyleCopy = null;}if(lastProp){ // Unset styles on `lastProp` but not on `nextProp`.
  for(styleName in lastProp) {if(lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))){styleUpdates = styleUpdates || {};styleUpdates[styleName] = '';}} // Update styles that changed since `lastProp`.
  for(styleName in nextProp) {if(nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]){styleUpdates = styleUpdates || {};styleUpdates[styleName] = nextProp[styleName];}}}else { // Relies on `updateStylesByID` not mutating `styleUpdates`.
  styleUpdates = nextProp;}}else if(registrationNameModules.hasOwnProperty(propKey)){putListener(this._rootNodeID,propKey,nextProp,transaction);}else if(DOMProperty.isStandardName[propKey] || DOMProperty.isCustomAttribute(propKey)){BackendIDOperations.updatePropertyByID(this._rootNodeID,propKey,nextProp);}}if(styleUpdates){BackendIDOperations.updateStylesByID(this._rootNodeID,styleUpdates);}}, /**
     * Reconciles the children with the various properties that affect the
     * children content.
     *
     * @param {object} lastProps
     * @param {ReactReconcileTransaction} transaction
     */_updateDOMChildren:function _updateDOMChildren(lastProps,transaction,context){var nextProps=this._currentElement.props;var lastContent=CONTENT_TYPES[typeof lastProps.children]?lastProps.children:null;var nextContent=CONTENT_TYPES[typeof nextProps.children]?nextProps.children:null;var lastHtml=lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;var nextHtml=nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html; // Note the use of `!=` which checks for null or undefined.
  var lastChildren=lastContent != null?null:lastProps.children;var nextChildren=nextContent != null?null:nextProps.children; // If we're switching from children to content/html or vice versa, remove
  // the old content
  var lastHasContentOrHtml=lastContent != null || lastHtml != null;var nextHasContentOrHtml=nextContent != null || nextHtml != null;if(lastChildren != null && nextChildren == null){this.updateChildren(null,transaction,context);}else if(lastHasContentOrHtml && !nextHasContentOrHtml){this.updateTextContent('');}if(nextContent != null){if(lastContent !== nextContent){this.updateTextContent('' + nextContent);}}else if(nextHtml != null){if(lastHtml !== nextHtml){BackendIDOperations.updateInnerHTMLByID(this._rootNodeID,nextHtml);}}else if(nextChildren != null){this.updateChildren(nextChildren,transaction,context);}}, /**
     * Destroys all event registrations for this instance. Does not remove from
     * the DOM. That must be done by the parent.
     *
     * @internal
     */unmountComponent:function unmountComponent(){this.unmountChildren();ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);this._rootNodeID = null;}};ReactPerf.measureMethods(ReactDOMComponent,'ReactDOMComponent',{mountComponent:'mountComponent',updateComponent:'updateComponent'});assign(ReactDOMComponent.prototype,ReactDOMComponent.Mixin,ReactMultiChild.Mixin);ReactDOMComponent.injection = {injectIDOperations:function injectIDOperations(IDOperations){ReactDOMComponent.BackendIDOperations = BackendIDOperations = IDOperations;}};module.exports = ReactDOMComponent;}).call(this,require('_process'));},{"./CSSPropertyOperations":54,"./DOMProperty":59,"./DOMPropertyOperations":60,"./Object.assign":76,"./ReactBrowserEventEmitter":80,"./ReactComponentBrowserEnvironment":85,"./ReactMount":120,"./ReactMultiChild":121,"./ReactPerf":125,"./escapeTextContentForBrowser":166,"./invariant":185,"./isEventSupported":186,"./keyOf":191,"./warning":204,"_process":12}],93:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMForm
   */'use strict';var EventConstants=require("./EventConstants");var LocalEventTrapMixin=require("./LocalEventTrapMixin");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var form=ReactElement.createFactory('form'); /**
   * Since onSubmit doesn't bubble OR capture on the top level in IE8, we need
   * to capture it on the <form> element itself. There are lots of hacks we could
   * do to accomplish this, but the most reliable is to make <form> a
   * composite component and use `componentDidMount` to attach the event handlers.
   */var ReactDOMForm=ReactClass.createClass({displayName:'ReactDOMForm',tagName:'FORM',mixins:[ReactBrowserComponentMixin,LocalEventTrapMixin],render:function render(){ // TODO: Instead of using `ReactDOM` directly, we should use JSX. However,
  // `jshint` fails to parse JSX so in order for linting to work in the open
  // source repo, we need to just use `ReactDOM.form`.
  return form(this.props);},componentDidMount:function componentDidMount(){this.trapBubbledEvent(EventConstants.topLevelTypes.topReset,'reset');this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit,'submit');}});module.exports = ReactDOMForm;},{"./EventConstants":64,"./LocalEventTrapMixin":74,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107}],94:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMIDOperations
   * @typechecks static-only
   */ /*jslint evil: true */'use strict';var CSSPropertyOperations=require("./CSSPropertyOperations");var DOMChildrenOperations=require("./DOMChildrenOperations");var DOMPropertyOperations=require("./DOMPropertyOperations");var ReactMount=require("./ReactMount");var ReactPerf=require("./ReactPerf");var invariant=require("./invariant");var setInnerHTML=require("./setInnerHTML"); /**
   * Errors for properties that should not be updated with `updatePropertyById()`.
   *
   * @type {object}
   * @private
   */var INVALID_PROPERTY_ERRORS={dangerouslySetInnerHTML:'`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',style:'`style` must be set using `updateStylesByID()`.'}; /**
   * Operations used to process updates to DOM nodes. This is made injectable via
   * `ReactDOMComponent.BackendIDOperations`.
   */var ReactDOMIDOperations={ /**
     * Updates a DOM node with new property values. This should only be used to
     * update DOM properties in `DOMProperty`.
     *
     * @param {string} id ID of the node to update.
     * @param {string} name A valid property name, see `DOMProperty`.
     * @param {*} value New value of the property.
     * @internal
     */updatePropertyByID:function updatePropertyByID(id,name,value){var node=ReactMount.getNode(id);"production" !== process.env.NODE_ENV?invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name),'updatePropertyByID(...): %s',INVALID_PROPERTY_ERRORS[name]):invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)); // If we're updating to null or undefined, we should remove the property
  // from the DOM node instead of inadvertantly setting to a string. This
  // brings us in line with the same behavior we have on initial render.
  if(value != null){DOMPropertyOperations.setValueForProperty(node,name,value);}else {DOMPropertyOperations.deleteValueForProperty(node,name);}}, /**
     * Updates a DOM node to remove a property. This should only be used to remove
     * DOM properties in `DOMProperty`.
     *
     * @param {string} id ID of the node to update.
     * @param {string} name A property name to remove, see `DOMProperty`.
     * @internal
     */deletePropertyByID:function deletePropertyByID(id,name,value){var node=ReactMount.getNode(id);"production" !== process.env.NODE_ENV?invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name),'updatePropertyByID(...): %s',INVALID_PROPERTY_ERRORS[name]):invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name));DOMPropertyOperations.deleteValueForProperty(node,name,value);}, /**
     * Updates a DOM node with new style values. If a value is specified as '',
     * the corresponding style property will be unset.
     *
     * @param {string} id ID of the node to update.
     * @param {object} styles Mapping from styles to values.
     * @internal
     */updateStylesByID:function updateStylesByID(id,styles){var node=ReactMount.getNode(id);CSSPropertyOperations.setValueForStyles(node,styles);}, /**
     * Updates a DOM node's innerHTML.
     *
     * @param {string} id ID of the node to update.
     * @param {string} html An HTML string.
     * @internal
     */updateInnerHTMLByID:function updateInnerHTMLByID(id,html){var node=ReactMount.getNode(id);setInnerHTML(node,html);}, /**
     * Updates a DOM node's text content set by `props.content`.
     *
     * @param {string} id ID of the node to update.
     * @param {string} content Text content.
     * @internal
     */updateTextContentByID:function updateTextContentByID(id,content){var node=ReactMount.getNode(id);DOMChildrenOperations.updateTextContent(node,content);}, /**
     * Replaces a DOM node that exists in the document with markup.
     *
     * @param {string} id ID of child to be replaced.
     * @param {string} markup Dangerous markup to inject in place of child.
     * @internal
     * @see {Danger.dangerouslyReplaceNodeWithMarkup}
     */dangerouslyReplaceNodeWithMarkupByID:function dangerouslyReplaceNodeWithMarkupByID(id,markup){var node=ReactMount.getNode(id);DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node,markup);}, /**
     * Updates a component's children by processing a series of updates.
     *
     * @param {array<object>} updates List of update configurations.
     * @param {array<string>} markup List of markup strings.
     * @internal
     */dangerouslyProcessChildrenUpdates:function dangerouslyProcessChildrenUpdates(updates,markup){for(var i=0;i < updates.length;i++) {updates[i].parentNode = ReactMount.getNode(updates[i].parentID);}DOMChildrenOperations.processUpdates(updates,markup);}};ReactPerf.measureMethods(ReactDOMIDOperations,'ReactDOMIDOperations',{updatePropertyByID:'updatePropertyByID',deletePropertyByID:'deletePropertyByID',updateStylesByID:'updateStylesByID',updateInnerHTMLByID:'updateInnerHTMLByID',updateTextContentByID:'updateTextContentByID',dangerouslyReplaceNodeWithMarkupByID:'dangerouslyReplaceNodeWithMarkupByID',dangerouslyProcessChildrenUpdates:'dangerouslyProcessChildrenUpdates'});module.exports = ReactDOMIDOperations;}).call(this,require('_process'));},{"./CSSPropertyOperations":54,"./DOMChildrenOperations":58,"./DOMPropertyOperations":60,"./ReactMount":120,"./ReactPerf":125,"./invariant":185,"./setInnerHTML":198,"_process":12}],95:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMIframe
   */'use strict';var EventConstants=require("./EventConstants");var LocalEventTrapMixin=require("./LocalEventTrapMixin");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var iframe=ReactElement.createFactory('iframe'); /**
   * Since onLoad doesn't bubble OR capture on the top level in IE8, we need to
   * capture it on the <iframe> element itself. There are lots of hacks we could
   * do to accomplish this, but the most reliable is to make <iframe> a composite
   * component and use `componentDidMount` to attach the event handlers.
   */var ReactDOMIframe=ReactClass.createClass({displayName:'ReactDOMIframe',tagName:'IFRAME',mixins:[ReactBrowserComponentMixin,LocalEventTrapMixin],render:function render(){return iframe(this.props);},componentDidMount:function componentDidMount(){this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad,'load');}});module.exports = ReactDOMIframe;},{"./EventConstants":64,"./LocalEventTrapMixin":74,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107}],96:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMImg
   */'use strict';var EventConstants=require("./EventConstants");var LocalEventTrapMixin=require("./LocalEventTrapMixin");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var img=ReactElement.createFactory('img'); /**
   * Since onLoad doesn't bubble OR capture on the top level in IE8, we need to
   * capture it on the <img> element itself. There are lots of hacks we could do
   * to accomplish this, but the most reliable is to make <img> a composite
   * component and use `componentDidMount` to attach the event handlers.
   */var ReactDOMImg=ReactClass.createClass({displayName:'ReactDOMImg',tagName:'IMG',mixins:[ReactBrowserComponentMixin,LocalEventTrapMixin],render:function render(){return img(this.props);},componentDidMount:function componentDidMount(){this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad,'load');this.trapBubbledEvent(EventConstants.topLevelTypes.topError,'error');}});module.exports = ReactDOMImg;},{"./EventConstants":64,"./LocalEventTrapMixin":74,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107}],97:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMInput
   */'use strict';var AutoFocusMixin=require("./AutoFocusMixin");var DOMPropertyOperations=require("./DOMPropertyOperations");var LinkedValueUtils=require("./LinkedValueUtils");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var ReactMount=require("./ReactMount");var ReactUpdates=require("./ReactUpdates");var assign=require("./Object.assign");var invariant=require("./invariant");var input=ReactElement.createFactory('input');var instancesByReactID={};function forceUpdateIfMounted(){ /*jshint validthis:true */if(this.isMounted()){this.forceUpdate();}} /**
   * Implements an <input> native component that allows setting these optional
   * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
   *
   * If `checked` or `value` are not supplied (or null/undefined), user actions
   * that affect the checked state or value will trigger updates to the element.
   *
   * If they are supplied (and not null/undefined), the rendered element will not
   * trigger updates to the element. Instead, the props must change in order for
   * the rendered element to be updated.
   *
   * The rendered element will be initialized as unchecked (or `defaultChecked`)
   * with an empty value (or `defaultValue`).
   *
   * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
   */var ReactDOMInput=ReactClass.createClass({displayName:'ReactDOMInput',tagName:'INPUT',mixins:[AutoFocusMixin,LinkedValueUtils.Mixin,ReactBrowserComponentMixin],getInitialState:function getInitialState(){var defaultValue=this.props.defaultValue;return {initialChecked:this.props.defaultChecked || false,initialValue:defaultValue != null?defaultValue:null};},render:function render(){ // Clone `this.props` so we don't mutate the input.
  var props=assign({},this.props);props.defaultChecked = null;props.defaultValue = null;var value=LinkedValueUtils.getValue(this);props.value = value != null?value:this.state.initialValue;var checked=LinkedValueUtils.getChecked(this);props.checked = checked != null?checked:this.state.initialChecked;props.onChange = this._handleChange;return input(props,this.props.children);},componentDidMount:function componentDidMount(){var id=ReactMount.getID(this.getDOMNode());instancesByReactID[id] = this;},componentWillUnmount:function componentWillUnmount(){var rootNode=this.getDOMNode();var id=ReactMount.getID(rootNode);delete instancesByReactID[id];},componentDidUpdate:function componentDidUpdate(prevProps,prevState,prevContext){var rootNode=this.getDOMNode();if(this.props.checked != null){DOMPropertyOperations.setValueForProperty(rootNode,'checked',this.props.checked || false);}var value=LinkedValueUtils.getValue(this);if(value != null){ // Cast `value` to a string to ensure the value is set correctly. While
  // browsers typically do this as necessary, jsdom doesn't.
  DOMPropertyOperations.setValueForProperty(rootNode,'value','' + value);}},_handleChange:function _handleChange(event){var returnValue;var onChange=LinkedValueUtils.getOnChange(this);if(onChange){returnValue = onChange.call(this,event);} // Here we use asap to wait until all updates have propagated, which
  // is important when using controlled components within layers:
  // https://github.com/facebook/react/issues/1698
  ReactUpdates.asap(forceUpdateIfMounted,this);var name=this.props.name;if(this.props.type === 'radio' && name != null){var rootNode=this.getDOMNode();var queryRoot=rootNode;while(queryRoot.parentNode) {queryRoot = queryRoot.parentNode;} // If `rootNode.form` was non-null, then we could try `form.elements`,
  // but that sometimes behaves strangely in IE8. We could also try using
  // `form.getElementsByName`, but that will only return direct children
  // and won't include inputs that use the HTML5 `form=` attribute. Since
  // the input might not even be in a form, let's just use the global
  // `querySelectorAll` to ensure we don't miss anything.
  var group=queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');for(var i=0,groupLen=group.length;i < groupLen;i++) {var otherNode=group[i];if(otherNode === rootNode || otherNode.form !== rootNode.form){continue;}var otherID=ReactMount.getID(otherNode);"production" !== process.env.NODE_ENV?invariant(otherID,'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.'):invariant(otherID);var otherInstance=instancesByReactID[otherID];"production" !== process.env.NODE_ENV?invariant(otherInstance,'ReactDOMInput: Unknown radio button ID %s.',otherID):invariant(otherInstance); // If this is a controlled radio button group, forcing the input that
  // was previously checked to update will cause it to be come re-checked
  // as appropriate.
  ReactUpdates.asap(forceUpdateIfMounted,otherInstance);}}return returnValue;}});module.exports = ReactDOMInput;}).call(this,require('_process'));},{"./AutoFocusMixin":51,"./DOMPropertyOperations":60,"./LinkedValueUtils":73,"./Object.assign":76,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107,"./ReactMount":120,"./ReactUpdates":137,"./invariant":185,"_process":12}],98:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMOption
   */'use strict';var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var warning=require("./warning");var option=ReactElement.createFactory('option'); /**
   * Implements an <option> native component that warns when `selected` is set.
   */var ReactDOMOption=ReactClass.createClass({displayName:'ReactDOMOption',tagName:'OPTION',mixins:[ReactBrowserComponentMixin],componentWillMount:function componentWillMount(){ // TODO (yungsters): Remove support for `selected` in <option>.
  if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(this.props.selected == null,'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.'):null;}},render:function render(){return option(this.props,this.props.children);}});module.exports = ReactDOMOption;}).call(this,require('_process'));},{"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107,"./warning":204,"_process":12}],99:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMSelect
   */'use strict';var AutoFocusMixin=require("./AutoFocusMixin");var LinkedValueUtils=require("./LinkedValueUtils");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var ReactUpdates=require("./ReactUpdates");var assign=require("./Object.assign");var select=ReactElement.createFactory('select');function updateOptionsIfPendingUpdateAndMounted(){ /*jshint validthis:true */if(this._pendingUpdate){this._pendingUpdate = false;var value=LinkedValueUtils.getValue(this);if(value != null && this.isMounted()){updateOptions(this,value);}}} /**
   * Validation function for `value` and `defaultValue`.
   * @private
   */function selectValueType(props,propName,componentName){if(props[propName] == null){return null;}if(props.multiple){if(!Array.isArray(props[propName])){return new Error("The `" + propName + "` prop supplied to <select> must be an array if " + "`multiple` is true.");}}else {if(Array.isArray(props[propName])){return new Error("The `" + propName + "` prop supplied to <select> must be a scalar " + "value if `multiple` is false.");}}} /**
   * @param {ReactComponent} component Instance of ReactDOMSelect
   * @param {*} propValue A stringable (with `multiple`, a list of stringables).
   * @private
   */function updateOptions(component,propValue){var selectedValue,i,l;var options=component.getDOMNode().options;if(component.props.multiple){selectedValue = {};for(i = 0,l = propValue.length;i < l;i++) {selectedValue['' + propValue[i]] = true;}for(i = 0,l = options.length;i < l;i++) {var selected=selectedValue.hasOwnProperty(options[i].value);if(options[i].selected !== selected){options[i].selected = selected;}}}else { // Do not set `select.value` as exact behavior isn't consistent across all
  // browsers for all cases.
  selectedValue = '' + propValue;for(i = 0,l = options.length;i < l;i++) {if(options[i].value === selectedValue){options[i].selected = true;return;}}if(options.length){options[0].selected = true;}}} /**
   * Implements a <select> native component that allows optionally setting the
   * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
   * stringable. If `multiple` is true, the prop must be an array of stringables.
   *
   * If `value` is not supplied (or null/undefined), user actions that change the
   * selected option will trigger updates to the rendered options.
   *
   * If it is supplied (and not null/undefined), the rendered options will not
   * update in response to user actions. Instead, the `value` prop must change in
   * order for the rendered options to update.
   *
   * If `defaultValue` is provided, any options with the supplied values will be
   * selected.
   */var ReactDOMSelect=ReactClass.createClass({displayName:'ReactDOMSelect',tagName:'SELECT',mixins:[AutoFocusMixin,LinkedValueUtils.Mixin,ReactBrowserComponentMixin],propTypes:{defaultValue:selectValueType,value:selectValueType},render:function render(){ // Clone `this.props` so we don't mutate the input.
  var props=assign({},this.props);props.onChange = this._handleChange;props.value = null;return select(props,this.props.children);},componentWillMount:function componentWillMount(){this._pendingUpdate = false;},componentDidMount:function componentDidMount(){var value=LinkedValueUtils.getValue(this);if(value != null){updateOptions(this,value);}else if(this.props.defaultValue != null){updateOptions(this,this.props.defaultValue);}},componentDidUpdate:function componentDidUpdate(prevProps){var value=LinkedValueUtils.getValue(this);if(value != null){this._pendingUpdate = false;updateOptions(this,value);}else if(!prevProps.multiple !== !this.props.multiple){ // For simplicity, reapply `defaultValue` if `multiple` is toggled.
  if(this.props.defaultValue != null){updateOptions(this,this.props.defaultValue);}else { // Revert the select back to its default unselected state.
  updateOptions(this,this.props.multiple?[]:'');}}},_handleChange:function _handleChange(event){var returnValue;var onChange=LinkedValueUtils.getOnChange(this);if(onChange){returnValue = onChange.call(this,event);}this._pendingUpdate = true;ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted,this);return returnValue;}});module.exports = ReactDOMSelect;},{"./AutoFocusMixin":51,"./LinkedValueUtils":73,"./Object.assign":76,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107,"./ReactUpdates":137}],100:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMSelection
   */'use strict';var ExecutionEnvironment=require("./ExecutionEnvironment");var getNodeForCharacterOffset=require("./getNodeForCharacterOffset");var getTextContentAccessor=require("./getTextContentAccessor"); /**
   * While `isCollapsed` is available on the Selection object and `collapsed`
   * is available on the Range object, IE11 sometimes gets them wrong.
   * If the anchor/focus nodes and offsets are the same, the range is collapsed.
   */function isCollapsed(anchorNode,anchorOffset,focusNode,focusOffset){return anchorNode === focusNode && anchorOffset === focusOffset;} /**
   * Get the appropriate anchor and focus node/offset pairs for IE.
   *
   * The catch here is that IE's selection API doesn't provide information
   * about whether the selection is forward or backward, so we have to
   * behave as though it's always forward.
   *
   * IE text differs from modern selection in that it behaves as though
   * block elements end with a new line. This means character offsets will
   * differ between the two APIs.
   *
   * @param {DOMElement} node
   * @return {object}
   */function getIEOffsets(node){var selection=document.selection;var selectedRange=selection.createRange();var selectedLength=selectedRange.text.length; // Duplicate selection so we can move range without breaking user selection.
  var fromStart=selectedRange.duplicate();fromStart.moveToElementText(node);fromStart.setEndPoint('EndToStart',selectedRange);var startOffset=fromStart.text.length;var endOffset=startOffset + selectedLength;return {start:startOffset,end:endOffset};} /**
   * @param {DOMElement} node
   * @return {?object}
   */function getModernOffsets(node){var selection=window.getSelection && window.getSelection();if(!selection || selection.rangeCount === 0){return null;}var anchorNode=selection.anchorNode;var anchorOffset=selection.anchorOffset;var focusNode=selection.focusNode;var focusOffset=selection.focusOffset;var currentRange=selection.getRangeAt(0); // If the node and offset values are the same, the selection is collapsed.
  // `Selection.isCollapsed` is available natively, but IE sometimes gets
  // this value wrong.
  var isSelectionCollapsed=isCollapsed(selection.anchorNode,selection.anchorOffset,selection.focusNode,selection.focusOffset);var rangeLength=isSelectionCollapsed?0:currentRange.toString().length;var tempRange=currentRange.cloneRange();tempRange.selectNodeContents(node);tempRange.setEnd(currentRange.startContainer,currentRange.startOffset);var isTempRangeCollapsed=isCollapsed(tempRange.startContainer,tempRange.startOffset,tempRange.endContainer,tempRange.endOffset);var start=isTempRangeCollapsed?0:tempRange.toString().length;var end=start + rangeLength; // Detect whether the selection is backward.
  var detectionRange=document.createRange();detectionRange.setStart(anchorNode,anchorOffset);detectionRange.setEnd(focusNode,focusOffset);var isBackward=detectionRange.collapsed;return {start:isBackward?end:start,end:isBackward?start:end};} /**
   * @param {DOMElement|DOMTextNode} node
   * @param {object} offsets
   */function setIEOffsets(node,offsets){var range=document.selection.createRange().duplicate();var start,end;if(typeof offsets.end === 'undefined'){start = offsets.start;end = start;}else if(offsets.start > offsets.end){start = offsets.end;end = offsets.start;}else {start = offsets.start;end = offsets.end;}range.moveToElementText(node);range.moveStart('character',start);range.setEndPoint('EndToStart',range);range.moveEnd('character',end - start);range.select();} /**
   * In modern non-IE browsers, we can support both forward and backward
   * selections.
   *
   * Note: IE10+ supports the Selection object, but it does not support
   * the `extend` method, which means that even in modern IE, it's not possible
   * to programatically create a backward selection. Thus, for all IE
   * versions, we use the old IE API to create our selections.
   *
   * @param {DOMElement|DOMTextNode} node
   * @param {object} offsets
   */function setModernOffsets(node,offsets){if(!window.getSelection){return;}var selection=window.getSelection();var length=node[getTextContentAccessor()].length;var start=Math.min(offsets.start,length);var end=typeof offsets.end === 'undefined'?start:Math.min(offsets.end,length); // IE 11 uses modern selection, but doesn't support the extend method.
  // Flip backward selections, so we can set with a single range.
  if(!selection.extend && start > end){var temp=end;end = start;start = temp;}var startMarker=getNodeForCharacterOffset(node,start);var endMarker=getNodeForCharacterOffset(node,end);if(startMarker && endMarker){var range=document.createRange();range.setStart(startMarker.node,startMarker.offset);selection.removeAllRanges();if(start > end){selection.addRange(range);selection.extend(endMarker.node,endMarker.offset);}else {range.setEnd(endMarker.node,endMarker.offset);selection.addRange(range);}}}var useIEOffsets=ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);var ReactDOMSelection={ /**
     * @param {DOMElement} node
     */getOffsets:useIEOffsets?getIEOffsets:getModernOffsets, /**
     * @param {DOMElement|DOMTextNode} node
     * @param {object} offsets
     */setOffsets:useIEOffsets?setIEOffsets:setModernOffsets};module.exports = ReactDOMSelection;},{"./ExecutionEnvironment":70,"./getNodeForCharacterOffset":178,"./getTextContentAccessor":180}],101:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMTextComponent
   * @typechecks static-only
   */'use strict';var DOMPropertyOperations=require("./DOMPropertyOperations");var ReactComponentBrowserEnvironment=require("./ReactComponentBrowserEnvironment");var ReactDOMComponent=require("./ReactDOMComponent");var assign=require("./Object.assign");var escapeTextContentForBrowser=require("./escapeTextContentForBrowser"); /**
   * Text nodes violate a couple assumptions that React makes about components:
   *
   *  - When mounting text into the DOM, adjacent text nodes are merged.
   *  - Text nodes cannot be assigned a React root ID.
   *
   * This component is used to wrap strings in elements so that they can undergo
   * the same reconciliation that is applied to elements.
   *
   * TODO: Investigate representing React components in the DOM with text nodes.
   *
   * @class ReactDOMTextComponent
   * @extends ReactComponent
   * @internal
   */var ReactDOMTextComponent=function ReactDOMTextComponent(props){ // This constructor and its argument is currently used by mocks.
  };assign(ReactDOMTextComponent.prototype,{ /**
     * @param {ReactText} text
     * @internal
     */construct:function construct(text){ // TODO: This is really a ReactText (ReactNode), not a ReactElement
  this._currentElement = text;this._stringText = '' + text; // Properties
  this._rootNodeID = null;this._mountIndex = 0;}, /**
     * Creates the markup for this text node. This node is not intended to have
     * any features besides containing text content.
     *
     * @param {string} rootID DOM ID of the root node.
     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
     * @return {string} Markup for this text node.
     * @internal
     */mountComponent:function mountComponent(rootID,transaction,context){this._rootNodeID = rootID;var escapedText=escapeTextContentForBrowser(this._stringText);if(transaction.renderToStaticMarkup){ // Normally we'd wrap this in a `span` for the reasons stated above, but
  // since this is a situation where React won't take over (static pages),
  // we can simply return the text as it is.
  return escapedText;}return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';}, /**
     * Updates this component by updating the text content.
     *
     * @param {ReactText} nextText The next text content
     * @param {ReactReconcileTransaction} transaction
     * @internal
     */receiveComponent:function receiveComponent(nextText,transaction){if(nextText !== this._currentElement){this._currentElement = nextText;var nextStringText='' + nextText;if(nextStringText !== this._stringText){ // TODO: Save this as pending props and use performUpdateIfNecessary
  // and/or updateComponent to do the actual update for consistency with
  // other component types?
  this._stringText = nextStringText;ReactDOMComponent.BackendIDOperations.updateTextContentByID(this._rootNodeID,nextStringText);}}},unmountComponent:function unmountComponent(){ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);}});module.exports = ReactDOMTextComponent;},{"./DOMPropertyOperations":60,"./Object.assign":76,"./ReactComponentBrowserEnvironment":85,"./ReactDOMComponent":92,"./escapeTextContentForBrowser":166}],102:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMTextarea
   */'use strict';var AutoFocusMixin=require("./AutoFocusMixin");var DOMPropertyOperations=require("./DOMPropertyOperations");var LinkedValueUtils=require("./LinkedValueUtils");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var ReactUpdates=require("./ReactUpdates");var assign=require("./Object.assign");var invariant=require("./invariant");var warning=require("./warning");var textarea=ReactElement.createFactory('textarea');function forceUpdateIfMounted(){ /*jshint validthis:true */if(this.isMounted()){this.forceUpdate();}} /**
   * Implements a <textarea> native component that allows setting `value`, and
   * `defaultValue`. This differs from the traditional DOM API because value is
   * usually set as PCDATA children.
   *
   * If `value` is not supplied (or null/undefined), user actions that affect the
   * value will trigger updates to the element.
   *
   * If `value` is supplied (and not null/undefined), the rendered element will
   * not trigger updates to the element. Instead, the `value` prop must change in
   * order for the rendered element to be updated.
   *
   * The rendered element will be initialized with an empty value, the prop
   * `defaultValue` if specified, or the children content (deprecated).
   */var ReactDOMTextarea=ReactClass.createClass({displayName:'ReactDOMTextarea',tagName:'TEXTAREA',mixins:[AutoFocusMixin,LinkedValueUtils.Mixin,ReactBrowserComponentMixin],getInitialState:function getInitialState(){var defaultValue=this.props.defaultValue; // TODO (yungsters): Remove support for children content in <textarea>.
  var children=this.props.children;if(children != null){if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(false,'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.'):null;}"production" !== process.env.NODE_ENV?invariant(defaultValue == null,'If you supply `defaultValue` on a <textarea>, do not pass children.'):invariant(defaultValue == null);if(Array.isArray(children)){"production" !== process.env.NODE_ENV?invariant(children.length <= 1,'<textarea> can only have at most one child.'):invariant(children.length <= 1);children = children[0];}defaultValue = '' + children;}if(defaultValue == null){defaultValue = '';}var value=LinkedValueUtils.getValue(this);return { // We save the initial value so that `ReactDOMComponent` doesn't update
  // `textContent` (unnecessary since we update value).
  // The initial value can be a boolean or object so that's why it's
  // forced to be a string.
  initialValue:'' + (value != null?value:defaultValue)};},render:function render(){ // Clone `this.props` so we don't mutate the input.
  var props=assign({},this.props);"production" !== process.env.NODE_ENV?invariant(props.dangerouslySetInnerHTML == null,'`dangerouslySetInnerHTML` does not make sense on <textarea>.'):invariant(props.dangerouslySetInnerHTML == null);props.defaultValue = null;props.value = null;props.onChange = this._handleChange; // Always set children to the same thing. In IE9, the selection range will
  // get reset if `textContent` is mutated.
  return textarea(props,this.state.initialValue);},componentDidUpdate:function componentDidUpdate(prevProps,prevState,prevContext){var value=LinkedValueUtils.getValue(this);if(value != null){var rootNode=this.getDOMNode(); // Cast `value` to a string to ensure the value is set correctly. While
  // browsers typically do this as necessary, jsdom doesn't.
  DOMPropertyOperations.setValueForProperty(rootNode,'value','' + value);}},_handleChange:function _handleChange(event){var returnValue;var onChange=LinkedValueUtils.getOnChange(this);if(onChange){returnValue = onChange.call(this,event);}ReactUpdates.asap(forceUpdateIfMounted,this);return returnValue;}});module.exports = ReactDOMTextarea;}).call(this,require('_process'));},{"./AutoFocusMixin":51,"./DOMPropertyOperations":60,"./LinkedValueUtils":73,"./Object.assign":76,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactElement":107,"./ReactUpdates":137,"./invariant":185,"./warning":204,"_process":12}],103:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDefaultBatchingStrategy
   */'use strict';var ReactUpdates=require("./ReactUpdates");var Transaction=require("./Transaction");var assign=require("./Object.assign");var emptyFunction=require("./emptyFunction");var RESET_BATCHED_UPDATES={initialize:emptyFunction,close:function close(){ReactDefaultBatchingStrategy.isBatchingUpdates = false;}};var FLUSH_BATCHED_UPDATES={initialize:emptyFunction,close:ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)};var TRANSACTION_WRAPPERS=[FLUSH_BATCHED_UPDATES,RESET_BATCHED_UPDATES];function ReactDefaultBatchingStrategyTransaction(){this.reinitializeTransaction();}assign(ReactDefaultBatchingStrategyTransaction.prototype,Transaction.Mixin,{getTransactionWrappers:function getTransactionWrappers(){return TRANSACTION_WRAPPERS;}});var transaction=new ReactDefaultBatchingStrategyTransaction();var ReactDefaultBatchingStrategy={isBatchingUpdates:false, /**
     * Call the provided function in a context within which calls to `setState`
     * and friends are batched such that components aren't updated unnecessarily.
     */batchedUpdates:function batchedUpdates(callback,a,b,c,d){var alreadyBatchingUpdates=ReactDefaultBatchingStrategy.isBatchingUpdates;ReactDefaultBatchingStrategy.isBatchingUpdates = true; // The code is written this way to avoid extra allocations
  if(alreadyBatchingUpdates){callback(a,b,c,d);}else {transaction.perform(callback,null,a,b,c,d);}}};module.exports = ReactDefaultBatchingStrategy;},{"./Object.assign":76,"./ReactUpdates":137,"./Transaction":153,"./emptyFunction":164}],104:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDefaultInjection
   */'use strict';var BeforeInputEventPlugin=require("./BeforeInputEventPlugin");var ChangeEventPlugin=require("./ChangeEventPlugin");var ClientReactRootIndex=require("./ClientReactRootIndex");var DefaultEventPluginOrder=require("./DefaultEventPluginOrder");var EnterLeaveEventPlugin=require("./EnterLeaveEventPlugin");var ExecutionEnvironment=require("./ExecutionEnvironment");var HTMLDOMPropertyConfig=require("./HTMLDOMPropertyConfig");var MobileSafariClickEventPlugin=require("./MobileSafariClickEventPlugin");var ReactBrowserComponentMixin=require("./ReactBrowserComponentMixin");var ReactClass=require("./ReactClass");var ReactComponentBrowserEnvironment=require("./ReactComponentBrowserEnvironment");var ReactDefaultBatchingStrategy=require("./ReactDefaultBatchingStrategy");var ReactDOMComponent=require("./ReactDOMComponent");var ReactDOMButton=require("./ReactDOMButton");var ReactDOMForm=require("./ReactDOMForm");var ReactDOMImg=require("./ReactDOMImg");var ReactDOMIDOperations=require("./ReactDOMIDOperations");var ReactDOMIframe=require("./ReactDOMIframe");var ReactDOMInput=require("./ReactDOMInput");var ReactDOMOption=require("./ReactDOMOption");var ReactDOMSelect=require("./ReactDOMSelect");var ReactDOMTextarea=require("./ReactDOMTextarea");var ReactDOMTextComponent=require("./ReactDOMTextComponent");var ReactElement=require("./ReactElement");var ReactEventListener=require("./ReactEventListener");var ReactInjection=require("./ReactInjection");var ReactInstanceHandles=require("./ReactInstanceHandles");var ReactMount=require("./ReactMount");var ReactReconcileTransaction=require("./ReactReconcileTransaction");var SelectEventPlugin=require("./SelectEventPlugin");var ServerReactRootIndex=require("./ServerReactRootIndex");var SimpleEventPlugin=require("./SimpleEventPlugin");var SVGDOMPropertyConfig=require("./SVGDOMPropertyConfig");var createFullPageComponent=require("./createFullPageComponent");function autoGenerateWrapperClass(type){return ReactClass.createClass({tagName:type.toUpperCase(),render:function render(){return new ReactElement(type,null,null,null,null,this.props);}});}function inject(){ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener); /**
     * Inject modules for resolving DOM hierarchy and plugin ordering.
     */ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);ReactInjection.EventPluginHub.injectMount(ReactMount); /**
     * Some important event plugins included by default (without having to require
     * them).
     */ReactInjection.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:SimpleEventPlugin,EnterLeaveEventPlugin:EnterLeaveEventPlugin,ChangeEventPlugin:ChangeEventPlugin,MobileSafariClickEventPlugin:MobileSafariClickEventPlugin,SelectEventPlugin:SelectEventPlugin,BeforeInputEventPlugin:BeforeInputEventPlugin});ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);ReactInjection.NativeComponent.injectAutoWrapper(autoGenerateWrapperClass); // This needs to happen before createFullPageComponent() otherwise the mixin
  // won't be included.
  ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);ReactInjection.NativeComponent.injectComponentClasses({'button':ReactDOMButton,'form':ReactDOMForm,'iframe':ReactDOMIframe,'img':ReactDOMImg,'input':ReactDOMInput,'option':ReactDOMOption,'select':ReactDOMSelect,'textarea':ReactDOMTextarea,'html':createFullPageComponent('html'),'head':createFullPageComponent('head'),'body':createFullPageComponent('body')});ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);ReactInjection.EmptyComponent.injectEmptyComponent('noscript');ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM?ClientReactRootIndex.createReactRootIndex:ServerReactRootIndex.createReactRootIndex);ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);ReactInjection.DOMComponent.injectIDOperations(ReactDOMIDOperations);if("production" !== process.env.NODE_ENV){var url=ExecutionEnvironment.canUseDOM && window.location.href || '';if(/[?&]react_perf\b/.test(url)){var ReactDefaultPerf=require("./ReactDefaultPerf");ReactDefaultPerf.start();}}}module.exports = {inject:inject};}).call(this,require('_process'));},{"./BeforeInputEventPlugin":52,"./ChangeEventPlugin":56,"./ClientReactRootIndex":57,"./DefaultEventPluginOrder":62,"./EnterLeaveEventPlugin":63,"./ExecutionEnvironment":70,"./HTMLDOMPropertyConfig":72,"./MobileSafariClickEventPlugin":75,"./ReactBrowserComponentMixin":79,"./ReactClass":83,"./ReactComponentBrowserEnvironment":85,"./ReactDOMButton":91,"./ReactDOMComponent":92,"./ReactDOMForm":93,"./ReactDOMIDOperations":94,"./ReactDOMIframe":95,"./ReactDOMImg":96,"./ReactDOMInput":97,"./ReactDOMOption":98,"./ReactDOMSelect":99,"./ReactDOMTextComponent":101,"./ReactDOMTextarea":102,"./ReactDefaultBatchingStrategy":103,"./ReactDefaultPerf":105,"./ReactElement":107,"./ReactEventListener":112,"./ReactInjection":114,"./ReactInstanceHandles":116,"./ReactMount":120,"./ReactReconcileTransaction":130,"./SVGDOMPropertyConfig":138,"./SelectEventPlugin":139,"./ServerReactRootIndex":140,"./SimpleEventPlugin":141,"./createFullPageComponent":161,"_process":12}],105:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDefaultPerf
   * @typechecks static-only
   */'use strict';var DOMProperty=require("./DOMProperty");var ReactDefaultPerfAnalysis=require("./ReactDefaultPerfAnalysis");var ReactMount=require("./ReactMount");var ReactPerf=require("./ReactPerf");var performanceNow=require("./performanceNow");function roundFloat(val){return Math.floor(val * 100) / 100;}function addValue(obj,key,val){obj[key] = (obj[key] || 0) + val;}var ReactDefaultPerf={_allMeasurements:[], // last item in the list is the current one
  _mountStack:[0],_injected:false,start:function start(){if(!ReactDefaultPerf._injected){ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);}ReactDefaultPerf._allMeasurements.length = 0;ReactPerf.enableMeasure = true;},stop:function stop(){ReactPerf.enableMeasure = false;},getLastMeasurements:function getLastMeasurements(){return ReactDefaultPerf._allMeasurements;},printExclusive:function printExclusive(measurements){measurements = measurements || ReactDefaultPerf._allMeasurements;var summary=ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);console.table(summary.map(function(item){return {'Component class name':item.componentName,'Total inclusive time (ms)':roundFloat(item.inclusive),'Exclusive mount time (ms)':roundFloat(item.exclusive),'Exclusive render time (ms)':roundFloat(item.render),'Mount time per instance (ms)':roundFloat(item.exclusive / item.count),'Render time per instance (ms)':roundFloat(item.render / item.count),'Instances':item.count};})); // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct
  // number.
  },printInclusive:function printInclusive(measurements){measurements = measurements || ReactDefaultPerf._allMeasurements;var summary=ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);console.table(summary.map(function(item){return {'Owner > component':item.componentName,'Inclusive time (ms)':roundFloat(item.time),'Instances':item.count};}));console.log('Total time:',ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');},getMeasurementsSummaryMap:function getMeasurementsSummaryMap(measurements){var summary=ReactDefaultPerfAnalysis.getInclusiveSummary(measurements,true);return summary.map(function(item){return {'Owner > component':item.componentName,'Wasted time (ms)':item.time,'Instances':item.count};});},printWasted:function printWasted(measurements){measurements = measurements || ReactDefaultPerf._allMeasurements;console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));console.log('Total time:',ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');},printDOM:function printDOM(measurements){measurements = measurements || ReactDefaultPerf._allMeasurements;var summary=ReactDefaultPerfAnalysis.getDOMSummary(measurements);console.table(summary.map(function(item){var result={};result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;result['type'] = item.type;result['args'] = JSON.stringify(item.args);return result;}));console.log('Total time:',ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');},_recordWrite:function _recordWrite(id,fnName,totalTime,args){ // TODO: totalTime isn't that useful since it doesn't count paints/reflows
  var writes=ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;writes[id] = writes[id] || [];writes[id].push({type:fnName,time:totalTime,args:args});},measure:function measure(moduleName,fnName,func){return function(){for(var args=[],$__0=0,$__1=arguments.length;$__0 < $__1;$__0++) args.push(arguments[$__0]);var totalTime;var rv;var start;if(fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates'){ // A "measurement" is a set of metrics recorded for each flush. We want
  // to group the metrics for a given flush together so we can look at the
  // components that rendered and the DOM operations that actually
  // happened to determine the amount of "wasted work" performed.
  ReactDefaultPerf._allMeasurements.push({exclusive:{},inclusive:{},render:{},counts:{},writes:{},displayNames:{},totalTime:0});start = performanceNow();rv = func.apply(this,args);ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;return rv;}else if(fnName === '_mountImageIntoNode' || moduleName === 'ReactDOMIDOperations'){start = performanceNow();rv = func.apply(this,args);totalTime = performanceNow() - start;if(fnName === '_mountImageIntoNode'){var mountID=ReactMount.getID(args[1]);ReactDefaultPerf._recordWrite(mountID,fnName,totalTime,args[0]);}else if(fnName === 'dangerouslyProcessChildrenUpdates'){ // special format
  args[0].forEach(function(update){var writeArgs={};if(update.fromIndex !== null){writeArgs.fromIndex = update.fromIndex;}if(update.toIndex !== null){writeArgs.toIndex = update.toIndex;}if(update.textContent !== null){writeArgs.textContent = update.textContent;}if(update.markupIndex !== null){writeArgs.markup = args[1][update.markupIndex];}ReactDefaultPerf._recordWrite(update.parentID,update.type,totalTime,writeArgs);});}else { // basic format
  ReactDefaultPerf._recordWrite(args[0],fnName,totalTime,Array.prototype.slice.call(args,1));}return rv;}else if(moduleName === 'ReactCompositeComponent' && ( // TODO: receiveComponent()?
  fnName === 'mountComponent' || fnName === 'updateComponent' || fnName === '_renderValidatedComponent')){if(typeof this._currentElement.type === 'string'){return func.apply(this,args);}var rootNodeID=fnName === 'mountComponent'?args[0]:this._rootNodeID;var isRender=fnName === '_renderValidatedComponent';var isMount=fnName === 'mountComponent';var mountStack=ReactDefaultPerf._mountStack;var entry=ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];if(isRender){addValue(entry.counts,rootNodeID,1);}else if(isMount){mountStack.push(0);}start = performanceNow();rv = func.apply(this,args);totalTime = performanceNow() - start;if(isRender){addValue(entry.render,rootNodeID,totalTime);}else if(isMount){var subMountTime=mountStack.pop();mountStack[mountStack.length - 1] += totalTime;addValue(entry.exclusive,rootNodeID,totalTime - subMountTime);addValue(entry.inclusive,rootNodeID,totalTime);}else {addValue(entry.inclusive,rootNodeID,totalTime);}entry.displayNames[rootNodeID] = {current:this.getName(),owner:this._currentElement._owner?this._currentElement._owner.getName():'<root>'};return rv;}else {return func.apply(this,args);}};}};module.exports = ReactDefaultPerf;},{"./DOMProperty":59,"./ReactDefaultPerfAnalysis":106,"./ReactMount":120,"./ReactPerf":125,"./performanceNow":196}],106:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDefaultPerfAnalysis
   */var assign=require("./Object.assign"); // Don't try to save users less than 1.2ms (a number I made up)
  var DONT_CARE_THRESHOLD=1.2;var DOM_OPERATION_TYPES={'_mountImageIntoNode':'set innerHTML',INSERT_MARKUP:'set innerHTML',MOVE_EXISTING:'move',REMOVE_NODE:'remove',TEXT_CONTENT:'set textContent','updatePropertyByID':'update attribute','deletePropertyByID':'delete attribute','updateStylesByID':'update styles','updateInnerHTMLByID':'set innerHTML','dangerouslyReplaceNodeWithMarkupByID':'replace'};function getTotalTime(measurements){ // TODO: return number of DOM ops? could be misleading.
  // TODO: measure dropped frames after reconcile?
  // TODO: log total time of each reconcile and the top-level component
  // class that triggered it.
  var totalTime=0;for(var i=0;i < measurements.length;i++) {var measurement=measurements[i];totalTime += measurement.totalTime;}return totalTime;}function getDOMSummary(measurements){var items=[];for(var i=0;i < measurements.length;i++) {var measurement=measurements[i];var id;for(id in measurement.writes) {measurement.writes[id].forEach(function(write){items.push({id:id,type:DOM_OPERATION_TYPES[write.type] || write.type,args:write.args});});}}return items;}function getExclusiveSummary(measurements){var candidates={};var displayName;for(var i=0;i < measurements.length;i++) {var measurement=measurements[i];var allIDs=assign({},measurement.exclusive,measurement.inclusive);for(var id in allIDs) {displayName = measurement.displayNames[id].current;candidates[displayName] = candidates[displayName] || {componentName:displayName,inclusive:0,exclusive:0,render:0,count:0};if(measurement.render[id]){candidates[displayName].render += measurement.render[id];}if(measurement.exclusive[id]){candidates[displayName].exclusive += measurement.exclusive[id];}if(measurement.inclusive[id]){candidates[displayName].inclusive += measurement.inclusive[id];}if(measurement.counts[id]){candidates[displayName].count += measurement.counts[id];}}} // Now make a sorted array with the results.
  var arr=[];for(displayName in candidates) {if(candidates[displayName].exclusive >= DONT_CARE_THRESHOLD){arr.push(candidates[displayName]);}}arr.sort(function(a,b){return b.exclusive - a.exclusive;});return arr;}function getInclusiveSummary(measurements,onlyClean){var candidates={};var inclusiveKey;for(var i=0;i < measurements.length;i++) {var measurement=measurements[i];var allIDs=assign({},measurement.exclusive,measurement.inclusive);var cleanComponents;if(onlyClean){cleanComponents = getUnchangedComponents(measurement);}for(var id in allIDs) {if(onlyClean && !cleanComponents[id]){continue;}var displayName=measurement.displayNames[id]; // Inclusive time is not useful for many components without knowing where
  // they are instantiated. So we aggregate inclusive time with both the
  // owner and current displayName as the key.
  inclusiveKey = displayName.owner + ' > ' + displayName.current;candidates[inclusiveKey] = candidates[inclusiveKey] || {componentName:inclusiveKey,time:0,count:0};if(measurement.inclusive[id]){candidates[inclusiveKey].time += measurement.inclusive[id];}if(measurement.counts[id]){candidates[inclusiveKey].count += measurement.counts[id];}}} // Now make a sorted array with the results.
  var arr=[];for(inclusiveKey in candidates) {if(candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD){arr.push(candidates[inclusiveKey]);}}arr.sort(function(a,b){return b.time - a.time;});return arr;}function getUnchangedComponents(measurement){ // For a given reconcile, look at which components did not actually
  // render anything to the DOM and return a mapping of their ID to
  // the amount of time it took to render the entire subtree.
  var cleanComponents={};var dirtyLeafIDs=Object.keys(measurement.writes);var allIDs=assign({},measurement.exclusive,measurement.inclusive);for(var id in allIDs) {var isDirty=false; // For each component that rendered, see if a component that triggered
  // a DOM op is in its subtree.
  for(var i=0;i < dirtyLeafIDs.length;i++) {if(dirtyLeafIDs[i].indexOf(id) === 0){isDirty = true;break;}}if(!isDirty && measurement.counts[id] > 0){cleanComponents[id] = true;}}return cleanComponents;}var ReactDefaultPerfAnalysis={getExclusiveSummary:getExclusiveSummary,getInclusiveSummary:getInclusiveSummary,getDOMSummary:getDOMSummary,getTotalTime:getTotalTime};module.exports = ReactDefaultPerfAnalysis;},{"./Object.assign":76}],107:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactElement
   */'use strict';var ReactContext=require("./ReactContext");var ReactCurrentOwner=require("./ReactCurrentOwner");var assign=require("./Object.assign");var warning=require("./warning");var RESERVED_PROPS={key:true,ref:true}; /**
   * Warn for mutations.
   *
   * @internal
   * @param {object} object
   * @param {string} key
   */function defineWarningProperty(object,key){Object.defineProperty(object,key,{configurable:false,enumerable:true,get:function get(){if(!this._store){return null;}return this._store[key];},set:function set(value){"production" !== process.env.NODE_ENV?warning(false,'Don\'t set the %s property of the React element. Instead, ' + 'specify the correct value when initially creating the element.',key):null;this._store[key] = value;}});} /**
   * This is updated to true if the membrane is successfully created.
   */var useMutationMembrane=false; /**
   * Warn for mutations.
   *
   * @internal
   * @param {object} element
   */function defineMutationMembrane(prototype){try{var pseudoFrozenProperties={props:true};for(var key in pseudoFrozenProperties) {defineWarningProperty(prototype,key);}useMutationMembrane = true;}catch(x) { // IE will fail on defineProperty
  }} /**
   * Base constructor for all React elements. This is only used to make this
   * work with a dynamic instanceof check. Nothing should live on this prototype.
   *
   * @param {*} type
   * @param {string|object} ref
   * @param {*} key
   * @param {*} props
   * @internal
   */var ReactElement=function ReactElement(type,key,ref,owner,context,props){ // Built-in properties that belong on the element
  this.type = type;this.key = key;this.ref = ref; // Record the component responsible for creating this element.
  this._owner = owner; // TODO: Deprecate withContext, and then the context becomes accessible
  // through the owner.
  this._context = context;if("production" !== process.env.NODE_ENV){ // The validation flag and props are currently mutative. We put them on
  // an external backing store so that we can freeze the whole object.
  // This can be replaced with a WeakMap once they are implemented in
  // commonly used development environments.
  this._store = {props:props,originalProps:assign({},props)}; // To make comparing ReactElements easier for testing purposes, we make
  // the validation flag non-enumerable (where possible, which should
  // include every environment we run tests in), so the test framework
  // ignores it.
  try{Object.defineProperty(this._store,'validated',{configurable:false,enumerable:false,writable:true});}catch(x) {}this._store.validated = false; // We're not allowed to set props directly on the object so we early
  // return and rely on the prototype membrane to forward to the backing
  // store.
  if(useMutationMembrane){Object.freeze(this);return;}}this.props = props;}; // We intentionally don't expose the function on the constructor property.
  // ReactElement should be indistinguishable from a plain object.
  ReactElement.prototype = {_isReactElement:true};if("production" !== process.env.NODE_ENV){defineMutationMembrane(ReactElement.prototype);}ReactElement.createElement = function(type,config,children){var propName; // Reserved names are extracted
  var props={};var key=null;var ref=null;if(config != null){ref = config.ref === undefined?null:config.ref;key = config.key === undefined?null:'' + config.key; // Remaining properties are added to a new props object
  for(propName in config) {if(config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)){props[propName] = config[propName];}}} // Children can be more than one argument, and those are transferred onto
  // the newly allocated props object.
  var childrenLength=arguments.length - 2;if(childrenLength === 1){props.children = children;}else if(childrenLength > 1){var childArray=Array(childrenLength);for(var i=0;i < childrenLength;i++) {childArray[i] = arguments[i + 2];}props.children = childArray;} // Resolve default props
  if(type && type.defaultProps){var defaultProps=type.defaultProps;for(propName in defaultProps) {if(typeof props[propName] === 'undefined'){props[propName] = defaultProps[propName];}}}return new ReactElement(type,key,ref,ReactCurrentOwner.current,ReactContext.current,props);};ReactElement.createFactory = function(type){var factory=ReactElement.createElement.bind(null,type); // Expose the type on the factory and the prototype so that it can be
  // easily accessed on elements. E.g. <Foo />.type === Foo.type.
  // This should not be named `constructor` since this may not be the function
  // that created the element, and it may not even be a constructor.
  // Legacy hook TODO: Warn if this is accessed
  factory.type = type;return factory;};ReactElement.cloneAndReplaceProps = function(oldElement,newProps){var newElement=new ReactElement(oldElement.type,oldElement.key,oldElement.ref,oldElement._owner,oldElement._context,newProps);if("production" !== process.env.NODE_ENV){ // If the key on the original is valid, then the clone is valid
  newElement._store.validated = oldElement._store.validated;}return newElement;};ReactElement.cloneElement = function(element,config,children){var propName; // Original props are copied
  var props=assign({},element.props); // Reserved names are extracted
  var key=element.key;var ref=element.ref; // Owner will be preserved, unless ref is overridden
  var owner=element._owner;if(config != null){if(config.ref !== undefined){ // Silently steal the ref from the parent.
  ref = config.ref;owner = ReactCurrentOwner.current;}if(config.key !== undefined){key = '' + config.key;} // Remaining properties override existing props
  for(propName in config) {if(config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)){props[propName] = config[propName];}}} // Children can be more than one argument, and those are transferred onto
  // the newly allocated props object.
  var childrenLength=arguments.length - 2;if(childrenLength === 1){props.children = children;}else if(childrenLength > 1){var childArray=Array(childrenLength);for(var i=0;i < childrenLength;i++) {childArray[i] = arguments[i + 2];}props.children = childArray;}return new ReactElement(element.type,key,ref,owner,element._context,props);}; /**
   * @param {?object} object
   * @return {boolean} True if `object` is a valid component.
   * @final
   */ReactElement.isValidElement = function(object){ // ReactTestUtils is often used outside of beforeEach where as React is
  // within it. This leads to two different instances of React on the same
  // page. To identify a element from a different React instance we use
  // a flag instead of an instanceof check.
  var isElement=!!(object && object._isReactElement); // if (isElement && !(object instanceof ReactElement)) {
  // This is an indicator that you're using multiple versions of React at the
  // same time. This will screw with ownership and stuff. Fix it, please.
  // TODO: We could possibly warn here.
  // }
  return isElement;};module.exports = ReactElement;}).call(this,require('_process'));},{"./Object.assign":76,"./ReactContext":88,"./ReactCurrentOwner":89,"./warning":204,"_process":12}],108:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactElementValidator
   */ /**
   * ReactElementValidator provides a wrapper around a element factory
   * which validates the props passed to the element. This is intended to be
   * used only in DEV and could be replaced by a static type checker for languages
   * that support it.
   */'use strict';var ReactElement=require("./ReactElement");var ReactFragment=require("./ReactFragment");var ReactPropTypeLocations=require("./ReactPropTypeLocations");var ReactPropTypeLocationNames=require("./ReactPropTypeLocationNames");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactNativeComponent=require("./ReactNativeComponent");var getIteratorFn=require("./getIteratorFn");var invariant=require("./invariant");var warning=require("./warning");function getDeclarationErrorAddendum(){if(ReactCurrentOwner.current){var name=ReactCurrentOwner.current.getName();if(name){return ' Check the render method of `' + name + '`.';}}return '';} /**
   * Warn if there's no key explicitly set on dynamic arrays of children or
   * object keys are not valid. This allows us to keep track of children between
   * updates.
   */var ownerHasKeyUseWarning={};var loggedTypeFailures={};var NUMERIC_PROPERTY_REGEX=/^\d+$/; /**
   * Gets the instance's name for use in warnings.
   *
   * @internal
   * @return {?string} Display name or undefined
   */function getName(instance){var publicInstance=instance && instance.getPublicInstance();if(!publicInstance){return undefined;}var constructor=publicInstance.constructor;if(!constructor){return undefined;}return constructor.displayName || constructor.name || undefined;} /**
   * Gets the current owner's displayName for use in warnings.
   *
   * @internal
   * @return {?string} Display name or undefined
   */function getCurrentOwnerDisplayName(){var current=ReactCurrentOwner.current;return current && getName(current) || undefined;} /**
   * Warn if the element doesn't have an explicit key assigned to it.
   * This element is in an array. The array could grow and shrink or be
   * reordered. All children that haven't already been validated are required to
   * have a "key" property assigned to it.
   *
   * @internal
   * @param {ReactElement} element Element that requires a key.
   * @param {*} parentType element's parent's type.
   */function validateExplicitKey(element,parentType){if(element._store.validated || element.key != null){return;}element._store.validated = true;warnAndMonitorForKeyUse('Each child in an array or iterator should have a unique "key" prop.',element,parentType);} /**
   * Warn if the key is being defined as an object property but has an incorrect
   * value.
   *
   * @internal
   * @param {string} name Property name of the key.
   * @param {ReactElement} element Component that requires a key.
   * @param {*} parentType element's parent's type.
   */function validatePropertyKey(name,element,parentType){if(!NUMERIC_PROPERTY_REGEX.test(name)){return;}warnAndMonitorForKeyUse('Child objects should have non-numeric keys so ordering is preserved.',element,parentType);} /**
   * Shared warning and monitoring code for the key warnings.
   *
   * @internal
   * @param {string} message The base warning that gets output.
   * @param {ReactElement} element Component that requires a key.
   * @param {*} parentType element's parent's type.
   */function warnAndMonitorForKeyUse(message,element,parentType){var ownerName=getCurrentOwnerDisplayName();var parentName=typeof parentType === 'string'?parentType:parentType.displayName || parentType.name;var useName=ownerName || parentName;var memoizer=ownerHasKeyUseWarning[message] || (ownerHasKeyUseWarning[message] = {});if(memoizer.hasOwnProperty(useName)){return;}memoizer[useName] = true;var parentOrOwnerAddendum=ownerName?" Check the render method of " + ownerName + ".":parentName?" Check the React.render call using <" + parentName + ">.":''; // Usually the current owner is the offender, but if it accepts children as a
  // property, it may be the creator of the child that's responsible for
  // assigning it a key.
  var childOwnerAddendum='';if(element && element._owner && element._owner !== ReactCurrentOwner.current){ // Name of the component that originally created this child.
  var childOwnerName=getName(element._owner);childOwnerAddendum = " It was passed a child from " + childOwnerName + ".";}"production" !== process.env.NODE_ENV?warning(false,message + '%s%s See https://fb.me/react-warning-keys for more information.',parentOrOwnerAddendum,childOwnerAddendum):null;} /**
   * Ensure that every element either is passed in a static location, in an
   * array with an explicit keys property defined, or in an object literal
   * with valid key property.
   *
   * @internal
   * @param {ReactNode} node Statically passed child of any type.
   * @param {*} parentType node's parent's type.
   */function validateChildKeys(node,parentType){if(Array.isArray(node)){for(var i=0;i < node.length;i++) {var child=node[i];if(ReactElement.isValidElement(child)){validateExplicitKey(child,parentType);}}}else if(ReactElement.isValidElement(node)){ // This element was passed in a valid location.
  node._store.validated = true;}else if(node){var iteratorFn=getIteratorFn(node); // Entry iterators provide implicit keys.
  if(iteratorFn){if(iteratorFn !== node.entries){var iterator=iteratorFn.call(node);var step;while(!(step = iterator.next()).done) {if(ReactElement.isValidElement(step.value)){validateExplicitKey(step.value,parentType);}}}}else if(typeof node === 'object'){var fragment=ReactFragment.extractIfFragment(node);for(var key in fragment) {if(fragment.hasOwnProperty(key)){validatePropertyKey(key,fragment[key],parentType);}}}}} /**
   * Assert that the props are valid
   *
   * @param {string} componentName Name of the component for error messages.
   * @param {object} propTypes Map of prop name to a ReactPropType
   * @param {object} props
   * @param {string} location e.g. "prop", "context", "child context"
   * @private
   */function checkPropTypes(componentName,propTypes,props,location){for(var propName in propTypes) {if(propTypes.hasOwnProperty(propName)){var error; // Prop type validation may throw. In case they do, we don't want to
  // fail the render phase where it didn't fail before. So we log it.
  // After these have been cleaned up, we'll let them throw.
  try{ // This is intentionally an invariant that gets caught. It's the same
  // behavior as without this statement except with a better message.
  "production" !== process.env.NODE_ENV?invariant(typeof propTypes[propName] === 'function','%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.',componentName || 'React class',ReactPropTypeLocationNames[location],propName):invariant(typeof propTypes[propName] === 'function');error = propTypes[propName](props,propName,componentName,location);}catch(ex) {error = ex;}if(error instanceof Error && !(error.message in loggedTypeFailures)){ // Only monitor this failure once because there tends to be a lot of the
  // same error.
  loggedTypeFailures[error.message] = true;var addendum=getDeclarationErrorAddendum(this);"production" !== process.env.NODE_ENV?warning(false,'Failed propType: %s%s',error.message,addendum):null;}}}}var warnedPropsMutations={}; /**
   * Warn about mutating props when setting `propName` on `element`.
   *
   * @param {string} propName The string key within props that was set
   * @param {ReactElement} element
   */function warnForPropsMutation(propName,element){var type=element.type;var elementName=typeof type === 'string'?type:type.displayName;var ownerName=element._owner?element._owner.getPublicInstance().constructor.displayName:null;var warningKey=propName + '|' + elementName + '|' + ownerName;if(warnedPropsMutations.hasOwnProperty(warningKey)){return;}warnedPropsMutations[warningKey] = true;var elementInfo='';if(elementName){elementInfo = ' <' + elementName + ' />';}var ownerInfo='';if(ownerName){ownerInfo = ' The element was created by ' + ownerName + '.';}"production" !== process.env.NODE_ENV?warning(false,'Don\'t set .props.%s of the React component%s. Instead, specify the ' + 'correct value when initially creating the element or use ' + 'React.cloneElement to make a new element with updated props.%s',propName,elementInfo,ownerInfo):null;} // Inline Object.is polyfill
  function is(a,b){if(a !== a){ // NaN
  return b !== b;}if(a === 0 && b === 0){ // +-0
  return 1 / a === 1 / b;}return a === b;} /**
   * Given an element, check if its props have been mutated since element
   * creation (or the last call to this function). In particular, check if any
   * new props have been added, which we can't directly catch by defining warning
   * properties on the props object.
   *
   * @param {ReactElement} element
   */function checkAndWarnForMutatedProps(element){if(!element._store){ // Element was created using `new ReactElement` directly or with
  // `ReactElement.createElement`; skip mutation checking
  return;}var originalProps=element._store.originalProps;var props=element.props;for(var propName in props) {if(props.hasOwnProperty(propName)){if(!originalProps.hasOwnProperty(propName) || !is(originalProps[propName],props[propName])){warnForPropsMutation(propName,element); // Copy over the new value so that the two props objects match again
  originalProps[propName] = props[propName];}}}} /**
   * Given an element, validate that its props follow the propTypes definition,
   * provided by the type.
   *
   * @param {ReactElement} element
   */function validatePropTypes(element){if(element.type == null){ // This has already warned. Don't throw.
  return;} // Extract the component class from the element. Converts string types
  // to a composite class which may have propTypes.
  // TODO: Validating a string's propTypes is not decoupled from the
  // rendering target which is problematic.
  var componentClass=ReactNativeComponent.getComponentClassForElement(element);var name=componentClass.displayName || componentClass.name;if(componentClass.propTypes){checkPropTypes(name,componentClass.propTypes,element.props,ReactPropTypeLocations.prop);}if(typeof componentClass.getDefaultProps === 'function'){"production" !== process.env.NODE_ENV?warning(componentClass.getDefaultProps.isReactClassApproved,'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'):null;}}var ReactElementValidator={checkAndWarnForMutatedProps:checkAndWarnForMutatedProps,createElement:function createElement(type,props,children){ // We warn in this case but don't throw. We expect the element creation to
  // succeed and there will likely be errors in render.
  "production" !== process.env.NODE_ENV?warning(type != null,'React.createElement: type should not be null or undefined. It should ' + 'be a string (for DOM elements) or a ReactClass (for composite ' + 'components).'):null;var element=ReactElement.createElement.apply(this,arguments); // The result can be nullish if a mock or a custom function is used.
  // TODO: Drop this when these are no longer allowed as the type argument.
  if(element == null){return element;}for(var i=2;i < arguments.length;i++) {validateChildKeys(arguments[i],type);}validatePropTypes(element);return element;},createFactory:function createFactory(type){var validatedFactory=ReactElementValidator.createElement.bind(null,type); // Legacy hook TODO: Warn if this is accessed
  validatedFactory.type = type;if("production" !== process.env.NODE_ENV){try{Object.defineProperty(validatedFactory,'type',{enumerable:false,get:function get(){"production" !== process.env.NODE_ENV?warning(false,'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'):null;Object.defineProperty(this,'type',{value:type});return type;}});}catch(x) { // IE will fail on defineProperty (es5-shim/sham too)
  }}return validatedFactory;},cloneElement:function cloneElement(element,props,children){var newElement=ReactElement.cloneElement.apply(this,arguments);for(var i=2;i < arguments.length;i++) {validateChildKeys(arguments[i],newElement.type);}validatePropTypes(newElement);return newElement;}};module.exports = ReactElementValidator;}).call(this,require('_process'));},{"./ReactCurrentOwner":89,"./ReactElement":107,"./ReactFragment":113,"./ReactNativeComponent":123,"./ReactPropTypeLocationNames":126,"./ReactPropTypeLocations":127,"./getIteratorFn":176,"./invariant":185,"./warning":204,"_process":12}],109:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactEmptyComponent
   */'use strict';var ReactElement=require("./ReactElement");var ReactInstanceMap=require("./ReactInstanceMap");var invariant=require("./invariant");var component; // This registry keeps track of the React IDs of the components that rendered to
  // `null` (in reality a placeholder such as `noscript`)
  var nullComponentIDsRegistry={};var ReactEmptyComponentInjection={injectEmptyComponent:function injectEmptyComponent(emptyComponent){component = ReactElement.createFactory(emptyComponent);}};var ReactEmptyComponentType=function ReactEmptyComponentType(){};ReactEmptyComponentType.prototype.componentDidMount = function(){var internalInstance=ReactInstanceMap.get(this); // TODO: Make sure we run these methods in the correct order, we shouldn't
  // need this check. We're going to assume if we're here it means we ran
  // componentWillUnmount already so there is no internal instance (it gets
  // removed as part of the unmounting process).
  if(!internalInstance){return;}registerNullComponentID(internalInstance._rootNodeID);};ReactEmptyComponentType.prototype.componentWillUnmount = function(){var internalInstance=ReactInstanceMap.get(this); // TODO: Get rid of this check. See TODO in componentDidMount.
  if(!internalInstance){return;}deregisterNullComponentID(internalInstance._rootNodeID);};ReactEmptyComponentType.prototype.render = function(){"production" !== process.env.NODE_ENV?invariant(component,'Trying to return null from a render, but no null placeholder component ' + 'was injected.'):invariant(component);return component();};var emptyElement=ReactElement.createElement(ReactEmptyComponentType); /**
   * Mark the component as having rendered to null.
   * @param {string} id Component's `_rootNodeID`.
   */function registerNullComponentID(id){nullComponentIDsRegistry[id] = true;} /**
   * Unmark the component as having rendered to null: it renders to something now.
   * @param {string} id Component's `_rootNodeID`.
   */function deregisterNullComponentID(id){delete nullComponentIDsRegistry[id];} /**
   * @param {string} id Component's `_rootNodeID`.
   * @return {boolean} True if the component is rendered to null.
   */function isNullComponentID(id){return !!nullComponentIDsRegistry[id];}var ReactEmptyComponent={emptyElement:emptyElement,injection:ReactEmptyComponentInjection,isNullComponentID:isNullComponentID};module.exports = ReactEmptyComponent;}).call(this,require('_process'));},{"./ReactElement":107,"./ReactInstanceMap":117,"./invariant":185,"_process":12}],110:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactErrorUtils
   * @typechecks
   */"use strict";var ReactErrorUtils={ /**
     * Creates a guarded version of a function. This is supposed to make debugging
     * of event handlers easier. To aid debugging with the browser's debugger,
     * this currently simply returns the original function.
     *
     * @param {function} func Function to be executed
     * @param {string} name The name of the guard
     * @return {function}
     */guard:function guard(func,name){return func;}};module.exports = ReactErrorUtils;},{}],111:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactEventEmitterMixin
   */'use strict';var EventPluginHub=require("./EventPluginHub");function runEventQueueInBatch(events){EventPluginHub.enqueueEvents(events);EventPluginHub.processEventQueue();}var ReactEventEmitterMixin={ /**
     * Streams a fired top-level event to `EventPluginHub` where plugins have the
     * opportunity to create `ReactEvent`s to be dispatched.
     *
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {object} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native environment event.
     */handleTopLevel:function handleTopLevel(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var events=EventPluginHub.extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent);runEventQueueInBatch(events);}};module.exports = ReactEventEmitterMixin;},{"./EventPluginHub":66}],112:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactEventListener
   * @typechecks static-only
   */'use strict';var EventListener=require("./EventListener");var ExecutionEnvironment=require("./ExecutionEnvironment");var PooledClass=require("./PooledClass");var ReactInstanceHandles=require("./ReactInstanceHandles");var ReactMount=require("./ReactMount");var ReactUpdates=require("./ReactUpdates");var assign=require("./Object.assign");var getEventTarget=require("./getEventTarget");var getUnboundedScrollPosition=require("./getUnboundedScrollPosition"); /**
   * Finds the parent React component of `node`.
   *
   * @param {*} node
   * @return {?DOMEventTarget} Parent container, or `null` if the specified node
   *                           is not nested.
   */function findParent(node){ // TODO: It may be a good idea to cache this to prevent unnecessary DOM
  // traversal, but caching is difficult to do correctly without using a
  // mutation observer to listen for all DOM changes.
  var nodeID=ReactMount.getID(node);var rootID=ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);var container=ReactMount.findReactContainerForID(rootID);var parent=ReactMount.getFirstReactDOM(container);return parent;} // Used to store ancestor hierarchy in top level callback
  function TopLevelCallbackBookKeeping(topLevelType,nativeEvent){this.topLevelType = topLevelType;this.nativeEvent = nativeEvent;this.ancestors = [];}assign(TopLevelCallbackBookKeeping.prototype,{destructor:function destructor(){this.topLevelType = null;this.nativeEvent = null;this.ancestors.length = 0;}});PooledClass.addPoolingTo(TopLevelCallbackBookKeeping,PooledClass.twoArgumentPooler);function handleTopLevelImpl(bookKeeping){var topLevelTarget=ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window; // Loop through the hierarchy, in case there's any nested components.
  // It's important that we build the array of ancestors before calling any
  // event handlers, because event handlers can modify the DOM, leading to
  // inconsistencies with ReactMount's node cache. See #1105.
  var ancestor=topLevelTarget;while(ancestor) {bookKeeping.ancestors.push(ancestor);ancestor = findParent(ancestor);}for(var i=0,l=bookKeeping.ancestors.length;i < l;i++) {topLevelTarget = bookKeeping.ancestors[i];var topLevelTargetID=ReactMount.getID(topLevelTarget) || '';ReactEventListener._handleTopLevel(bookKeeping.topLevelType,topLevelTarget,topLevelTargetID,bookKeeping.nativeEvent);}}function scrollValueMonitor(cb){var scrollPosition=getUnboundedScrollPosition(window);cb(scrollPosition);}var ReactEventListener={_enabled:true,_handleTopLevel:null,WINDOW_HANDLE:ExecutionEnvironment.canUseDOM?window:null,setHandleTopLevel:function setHandleTopLevel(handleTopLevel){ReactEventListener._handleTopLevel = handleTopLevel;},setEnabled:function setEnabled(enabled){ReactEventListener._enabled = !!enabled;},isEnabled:function isEnabled(){return ReactEventListener._enabled;}, /**
     * Traps top-level events by using event bubbling.
     *
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {string} handlerBaseName Event name (e.g. "click").
     * @param {object} handle Element on which to attach listener.
     * @return {object} An object with a remove function which will forcefully
     *                  remove the listener.
     * @internal
     */trapBubbledEvent:function trapBubbledEvent(topLevelType,handlerBaseName,handle){var element=handle;if(!element){return null;}return EventListener.listen(element,handlerBaseName,ReactEventListener.dispatchEvent.bind(null,topLevelType));}, /**
     * Traps a top-level event by using event capturing.
     *
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {string} handlerBaseName Event name (e.g. "click").
     * @param {object} handle Element on which to attach listener.
     * @return {object} An object with a remove function which will forcefully
     *                  remove the listener.
     * @internal
     */trapCapturedEvent:function trapCapturedEvent(topLevelType,handlerBaseName,handle){var element=handle;if(!element){return null;}return EventListener.capture(element,handlerBaseName,ReactEventListener.dispatchEvent.bind(null,topLevelType));},monitorScrollValue:function monitorScrollValue(refresh){var callback=scrollValueMonitor.bind(null,refresh);EventListener.listen(window,'scroll',callback);},dispatchEvent:function dispatchEvent(topLevelType,nativeEvent){if(!ReactEventListener._enabled){return;}var bookKeeping=TopLevelCallbackBookKeeping.getPooled(topLevelType,nativeEvent);try{ // Event queue being processed in the same cycle allows
  // `preventDefault`.
  ReactUpdates.batchedUpdates(handleTopLevelImpl,bookKeeping);}finally {TopLevelCallbackBookKeeping.release(bookKeeping);}}};module.exports = ReactEventListener;},{"./EventListener":65,"./ExecutionEnvironment":70,"./Object.assign":76,"./PooledClass":77,"./ReactInstanceHandles":116,"./ReactMount":120,"./ReactUpdates":137,"./getEventTarget":175,"./getUnboundedScrollPosition":181}],113:[function(require,module,exports){(function(process){ /**
   * Copyright 2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
  * @providesModule ReactFragment
  */'use strict';var ReactElement=require("./ReactElement");var warning=require("./warning"); /**
   * We used to allow keyed objects to serve as a collection of ReactElements,
   * or nested sets. This allowed us a way to explicitly key a set a fragment of
   * components. This is now being replaced with an opaque data structure.
   * The upgrade path is to call React.addons.createFragment({ key: value }) to
   * create a keyed fragment. The resulting data structure is opaque, for now.
   */if("production" !== process.env.NODE_ENV){var fragmentKey='_reactFragment';var didWarnKey='_reactDidWarn';var canWarnForReactFragment=false;try{ // Feature test. Don't even try to issue this warning if we can't use
  // enumerable: false.
  var dummy=function dummy(){return 1;};Object.defineProperty({},fragmentKey,{enumerable:false,value:true});Object.defineProperty({},'key',{enumerable:true,get:dummy});canWarnForReactFragment = true;}catch(x) {}var proxyPropertyAccessWithWarning=function proxyPropertyAccessWithWarning(obj,key){Object.defineProperty(obj,key,{enumerable:true,get:function get(){"production" !== process.env.NODE_ENV?warning(this[didWarnKey],'A ReactFragment is an opaque type. Accessing any of its ' + 'properties is deprecated. Pass it to one of the React.Children ' + 'helpers.'):null;this[didWarnKey] = true;return this[fragmentKey][key];},set:function set(value){"production" !== process.env.NODE_ENV?warning(this[didWarnKey],'A ReactFragment is an immutable opaque type. Mutating its ' + 'properties is deprecated.'):null;this[didWarnKey] = true;this[fragmentKey][key] = value;}});};var issuedWarnings={};var didWarnForFragment=function didWarnForFragment(fragment){ // We use the keys and the type of the value as a heuristic to dedupe the
  // warning to avoid spamming too much.
  var fragmentCacheKey='';for(var key in fragment) {fragmentCacheKey += key + ':' + typeof fragment[key] + ',';}var alreadyWarnedOnce=!!issuedWarnings[fragmentCacheKey];issuedWarnings[fragmentCacheKey] = true;return alreadyWarnedOnce;};}var ReactFragment={ // Wrap a keyed object in an opaque proxy that warns you if you access any
  // of its properties.
  create:function create(object){if("production" !== process.env.NODE_ENV){if(typeof object !== 'object' || !object || Array.isArray(object)){"production" !== process.env.NODE_ENV?warning(false,'React.addons.createFragment only accepts a single object.',object):null;return object;}if(ReactElement.isValidElement(object)){"production" !== process.env.NODE_ENV?warning(false,'React.addons.createFragment does not accept a ReactElement ' + 'without a wrapper object.'):null;return object;}if(canWarnForReactFragment){var proxy={};Object.defineProperty(proxy,fragmentKey,{enumerable:false,value:object});Object.defineProperty(proxy,didWarnKey,{writable:true,enumerable:false,value:false});for(var key in object) {proxyPropertyAccessWithWarning(proxy,key);}Object.preventExtensions(proxy);return proxy;}}return object;}, // Extract the original keyed object from the fragment opaque type. Warn if
  // a plain object is passed here.
  extract:function extract(fragment){if("production" !== process.env.NODE_ENV){if(canWarnForReactFragment){if(!fragment[fragmentKey]){"production" !== process.env.NODE_ENV?warning(didWarnForFragment(fragment),'Any use of a keyed object should be wrapped in ' + 'React.addons.createFragment(object) before being passed as a ' + 'child.'):null;return fragment;}return fragment[fragmentKey];}}return fragment;}, // Check if this is a fragment and if so, extract the keyed object. If it
  // is a fragment-like object, warn that it should be wrapped. Ignore if we
  // can't determine what kind of object this is.
  extractIfFragment:function extractIfFragment(fragment){if("production" !== process.env.NODE_ENV){if(canWarnForReactFragment){ // If it is the opaque type, return the keyed object.
  if(fragment[fragmentKey]){return fragment[fragmentKey];} // Otherwise, check each property if it has an element, if it does
  // it is probably meant as a fragment, so we can warn early. Defer,
  // the warning to extract.
  for(var key in fragment) {if(fragment.hasOwnProperty(key) && ReactElement.isValidElement(fragment[key])){ // This looks like a fragment object, we should provide an
  // early warning.
  return ReactFragment.extract(fragment);}}}}return fragment;}};module.exports = ReactFragment;}).call(this,require('_process'));},{"./ReactElement":107,"./warning":204,"_process":12}],114:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactInjection
   */'use strict';var DOMProperty=require("./DOMProperty");var EventPluginHub=require("./EventPluginHub");var ReactComponentEnvironment=require("./ReactComponentEnvironment");var ReactClass=require("./ReactClass");var ReactEmptyComponent=require("./ReactEmptyComponent");var ReactBrowserEventEmitter=require("./ReactBrowserEventEmitter");var ReactNativeComponent=require("./ReactNativeComponent");var ReactDOMComponent=require("./ReactDOMComponent");var ReactPerf=require("./ReactPerf");var ReactRootIndex=require("./ReactRootIndex");var ReactUpdates=require("./ReactUpdates");var ReactInjection={Component:ReactComponentEnvironment.injection,Class:ReactClass.injection,DOMComponent:ReactDOMComponent.injection,DOMProperty:DOMProperty.injection,EmptyComponent:ReactEmptyComponent.injection,EventPluginHub:EventPluginHub.injection,EventEmitter:ReactBrowserEventEmitter.injection,NativeComponent:ReactNativeComponent.injection,Perf:ReactPerf.injection,RootIndex:ReactRootIndex.injection,Updates:ReactUpdates.injection};module.exports = ReactInjection;},{"./DOMProperty":59,"./EventPluginHub":66,"./ReactBrowserEventEmitter":80,"./ReactClass":83,"./ReactComponentEnvironment":86,"./ReactDOMComponent":92,"./ReactEmptyComponent":109,"./ReactNativeComponent":123,"./ReactPerf":125,"./ReactRootIndex":133,"./ReactUpdates":137}],115:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactInputSelection
   */'use strict';var ReactDOMSelection=require("./ReactDOMSelection");var containsNode=require("./containsNode");var focusNode=require("./focusNode");var getActiveElement=require("./getActiveElement");function isInDocument(node){return containsNode(document.documentElement,node);} /**
   * @ReactInputSelection: React input selection module. Based on Selection.js,
   * but modified to be suitable for react and has a couple of bug fixes (doesn't
   * assume buttons have range selections allowed).
   * Input selection module for React.
   */var ReactInputSelection={hasSelectionCapabilities:function hasSelectionCapabilities(elem){return elem && (elem.nodeName === 'INPUT' && elem.type === 'text' || elem.nodeName === 'TEXTAREA' || elem.contentEditable === 'true');},getSelectionInformation:function getSelectionInformation(){var focusedElem=getActiveElement();return {focusedElem:focusedElem,selectionRange:ReactInputSelection.hasSelectionCapabilities(focusedElem)?ReactInputSelection.getSelection(focusedElem):null};}, /**
     * @restoreSelection: If any selection information was potentially lost,
     * restore it. This is useful when performing operations that could remove dom
     * nodes and place them back in, resulting in focus being lost.
     */restoreSelection:function restoreSelection(priorSelectionInformation){var curFocusedElem=getActiveElement();var priorFocusedElem=priorSelectionInformation.focusedElem;var priorSelectionRange=priorSelectionInformation.selectionRange;if(curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)){if(ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)){ReactInputSelection.setSelection(priorFocusedElem,priorSelectionRange);}focusNode(priorFocusedElem);}}, /**
     * @getSelection: Gets the selection bounds of a focused textarea, input or
     * contentEditable node.
     * -@input: Look up selection bounds of this input
     * -@return {start: selectionStart, end: selectionEnd}
     */getSelection:function getSelection(input){var selection;if('selectionStart' in input){ // Modern browser with input or textarea.
  selection = {start:input.selectionStart,end:input.selectionEnd};}else if(document.selection && input.nodeName === 'INPUT'){ // IE8 input.
  var range=document.selection.createRange(); // There can only be one selection per document in IE, so it must
  // be in our element.
  if(range.parentElement() === input){selection = {start:-range.moveStart('character',-input.value.length),end:-range.moveEnd('character',-input.value.length)};}}else { // Content editable or old IE textarea.
  selection = ReactDOMSelection.getOffsets(input);}return selection || {start:0,end:0};}, /**
     * @setSelection: Sets the selection bounds of a textarea or input and focuses
     * the input.
     * -@input     Set selection bounds of this input or textarea
     * -@offsets   Object of same form that is returned from get*
     */setSelection:function setSelection(input,offsets){var start=offsets.start;var end=offsets.end;if(typeof end === 'undefined'){end = start;}if('selectionStart' in input){input.selectionStart = start;input.selectionEnd = Math.min(end,input.value.length);}else if(document.selection && input.nodeName === 'INPUT'){var range=input.createTextRange();range.collapse(true);range.moveStart('character',start);range.moveEnd('character',end - start);range.select();}else {ReactDOMSelection.setOffsets(input,offsets);}}};module.exports = ReactInputSelection;},{"./ReactDOMSelection":100,"./containsNode":159,"./focusNode":169,"./getActiveElement":171}],116:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactInstanceHandles
   * @typechecks static-only
   */'use strict';var ReactRootIndex=require("./ReactRootIndex");var invariant=require("./invariant");var SEPARATOR='.';var SEPARATOR_LENGTH=SEPARATOR.length; /**
   * Maximum depth of traversals before we consider the possibility of a bad ID.
   */var MAX_TREE_DEPTH=100; /**
   * Creates a DOM ID prefix to use when mounting React components.
   *
   * @param {number} index A unique integer
   * @return {string} React root ID.
   * @internal
   */function getReactRootIDString(index){return SEPARATOR + index.toString(36);} /**
   * Checks if a character in the supplied ID is a separator or the end.
   *
   * @param {string} id A React DOM ID.
   * @param {number} index Index of the character to check.
   * @return {boolean} True if the character is a separator or end of the ID.
   * @private
   */function isBoundary(id,index){return id.charAt(index) === SEPARATOR || index === id.length;} /**
   * Checks if the supplied string is a valid React DOM ID.
   *
   * @param {string} id A React DOM ID, maybe.
   * @return {boolean} True if the string is a valid React DOM ID.
   * @private
   */function isValidID(id){return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;} /**
   * Checks if the first ID is an ancestor of or equal to the second ID.
   *
   * @param {string} ancestorID
   * @param {string} descendantID
   * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.
   * @internal
   */function isAncestorIDOf(ancestorID,descendantID){return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID,ancestorID.length);} /**
   * Gets the parent ID of the supplied React DOM ID, `id`.
   *
   * @param {string} id ID of a component.
   * @return {string} ID of the parent, or an empty string.
   * @private
   */function getParentID(id){return id?id.substr(0,id.lastIndexOf(SEPARATOR)):'';} /**
   * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the
   * supplied `destinationID`. If they are equal, the ID is returned.
   *
   * @param {string} ancestorID ID of an ancestor node of `destinationID`.
   * @param {string} destinationID ID of the destination node.
   * @return {string} Next ID on the path from `ancestorID` to `destinationID`.
   * @private
   */function getNextDescendantID(ancestorID,destinationID){"production" !== process.env.NODE_ENV?invariant(isValidID(ancestorID) && isValidID(destinationID),'getNextDescendantID(%s, %s): Received an invalid React DOM ID.',ancestorID,destinationID):invariant(isValidID(ancestorID) && isValidID(destinationID));"production" !== process.env.NODE_ENV?invariant(isAncestorIDOf(ancestorID,destinationID),'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.',ancestorID,destinationID):invariant(isAncestorIDOf(ancestorID,destinationID));if(ancestorID === destinationID){return ancestorID;} // Skip over the ancestor and the immediate separator. Traverse until we hit
  // another separator or we reach the end of `destinationID`.
  var start=ancestorID.length + SEPARATOR_LENGTH;var i;for(i = start;i < destinationID.length;i++) {if(isBoundary(destinationID,i)){break;}}return destinationID.substr(0,i);} /**
   * Gets the nearest common ancestor ID of two IDs.
   *
   * Using this ID scheme, the nearest common ancestor ID is the longest common
   * prefix of the two IDs that immediately preceded a "marker" in both strings.
   *
   * @param {string} oneID
   * @param {string} twoID
   * @return {string} Nearest common ancestor ID, or the empty string if none.
   * @private
   */function getFirstCommonAncestorID(oneID,twoID){var minLength=Math.min(oneID.length,twoID.length);if(minLength === 0){return '';}var lastCommonMarkerIndex=0; // Use `<=` to traverse until the "EOL" of the shorter string.
  for(var i=0;i <= minLength;i++) {if(isBoundary(oneID,i) && isBoundary(twoID,i)){lastCommonMarkerIndex = i;}else if(oneID.charAt(i) !== twoID.charAt(i)){break;}}var longestCommonID=oneID.substr(0,lastCommonMarkerIndex);"production" !== process.env.NODE_ENV?invariant(isValidID(longestCommonID),'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s',oneID,twoID,longestCommonID):invariant(isValidID(longestCommonID));return longestCommonID;} /**
   * Traverses the parent path between two IDs (either up or down). The IDs must
   * not be the same, and there must exist a parent path between them. If the
   * callback returns `false`, traversal is stopped.
   *
   * @param {?string} start ID at which to start traversal.
   * @param {?string} stop ID at which to end traversal.
   * @param {function} cb Callback to invoke each ID with.
   * @param {?boolean} skipFirst Whether or not to skip the first node.
   * @param {?boolean} skipLast Whether or not to skip the last node.
   * @private
   */function traverseParentPath(start,stop,cb,arg,skipFirst,skipLast){start = start || '';stop = stop || '';"production" !== process.env.NODE_ENV?invariant(start !== stop,'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.',start):invariant(start !== stop);var traverseUp=isAncestorIDOf(stop,start);"production" !== process.env.NODE_ENV?invariant(traverseUp || isAncestorIDOf(start,stop),'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.',start,stop):invariant(traverseUp || isAncestorIDOf(start,stop)); // Traverse from `start` to `stop` one depth at a time.
  var depth=0;var traverse=traverseUp?getParentID:getNextDescendantID;for(var id=start;; /* until break */id = traverse(id,stop)) {var ret;if((!skipFirst || id !== start) && (!skipLast || id !== stop)){ret = cb(id,traverseUp,arg);}if(ret === false || id === stop){ // Only break //after// visiting `stop`.
  break;}"production" !== process.env.NODE_ENV?invariant(depth++ < MAX_TREE_DEPTH,'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s',start,stop):invariant(depth++ < MAX_TREE_DEPTH);}} /**
   * Manages the IDs assigned to DOM representations of React components. This
   * uses a specific scheme in order to traverse the DOM efficiently (e.g. in
   * order to simulate events).
   *
   * @internal
   */var ReactInstanceHandles={ /**
     * Constructs a React root ID
     * @return {string} A React root ID.
     */createReactRootID:function createReactRootID(){return getReactRootIDString(ReactRootIndex.createReactRootIndex());}, /**
     * Constructs a React ID by joining a root ID with a name.
     *
     * @param {string} rootID Root ID of a parent component.
     * @param {string} name A component's name (as flattened children).
     * @return {string} A React ID.
     * @internal
     */createReactID:function createReactID(rootID,name){return rootID + name;}, /**
     * Gets the DOM ID of the React component that is the root of the tree that
     * contains the React component with the supplied DOM ID.
     *
     * @param {string} id DOM ID of a React component.
     * @return {?string} DOM ID of the React component that is the root.
     * @internal
     */getReactRootIDFromNodeID:function getReactRootIDFromNodeID(id){if(id && id.charAt(0) === SEPARATOR && id.length > 1){var index=id.indexOf(SEPARATOR,1);return index > -1?id.substr(0,index):id;}return null;}, /**
     * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
     * should would receive a `mouseEnter` or `mouseLeave` event.
     *
     * NOTE: Does not invoke the callback on the nearest common ancestor because
     * nothing "entered" or "left" that element.
     *
     * @param {string} leaveID ID being left.
     * @param {string} enterID ID being entered.
     * @param {function} cb Callback to invoke on each entered/left ID.
     * @param {*} upArg Argument to invoke the callback with on left IDs.
     * @param {*} downArg Argument to invoke the callback with on entered IDs.
     * @internal
     */traverseEnterLeave:function traverseEnterLeave(leaveID,enterID,cb,upArg,downArg){var ancestorID=getFirstCommonAncestorID(leaveID,enterID);if(ancestorID !== leaveID){traverseParentPath(leaveID,ancestorID,cb,upArg,false,true);}if(ancestorID !== enterID){traverseParentPath(ancestorID,enterID,cb,downArg,true,false);}}, /**
     * Simulates the traversal of a two-phase, capture/bubble event dispatch.
     *
     * NOTE: This traversal happens on IDs without touching the DOM.
     *
     * @param {string} targetID ID of the target node.
     * @param {function} cb Callback to invoke.
     * @param {*} arg Argument to invoke the callback with.
     * @internal
     */traverseTwoPhase:function traverseTwoPhase(targetID,cb,arg){if(targetID){traverseParentPath('',targetID,cb,arg,true,false);traverseParentPath(targetID,'',cb,arg,false,true);}}, /**
     * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For
     * example, passing `.0.$row-0.1` would result in `cb` getting called
     * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.
     *
     * NOTE: This traversal happens on IDs without touching the DOM.
     *
     * @param {string} targetID ID of the target node.
     * @param {function} cb Callback to invoke.
     * @param {*} arg Argument to invoke the callback with.
     * @internal
     */traverseAncestors:function traverseAncestors(targetID,cb,arg){traverseParentPath('',targetID,cb,arg,true,false);}, /**
     * Exposed for unit testing.
     * @private
     */_getFirstCommonAncestorID:getFirstCommonAncestorID, /**
     * Exposed for unit testing.
     * @private
     */_getNextDescendantID:getNextDescendantID,isAncestorIDOf:isAncestorIDOf,SEPARATOR:SEPARATOR};module.exports = ReactInstanceHandles;}).call(this,require('_process'));},{"./ReactRootIndex":133,"./invariant":185,"_process":12}],117:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactInstanceMap
   */'use strict'; /**
   * `ReactInstanceMap` maintains a mapping from a public facing stateful
   * instance (key) and the internal representation (value). This allows public
   * methods to accept the user facing instance as an argument and map them back
   * to internal methods.
   */ // TODO: Replace this with ES6: var ReactInstanceMap = new Map();
  var ReactInstanceMap={ /**
     * This API should be called `delete` but we'd have to make sure to always
     * transform these to strings for IE support. When this transform is fully
     * supported we can rename it.
     */remove:function remove(key){key._reactInternalInstance = undefined;},get:function get(key){return key._reactInternalInstance;},has:function has(key){return key._reactInternalInstance !== undefined;},set:function set(key,value){key._reactInternalInstance = value;}};module.exports = ReactInstanceMap;},{}],118:[function(require,module,exports){ /**
   * Copyright 2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactLifeCycle
   */'use strict'; /**
   * This module manages the bookkeeping when a component is in the process
   * of being mounted or being unmounted. This is used as a way to enforce
   * invariants (or warnings) when it is not recommended to call
   * setState/forceUpdate.
   *
   * currentlyMountingInstance: During the construction phase, it is not possible
   * to trigger an update since the instance is not fully mounted yet. However, we
   * currently allow this as a convenience for mutating the initial state.
   *
   * currentlyUnmountingInstance: During the unmounting phase, the instance is
   * still mounted and can therefore schedule an update. However, this is not
   * recommended and probably an error since it's about to be unmounted.
   * Therefore we still want to trigger in an error for that case.
   */var ReactLifeCycle={currentlyMountingInstance:null,currentlyUnmountingInstance:null};module.exports = ReactLifeCycle;},{}],119:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactMarkupChecksum
   */'use strict';var adler32=require("./adler32");var ReactMarkupChecksum={CHECKSUM_ATTR_NAME:'data-react-checksum', /**
     * @param {string} markup Markup string
     * @return {string} Markup string with checksum attribute attached
     */addChecksumToMarkup:function addChecksumToMarkup(markup){var checksum=adler32(markup);return markup.replace('>',' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '">');}, /**
     * @param {string} markup to use
     * @param {DOMElement} element root React element
     * @returns {boolean} whether or not the markup is the same
     */canReuseMarkup:function canReuseMarkup(markup,element){var existingChecksum=element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);existingChecksum = existingChecksum && parseInt(existingChecksum,10);var markupChecksum=adler32(markup);return markupChecksum === existingChecksum;}};module.exports = ReactMarkupChecksum;},{"./adler32":156}],120:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactMount
   */'use strict';var DOMProperty=require("./DOMProperty");var ReactBrowserEventEmitter=require("./ReactBrowserEventEmitter");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactElement=require("./ReactElement");var ReactElementValidator=require("./ReactElementValidator");var ReactEmptyComponent=require("./ReactEmptyComponent");var ReactInstanceHandles=require("./ReactInstanceHandles");var ReactInstanceMap=require("./ReactInstanceMap");var ReactMarkupChecksum=require("./ReactMarkupChecksum");var ReactPerf=require("./ReactPerf");var ReactReconciler=require("./ReactReconciler");var ReactUpdateQueue=require("./ReactUpdateQueue");var ReactUpdates=require("./ReactUpdates");var emptyObject=require("./emptyObject");var containsNode=require("./containsNode");var getReactRootElementInContainer=require("./getReactRootElementInContainer");var instantiateReactComponent=require("./instantiateReactComponent");var invariant=require("./invariant");var setInnerHTML=require("./setInnerHTML");var shouldUpdateReactComponent=require("./shouldUpdateReactComponent");var warning=require("./warning");var SEPARATOR=ReactInstanceHandles.SEPARATOR;var ATTR_NAME=DOMProperty.ID_ATTRIBUTE_NAME;var nodeCache={};var ELEMENT_NODE_TYPE=1;var DOC_NODE_TYPE=9; /** Mapping from reactRootID to React component instance. */var instancesByReactRootID={}; /** Mapping from reactRootID to `container` nodes. */var containersByReactRootID={};if("production" !== process.env.NODE_ENV){ /** __DEV__-only mapping from reactRootID to root elements. */var rootElementsByReactRootID={};} // Used to store breadth-first search state in findComponentRoot.
  var findComponentRootReusableArray=[]; /**
   * Finds the index of the first character
   * that's not common between the two given strings.
   *
   * @return {number} the index of the character where the strings diverge
   */function firstDifferenceIndex(string1,string2){var minLen=Math.min(string1.length,string2.length);for(var i=0;i < minLen;i++) {if(string1.charAt(i) !== string2.charAt(i)){return i;}}return string1.length === string2.length?-1:minLen;} /**
   * @param {DOMElement} container DOM element that may contain a React component.
   * @return {?string} A "reactRoot" ID, if a React component is rendered.
   */function getReactRootID(container){var rootElement=getReactRootElementInContainer(container);return rootElement && ReactMount.getID(rootElement);} /**
   * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form
   * element can return its control whose name or ID equals ATTR_NAME. All
   * DOM nodes support `getAttributeNode` but this can also get called on
   * other objects so just return '' if we're given something other than a
   * DOM node (such as window).
   *
   * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.
   * @return {string} ID of the supplied `domNode`.
   */function getID(node){var id=internalGetID(node);if(id){if(nodeCache.hasOwnProperty(id)){var cached=nodeCache[id];if(cached !== node){"production" !== process.env.NODE_ENV?invariant(!isValid(cached,id),'ReactMount: Two valid but unequal nodes with the same `%s`: %s',ATTR_NAME,id):invariant(!isValid(cached,id));nodeCache[id] = node;}}else {nodeCache[id] = node;}}return id;}function internalGetID(node){ // If node is something like a window, document, or text node, none of
  // which support attributes or a .getAttribute method, gracefully return
  // the empty string, as if the attribute were missing.
  return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';} /**
   * Sets the React-specific ID of the given node.
   *
   * @param {DOMElement} node The DOM node whose ID will be set.
   * @param {string} id The value of the ID attribute.
   */function setID(node,id){var oldID=internalGetID(node);if(oldID !== id){delete nodeCache[oldID];}node.setAttribute(ATTR_NAME,id);nodeCache[id] = node;} /**
   * Finds the node with the supplied React-generated DOM ID.
   *
   * @param {string} id A React-generated DOM ID.
   * @return {DOMElement} DOM node with the suppled `id`.
   * @internal
   */function getNode(id){if(!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id],id)){nodeCache[id] = ReactMount.findReactNodeByID(id);}return nodeCache[id];} /**
   * Finds the node with the supplied public React instance.
   *
   * @param {*} instance A public React instance.
   * @return {?DOMElement} DOM node with the suppled `id`.
   * @internal
   */function getNodeFromInstance(instance){var id=ReactInstanceMap.get(instance)._rootNodeID;if(ReactEmptyComponent.isNullComponentID(id)){return null;}if(!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id],id)){nodeCache[id] = ReactMount.findReactNodeByID(id);}return nodeCache[id];} /**
   * A node is "valid" if it is contained by a currently mounted container.
   *
   * This means that the node does not have to be contained by a document in
   * order to be considered valid.
   *
   * @param {?DOMElement} node The candidate DOM node.
   * @param {string} id The expected ID of the node.
   * @return {boolean} Whether the node is contained by a mounted container.
   */function isValid(node,id){if(node){"production" !== process.env.NODE_ENV?invariant(internalGetID(node) === id,'ReactMount: Unexpected modification of `%s`',ATTR_NAME):invariant(internalGetID(node) === id);var container=ReactMount.findReactContainerForID(id);if(container && containsNode(container,node)){return true;}}return false;} /**
   * Causes the cache to forget about one React-specific ID.
   *
   * @param {string} id The ID to forget.
   */function purgeID(id){delete nodeCache[id];}var deepestNodeSoFar=null;function findDeepestCachedAncestorImpl(ancestorID){var ancestor=nodeCache[ancestorID];if(ancestor && isValid(ancestor,ancestorID)){deepestNodeSoFar = ancestor;}else { // This node isn't populated in the cache, so presumably none of its
  // descendants are. Break out of the loop.
  return false;}} /**
   * Return the deepest cached node whose ID is a prefix of `targetID`.
   */function findDeepestCachedAncestor(targetID){deepestNodeSoFar = null;ReactInstanceHandles.traverseAncestors(targetID,findDeepestCachedAncestorImpl);var foundNode=deepestNodeSoFar;deepestNodeSoFar = null;return foundNode;} /**
   * Mounts this component and inserts it into the DOM.
   *
   * @param {ReactComponent} componentInstance The instance to mount.
   * @param {string} rootID DOM ID of the root node.
   * @param {DOMElement} container DOM element to mount into.
   * @param {ReactReconcileTransaction} transaction
   * @param {boolean} shouldReuseMarkup If true, do not insert markup
   */function mountComponentIntoNode(componentInstance,rootID,container,transaction,shouldReuseMarkup){var markup=ReactReconciler.mountComponent(componentInstance,rootID,transaction,emptyObject);componentInstance._isTopLevel = true;ReactMount._mountImageIntoNode(markup,container,shouldReuseMarkup);} /**
   * Batched mount.
   *
   * @param {ReactComponent} componentInstance The instance to mount.
   * @param {string} rootID DOM ID of the root node.
   * @param {DOMElement} container DOM element to mount into.
   * @param {boolean} shouldReuseMarkup If true, do not insert markup
   */function batchedMountComponentIntoNode(componentInstance,rootID,container,shouldReuseMarkup){var transaction=ReactUpdates.ReactReconcileTransaction.getPooled();transaction.perform(mountComponentIntoNode,null,componentInstance,rootID,container,transaction,shouldReuseMarkup);ReactUpdates.ReactReconcileTransaction.release(transaction);} /**
   * Mounting is the process of initializing a React component by creating its
   * representative DOM elements and inserting them into a supplied `container`.
   * Any prior content inside `container` is destroyed in the process.
   *
   *   ReactMount.render(
   *     component,
   *     document.getElementById('container')
   *   );
   *
   *   <div id="container">                   <-- Supplied `container`.
   *     <div data-reactid=".3">              <-- Rendered reactRoot of React
   *       // ...                                 component.
   *     </div>
   *   </div>
   *
   * Inside of `container`, the first element rendered is the "reactRoot".
   */var ReactMount={ /** Exposed for debugging purposes **/_instancesByReactRootID:instancesByReactRootID, /**
     * This is a hook provided to support rendering React components while
     * ensuring that the apparent scroll position of its `container` does not
     * change.
     *
     * @param {DOMElement} container The `container` being rendered into.
     * @param {function} renderCallback This must be called once to do the render.
     */scrollMonitor:function scrollMonitor(container,renderCallback){renderCallback();}, /**
     * Take a component that's already mounted into the DOM and replace its props
     * @param {ReactComponent} prevComponent component instance already in the DOM
     * @param {ReactElement} nextElement component instance to render
     * @param {DOMElement} container container to render into
     * @param {?function} callback function triggered on completion
     */_updateRootComponent:function _updateRootComponent(prevComponent,nextElement,container,callback){if("production" !== process.env.NODE_ENV){ReactElementValidator.checkAndWarnForMutatedProps(nextElement);}ReactMount.scrollMonitor(container,function(){ReactUpdateQueue.enqueueElementInternal(prevComponent,nextElement);if(callback){ReactUpdateQueue.enqueueCallbackInternal(prevComponent,callback);}});if("production" !== process.env.NODE_ENV){ // Record the root element in case it later gets transplanted.
  rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);}return prevComponent;}, /**
     * Register a component into the instance map and starts scroll value
     * monitoring
     * @param {ReactComponent} nextComponent component instance to render
     * @param {DOMElement} container container to render into
     * @return {string} reactRoot ID prefix
     */_registerComponent:function _registerComponent(nextComponent,container){"production" !== process.env.NODE_ENV?invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE),'_registerComponent(...): Target container is not a DOM element.'):invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE));ReactBrowserEventEmitter.ensureScrollValueMonitoring();var reactRootID=ReactMount.registerContainer(container);instancesByReactRootID[reactRootID] = nextComponent;return reactRootID;}, /**
     * Render a new component into the DOM.
     * @param {ReactElement} nextElement element to render
     * @param {DOMElement} container container to render into
     * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
     * @return {ReactComponent} nextComponent
     */_renderNewRootComponent:function _renderNewRootComponent(nextElement,container,shouldReuseMarkup){ // Various parts of our code (such as ReactCompositeComponent's
  // _renderValidatedComponent) assume that calls to render aren't nested;
  // verify that that's the case.
  "production" !== process.env.NODE_ENV?warning(ReactCurrentOwner.current == null,'_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate.'):null;var componentInstance=instantiateReactComponent(nextElement,null);var reactRootID=ReactMount._registerComponent(componentInstance,container); // The initial render is synchronous but any updates that happen during
  // rendering, in componentWillMount or componentDidMount, will be batched
  // according to the current batching strategy.
  ReactUpdates.batchedUpdates(batchedMountComponentIntoNode,componentInstance,reactRootID,container,shouldReuseMarkup);if("production" !== process.env.NODE_ENV){ // Record the root element in case it later gets transplanted.
  rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);}return componentInstance;}, /**
     * Renders a React component into the DOM in the supplied `container`.
     *
     * If the React component was previously rendered into `container`, this will
     * perform an update on it and only mutate the DOM as necessary to reflect the
     * latest React component.
     *
     * @param {ReactElement} nextElement Component element to render.
     * @param {DOMElement} container DOM element to render into.
     * @param {?function} callback function triggered on completion
     * @return {ReactComponent} Component instance rendered in `container`.
     */render:function render(nextElement,container,callback){"production" !== process.env.NODE_ENV?invariant(ReactElement.isValidElement(nextElement),'React.render(): Invalid component element.%s',typeof nextElement === 'string'?' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.':typeof nextElement === 'function'?' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.': // Check if it quacks like an element
  nextElement != null && nextElement.props !== undefined?' This may be caused by unintentionally loading two independent ' + 'copies of React.':''):invariant(ReactElement.isValidElement(nextElement));var prevComponent=instancesByReactRootID[getReactRootID(container)];if(prevComponent){var prevElement=prevComponent._currentElement;if(shouldUpdateReactComponent(prevElement,nextElement)){return ReactMount._updateRootComponent(prevComponent,nextElement,container,callback).getPublicInstance();}else {ReactMount.unmountComponentAtNode(container);}}var reactRootElement=getReactRootElementInContainer(container);var containerHasReactMarkup=reactRootElement && ReactMount.isRenderedByReact(reactRootElement);if("production" !== process.env.NODE_ENV){if(!containerHasReactMarkup || reactRootElement.nextSibling){var rootElementSibling=reactRootElement;while(rootElementSibling) {if(ReactMount.isRenderedByReact(rootElementSibling)){"production" !== process.env.NODE_ENV?warning(false,'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.'):null;break;}rootElementSibling = rootElementSibling.nextSibling;}}}var shouldReuseMarkup=containerHasReactMarkup && !prevComponent;var component=ReactMount._renderNewRootComponent(nextElement,container,shouldReuseMarkup).getPublicInstance();if(callback){callback.call(component);}return component;}, /**
     * Constructs a component instance of `constructor` with `initialProps` and
     * renders it into the supplied `container`.
     *
     * @param {function} constructor React component constructor.
     * @param {?object} props Initial props of the component instance.
     * @param {DOMElement} container DOM element to render into.
     * @return {ReactComponent} Component instance rendered in `container`.
     */constructAndRenderComponent:function constructAndRenderComponent(constructor,props,container){var element=ReactElement.createElement(constructor,props);return ReactMount.render(element,container);}, /**
     * Constructs a component instance of `constructor` with `initialProps` and
     * renders it into a container node identified by supplied `id`.
     *
     * @param {function} componentConstructor React component constructor
     * @param {?object} props Initial props of the component instance.
     * @param {string} id ID of the DOM element to render into.
     * @return {ReactComponent} Component instance rendered in the container node.
     */constructAndRenderComponentByID:function constructAndRenderComponentByID(constructor,props,id){var domNode=document.getElementById(id);"production" !== process.env.NODE_ENV?invariant(domNode,'Tried to get element with id of "%s" but it is not present on the page.',id):invariant(domNode);return ReactMount.constructAndRenderComponent(constructor,props,domNode);}, /**
     * Registers a container node into which React components will be rendered.
     * This also creates the "reactRoot" ID that will be assigned to the element
     * rendered within.
     *
     * @param {DOMElement} container DOM element to register as a container.
     * @return {string} The "reactRoot" ID of elements rendered within.
     */registerContainer:function registerContainer(container){var reactRootID=getReactRootID(container);if(reactRootID){ // If one exists, make sure it is a valid "reactRoot" ID.
  reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);}if(!reactRootID){ // No valid "reactRoot" ID found, create one.
  reactRootID = ReactInstanceHandles.createReactRootID();}containersByReactRootID[reactRootID] = container;return reactRootID;}, /**
     * Unmounts and destroys the React component rendered in the `container`.
     *
     * @param {DOMElement} container DOM element containing a React component.
     * @return {boolean} True if a component was found in and unmounted from
     *                   `container`
     */unmountComponentAtNode:function unmountComponentAtNode(container){ // Various parts of our code (such as ReactCompositeComponent's
  // _renderValidatedComponent) assume that calls to render aren't nested;
  // verify that that's the case. (Strictly speaking, unmounting won't cause a
  // render but we still don't expect to be in a render call here.)
  "production" !== process.env.NODE_ENV?warning(ReactCurrentOwner.current == null,'unmountComponentAtNode(): Render methods should be a pure function of ' + 'props and state; triggering nested component updates from render is ' + 'not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate.'):null;"production" !== process.env.NODE_ENV?invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE),'unmountComponentAtNode(...): Target container is not a DOM element.'):invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE));var reactRootID=getReactRootID(container);var component=instancesByReactRootID[reactRootID];if(!component){return false;}ReactMount.unmountComponentFromNode(component,container);delete instancesByReactRootID[reactRootID];delete containersByReactRootID[reactRootID];if("production" !== process.env.NODE_ENV){delete rootElementsByReactRootID[reactRootID];}return true;}, /**
     * Unmounts a component and removes it from the DOM.
     *
     * @param {ReactComponent} instance React component instance.
     * @param {DOMElement} container DOM element to unmount from.
     * @final
     * @internal
     * @see {ReactMount.unmountComponentAtNode}
     */unmountComponentFromNode:function unmountComponentFromNode(instance,container){ReactReconciler.unmountComponent(instance);if(container.nodeType === DOC_NODE_TYPE){container = container.documentElement;} // http://jsperf.com/emptying-a-node
  while(container.lastChild) {container.removeChild(container.lastChild);}}, /**
     * Finds the container DOM element that contains React component to which the
     * supplied DOM `id` belongs.
     *
     * @param {string} id The ID of an element rendered by a React component.
     * @return {?DOMElement} DOM element that contains the `id`.
     */findReactContainerForID:function findReactContainerForID(id){var reactRootID=ReactInstanceHandles.getReactRootIDFromNodeID(id);var container=containersByReactRootID[reactRootID];if("production" !== process.env.NODE_ENV){var rootElement=rootElementsByReactRootID[reactRootID];if(rootElement && rootElement.parentNode !== container){"production" !== process.env.NODE_ENV?invariant( // Call internalGetID here because getID calls isValid which calls
  // findReactContainerForID (this function).
  internalGetID(rootElement) === reactRootID,'ReactMount: Root element ID differed from reactRootID.'):invariant( // Call internalGetID here because getID calls isValid which calls
  // findReactContainerForID (this function).
  internalGetID(rootElement) === reactRootID);var containerChild=container.firstChild;if(containerChild && reactRootID === internalGetID(containerChild)){ // If the container has a new child with the same ID as the old
  // root element, then rootElementsByReactRootID[reactRootID] is
  // just stale and needs to be updated. The case that deserves a
  // warning is when the container is empty.
  rootElementsByReactRootID[reactRootID] = containerChild;}else {"production" !== process.env.NODE_ENV?warning(false,'ReactMount: Root element has been removed from its original ' + 'container. New container:',rootElement.parentNode):null;}}}return container;}, /**
     * Finds an element rendered by React with the supplied ID.
     *
     * @param {string} id ID of a DOM node in the React component.
     * @return {DOMElement} Root DOM node of the React component.
     */findReactNodeByID:function findReactNodeByID(id){var reactRoot=ReactMount.findReactContainerForID(id);return ReactMount.findComponentRoot(reactRoot,id);}, /**
     * True if the supplied `node` is rendered by React.
     *
     * @param {*} node DOM Element to check.
     * @return {boolean} True if the DOM Element appears to be rendered by React.
     * @internal
     */isRenderedByReact:function isRenderedByReact(node){if(node.nodeType !== 1){ // Not a DOMElement, therefore not a React component
  return false;}var id=ReactMount.getID(node);return id?id.charAt(0) === SEPARATOR:false;}, /**
     * Traverses up the ancestors of the supplied node to find a node that is a
     * DOM representation of a React component.
     *
     * @param {*} node
     * @return {?DOMEventTarget}
     * @internal
     */getFirstReactDOM:function getFirstReactDOM(node){var current=node;while(current && current.parentNode !== current) {if(ReactMount.isRenderedByReact(current)){return current;}current = current.parentNode;}return null;}, /**
     * Finds a node with the supplied `targetID` inside of the supplied
     * `ancestorNode`.  Exploits the ID naming scheme to perform the search
     * quickly.
     *
     * @param {DOMEventTarget} ancestorNode Search from this root.
     * @pararm {string} targetID ID of the DOM representation of the component.
     * @return {DOMEventTarget} DOM node with the supplied `targetID`.
     * @internal
     */findComponentRoot:function findComponentRoot(ancestorNode,targetID){var firstChildren=findComponentRootReusableArray;var childIndex=0;var deepestAncestor=findDeepestCachedAncestor(targetID) || ancestorNode;firstChildren[0] = deepestAncestor.firstChild;firstChildren.length = 1;while(childIndex < firstChildren.length) {var child=firstChildren[childIndex++];var targetChild;while(child) {var childID=ReactMount.getID(child);if(childID){ // Even if we find the node we're looking for, we finish looping
  // through its siblings to ensure they're cached so that we don't have
  // to revisit this node again. Otherwise, we make n^2 calls to getID
  // when visiting the many children of a single node in order.
  if(targetID === childID){targetChild = child;}else if(ReactInstanceHandles.isAncestorIDOf(childID,targetID)){ // If we find a child whose ID is an ancestor of the given ID,
  // then we can be sure that we only want to search the subtree
  // rooted at this child, so we can throw out the rest of the
  // search state.
  firstChildren.length = childIndex = 0;firstChildren.push(child.firstChild);}}else { // If this child had no ID, then there's a chance that it was
  // injected automatically by the browser, as when a `<table>`
  // element sprouts an extra `<tbody>` child as a side effect of
  // `.innerHTML` parsing. Optimistically continue down this
  // branch, but not before examining the other siblings.
  firstChildren.push(child.firstChild);}child = child.nextSibling;}if(targetChild){ // Emptying firstChildren/findComponentRootReusableArray is
  // not necessary for correctness, but it helps the GC reclaim
  // any nodes that were left at the end of the search.
  firstChildren.length = 0;return targetChild;}}firstChildren.length = 0;"production" !== process.env.NODE_ENV?invariant(false,'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.',targetID,ReactMount.getID(ancestorNode)):invariant(false);},_mountImageIntoNode:function _mountImageIntoNode(markup,container,shouldReuseMarkup){"production" !== process.env.NODE_ENV?invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE),'mountComponentIntoNode(...): Target container is not valid.'):invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE));if(shouldReuseMarkup){var rootElement=getReactRootElementInContainer(container);if(ReactMarkupChecksum.canReuseMarkup(markup,rootElement)){return;}else {var checksum=rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);var rootMarkup=rootElement.outerHTML;rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME,checksum);var diffIndex=firstDifferenceIndex(markup,rootMarkup);var difference=' (client) ' + markup.substring(diffIndex - 20,diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20,diffIndex + 20);"production" !== process.env.NODE_ENV?invariant(container.nodeType !== DOC_NODE_TYPE,'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s',difference):invariant(container.nodeType !== DOC_NODE_TYPE);if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(false,'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s',difference):null;}}}"production" !== process.env.NODE_ENV?invariant(container.nodeType !== DOC_NODE_TYPE,'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See React.renderToString() for server rendering.'):invariant(container.nodeType !== DOC_NODE_TYPE);setInnerHTML(container,markup);}, /**
     * React ID utilities.
     */getReactRootID:getReactRootID,getID:getID,setID:setID,getNode:getNode,getNodeFromInstance:getNodeFromInstance,purgeID:purgeID};ReactPerf.measureMethods(ReactMount,'ReactMount',{_renderNewRootComponent:'_renderNewRootComponent',_mountImageIntoNode:'_mountImageIntoNode'});module.exports = ReactMount;}).call(this,require('_process'));},{"./DOMProperty":59,"./ReactBrowserEventEmitter":80,"./ReactCurrentOwner":89,"./ReactElement":107,"./ReactElementValidator":108,"./ReactEmptyComponent":109,"./ReactInstanceHandles":116,"./ReactInstanceMap":117,"./ReactMarkupChecksum":119,"./ReactPerf":125,"./ReactReconciler":131,"./ReactUpdateQueue":136,"./ReactUpdates":137,"./containsNode":159,"./emptyObject":165,"./getReactRootElementInContainer":179,"./instantiateReactComponent":184,"./invariant":185,"./setInnerHTML":198,"./shouldUpdateReactComponent":201,"./warning":204,"_process":12}],121:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactMultiChild
   * @typechecks static-only
   */'use strict';var ReactComponentEnvironment=require("./ReactComponentEnvironment");var ReactMultiChildUpdateTypes=require("./ReactMultiChildUpdateTypes");var ReactReconciler=require("./ReactReconciler");var ReactChildReconciler=require("./ReactChildReconciler"); /**
   * Updating children of a component may trigger recursive updates. The depth is
   * used to batch recursive updates to render markup more efficiently.
   *
   * @type {number}
   * @private
   */var updateDepth=0; /**
   * Queue of update configuration objects.
   *
   * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.
   *
   * @type {array<object>}
   * @private
   */var updateQueue=[]; /**
   * Queue of markup to be rendered.
   *
   * @type {array<string>}
   * @private
   */var markupQueue=[]; /**
   * Enqueues markup to be rendered and inserted at a supplied index.
   *
   * @param {string} parentID ID of the parent component.
   * @param {string} markup Markup that renders into an element.
   * @param {number} toIndex Destination index.
   * @private
   */function enqueueMarkup(parentID,markup,toIndex){ // NOTE: Null values reduce hidden classes.
  updateQueue.push({parentID:parentID,parentNode:null,type:ReactMultiChildUpdateTypes.INSERT_MARKUP,markupIndex:markupQueue.push(markup) - 1,textContent:null,fromIndex:null,toIndex:toIndex});} /**
   * Enqueues moving an existing element to another index.
   *
   * @param {string} parentID ID of the parent component.
   * @param {number} fromIndex Source index of the existing element.
   * @param {number} toIndex Destination index of the element.
   * @private
   */function enqueueMove(parentID,fromIndex,toIndex){ // NOTE: Null values reduce hidden classes.
  updateQueue.push({parentID:parentID,parentNode:null,type:ReactMultiChildUpdateTypes.MOVE_EXISTING,markupIndex:null,textContent:null,fromIndex:fromIndex,toIndex:toIndex});} /**
   * Enqueues removing an element at an index.
   *
   * @param {string} parentID ID of the parent component.
   * @param {number} fromIndex Index of the element to remove.
   * @private
   */function enqueueRemove(parentID,fromIndex){ // NOTE: Null values reduce hidden classes.
  updateQueue.push({parentID:parentID,parentNode:null,type:ReactMultiChildUpdateTypes.REMOVE_NODE,markupIndex:null,textContent:null,fromIndex:fromIndex,toIndex:null});} /**
   * Enqueues setting the text content.
   *
   * @param {string} parentID ID of the parent component.
   * @param {string} textContent Text content to set.
   * @private
   */function enqueueTextContent(parentID,textContent){ // NOTE: Null values reduce hidden classes.
  updateQueue.push({parentID:parentID,parentNode:null,type:ReactMultiChildUpdateTypes.TEXT_CONTENT,markupIndex:null,textContent:textContent,fromIndex:null,toIndex:null});} /**
   * Processes any enqueued updates.
   *
   * @private
   */function processQueue(){if(updateQueue.length){ReactComponentEnvironment.processChildrenUpdates(updateQueue,markupQueue);clearQueue();}} /**
   * Clears any enqueued updates.
   *
   * @private
   */function clearQueue(){updateQueue.length = 0;markupQueue.length = 0;} /**
   * ReactMultiChild are capable of reconciling multiple children.
   *
   * @class ReactMultiChild
   * @internal
   */var ReactMultiChild={ /**
     * Provides common functionality for components that must reconcile multiple
     * children. This is used by `ReactDOMComponent` to mount, update, and
     * unmount child components.
     *
     * @lends {ReactMultiChild.prototype}
     */Mixin:{ /**
       * Generates a "mount image" for each of the supplied children. In the case
       * of `ReactDOMComponent`, a mount image is a string of markup.
       *
       * @param {?object} nestedChildren Nested child maps.
       * @return {array} An array of mounted representations.
       * @internal
       */mountChildren:function mountChildren(nestedChildren,transaction,context){var children=ReactChildReconciler.instantiateChildren(nestedChildren,transaction,context);this._renderedChildren = children;var mountImages=[];var index=0;for(var name in children) {if(children.hasOwnProperty(name)){var child=children[name]; // Inlined for performance, see `ReactInstanceHandles.createReactID`.
  var rootID=this._rootNodeID + name;var mountImage=ReactReconciler.mountComponent(child,rootID,transaction,context);child._mountIndex = index;mountImages.push(mountImage);index++;}}return mountImages;}, /**
       * Replaces any rendered children with a text content string.
       *
       * @param {string} nextContent String of content.
       * @internal
       */updateTextContent:function updateTextContent(nextContent){updateDepth++;var errorThrown=true;try{var prevChildren=this._renderedChildren; // Remove any rendered children.
  ReactChildReconciler.unmountChildren(prevChildren); // TODO: The setTextContent operation should be enough
  for(var name in prevChildren) {if(prevChildren.hasOwnProperty(name)){this._unmountChildByName(prevChildren[name],name);}} // Set new text content.
  this.setTextContent(nextContent);errorThrown = false;}finally {updateDepth--;if(!updateDepth){if(errorThrown){clearQueue();}else {processQueue();}}}}, /**
       * Updates the rendered children with new children.
       *
       * @param {?object} nextNestedChildren Nested child maps.
       * @param {ReactReconcileTransaction} transaction
       * @internal
       */updateChildren:function updateChildren(nextNestedChildren,transaction,context){updateDepth++;var errorThrown=true;try{this._updateChildren(nextNestedChildren,transaction,context);errorThrown = false;}finally {updateDepth--;if(!updateDepth){if(errorThrown){clearQueue();}else {processQueue();}}}}, /**
       * Improve performance by isolating this hot code path from the try/catch
       * block in `updateChildren`.
       *
       * @param {?object} nextNestedChildren Nested child maps.
       * @param {ReactReconcileTransaction} transaction
       * @final
       * @protected
       */_updateChildren:function _updateChildren(nextNestedChildren,transaction,context){var prevChildren=this._renderedChildren;var nextChildren=ReactChildReconciler.updateChildren(prevChildren,nextNestedChildren,transaction,context);this._renderedChildren = nextChildren;if(!nextChildren && !prevChildren){return;}var name; // `nextIndex` will increment for each child in `nextChildren`, but
  // `lastIndex` will be the last index visited in `prevChildren`.
  var lastIndex=0;var nextIndex=0;for(name in nextChildren) {if(!nextChildren.hasOwnProperty(name)){continue;}var prevChild=prevChildren && prevChildren[name];var nextChild=nextChildren[name];if(prevChild === nextChild){this.moveChild(prevChild,nextIndex,lastIndex);lastIndex = Math.max(prevChild._mountIndex,lastIndex);prevChild._mountIndex = nextIndex;}else {if(prevChild){ // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
  lastIndex = Math.max(prevChild._mountIndex,lastIndex);this._unmountChildByName(prevChild,name);} // The child must be instantiated before it's mounted.
  this._mountChildByNameAtIndex(nextChild,name,nextIndex,transaction,context);}nextIndex++;} // Remove children that are no longer present.
  for(name in prevChildren) {if(prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))){this._unmountChildByName(prevChildren[name],name);}}}, /**
       * Unmounts all rendered children. This should be used to clean up children
       * when this component is unmounted.
       *
       * @internal
       */unmountChildren:function unmountChildren(){var renderedChildren=this._renderedChildren;ReactChildReconciler.unmountChildren(renderedChildren);this._renderedChildren = null;}, /**
       * Moves a child component to the supplied index.
       *
       * @param {ReactComponent} child Component to move.
       * @param {number} toIndex Destination index of the element.
       * @param {number} lastIndex Last index visited of the siblings of `child`.
       * @protected
       */moveChild:function moveChild(child,toIndex,lastIndex){ // If the index of `child` is less than `lastIndex`, then it needs to
  // be moved. Otherwise, we do not need to move it because a child will be
  // inserted or moved before `child`.
  if(child._mountIndex < lastIndex){enqueueMove(this._rootNodeID,child._mountIndex,toIndex);}}, /**
       * Creates a child component.
       *
       * @param {ReactComponent} child Component to create.
       * @param {string} mountImage Markup to insert.
       * @protected
       */createChild:function createChild(child,mountImage){enqueueMarkup(this._rootNodeID,mountImage,child._mountIndex);}, /**
       * Removes a child component.
       *
       * @param {ReactComponent} child Child to remove.
       * @protected
       */removeChild:function removeChild(child){enqueueRemove(this._rootNodeID,child._mountIndex);}, /**
       * Sets this text content string.
       *
       * @param {string} textContent Text content to set.
       * @protected
       */setTextContent:function setTextContent(textContent){enqueueTextContent(this._rootNodeID,textContent);}, /**
       * Mounts a child with the supplied name.
       *
       * NOTE: This is part of `updateChildren` and is here for readability.
       *
       * @param {ReactComponent} child Component to mount.
       * @param {string} name Name of the child.
       * @param {number} index Index at which to insert the child.
       * @param {ReactReconcileTransaction} transaction
       * @private
       */_mountChildByNameAtIndex:function _mountChildByNameAtIndex(child,name,index,transaction,context){ // Inlined for performance, see `ReactInstanceHandles.createReactID`.
  var rootID=this._rootNodeID + name;var mountImage=ReactReconciler.mountComponent(child,rootID,transaction,context);child._mountIndex = index;this.createChild(child,mountImage);}, /**
       * Unmounts a rendered child by name.
       *
       * NOTE: This is part of `updateChildren` and is here for readability.
       *
       * @param {ReactComponent} child Component to unmount.
       * @param {string} name Name of the child in `this._renderedChildren`.
       * @private
       */_unmountChildByName:function _unmountChildByName(child,name){this.removeChild(child);child._mountIndex = null;}}};module.exports = ReactMultiChild;},{"./ReactChildReconciler":81,"./ReactComponentEnvironment":86,"./ReactMultiChildUpdateTypes":122,"./ReactReconciler":131}],122:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactMultiChildUpdateTypes
   */'use strict';var keyMirror=require("./keyMirror"); /**
   * When a component's children are updated, a series of update configuration
   * objects are created in order to batch and serialize the required changes.
   *
   * Enumerates all the possible types of update configurations.
   *
   * @internal
   */var ReactMultiChildUpdateTypes=keyMirror({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,TEXT_CONTENT:null});module.exports = ReactMultiChildUpdateTypes;},{"./keyMirror":190}],123:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactNativeComponent
   */'use strict';var assign=require("./Object.assign");var invariant=require("./invariant");var autoGenerateWrapperClass=null;var genericComponentClass=null; // This registry keeps track of wrapper classes around native tags
  var tagToComponentClass={};var textComponentClass=null;var ReactNativeComponentInjection={ // This accepts a class that receives the tag string. This is a catch all
  // that can render any kind of tag.
  injectGenericComponentClass:function injectGenericComponentClass(componentClass){genericComponentClass = componentClass;}, // This accepts a text component class that takes the text string to be
  // rendered as props.
  injectTextComponentClass:function injectTextComponentClass(componentClass){textComponentClass = componentClass;}, // This accepts a keyed object with classes as values. Each key represents a
  // tag. That particular tag will use this class instead of the generic one.
  injectComponentClasses:function injectComponentClasses(componentClasses){assign(tagToComponentClass,componentClasses);}, // Temporary hack since we expect DOM refs to behave like composites,
  // for this release.
  injectAutoWrapper:function injectAutoWrapper(wrapperFactory){autoGenerateWrapperClass = wrapperFactory;}}; /**
   * Get a composite component wrapper class for a specific tag.
   *
   * @param {ReactElement} element The tag for which to get the class.
   * @return {function} The React class constructor function.
   */function getComponentClassForElement(element){if(typeof element.type === 'function'){return element.type;}var tag=element.type;var componentClass=tagToComponentClass[tag];if(componentClass == null){tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);}return componentClass;} /**
   * Get a native internal component class for a specific tag.
   *
   * @param {ReactElement} element The element to create.
   * @return {function} The internal class constructor function.
   */function createInternalComponent(element){"production" !== process.env.NODE_ENV?invariant(genericComponentClass,'There is no registered component for the tag %s',element.type):invariant(genericComponentClass);return new genericComponentClass(element.type,element.props);} /**
   * @param {ReactText} text
   * @return {ReactComponent}
   */function createInstanceForText(text){return new textComponentClass(text);} /**
   * @param {ReactComponent} component
   * @return {boolean}
   */function isTextComponent(component){return component instanceof textComponentClass;}var ReactNativeComponent={getComponentClassForElement:getComponentClassForElement,createInternalComponent:createInternalComponent,createInstanceForText:createInstanceForText,isTextComponent:isTextComponent,injection:ReactNativeComponentInjection};module.exports = ReactNativeComponent;}).call(this,require('_process'));},{"./Object.assign":76,"./invariant":185,"_process":12}],124:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactOwner
   */'use strict';var invariant=require("./invariant"); /**
   * ReactOwners are capable of storing references to owned components.
   *
   * All components are capable of //being// referenced by owner components, but
   * only ReactOwner components are capable of //referencing// owned components.
   * The named reference is known as a "ref".
   *
   * Refs are available when mounted and updated during reconciliation.
   *
   *   var MyComponent = React.createClass({
   *     render: function() {
   *       return (
   *         <div onClick={this.handleClick}>
   *           <CustomComponent ref="custom" />
   *         </div>
   *       );
   *     },
   *     handleClick: function() {
   *       this.refs.custom.handleClick();
   *     },
   *     componentDidMount: function() {
   *       this.refs.custom.initialize();
   *     }
   *   });
   *
   * Refs should rarely be used. When refs are used, they should only be done to
   * control data that is not handled by React's data flow.
   *
   * @class ReactOwner
   */var ReactOwner={ /**
     * @param {?object} object
     * @return {boolean} True if `object` is a valid owner.
     * @final
     */isValidOwner:function isValidOwner(object){return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');}, /**
     * Adds a component by ref to an owner component.
     *
     * @param {ReactComponent} component Component to reference.
     * @param {string} ref Name by which to refer to the component.
     * @param {ReactOwner} owner Component on which to record the ref.
     * @final
     * @internal
     */addComponentAsRefTo:function addComponentAsRefTo(component,ref,owner){"production" !== process.env.NODE_ENV?invariant(ReactOwner.isValidOwner(owner),'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' + 'usually means that you\'re trying to add a ref to a component that ' + 'doesn\'t have an owner (that is, was not created inside of another ' + 'component\'s `render` method). Try rendering this component inside of ' + 'a new top-level component which will hold the ref.'):invariant(ReactOwner.isValidOwner(owner));owner.attachRef(ref,component);}, /**
     * Removes a component by ref from an owner component.
     *
     * @param {ReactComponent} component Component to dereference.
     * @param {string} ref Name of the ref to remove.
     * @param {ReactOwner} owner Component on which the ref is recorded.
     * @final
     * @internal
     */removeComponentAsRefFrom:function removeComponentAsRefFrom(component,ref,owner){"production" !== process.env.NODE_ENV?invariant(ReactOwner.isValidOwner(owner),'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' + 'usually means that you\'re trying to remove a ref to a component that ' + 'doesn\'t have an owner (that is, was not created inside of another ' + 'component\'s `render` method). Try rendering this component inside of ' + 'a new top-level component which will hold the ref.'):invariant(ReactOwner.isValidOwner(owner)); // Check that `component` is still the current ref because we do not want to
  // detach the ref if another component stole it.
  if(owner.getPublicInstance().refs[ref] === component.getPublicInstance()){owner.detachRef(ref);}}};module.exports = ReactOwner;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],125:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactPerf
   * @typechecks static-only
   */'use strict'; /**
   * ReactPerf is a general AOP system designed to measure performance. This
   * module only has the hooks: see ReactDefaultPerf for the analysis tool.
   */var ReactPerf={ /**
     * Boolean to enable/disable measurement. Set to false by default to prevent
     * accidental logging and perf loss.
     */enableMeasure:false, /**
     * Holds onto the measure function in use. By default, don't measure
     * anything, but we'll override this if we inject a measure function.
     */storedMeasure:_noMeasure, /**
     * @param {object} object
     * @param {string} objectName
     * @param {object<string>} methodNames
     */measureMethods:function measureMethods(object,objectName,methodNames){if("production" !== process.env.NODE_ENV){for(var key in methodNames) {if(!methodNames.hasOwnProperty(key)){continue;}object[key] = ReactPerf.measure(objectName,methodNames[key],object[key]);}}}, /**
     * Use this to wrap methods you want to measure. Zero overhead in production.
     *
     * @param {string} objName
     * @param {string} fnName
     * @param {function} func
     * @return {function}
     */measure:function measure(objName,fnName,func){if("production" !== process.env.NODE_ENV){var measuredFunc=null;var wrapper=function wrapper(){if(ReactPerf.enableMeasure){if(!measuredFunc){measuredFunc = ReactPerf.storedMeasure(objName,fnName,func);}return measuredFunc.apply(this,arguments);}return func.apply(this,arguments);};wrapper.displayName = objName + '_' + fnName;return wrapper;}return func;},injection:{ /**
       * @param {function} measure
       */injectMeasure:function injectMeasure(measure){ReactPerf.storedMeasure = measure;}}}; /**
   * Simply passes through the measured function, without measuring it.
   *
   * @param {string} objName
   * @param {string} fnName
   * @param {function} func
   * @return {function}
   */function _noMeasure(objName,fnName,func){return func;}module.exports = ReactPerf;}).call(this,require('_process'));},{"_process":12}],126:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactPropTypeLocationNames
   */'use strict';var ReactPropTypeLocationNames={};if("production" !== process.env.NODE_ENV){ReactPropTypeLocationNames = {prop:'prop',context:'context',childContext:'child context'};}module.exports = ReactPropTypeLocationNames;}).call(this,require('_process'));},{"_process":12}],127:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactPropTypeLocations
   */'use strict';var keyMirror=require("./keyMirror");var ReactPropTypeLocations=keyMirror({prop:null,context:null,childContext:null});module.exports = ReactPropTypeLocations;},{"./keyMirror":190}],128:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactPropTypes
   */'use strict';var ReactElement=require("./ReactElement");var ReactFragment=require("./ReactFragment");var ReactPropTypeLocationNames=require("./ReactPropTypeLocationNames");var emptyFunction=require("./emptyFunction"); /**
   * Collection of methods that allow declaration and validation of props that are
   * supplied to React components. Example usage:
   *
   *   var Props = require('ReactPropTypes');
   *   var MyArticle = React.createClass({
   *     propTypes: {
   *       // An optional string prop named "description".
   *       description: Props.string,
   *
   *       // A required enum prop named "category".
   *       category: Props.oneOf(['News','Photos']).isRequired,
   *
   *       // A prop named "dialog" that requires an instance of Dialog.
   *       dialog: Props.instanceOf(Dialog).isRequired
   *     },
   *     render: function() { ... }
   *   });
   *
   * A more formal specification of how these methods are used:
   *
   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
   *   decl := ReactPropTypes.{type}(.isRequired)?
   *
   * Each and every declaration produces a function with the same signature. This
   * allows the creation of custom validation functions. For example:
   *
   *  var MyLink = React.createClass({
   *    propTypes: {
   *      // An optional string or URI prop named "href".
   *      href: function(props, propName, componentName) {
   *        var propValue = props[propName];
   *        if (propValue != null && typeof propValue !== 'string' &&
   *            !(propValue instanceof URI)) {
   *          return new Error(
   *            'Expected a string or an URI for ' + propName + ' in ' +
   *            componentName
   *          );
   *        }
   *      }
   *    },
   *    render: function() {...}
   *  });
   *
   * @internal
   */var ANONYMOUS='<<anonymous>>';var elementTypeChecker=createElementTypeChecker();var nodeTypeChecker=createNodeChecker();var ReactPropTypes={array:createPrimitiveTypeChecker('array'),bool:createPrimitiveTypeChecker('boolean'),func:createPrimitiveTypeChecker('function'),number:createPrimitiveTypeChecker('number'),object:createPrimitiveTypeChecker('object'),string:createPrimitiveTypeChecker('string'),any:createAnyTypeChecker(),arrayOf:createArrayOfTypeChecker,element:elementTypeChecker,instanceOf:createInstanceTypeChecker,node:nodeTypeChecker,objectOf:createObjectOfTypeChecker,oneOf:createEnumTypeChecker,oneOfType:createUnionTypeChecker,shape:createShapeTypeChecker};function createChainableTypeChecker(validate){function checkType(isRequired,props,propName,componentName,location){componentName = componentName || ANONYMOUS;if(props[propName] == null){var locationName=ReactPropTypeLocationNames[location];if(isRequired){return new Error("Required " + locationName + " `" + propName + "` was not specified in " + ("`" + componentName + "`."));}return null;}else {return validate(props,propName,componentName,location);}}var chainedCheckType=checkType.bind(null,false);chainedCheckType.isRequired = checkType.bind(null,true);return chainedCheckType;}function createPrimitiveTypeChecker(expectedType){function validate(props,propName,componentName,location){var propValue=props[propName];var propType=getPropType(propValue);if(propType !== expectedType){var locationName=ReactPropTypeLocationNames[location]; // `propValue` being instance of, say, date/regexp, pass the 'object'
  // check, but we can offer a more precise error message here rather than
  // 'of type `object`'.
  var preciseType=getPreciseType(propValue);return new Error("Invalid " + locationName + " `" + propName + "` of type `" + preciseType + "` " + ("supplied to `" + componentName + "`, expected `" + expectedType + "`."));}return null;}return createChainableTypeChecker(validate);}function createAnyTypeChecker(){return createChainableTypeChecker(emptyFunction.thatReturns(null));}function createArrayOfTypeChecker(typeChecker){function validate(props,propName,componentName,location){var propValue=props[propName];if(!Array.isArray(propValue)){var locationName=ReactPropTypeLocationNames[location];var propType=getPropType(propValue);return new Error("Invalid " + locationName + " `" + propName + "` of type " + ("`" + propType + "` supplied to `" + componentName + "`, expected an array."));}for(var i=0;i < propValue.length;i++) {var error=typeChecker(propValue,i,componentName,location);if(error instanceof Error){return error;}}return null;}return createChainableTypeChecker(validate);}function createElementTypeChecker(){function validate(props,propName,componentName,location){if(!ReactElement.isValidElement(props[propName])){var locationName=ReactPropTypeLocationNames[location];return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`, expected a ReactElement."));}return null;}return createChainableTypeChecker(validate);}function createInstanceTypeChecker(expectedClass){function validate(props,propName,componentName,location){if(!(props[propName] instanceof expectedClass)){var locationName=ReactPropTypeLocationNames[location];var expectedClassName=expectedClass.name || ANONYMOUS;return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`, expected instance of `" + expectedClassName + "`."));}return null;}return createChainableTypeChecker(validate);}function createEnumTypeChecker(expectedValues){function validate(props,propName,componentName,location){var propValue=props[propName];for(var i=0;i < expectedValues.length;i++) {if(propValue === expectedValues[i]){return null;}}var locationName=ReactPropTypeLocationNames[location];var valuesString=JSON.stringify(expectedValues);return new Error("Invalid " + locationName + " `" + propName + "` of value `" + propValue + "` " + ("supplied to `" + componentName + "`, expected one of " + valuesString + "."));}return createChainableTypeChecker(validate);}function createObjectOfTypeChecker(typeChecker){function validate(props,propName,componentName,location){var propValue=props[propName];var propType=getPropType(propValue);if(propType !== 'object'){var locationName=ReactPropTypeLocationNames[location];return new Error("Invalid " + locationName + " `" + propName + "` of type " + ("`" + propType + "` supplied to `" + componentName + "`, expected an object."));}for(var key in propValue) {if(propValue.hasOwnProperty(key)){var error=typeChecker(propValue,key,componentName,location);if(error instanceof Error){return error;}}}return null;}return createChainableTypeChecker(validate);}function createUnionTypeChecker(arrayOfTypeCheckers){function validate(props,propName,componentName,location){for(var i=0;i < arrayOfTypeCheckers.length;i++) {var checker=arrayOfTypeCheckers[i];if(checker(props,propName,componentName,location) == null){return null;}}var locationName=ReactPropTypeLocationNames[location];return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`."));}return createChainableTypeChecker(validate);}function createNodeChecker(){function validate(props,propName,componentName,location){if(!isNode(props[propName])){var locationName=ReactPropTypeLocationNames[location];return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`, expected a ReactNode."));}return null;}return createChainableTypeChecker(validate);}function createShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location){var propValue=props[propName];var propType=getPropType(propValue);if(propType !== 'object'){var locationName=ReactPropTypeLocationNames[location];return new Error("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` " + ("supplied to `" + componentName + "`, expected `object`."));}for(var key in shapeTypes) {var checker=shapeTypes[key];if(!checker){continue;}var error=checker(propValue,key,componentName,location);if(error){return error;}}return null;}return createChainableTypeChecker(validate);}function isNode(propValue){switch(typeof propValue){case 'number':case 'string':case 'undefined':return true;case 'boolean':return !propValue;case 'object':if(Array.isArray(propValue)){return propValue.every(isNode);}if(propValue === null || ReactElement.isValidElement(propValue)){return true;}propValue = ReactFragment.extractIfFragment(propValue);for(var k in propValue) {if(!isNode(propValue[k])){return false;}}return true;default:return false;}} // Equivalent of `typeof` but with special handling for array and regexp.
  function getPropType(propValue){var propType=typeof propValue;if(Array.isArray(propValue)){return 'array';}if(propValue instanceof RegExp){ // Old webkits (at least until Android 4.0) return 'function' rather than
  // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
  // passes PropTypes.object.
  return 'object';}return propType;} // This handles more types than `getPropType`. Only used for error messages.
  // See `createPrimitiveTypeChecker`.
  function getPreciseType(propValue){var propType=getPropType(propValue);if(propType === 'object'){if(propValue instanceof Date){return 'date';}else if(propValue instanceof RegExp){return 'regexp';}}return propType;}module.exports = ReactPropTypes;},{"./ReactElement":107,"./ReactFragment":113,"./ReactPropTypeLocationNames":126,"./emptyFunction":164}],129:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactPutListenerQueue
   */'use strict';var PooledClass=require("./PooledClass");var ReactBrowserEventEmitter=require("./ReactBrowserEventEmitter");var assign=require("./Object.assign");function ReactPutListenerQueue(){this.listenersToPut = [];}assign(ReactPutListenerQueue.prototype,{enqueuePutListener:function enqueuePutListener(rootNodeID,propKey,propValue){this.listenersToPut.push({rootNodeID:rootNodeID,propKey:propKey,propValue:propValue});},putListeners:function putListeners(){for(var i=0;i < this.listenersToPut.length;i++) {var listenerToPut=this.listenersToPut[i];ReactBrowserEventEmitter.putListener(listenerToPut.rootNodeID,listenerToPut.propKey,listenerToPut.propValue);}},reset:function reset(){this.listenersToPut.length = 0;},destructor:function destructor(){this.reset();}});PooledClass.addPoolingTo(ReactPutListenerQueue);module.exports = ReactPutListenerQueue;},{"./Object.assign":76,"./PooledClass":77,"./ReactBrowserEventEmitter":80}],130:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactReconcileTransaction
   * @typechecks static-only
   */'use strict';var CallbackQueue=require("./CallbackQueue");var PooledClass=require("./PooledClass");var ReactBrowserEventEmitter=require("./ReactBrowserEventEmitter");var ReactInputSelection=require("./ReactInputSelection");var ReactPutListenerQueue=require("./ReactPutListenerQueue");var Transaction=require("./Transaction");var assign=require("./Object.assign"); /**
   * Ensures that, when possible, the selection range (currently selected text
   * input) is not disturbed by performing the transaction.
   */var SELECTION_RESTORATION={ /**
     * @return {Selection} Selection information.
     */initialize:ReactInputSelection.getSelectionInformation, /**
     * @param {Selection} sel Selection information returned from `initialize`.
     */close:ReactInputSelection.restoreSelection}; /**
   * Suppresses events (blur/focus) that could be inadvertently dispatched due to
   * high level DOM manipulations (like temporarily removing a text input from the
   * DOM).
   */var EVENT_SUPPRESSION={ /**
     * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
     * the reconciliation.
     */initialize:function initialize(){var currentlyEnabled=ReactBrowserEventEmitter.isEnabled();ReactBrowserEventEmitter.setEnabled(false);return currentlyEnabled;}, /**
     * @param {boolean} previouslyEnabled Enabled status of
     *   `ReactBrowserEventEmitter` before the reconciliation occured. `close`
     *   restores the previous value.
     */close:function close(previouslyEnabled){ReactBrowserEventEmitter.setEnabled(previouslyEnabled);}}; /**
   * Provides a queue for collecting `componentDidMount` and
   * `componentDidUpdate` callbacks during the the transaction.
   */var ON_DOM_READY_QUEUEING={ /**
     * Initializes the internal `onDOMReady` queue.
     */initialize:function initialize(){this.reactMountReady.reset();}, /**
     * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
     */close:function close(){this.reactMountReady.notifyAll();}};var PUT_LISTENER_QUEUEING={initialize:function initialize(){this.putListenerQueue.reset();},close:function close(){this.putListenerQueue.putListeners();}}; /**
   * Executed within the scope of the `Transaction` instance. Consider these as
   * being member methods, but with an implied ordering while being isolated from
   * each other.
   */var TRANSACTION_WRAPPERS=[PUT_LISTENER_QUEUEING,SELECTION_RESTORATION,EVENT_SUPPRESSION,ON_DOM_READY_QUEUEING]; /**
   * Currently:
   * - The order that these are listed in the transaction is critical:
   * - Suppresses events.
   * - Restores selection range.
   *
   * Future:
   * - Restore document/overflow scroll positions that were unintentionally
   *   modified via DOM insertions above the top viewport boundary.
   * - Implement/integrate with customized constraint based layout system and keep
   *   track of which dimensions must be remeasured.
   *
   * @class ReactReconcileTransaction
   */function ReactReconcileTransaction(){this.reinitializeTransaction(); // Only server-side rendering really needs this option (see
  // `ReactServerRendering`), but server-side uses
  // `ReactServerRenderingTransaction` instead. This option is here so that it's
  // accessible and defaults to false when `ReactDOMComponent` and
  // `ReactTextComponent` checks it in `mountComponent`.`
  this.renderToStaticMarkup = false;this.reactMountReady = CallbackQueue.getPooled(null);this.putListenerQueue = ReactPutListenerQueue.getPooled();}var Mixin={ /**
     * @see Transaction
     * @abstract
     * @final
     * @return {array<object>} List of operation wrap proceedures.
     *   TODO: convert to array<TransactionWrapper>
     */getTransactionWrappers:function getTransactionWrappers(){return TRANSACTION_WRAPPERS;}, /**
     * @return {object} The queue to collect `onDOMReady` callbacks with.
     */getReactMountReady:function getReactMountReady(){return this.reactMountReady;},getPutListenerQueue:function getPutListenerQueue(){return this.putListenerQueue;}, /**
     * `PooledClass` looks for this, and will invoke this before allowing this
     * instance to be resused.
     */destructor:function destructor(){CallbackQueue.release(this.reactMountReady);this.reactMountReady = null;ReactPutListenerQueue.release(this.putListenerQueue);this.putListenerQueue = null;}};assign(ReactReconcileTransaction.prototype,Transaction.Mixin,Mixin);PooledClass.addPoolingTo(ReactReconcileTransaction);module.exports = ReactReconcileTransaction;},{"./CallbackQueue":55,"./Object.assign":76,"./PooledClass":77,"./ReactBrowserEventEmitter":80,"./ReactInputSelection":115,"./ReactPutListenerQueue":129,"./Transaction":153}],131:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactReconciler
   */'use strict';var ReactRef=require("./ReactRef");var ReactElementValidator=require("./ReactElementValidator"); /**
   * Helper to call ReactRef.attachRefs with this composite component, split out
   * to avoid allocations in the transaction mount-ready queue.
   */function attachRefs(){ReactRef.attachRefs(this,this._currentElement);}var ReactReconciler={ /**
     * Initializes the component, renders markup, and registers event listeners.
     *
     * @param {ReactComponent} internalInstance
     * @param {string} rootID DOM ID of the root node.
     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
     * @return {?string} Rendered markup to be inserted into the DOM.
     * @final
     * @internal
     */mountComponent:function mountComponent(internalInstance,rootID,transaction,context){var markup=internalInstance.mountComponent(rootID,transaction,context);if("production" !== process.env.NODE_ENV){ReactElementValidator.checkAndWarnForMutatedProps(internalInstance._currentElement);}transaction.getReactMountReady().enqueue(attachRefs,internalInstance);return markup;}, /**
     * Releases any resources allocated by `mountComponent`.
     *
     * @final
     * @internal
     */unmountComponent:function unmountComponent(internalInstance){ReactRef.detachRefs(internalInstance,internalInstance._currentElement);internalInstance.unmountComponent();}, /**
     * Update a component using a new element.
     *
     * @param {ReactComponent} internalInstance
     * @param {ReactElement} nextElement
     * @param {ReactReconcileTransaction} transaction
     * @param {object} context
     * @internal
     */receiveComponent:function receiveComponent(internalInstance,nextElement,transaction,context){var prevElement=internalInstance._currentElement;if(nextElement === prevElement && nextElement._owner != null){ // Since elements are immutable after the owner is rendered,
  // we can do a cheap identity compare here to determine if this is a
  // superfluous reconcile. It's possible for state to be mutable but such
  // change should trigger an update of the owner which would recreate
  // the element. We explicitly check for the existence of an owner since
  // it's possible for an element created outside a composite to be
  // deeply mutated and reused.
  return;}if("production" !== process.env.NODE_ENV){ReactElementValidator.checkAndWarnForMutatedProps(nextElement);}var refsChanged=ReactRef.shouldUpdateRefs(prevElement,nextElement);if(refsChanged){ReactRef.detachRefs(internalInstance,prevElement);}internalInstance.receiveComponent(nextElement,transaction,context);if(refsChanged){transaction.getReactMountReady().enqueue(attachRefs,internalInstance);}}, /**
     * Flush any dirty changes in a component.
     *
     * @param {ReactComponent} internalInstance
     * @param {ReactReconcileTransaction} transaction
     * @internal
     */performUpdateIfNecessary:function performUpdateIfNecessary(internalInstance,transaction){internalInstance.performUpdateIfNecessary(transaction);}};module.exports = ReactReconciler;}).call(this,require('_process'));},{"./ReactElementValidator":108,"./ReactRef":132,"_process":12}],132:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactRef
   */'use strict';var ReactOwner=require("./ReactOwner");var ReactRef={};function attachRef(ref,component,owner){if(typeof ref === 'function'){ref(component.getPublicInstance());}else { // Legacy ref
  ReactOwner.addComponentAsRefTo(component,ref,owner);}}function detachRef(ref,component,owner){if(typeof ref === 'function'){ref(null);}else { // Legacy ref
  ReactOwner.removeComponentAsRefFrom(component,ref,owner);}}ReactRef.attachRefs = function(instance,element){var ref=element.ref;if(ref != null){attachRef(ref,instance,element._owner);}};ReactRef.shouldUpdateRefs = function(prevElement,nextElement){ // If either the owner or a `ref` has changed, make sure the newest owner
  // has stored a reference to `this`, and the previous owner (if different)
  // has forgotten the reference to `this`. We use the element instead
  // of the public this.props because the post processing cannot determine
  // a ref. The ref conceptually lives on the element.
  // TODO: Should this even be possible? The owner cannot change because
  // it's forbidden by shouldUpdateReactComponent. The ref can change
  // if you swap the keys of but not the refs. Reconsider where this check
  // is made. It probably belongs where the key checking and
  // instantiateReactComponent is done.
  return nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref;};ReactRef.detachRefs = function(instance,element){var ref=element.ref;if(ref != null){detachRef(ref,instance,element._owner);}};module.exports = ReactRef;},{"./ReactOwner":124}],133:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactRootIndex
   * @typechecks
   */'use strict';var ReactRootIndexInjection={ /**
     * @param {function} _createReactRootIndex
     */injectCreateReactRootIndex:function injectCreateReactRootIndex(_createReactRootIndex){ReactRootIndex.createReactRootIndex = _createReactRootIndex;}};var ReactRootIndex={createReactRootIndex:null,injection:ReactRootIndexInjection};module.exports = ReactRootIndex;},{}],134:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @typechecks static-only
   * @providesModule ReactServerRendering
   */'use strict';var ReactElement=require("./ReactElement");var ReactInstanceHandles=require("./ReactInstanceHandles");var ReactMarkupChecksum=require("./ReactMarkupChecksum");var ReactServerRenderingTransaction=require("./ReactServerRenderingTransaction");var emptyObject=require("./emptyObject");var instantiateReactComponent=require("./instantiateReactComponent");var invariant=require("./invariant"); /**
   * @param {ReactElement} element
   * @return {string} the HTML markup
   */function renderToString(element){"production" !== process.env.NODE_ENV?invariant(ReactElement.isValidElement(element),'renderToString(): You must pass a valid ReactElement.'):invariant(ReactElement.isValidElement(element));var transaction;try{var id=ReactInstanceHandles.createReactRootID();transaction = ReactServerRenderingTransaction.getPooled(false);return transaction.perform(function(){var componentInstance=instantiateReactComponent(element,null);var markup=componentInstance.mountComponent(id,transaction,emptyObject);return ReactMarkupChecksum.addChecksumToMarkup(markup);},null);}finally {ReactServerRenderingTransaction.release(transaction);}} /**
   * @param {ReactElement} element
   * @return {string} the HTML markup, without the extra React ID and checksum
   * (for generating static pages)
   */function renderToStaticMarkup(element){"production" !== process.env.NODE_ENV?invariant(ReactElement.isValidElement(element),'renderToStaticMarkup(): You must pass a valid ReactElement.'):invariant(ReactElement.isValidElement(element));var transaction;try{var id=ReactInstanceHandles.createReactRootID();transaction = ReactServerRenderingTransaction.getPooled(true);return transaction.perform(function(){var componentInstance=instantiateReactComponent(element,null);return componentInstance.mountComponent(id,transaction,emptyObject);},null);}finally {ReactServerRenderingTransaction.release(transaction);}}module.exports = {renderToString:renderToString,renderToStaticMarkup:renderToStaticMarkup};}).call(this,require('_process'));},{"./ReactElement":107,"./ReactInstanceHandles":116,"./ReactMarkupChecksum":119,"./ReactServerRenderingTransaction":135,"./emptyObject":165,"./instantiateReactComponent":184,"./invariant":185,"_process":12}],135:[function(require,module,exports){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactServerRenderingTransaction
   * @typechecks
   */'use strict';var PooledClass=require("./PooledClass");var CallbackQueue=require("./CallbackQueue");var ReactPutListenerQueue=require("./ReactPutListenerQueue");var Transaction=require("./Transaction");var assign=require("./Object.assign");var emptyFunction=require("./emptyFunction"); /**
   * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks
   * during the performing of the transaction.
   */var ON_DOM_READY_QUEUEING={ /**
     * Initializes the internal `onDOMReady` queue.
     */initialize:function initialize(){this.reactMountReady.reset();},close:emptyFunction};var PUT_LISTENER_QUEUEING={initialize:function initialize(){this.putListenerQueue.reset();},close:emptyFunction}; /**
   * Executed within the scope of the `Transaction` instance. Consider these as
   * being member methods, but with an implied ordering while being isolated from
   * each other.
   */var TRANSACTION_WRAPPERS=[PUT_LISTENER_QUEUEING,ON_DOM_READY_QUEUEING]; /**
   * @class ReactServerRenderingTransaction
   * @param {boolean} renderToStaticMarkup
   */function ReactServerRenderingTransaction(renderToStaticMarkup){this.reinitializeTransaction();this.renderToStaticMarkup = renderToStaticMarkup;this.reactMountReady = CallbackQueue.getPooled(null);this.putListenerQueue = ReactPutListenerQueue.getPooled();}var Mixin={ /**
     * @see Transaction
     * @abstract
     * @final
     * @return {array} Empty list of operation wrap proceedures.
     */getTransactionWrappers:function getTransactionWrappers(){return TRANSACTION_WRAPPERS;}, /**
     * @return {object} The queue to collect `onDOMReady` callbacks with.
     */getReactMountReady:function getReactMountReady(){return this.reactMountReady;},getPutListenerQueue:function getPutListenerQueue(){return this.putListenerQueue;}, /**
     * `PooledClass` looks for this, and will invoke this before allowing this
     * instance to be resused.
     */destructor:function destructor(){CallbackQueue.release(this.reactMountReady);this.reactMountReady = null;ReactPutListenerQueue.release(this.putListenerQueue);this.putListenerQueue = null;}};assign(ReactServerRenderingTransaction.prototype,Transaction.Mixin,Mixin);PooledClass.addPoolingTo(ReactServerRenderingTransaction);module.exports = ReactServerRenderingTransaction;},{"./CallbackQueue":55,"./Object.assign":76,"./PooledClass":77,"./ReactPutListenerQueue":129,"./Transaction":153,"./emptyFunction":164}],136:[function(require,module,exports){(function(process){ /**
   * Copyright 2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactUpdateQueue
   */'use strict';var ReactLifeCycle=require("./ReactLifeCycle");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactElement=require("./ReactElement");var ReactInstanceMap=require("./ReactInstanceMap");var ReactUpdates=require("./ReactUpdates");var assign=require("./Object.assign");var invariant=require("./invariant");var warning=require("./warning");function enqueueUpdate(internalInstance){if(internalInstance !== ReactLifeCycle.currentlyMountingInstance){ // If we're in a componentWillMount handler, don't enqueue a rerender
  // because ReactUpdates assumes we're in a browser context (which is
  // wrong for server rendering) and we're about to do a render anyway.
  // See bug in #1740.
  ReactUpdates.enqueueUpdate(internalInstance);}}function getInternalInstanceReadyForUpdate(publicInstance,callerName){"production" !== process.env.NODE_ENV?invariant(ReactCurrentOwner.current == null,'%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.',callerName):invariant(ReactCurrentOwner.current == null);var internalInstance=ReactInstanceMap.get(publicInstance);if(!internalInstance){if("production" !== process.env.NODE_ENV){ // Only warn when we have a callerName. Otherwise we should be silent.
  // We're probably calling from enqueueCallback. We don't want to warn
  // there because we already warned for the corresponding lifecycle method.
  "production" !== process.env.NODE_ENV?warning(!callerName,'%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted ' + 'component. This is a no-op.',callerName,callerName):null;}return null;}if(internalInstance === ReactLifeCycle.currentlyUnmountingInstance){return null;}return internalInstance;} /**
   * ReactUpdateQueue allows for state updates to be scheduled into a later
   * reconciliation step.
   */var ReactUpdateQueue={ /**
     * Enqueue a callback that will be executed after all the pending updates
     * have processed.
     *
     * @param {ReactClass} publicInstance The instance to use as `this` context.
     * @param {?function} callback Called after state is updated.
     * @internal
     */enqueueCallback:function enqueueCallback(publicInstance,callback){"production" !== process.env.NODE_ENV?invariant(typeof callback === 'function','enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.'):invariant(typeof callback === 'function');var internalInstance=getInternalInstanceReadyForUpdate(publicInstance); // Previously we would throw an error if we didn't have an internal
  // instance. Since we want to make it a no-op instead, we mirror the same
  // behavior we have in other enqueue* methods.
  // We also need to ignore callbacks in componentWillMount. See
  // enqueueUpdates.
  if(!internalInstance || internalInstance === ReactLifeCycle.currentlyMountingInstance){return null;}if(internalInstance._pendingCallbacks){internalInstance._pendingCallbacks.push(callback);}else {internalInstance._pendingCallbacks = [callback];} // TODO: The callback here is ignored when setState is called from
  // componentWillMount. Either fix it or disallow doing so completely in
  // favor of getInitialState. Alternatively, we can disallow
  // componentWillMount during server-side rendering.
  enqueueUpdate(internalInstance);},enqueueCallbackInternal:function enqueueCallbackInternal(internalInstance,callback){"production" !== process.env.NODE_ENV?invariant(typeof callback === 'function','enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.'):invariant(typeof callback === 'function');if(internalInstance._pendingCallbacks){internalInstance._pendingCallbacks.push(callback);}else {internalInstance._pendingCallbacks = [callback];}enqueueUpdate(internalInstance);}, /**
     * Forces an update. This should only be invoked when it is known with
     * certainty that we are **not** in a DOM transaction.
     *
     * You may want to call this when you know that some deeper aspect of the
     * component's state has changed but `setState` was not called.
     *
     * This will not invoke `shouldUpdateComponent`, but it will invoke
     * `componentWillUpdate` and `componentDidUpdate`.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @internal
     */enqueueForceUpdate:function enqueueForceUpdate(publicInstance){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,'forceUpdate');if(!internalInstance){return;}internalInstance._pendingForceUpdate = true;enqueueUpdate(internalInstance);}, /**
     * Replaces all of the state. Always use this or `setState` to mutate state.
     * You should treat `this.state` as immutable.
     *
     * There is no guarantee that `this.state` will be immediately updated, so
     * accessing `this.state` after calling this method may return the old value.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {object} completeState Next state.
     * @internal
     */enqueueReplaceState:function enqueueReplaceState(publicInstance,completeState){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,'replaceState');if(!internalInstance){return;}internalInstance._pendingStateQueue = [completeState];internalInstance._pendingReplaceState = true;enqueueUpdate(internalInstance);}, /**
     * Sets a subset of the state. This only exists because _pendingState is
     * internal. This provides a merging strategy that is not available to deep
     * properties which is confusing. TODO: Expose pendingState or don't use it
     * during the merge.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {object} partialState Next partial state to be merged with state.
     * @internal
     */enqueueSetState:function enqueueSetState(publicInstance,partialState){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,'setState');if(!internalInstance){return;}var queue=internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);queue.push(partialState);enqueueUpdate(internalInstance);}, /**
     * Sets a subset of the props.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {object} partialProps Subset of the next props.
     * @internal
     */enqueueSetProps:function enqueueSetProps(publicInstance,partialProps){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,'setProps');if(!internalInstance){return;}"production" !== process.env.NODE_ENV?invariant(internalInstance._isTopLevel,'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.'):invariant(internalInstance._isTopLevel); // Merge with the pending element if it exists, otherwise with existing
  // element props.
  var element=internalInstance._pendingElement || internalInstance._currentElement;var props=assign({},element.props,partialProps);internalInstance._pendingElement = ReactElement.cloneAndReplaceProps(element,props);enqueueUpdate(internalInstance);}, /**
     * Replaces all of the props.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {object} props New props.
     * @internal
     */enqueueReplaceProps:function enqueueReplaceProps(publicInstance,props){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,'replaceProps');if(!internalInstance){return;}"production" !== process.env.NODE_ENV?invariant(internalInstance._isTopLevel,'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.'):invariant(internalInstance._isTopLevel); // Merge with the pending element if it exists, otherwise with existing
  // element props.
  var element=internalInstance._pendingElement || internalInstance._currentElement;internalInstance._pendingElement = ReactElement.cloneAndReplaceProps(element,props);enqueueUpdate(internalInstance);},enqueueElementInternal:function enqueueElementInternal(internalInstance,newElement){internalInstance._pendingElement = newElement;enqueueUpdate(internalInstance);}};module.exports = ReactUpdateQueue;}).call(this,require('_process'));},{"./Object.assign":76,"./ReactCurrentOwner":89,"./ReactElement":107,"./ReactInstanceMap":117,"./ReactLifeCycle":118,"./ReactUpdates":137,"./invariant":185,"./warning":204,"_process":12}],137:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactUpdates
   */'use strict';var CallbackQueue=require("./CallbackQueue");var PooledClass=require("./PooledClass");var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactPerf=require("./ReactPerf");var ReactReconciler=require("./ReactReconciler");var Transaction=require("./Transaction");var assign=require("./Object.assign");var invariant=require("./invariant");var warning=require("./warning");var dirtyComponents=[];var asapCallbackQueue=CallbackQueue.getPooled();var asapEnqueued=false;var batchingStrategy=null;function ensureInjected(){"production" !== process.env.NODE_ENV?invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy,'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy'):invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy);}var NESTED_UPDATES={initialize:function initialize(){this.dirtyComponentsLength = dirtyComponents.length;},close:function close(){if(this.dirtyComponentsLength !== dirtyComponents.length){ // Additional updates were enqueued by componentDidUpdate handlers or
  // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
  // these new updates so that if A's componentDidUpdate calls setState on
  // B, B will update before the callback A's updater provided when calling
  // setState.
  dirtyComponents.splice(0,this.dirtyComponentsLength);flushBatchedUpdates();}else {dirtyComponents.length = 0;}}};var UPDATE_QUEUEING={initialize:function initialize(){this.callbackQueue.reset();},close:function close(){this.callbackQueue.notifyAll();}};var TRANSACTION_WRAPPERS=[NESTED_UPDATES,UPDATE_QUEUEING];function ReactUpdatesFlushTransaction(){this.reinitializeTransaction();this.dirtyComponentsLength = null;this.callbackQueue = CallbackQueue.getPooled();this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled();}assign(ReactUpdatesFlushTransaction.prototype,Transaction.Mixin,{getTransactionWrappers:function getTransactionWrappers(){return TRANSACTION_WRAPPERS;},destructor:function destructor(){this.dirtyComponentsLength = null;CallbackQueue.release(this.callbackQueue);this.callbackQueue = null;ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);this.reconcileTransaction = null;},perform:function perform(method,scope,a){ // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
  // with this transaction's wrappers around it.
  return Transaction.Mixin.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,method,scope,a);}});PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);function batchedUpdates(callback,a,b,c,d){ensureInjected();batchingStrategy.batchedUpdates(callback,a,b,c,d);} /**
   * Array comparator for ReactComponents by mount ordering.
   *
   * @param {ReactComponent} c1 first component you're comparing
   * @param {ReactComponent} c2 second component you're comparing
   * @return {number} Return value usable by Array.prototype.sort().
   */function mountOrderComparator(c1,c2){return c1._mountOrder - c2._mountOrder;}function runBatchedUpdates(transaction){var len=transaction.dirtyComponentsLength;"production" !== process.env.NODE_ENV?invariant(len === dirtyComponents.length,'Expected flush transaction\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).',len,dirtyComponents.length):invariant(len === dirtyComponents.length); // Since reconciling a component higher in the owner hierarchy usually (not
  // always -- see shouldComponentUpdate()) will reconcile children, reconcile
  // them before their children by sorting the array.
  dirtyComponents.sort(mountOrderComparator);for(var i=0;i < len;i++) { // If a component is unmounted before pending changes apply, it will still
  // be here, but we assume that it has cleared its _pendingCallbacks and
  // that performUpdateIfNecessary is a noop.
  var component=dirtyComponents[i]; // If performUpdateIfNecessary happens to enqueue any new updates, we
  // shouldn't execute the callbacks until the next render happens, so
  // stash the callbacks first
  var callbacks=component._pendingCallbacks;component._pendingCallbacks = null;ReactReconciler.performUpdateIfNecessary(component,transaction.reconcileTransaction);if(callbacks){for(var j=0;j < callbacks.length;j++) {transaction.callbackQueue.enqueue(callbacks[j],component.getPublicInstance());}}}}var flushBatchedUpdates=function flushBatchedUpdates(){ // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
  // array and perform any updates enqueued by mount-ready handlers (i.e.,
  // componentDidUpdate) but we need to check here too in order to catch
  // updates enqueued by setState callbacks and asap calls.
  while(dirtyComponents.length || asapEnqueued) {if(dirtyComponents.length){var transaction=ReactUpdatesFlushTransaction.getPooled();transaction.perform(runBatchedUpdates,null,transaction);ReactUpdatesFlushTransaction.release(transaction);}if(asapEnqueued){asapEnqueued = false;var queue=asapCallbackQueue;asapCallbackQueue = CallbackQueue.getPooled();queue.notifyAll();CallbackQueue.release(queue);}}};flushBatchedUpdates = ReactPerf.measure('ReactUpdates','flushBatchedUpdates',flushBatchedUpdates); /**
   * Mark a component as needing a rerender, adding an optional callback to a
   * list of functions which will be executed once the rerender occurs.
   */function enqueueUpdate(component){ensureInjected(); // Various parts of our code (such as ReactCompositeComponent's
  // _renderValidatedComponent) assume that calls to render aren't nested;
  // verify that that's the case. (This is called by each top-level update
  // function, like setProps, setState, forceUpdate, etc.; creation and
  // destruction of top-level components is guarded in ReactMount.)
  "production" !== process.env.NODE_ENV?warning(ReactCurrentOwner.current == null,'enqueueUpdate(): Render methods should be a pure function of props ' + 'and state; triggering nested component updates from render is not ' + 'allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate.'):null;if(!batchingStrategy.isBatchingUpdates){batchingStrategy.batchedUpdates(enqueueUpdate,component);return;}dirtyComponents.push(component);} /**
   * Enqueue a callback to be run at the end of the current batching cycle. Throws
   * if no updates are currently being performed.
   */function asap(callback,context){"production" !== process.env.NODE_ENV?invariant(batchingStrategy.isBatchingUpdates,'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + 'updates are not being batched.'):invariant(batchingStrategy.isBatchingUpdates);asapCallbackQueue.enqueue(callback,context);asapEnqueued = true;}var ReactUpdatesInjection={injectReconcileTransaction:function injectReconcileTransaction(ReconcileTransaction){"production" !== process.env.NODE_ENV?invariant(ReconcileTransaction,'ReactUpdates: must provide a reconcile transaction class'):invariant(ReconcileTransaction);ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;},injectBatchingStrategy:function injectBatchingStrategy(_batchingStrategy){"production" !== process.env.NODE_ENV?invariant(_batchingStrategy,'ReactUpdates: must provide a batching strategy'):invariant(_batchingStrategy);"production" !== process.env.NODE_ENV?invariant(typeof _batchingStrategy.batchedUpdates === 'function','ReactUpdates: must provide a batchedUpdates() function'):invariant(typeof _batchingStrategy.batchedUpdates === 'function');"production" !== process.env.NODE_ENV?invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean','ReactUpdates: must provide an isBatchingUpdates boolean attribute'):invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean');batchingStrategy = _batchingStrategy;}};var ReactUpdates={ /**
     * React references `ReactReconcileTransaction` using this property in order
     * to allow dependency injection.
     *
     * @internal
     */ReactReconcileTransaction:null,batchedUpdates:batchedUpdates,enqueueUpdate:enqueueUpdate,flushBatchedUpdates:flushBatchedUpdates,injection:ReactUpdatesInjection,asap:asap};module.exports = ReactUpdates;}).call(this,require('_process'));},{"./CallbackQueue":55,"./Object.assign":76,"./PooledClass":77,"./ReactCurrentOwner":89,"./ReactPerf":125,"./ReactReconciler":131,"./Transaction":153,"./invariant":185,"./warning":204,"_process":12}],138:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SVGDOMPropertyConfig
   */ /*jslint bitwise: true*/'use strict';var DOMProperty=require("./DOMProperty");var MUST_USE_ATTRIBUTE=DOMProperty.injection.MUST_USE_ATTRIBUTE;var SVGDOMPropertyConfig={Properties:{clipPath:MUST_USE_ATTRIBUTE,cx:MUST_USE_ATTRIBUTE,cy:MUST_USE_ATTRIBUTE,d:MUST_USE_ATTRIBUTE,dx:MUST_USE_ATTRIBUTE,dy:MUST_USE_ATTRIBUTE,fill:MUST_USE_ATTRIBUTE,fillOpacity:MUST_USE_ATTRIBUTE,fontFamily:MUST_USE_ATTRIBUTE,fontSize:MUST_USE_ATTRIBUTE,fx:MUST_USE_ATTRIBUTE,fy:MUST_USE_ATTRIBUTE,gradientTransform:MUST_USE_ATTRIBUTE,gradientUnits:MUST_USE_ATTRIBUTE,markerEnd:MUST_USE_ATTRIBUTE,markerMid:MUST_USE_ATTRIBUTE,markerStart:MUST_USE_ATTRIBUTE,offset:MUST_USE_ATTRIBUTE,opacity:MUST_USE_ATTRIBUTE,patternContentUnits:MUST_USE_ATTRIBUTE,patternUnits:MUST_USE_ATTRIBUTE,points:MUST_USE_ATTRIBUTE,preserveAspectRatio:MUST_USE_ATTRIBUTE,r:MUST_USE_ATTRIBUTE,rx:MUST_USE_ATTRIBUTE,ry:MUST_USE_ATTRIBUTE,spreadMethod:MUST_USE_ATTRIBUTE,stopColor:MUST_USE_ATTRIBUTE,stopOpacity:MUST_USE_ATTRIBUTE,stroke:MUST_USE_ATTRIBUTE,strokeDasharray:MUST_USE_ATTRIBUTE,strokeLinecap:MUST_USE_ATTRIBUTE,strokeOpacity:MUST_USE_ATTRIBUTE,strokeWidth:MUST_USE_ATTRIBUTE,textAnchor:MUST_USE_ATTRIBUTE,transform:MUST_USE_ATTRIBUTE,version:MUST_USE_ATTRIBUTE,viewBox:MUST_USE_ATTRIBUTE,x1:MUST_USE_ATTRIBUTE,x2:MUST_USE_ATTRIBUTE,x:MUST_USE_ATTRIBUTE,y1:MUST_USE_ATTRIBUTE,y2:MUST_USE_ATTRIBUTE,y:MUST_USE_ATTRIBUTE},DOMAttributeNames:{clipPath:'clip-path',fillOpacity:'fill-opacity',fontFamily:'font-family',fontSize:'font-size',gradientTransform:'gradientTransform',gradientUnits:'gradientUnits',markerEnd:'marker-end',markerMid:'marker-mid',markerStart:'marker-start',patternContentUnits:'patternContentUnits',patternUnits:'patternUnits',preserveAspectRatio:'preserveAspectRatio',spreadMethod:'spreadMethod',stopColor:'stop-color',stopOpacity:'stop-opacity',strokeDasharray:'stroke-dasharray',strokeLinecap:'stroke-linecap',strokeOpacity:'stroke-opacity',strokeWidth:'stroke-width',textAnchor:'text-anchor',viewBox:'viewBox'}};module.exports = SVGDOMPropertyConfig;},{"./DOMProperty":59}],139:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SelectEventPlugin
   */'use strict';var EventConstants=require("./EventConstants");var EventPropagators=require("./EventPropagators");var ReactInputSelection=require("./ReactInputSelection");var SyntheticEvent=require("./SyntheticEvent");var getActiveElement=require("./getActiveElement");var isTextInputElement=require("./isTextInputElement");var keyOf=require("./keyOf");var shallowEqual=require("./shallowEqual");var topLevelTypes=EventConstants.topLevelTypes;var eventTypes={select:{phasedRegistrationNames:{bubbled:keyOf({onSelect:null}),captured:keyOf({onSelectCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topContextMenu,topLevelTypes.topFocus,topLevelTypes.topKeyDown,topLevelTypes.topMouseDown,topLevelTypes.topMouseUp,topLevelTypes.topSelectionChange]}};var activeElement=null;var activeElementID=null;var lastSelection=null;var mouseDown=false; /**
   * Get an object which is a unique representation of the current selection.
   *
   * The return value will not be consistent across nodes or browsers, but
   * two identical selections on the same node will return identical objects.
   *
   * @param {DOMElement} node
   * @param {object}
   */function getSelection(node){if('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)){return {start:node.selectionStart,end:node.selectionEnd};}else if(window.getSelection){var selection=window.getSelection();return {anchorNode:selection.anchorNode,anchorOffset:selection.anchorOffset,focusNode:selection.focusNode,focusOffset:selection.focusOffset};}else if(document.selection){var range=document.selection.createRange();return {parentElement:range.parentElement(),text:range.text,top:range.boundingTop,left:range.boundingLeft};}} /**
   * Poll selection to see whether it's changed.
   *
   * @param {object} nativeEvent
   * @return {?SyntheticEvent}
   */function constructSelectEvent(nativeEvent){ // Ensure we have the right element, and that the user is not dragging a
  // selection (this matches native `select` event behavior). In HTML5, select
  // fires only on input and textarea thus if there's no focused element we
  // won't dispatch.
  if(mouseDown || activeElement == null || activeElement !== getActiveElement()){return null;} // Only fire when selection has actually changed.
  var currentSelection=getSelection(activeElement);if(!lastSelection || !shallowEqual(lastSelection,currentSelection)){lastSelection = currentSelection;var syntheticEvent=SyntheticEvent.getPooled(eventTypes.select,activeElementID,nativeEvent);syntheticEvent.type = 'select';syntheticEvent.target = activeElement;EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);return syntheticEvent;}} /**
   * This plugin creates an `onSelect` event that normalizes select events
   * across form elements.
   *
   * Supported elements are:
   * - input (see `isTextInputElement`)
   * - textarea
   * - contentEditable
   *
   * This differs from native browser implementations in the following ways:
   * - Fires on contentEditable fields as well as inputs.
   * - Fires for collapsed selection.
   * - Fires after user input.
   */var SelectEventPlugin={eventTypes:eventTypes, /**
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @see {EventPluginHub.extractEvents}
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){switch(topLevelType){ // Track the input node that has focus.
  case topLevelTypes.topFocus:if(isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true'){activeElement = topLevelTarget;activeElementID = topLevelTargetID;lastSelection = null;}break;case topLevelTypes.topBlur:activeElement = null;activeElementID = null;lastSelection = null;break; // Don't fire the event while the user is dragging. This matches the
  // semantics of the native select event.
  case topLevelTypes.topMouseDown:mouseDown = true;break;case topLevelTypes.topContextMenu:case topLevelTypes.topMouseUp:mouseDown = false;return constructSelectEvent(nativeEvent); // Chrome and IE fire non-standard event when selection is changed (and
  // sometimes when it hasn't).
  // Firefox doesn't support selectionchange, so check selection status
  // after each key entry. The selection changes after keydown and before
  // keyup, but we check on keydown as well in the case of holding down a
  // key, when multiple keydown events are fired but only one keyup is.
  case topLevelTypes.topSelectionChange:case topLevelTypes.topKeyDown:case topLevelTypes.topKeyUp:return constructSelectEvent(nativeEvent);}}};module.exports = SelectEventPlugin;},{"./EventConstants":64,"./EventPropagators":69,"./ReactInputSelection":115,"./SyntheticEvent":145,"./getActiveElement":171,"./isTextInputElement":188,"./keyOf":191,"./shallowEqual":200}],140:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ServerReactRootIndex
   * @typechecks
   */'use strict'; /**
   * Size of the reactRoot ID space. We generate random numbers for React root
   * IDs and if there's a collision the events and DOM update system will
   * get confused. In the future we need a way to generate GUIDs but for
   * now this will work on a smaller scale.
   */var GLOBAL_MOUNT_POINT_MAX=Math.pow(2,53);var ServerReactRootIndex={createReactRootIndex:function createReactRootIndex(){return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);}};module.exports = ServerReactRootIndex;},{}],141:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SimpleEventPlugin
   */'use strict';var EventConstants=require("./EventConstants");var EventPluginUtils=require("./EventPluginUtils");var EventPropagators=require("./EventPropagators");var SyntheticClipboardEvent=require("./SyntheticClipboardEvent");var SyntheticEvent=require("./SyntheticEvent");var SyntheticFocusEvent=require("./SyntheticFocusEvent");var SyntheticKeyboardEvent=require("./SyntheticKeyboardEvent");var SyntheticMouseEvent=require("./SyntheticMouseEvent");var SyntheticDragEvent=require("./SyntheticDragEvent");var SyntheticTouchEvent=require("./SyntheticTouchEvent");var SyntheticUIEvent=require("./SyntheticUIEvent");var SyntheticWheelEvent=require("./SyntheticWheelEvent");var getEventCharCode=require("./getEventCharCode");var invariant=require("./invariant");var keyOf=require("./keyOf");var warning=require("./warning");var topLevelTypes=EventConstants.topLevelTypes;var eventTypes={blur:{phasedRegistrationNames:{bubbled:keyOf({onBlur:true}),captured:keyOf({onBlurCapture:true})}},click:{phasedRegistrationNames:{bubbled:keyOf({onClick:true}),captured:keyOf({onClickCapture:true})}},contextMenu:{phasedRegistrationNames:{bubbled:keyOf({onContextMenu:true}),captured:keyOf({onContextMenuCapture:true})}},copy:{phasedRegistrationNames:{bubbled:keyOf({onCopy:true}),captured:keyOf({onCopyCapture:true})}},cut:{phasedRegistrationNames:{bubbled:keyOf({onCut:true}),captured:keyOf({onCutCapture:true})}},doubleClick:{phasedRegistrationNames:{bubbled:keyOf({onDoubleClick:true}),captured:keyOf({onDoubleClickCapture:true})}},drag:{phasedRegistrationNames:{bubbled:keyOf({onDrag:true}),captured:keyOf({onDragCapture:true})}},dragEnd:{phasedRegistrationNames:{bubbled:keyOf({onDragEnd:true}),captured:keyOf({onDragEndCapture:true})}},dragEnter:{phasedRegistrationNames:{bubbled:keyOf({onDragEnter:true}),captured:keyOf({onDragEnterCapture:true})}},dragExit:{phasedRegistrationNames:{bubbled:keyOf({onDragExit:true}),captured:keyOf({onDragExitCapture:true})}},dragLeave:{phasedRegistrationNames:{bubbled:keyOf({onDragLeave:true}),captured:keyOf({onDragLeaveCapture:true})}},dragOver:{phasedRegistrationNames:{bubbled:keyOf({onDragOver:true}),captured:keyOf({onDragOverCapture:true})}},dragStart:{phasedRegistrationNames:{bubbled:keyOf({onDragStart:true}),captured:keyOf({onDragStartCapture:true})}},drop:{phasedRegistrationNames:{bubbled:keyOf({onDrop:true}),captured:keyOf({onDropCapture:true})}},focus:{phasedRegistrationNames:{bubbled:keyOf({onFocus:true}),captured:keyOf({onFocusCapture:true})}},input:{phasedRegistrationNames:{bubbled:keyOf({onInput:true}),captured:keyOf({onInputCapture:true})}},keyDown:{phasedRegistrationNames:{bubbled:keyOf({onKeyDown:true}),captured:keyOf({onKeyDownCapture:true})}},keyPress:{phasedRegistrationNames:{bubbled:keyOf({onKeyPress:true}),captured:keyOf({onKeyPressCapture:true})}},keyUp:{phasedRegistrationNames:{bubbled:keyOf({onKeyUp:true}),captured:keyOf({onKeyUpCapture:true})}},load:{phasedRegistrationNames:{bubbled:keyOf({onLoad:true}),captured:keyOf({onLoadCapture:true})}},error:{phasedRegistrationNames:{bubbled:keyOf({onError:true}),captured:keyOf({onErrorCapture:true})}}, // Note: We do not allow listening to mouseOver events. Instead, use the
  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
  mouseDown:{phasedRegistrationNames:{bubbled:keyOf({onMouseDown:true}),captured:keyOf({onMouseDownCapture:true})}},mouseMove:{phasedRegistrationNames:{bubbled:keyOf({onMouseMove:true}),captured:keyOf({onMouseMoveCapture:true})}},mouseOut:{phasedRegistrationNames:{bubbled:keyOf({onMouseOut:true}),captured:keyOf({onMouseOutCapture:true})}},mouseOver:{phasedRegistrationNames:{bubbled:keyOf({onMouseOver:true}),captured:keyOf({onMouseOverCapture:true})}},mouseUp:{phasedRegistrationNames:{bubbled:keyOf({onMouseUp:true}),captured:keyOf({onMouseUpCapture:true})}},paste:{phasedRegistrationNames:{bubbled:keyOf({onPaste:true}),captured:keyOf({onPasteCapture:true})}},reset:{phasedRegistrationNames:{bubbled:keyOf({onReset:true}),captured:keyOf({onResetCapture:true})}},scroll:{phasedRegistrationNames:{bubbled:keyOf({onScroll:true}),captured:keyOf({onScrollCapture:true})}},submit:{phasedRegistrationNames:{bubbled:keyOf({onSubmit:true}),captured:keyOf({onSubmitCapture:true})}},touchCancel:{phasedRegistrationNames:{bubbled:keyOf({onTouchCancel:true}),captured:keyOf({onTouchCancelCapture:true})}},touchEnd:{phasedRegistrationNames:{bubbled:keyOf({onTouchEnd:true}),captured:keyOf({onTouchEndCapture:true})}},touchMove:{phasedRegistrationNames:{bubbled:keyOf({onTouchMove:true}),captured:keyOf({onTouchMoveCapture:true})}},touchStart:{phasedRegistrationNames:{bubbled:keyOf({onTouchStart:true}),captured:keyOf({onTouchStartCapture:true})}},wheel:{phasedRegistrationNames:{bubbled:keyOf({onWheel:true}),captured:keyOf({onWheelCapture:true})}}};var topLevelEventsToDispatchConfig={topBlur:eventTypes.blur,topClick:eventTypes.click,topContextMenu:eventTypes.contextMenu,topCopy:eventTypes.copy,topCut:eventTypes.cut,topDoubleClick:eventTypes.doubleClick,topDrag:eventTypes.drag,topDragEnd:eventTypes.dragEnd,topDragEnter:eventTypes.dragEnter,topDragExit:eventTypes.dragExit,topDragLeave:eventTypes.dragLeave,topDragOver:eventTypes.dragOver,topDragStart:eventTypes.dragStart,topDrop:eventTypes.drop,topError:eventTypes.error,topFocus:eventTypes.focus,topInput:eventTypes.input,topKeyDown:eventTypes.keyDown,topKeyPress:eventTypes.keyPress,topKeyUp:eventTypes.keyUp,topLoad:eventTypes.load,topMouseDown:eventTypes.mouseDown,topMouseMove:eventTypes.mouseMove,topMouseOut:eventTypes.mouseOut,topMouseOver:eventTypes.mouseOver,topMouseUp:eventTypes.mouseUp,topPaste:eventTypes.paste,topReset:eventTypes.reset,topScroll:eventTypes.scroll,topSubmit:eventTypes.submit,topTouchCancel:eventTypes.touchCancel,topTouchEnd:eventTypes.touchEnd,topTouchMove:eventTypes.touchMove,topTouchStart:eventTypes.touchStart,topWheel:eventTypes.wheel};for(var type in topLevelEventsToDispatchConfig) {topLevelEventsToDispatchConfig[type].dependencies = [type];}var SimpleEventPlugin={eventTypes:eventTypes, /**
     * Same as the default implementation, except cancels the event when return
     * value is false. This behavior will be disabled in a future release.
     *
     * @param {object} Event to be dispatched.
     * @param {function} Application-level callback.
     * @param {string} domID DOM ID to pass to the callback.
     */executeDispatch:function executeDispatch(event,listener,domID){var returnValue=EventPluginUtils.executeDispatch(event,listener,domID);"production" !== process.env.NODE_ENV?warning(typeof returnValue !== 'boolean','Returning `false` from an event handler is deprecated and will be ' + 'ignored in a future release. Instead, manually call ' + 'e.stopPropagation() or e.preventDefault(), as appropriate.'):null;if(returnValue === false){event.stopPropagation();event.preventDefault();}}, /**
     * @param {string} topLevelType Record from `EventConstants`.
     * @param {DOMEventTarget} topLevelTarget The listening component root node.
     * @param {string} topLevelTargetID ID of `topLevelTarget`.
     * @param {object} nativeEvent Native browser event.
     * @return {*} An accumulation of synthetic events.
     * @see {EventPluginHub.extractEvents}
     */extractEvents:function extractEvents(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var dispatchConfig=topLevelEventsToDispatchConfig[topLevelType];if(!dispatchConfig){return null;}var EventConstructor;switch(topLevelType){case topLevelTypes.topInput:case topLevelTypes.topLoad:case topLevelTypes.topError:case topLevelTypes.topReset:case topLevelTypes.topSubmit: // HTML Events
  // @see http://www.w3.org/TR/html5/index.html#events-0
  EventConstructor = SyntheticEvent;break;case topLevelTypes.topKeyPress: // FireFox creates a keypress event for function keys too. This removes
  // the unwanted keypress events. Enter is however both printable and
  // non-printable. One would expect Tab to be as well (but it isn't).
  if(getEventCharCode(nativeEvent) === 0){return null;} /* falls through */case topLevelTypes.topKeyDown:case topLevelTypes.topKeyUp:EventConstructor = SyntheticKeyboardEvent;break;case topLevelTypes.topBlur:case topLevelTypes.topFocus:EventConstructor = SyntheticFocusEvent;break;case topLevelTypes.topClick: // Firefox creates a click event on right mouse clicks. This removes the
  // unwanted click events.
  if(nativeEvent.button === 2){return null;} /* falls through */case topLevelTypes.topContextMenu:case topLevelTypes.topDoubleClick:case topLevelTypes.topMouseDown:case topLevelTypes.topMouseMove:case topLevelTypes.topMouseOut:case topLevelTypes.topMouseOver:case topLevelTypes.topMouseUp:EventConstructor = SyntheticMouseEvent;break;case topLevelTypes.topDrag:case topLevelTypes.topDragEnd:case topLevelTypes.topDragEnter:case topLevelTypes.topDragExit:case topLevelTypes.topDragLeave:case topLevelTypes.topDragOver:case topLevelTypes.topDragStart:case topLevelTypes.topDrop:EventConstructor = SyntheticDragEvent;break;case topLevelTypes.topTouchCancel:case topLevelTypes.topTouchEnd:case topLevelTypes.topTouchMove:case topLevelTypes.topTouchStart:EventConstructor = SyntheticTouchEvent;break;case topLevelTypes.topScroll:EventConstructor = SyntheticUIEvent;break;case topLevelTypes.topWheel:EventConstructor = SyntheticWheelEvent;break;case topLevelTypes.topCopy:case topLevelTypes.topCut:case topLevelTypes.topPaste:EventConstructor = SyntheticClipboardEvent;break;}"production" !== process.env.NODE_ENV?invariant(EventConstructor,'SimpleEventPlugin: Unhandled event type, `%s`.',topLevelType):invariant(EventConstructor);var event=EventConstructor.getPooled(dispatchConfig,topLevelTargetID,nativeEvent);EventPropagators.accumulateTwoPhaseDispatches(event);return event;}};module.exports = SimpleEventPlugin;}).call(this,require('_process'));},{"./EventConstants":64,"./EventPluginUtils":68,"./EventPropagators":69,"./SyntheticClipboardEvent":142,"./SyntheticDragEvent":144,"./SyntheticEvent":145,"./SyntheticFocusEvent":146,"./SyntheticKeyboardEvent":148,"./SyntheticMouseEvent":149,"./SyntheticTouchEvent":150,"./SyntheticUIEvent":151,"./SyntheticWheelEvent":152,"./getEventCharCode":172,"./invariant":185,"./keyOf":191,"./warning":204,"_process":12}],142:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticClipboardEvent
   * @typechecks static-only
   */'use strict';var SyntheticEvent=require("./SyntheticEvent"); /**
   * @interface Event
   * @see http://www.w3.org/TR/clipboard-apis/
   */var ClipboardEventInterface={clipboardData:function clipboardData(event){return 'clipboardData' in event?event.clipboardData:window.clipboardData;}}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticClipboardEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticEvent.augmentClass(SyntheticClipboardEvent,ClipboardEventInterface);module.exports = SyntheticClipboardEvent;},{"./SyntheticEvent":145}],143:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticCompositionEvent
   * @typechecks static-only
   */'use strict';var SyntheticEvent=require("./SyntheticEvent"); /**
   * @interface Event
   * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
   */var CompositionEventInterface={data:null}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticCompositionEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticEvent.augmentClass(SyntheticCompositionEvent,CompositionEventInterface);module.exports = SyntheticCompositionEvent;},{"./SyntheticEvent":145}],144:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticDragEvent
   * @typechecks static-only
   */'use strict';var SyntheticMouseEvent=require("./SyntheticMouseEvent"); /**
   * @interface DragEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var DragEventInterface={dataTransfer:null}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticDragEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticMouseEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticMouseEvent.augmentClass(SyntheticDragEvent,DragEventInterface);module.exports = SyntheticDragEvent;},{"./SyntheticMouseEvent":149}],145:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticEvent
   * @typechecks static-only
   */'use strict';var PooledClass=require("./PooledClass");var assign=require("./Object.assign");var emptyFunction=require("./emptyFunction");var getEventTarget=require("./getEventTarget"); /**
   * @interface Event
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var EventInterface={type:null,target:getEventTarget, // currentTarget is set when dispatching; no use in copying it here
  currentTarget:emptyFunction.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function timeStamp(event){return event.timeStamp || Date.now();},defaultPrevented:null,isTrusted:null}; /**
   * Synthetic events are dispatched by event plugins, typically in response to a
   * top-level event delegation handler.
   *
   * These systems should generally use pooling to reduce the frequency of garbage
   * collection. The system should check `isPersistent` to determine whether the
   * event should be released into the pool after being dispatched. Users that
   * need a persisted event should invoke `persist`.
   *
   * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
   * normalizing browser quirks. Subclasses do not necessarily have to implement a
   * DOM interface; custom application-specific events can also subclass this.
   *
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   */function SyntheticEvent(dispatchConfig,dispatchMarker,nativeEvent){this.dispatchConfig = dispatchConfig;this.dispatchMarker = dispatchMarker;this.nativeEvent = nativeEvent;var Interface=this.constructor.Interface;for(var propName in Interface) {if(!Interface.hasOwnProperty(propName)){continue;}var normalize=Interface[propName];if(normalize){this[propName] = normalize(nativeEvent);}else {this[propName] = nativeEvent[propName];}}var defaultPrevented=nativeEvent.defaultPrevented != null?nativeEvent.defaultPrevented:nativeEvent.returnValue === false;if(defaultPrevented){this.isDefaultPrevented = emptyFunction.thatReturnsTrue;}else {this.isDefaultPrevented = emptyFunction.thatReturnsFalse;}this.isPropagationStopped = emptyFunction.thatReturnsFalse;}assign(SyntheticEvent.prototype,{preventDefault:function preventDefault(){this.defaultPrevented = true;var event=this.nativeEvent;if(event.preventDefault){event.preventDefault();}else {event.returnValue = false;}this.isDefaultPrevented = emptyFunction.thatReturnsTrue;},stopPropagation:function stopPropagation(){var event=this.nativeEvent;if(event.stopPropagation){event.stopPropagation();}else {event.cancelBubble = true;}this.isPropagationStopped = emptyFunction.thatReturnsTrue;}, /**
     * We release all dispatched `SyntheticEvent`s after each event loop, adding
     * them back into the pool. This allows a way to hold onto a reference that
     * won't be added back into the pool.
     */persist:function persist(){this.isPersistent = emptyFunction.thatReturnsTrue;}, /**
     * Checks if this event should be released back into the pool.
     *
     * @return {boolean} True if this should not be released, false otherwise.
     */isPersistent:emptyFunction.thatReturnsFalse, /**
     * `PooledClass` looks for `destructor` on each instance it releases.
     */destructor:function destructor(){var Interface=this.constructor.Interface;for(var propName in Interface) {this[propName] = null;}this.dispatchConfig = null;this.dispatchMarker = null;this.nativeEvent = null;}});SyntheticEvent.Interface = EventInterface; /**
   * Helper to reduce boilerplate when creating subclasses.
   *
   * @param {function} Class
   * @param {?object} Interface
   */SyntheticEvent.augmentClass = function(Class,Interface){var Super=this;var prototype=Object.create(Super.prototype);assign(prototype,Class.prototype);Class.prototype = prototype;Class.prototype.constructor = Class;Class.Interface = assign({},Super.Interface,Interface);Class.augmentClass = Super.augmentClass;PooledClass.addPoolingTo(Class,PooledClass.threeArgumentPooler);};PooledClass.addPoolingTo(SyntheticEvent,PooledClass.threeArgumentPooler);module.exports = SyntheticEvent;},{"./Object.assign":76,"./PooledClass":77,"./emptyFunction":164,"./getEventTarget":175}],146:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticFocusEvent
   * @typechecks static-only
   */'use strict';var SyntheticUIEvent=require("./SyntheticUIEvent"); /**
   * @interface FocusEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var FocusEventInterface={relatedTarget:null}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticFocusEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticUIEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticUIEvent.augmentClass(SyntheticFocusEvent,FocusEventInterface);module.exports = SyntheticFocusEvent;},{"./SyntheticUIEvent":151}],147:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticInputEvent
   * @typechecks static-only
   */'use strict';var SyntheticEvent=require("./SyntheticEvent"); /**
   * @interface Event
   * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
   *      /#events-inputevents
   */var InputEventInterface={data:null}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticInputEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticEvent.augmentClass(SyntheticInputEvent,InputEventInterface);module.exports = SyntheticInputEvent;},{"./SyntheticEvent":145}],148:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticKeyboardEvent
   * @typechecks static-only
   */'use strict';var SyntheticUIEvent=require("./SyntheticUIEvent");var getEventCharCode=require("./getEventCharCode");var getEventKey=require("./getEventKey");var getEventModifierState=require("./getEventModifierState"); /**
   * @interface KeyboardEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var KeyboardEventInterface={key:getEventKey,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:getEventModifierState, // Legacy Interface
  charCode:function charCode(event){ // `charCode` is the result of a KeyPress event and represents the value of
  // the actual printable character.
  // KeyPress is deprecated, but its replacement is not yet final and not
  // implemented in any major browser. Only KeyPress has charCode.
  if(event.type === 'keypress'){return getEventCharCode(event);}return 0;},keyCode:function keyCode(event){ // `keyCode` is the result of a KeyDown/Up event and represents the value of
  // physical keyboard key.
  // The actual meaning of the value depends on the users' keyboard layout
  // which cannot be detected. Assuming that it is a US keyboard layout
  // provides a surprisingly accurate mapping for US and European users.
  // Due to this, it is left to the user to implement at this time.
  if(event.type === 'keydown' || event.type === 'keyup'){return event.keyCode;}return 0;},which:function which(event){ // `which` is an alias for either `keyCode` or `charCode` depending on the
  // type of the event.
  if(event.type === 'keypress'){return getEventCharCode(event);}if(event.type === 'keydown' || event.type === 'keyup'){return event.keyCode;}return 0;}}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticKeyboardEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticUIEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent,KeyboardEventInterface);module.exports = SyntheticKeyboardEvent;},{"./SyntheticUIEvent":151,"./getEventCharCode":172,"./getEventKey":173,"./getEventModifierState":174}],149:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticMouseEvent
   * @typechecks static-only
   */'use strict';var SyntheticUIEvent=require("./SyntheticUIEvent");var ViewportMetrics=require("./ViewportMetrics");var getEventModifierState=require("./getEventModifierState"); /**
   * @interface MouseEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var MouseEventInterface={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:getEventModifierState,button:function button(event){ // Webkit, Firefox, IE9+
  // which:  1 2 3
  // button: 0 1 2 (standard)
  var button=event.button;if('which' in event){return button;} // IE<9
  // which:  undefined
  // button: 0 0 0
  // button: 1 4 2 (onmouseup)
  return button === 2?2:button === 4?1:0;},buttons:null,relatedTarget:function relatedTarget(event){return event.relatedTarget || (event.fromElement === event.srcElement?event.toElement:event.fromElement);}, // "Proprietary" Interface.
  pageX:function pageX(event){return 'pageX' in event?event.pageX:event.clientX + ViewportMetrics.currentScrollLeft;},pageY:function pageY(event){return 'pageY' in event?event.pageY:event.clientY + ViewportMetrics.currentScrollTop;}}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticMouseEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticUIEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticUIEvent.augmentClass(SyntheticMouseEvent,MouseEventInterface);module.exports = SyntheticMouseEvent;},{"./SyntheticUIEvent":151,"./ViewportMetrics":154,"./getEventModifierState":174}],150:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticTouchEvent
   * @typechecks static-only
   */'use strict';var SyntheticUIEvent=require("./SyntheticUIEvent");var getEventModifierState=require("./getEventModifierState"); /**
   * @interface TouchEvent
   * @see http://www.w3.org/TR/touch-events/
   */var TouchEventInterface={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:getEventModifierState}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticUIEvent}
   */function SyntheticTouchEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticUIEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticUIEvent.augmentClass(SyntheticTouchEvent,TouchEventInterface);module.exports = SyntheticTouchEvent;},{"./SyntheticUIEvent":151,"./getEventModifierState":174}],151:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticUIEvent
   * @typechecks static-only
   */'use strict';var SyntheticEvent=require("./SyntheticEvent");var getEventTarget=require("./getEventTarget"); /**
   * @interface UIEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var UIEventInterface={view:function view(event){if(event.view){return event.view;}var target=getEventTarget(event);if(target != null && target.window === target){ // target is a window object
  return target;}var doc=target.ownerDocument; // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
  if(doc){return doc.defaultView || doc.parentWindow;}else {return window;}},detail:function detail(event){return event.detail || 0;}}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticEvent}
   */function SyntheticUIEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticEvent.augmentClass(SyntheticUIEvent,UIEventInterface);module.exports = SyntheticUIEvent;},{"./SyntheticEvent":145,"./getEventTarget":175}],152:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule SyntheticWheelEvent
   * @typechecks static-only
   */'use strict';var SyntheticMouseEvent=require("./SyntheticMouseEvent"); /**
   * @interface WheelEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */var WheelEventInterface={deltaX:function deltaX(event){return 'deltaX' in event?event.deltaX: // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
  'wheelDeltaX' in event?-event.wheelDeltaX:0;},deltaY:function deltaY(event){return 'deltaY' in event?event.deltaY: // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
  'wheelDeltaY' in event?-event.wheelDeltaY: // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
  'wheelDelta' in event?-event.wheelDelta:0;},deltaZ:null, // Browsers without "deltaMode" is reporting in raw wheel delta where one
  // notch on the scroll is always +/- 120, roughly equivalent to pixels.
  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
  deltaMode:null}; /**
   * @param {object} dispatchConfig Configuration used to dispatch this event.
   * @param {string} dispatchMarker Marker identifying the event target.
   * @param {object} nativeEvent Native browser event.
   * @extends {SyntheticMouseEvent}
   */function SyntheticWheelEvent(dispatchConfig,dispatchMarker,nativeEvent){SyntheticMouseEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent);}SyntheticMouseEvent.augmentClass(SyntheticWheelEvent,WheelEventInterface);module.exports = SyntheticWheelEvent;},{"./SyntheticMouseEvent":149}],153:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule Transaction
   */'use strict';var invariant=require("./invariant"); /**
   * `Transaction` creates a black box that is able to wrap any method such that
   * certain invariants are maintained before and after the method is invoked
   * (Even if an exception is thrown while invoking the wrapped method). Whoever
   * instantiates a transaction can provide enforcers of the invariants at
   * creation time. The `Transaction` class itself will supply one additional
   * automatic invariant for you - the invariant that any transaction instance
   * should not be run while it is already being run. You would typically create a
   * single instance of a `Transaction` for reuse multiple times, that potentially
   * is used to wrap several different methods. Wrappers are extremely simple -
   * they only require implementing two methods.
   *
   * <pre>
   *                       wrappers (injected at creation time)
   *                                      +        +
   *                                      |        |
   *                    +-----------------|--------|--------------+
   *                    |                 v        |              |
   *                    |      +---------------+   |              |
   *                    |   +--|    wrapper1   |---|----+         |
   *                    |   |  +---------------+   v    |         |
   *                    |   |          +-------------+  |         |
   *                    |   |     +----|   wrapper2  |--------+   |
   *                    |   |     |    +-------------+  |     |   |
   *                    |   |     |                     |     |   |
   *                    |   v     v                     v     v   | wrapper
   *                    | +---+ +---+   +---------+   +---+ +---+ | invariants
   * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained
   * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
   *                    | |   | |   |   |         |   |   | |   | |
   *                    | |   | |   |   |         |   |   | |   | |
   *                    | |   | |   |   |         |   |   | |   | |
   *                    | +---+ +---+   +---------+   +---+ +---+ |
   *                    |  initialize                    close    |
   *                    +-----------------------------------------+
   * </pre>
   *
   * Use cases:
   * - Preserving the input selection ranges before/after reconciliation.
   *   Restoring selection even in the event of an unexpected error.
   * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
   *   while guaranteeing that afterwards, the event system is reactivated.
   * - Flushing a queue of collected DOM mutations to the main UI thread after a
   *   reconciliation takes place in a worker thread.
   * - Invoking any collected `componentDidUpdate` callbacks after rendering new
   *   content.
   * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
   *   to preserve the `scrollTop` (an automatic scroll aware DOM).
   * - (Future use case): Layout calculations before and after DOM updates.
   *
   * Transactional plugin API:
   * - A module that has an `initialize` method that returns any precomputation.
   * - and a `close` method that accepts the precomputation. `close` is invoked
   *   when the wrapped process is completed, or has failed.
   *
   * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
   * that implement `initialize` and `close`.
   * @return {Transaction} Single transaction for reuse in thread.
   *
   * @class Transaction
   */var Mixin={ /**
     * Sets up this instance so that it is prepared for collecting metrics. Does
     * so such that this setup method may be used on an instance that is already
     * initialized, in a way that does not consume additional memory upon reuse.
     * That can be useful if you decide to make your subclass of this mixin a
     * "PooledClass".
     */reinitializeTransaction:function reinitializeTransaction(){this.transactionWrappers = this.getTransactionWrappers();if(!this.wrapperInitData){this.wrapperInitData = [];}else {this.wrapperInitData.length = 0;}this._isInTransaction = false;},_isInTransaction:false, /**
     * @abstract
     * @return {Array<TransactionWrapper>} Array of transaction wrappers.
     */getTransactionWrappers:null,isInTransaction:function isInTransaction(){return !!this._isInTransaction;}, /**
     * Executes the function within a safety window. Use this for the top level
     * methods that result in large amounts of computation/mutations that would
     * need to be safety checked.
     *
     * @param {function} method Member of scope to call.
     * @param {Object} scope Scope to invoke from.
     * @param {Object?=} args... Arguments to pass to the method (optional).
     *                           Helps prevent need to bind in many cases.
     * @return Return value from `method`.
     */perform:function perform(method,scope,a,b,c,d,e,f){"production" !== process.env.NODE_ENV?invariant(!this.isInTransaction(),'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.'):invariant(!this.isInTransaction());var errorThrown;var ret;try{this._isInTransaction = true; // Catching errors makes debugging more difficult, so we start with
  // errorThrown set to true before setting it to false after calling
  // close -- if it's still set to true in the finally block, it means
  // one of these calls threw.
  errorThrown = true;this.initializeAll(0);ret = method.call(scope,a,b,c,d,e,f);errorThrown = false;}finally {try{if(errorThrown){ // If `method` throws, prefer to show that stack trace over any thrown
  // by invoking `closeAll`.
  try{this.closeAll(0);}catch(err) {}}else { // Since `method` didn't throw, we don't want to silence the exception
  // here.
  this.closeAll(0);}}finally {this._isInTransaction = false;}}return ret;},initializeAll:function initializeAll(startIndex){var transactionWrappers=this.transactionWrappers;for(var i=startIndex;i < transactionWrappers.length;i++) {var wrapper=transactionWrappers[i];try{ // Catching errors makes debugging more difficult, so we start with the
  // OBSERVED_ERROR state before overwriting it with the real return value
  // of initialize -- if it's still set to OBSERVED_ERROR in the finally
  // block, it means wrapper.initialize threw.
  this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;this.wrapperInitData[i] = wrapper.initialize?wrapper.initialize.call(this):null;}finally {if(this.wrapperInitData[i] === Transaction.OBSERVED_ERROR){ // The initializer for wrapper i threw an error; initialize the
  // remaining wrappers but silence any exceptions from them to ensure
  // that the first error is the one to bubble up.
  try{this.initializeAll(i + 1);}catch(err) {}}}}}, /**
     * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
     * them the respective return values of `this.transactionWrappers.init[i]`
     * (`close`rs that correspond to initializers that failed will not be
     * invoked).
     */closeAll:function closeAll(startIndex){"production" !== process.env.NODE_ENV?invariant(this.isInTransaction(),'Transaction.closeAll(): Cannot close transaction when none are open.'):invariant(this.isInTransaction());var transactionWrappers=this.transactionWrappers;for(var i=startIndex;i < transactionWrappers.length;i++) {var wrapper=transactionWrappers[i];var initData=this.wrapperInitData[i];var errorThrown;try{ // Catching errors makes debugging more difficult, so we start with
  // errorThrown set to true before setting it to false after calling
  // close -- if it's still set to true in the finally block, it means
  // wrapper.close threw.
  errorThrown = true;if(initData !== Transaction.OBSERVED_ERROR && wrapper.close){wrapper.close.call(this,initData);}errorThrown = false;}finally {if(errorThrown){ // The closer for wrapper i threw an error; close the remaining
  // wrappers but silence any exceptions from them to ensure that the
  // first error is the one to bubble up.
  try{this.closeAll(i + 1);}catch(e) {}}}}this.wrapperInitData.length = 0;}};var Transaction={Mixin:Mixin, /**
     * Token to look for to determine if an error occured.
     */OBSERVED_ERROR:{}};module.exports = Transaction;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],154:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ViewportMetrics
   */'use strict';var ViewportMetrics={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function refreshScrollValues(scrollPosition){ViewportMetrics.currentScrollLeft = scrollPosition.x;ViewportMetrics.currentScrollTop = scrollPosition.y;}};module.exports = ViewportMetrics;},{}],155:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule accumulateInto
   */'use strict';var invariant=require("./invariant"); /**
   *
   * Accumulates items that must not be null or undefined into the first one. This
   * is used to conserve memory by avoiding array allocations, and thus sacrifices
   * API cleanness. Since `current` can be null before being passed in and not
   * null after this function, make sure to assign it back to `current`:
   *
   * `a = accumulateInto(a, b);`
   *
   * This API should be sparingly used. Try `accumulate` for something cleaner.
   *
   * @return {*|array<*>} An accumulation of items.
   */function accumulateInto(current,next){"production" !== process.env.NODE_ENV?invariant(next != null,'accumulateInto(...): Accumulated items must not be null or undefined.'):invariant(next != null);if(current == null){return next;} // Both are not empty. Warning: Never call x.concat(y) when you are not
  // certain that x is an Array (x could be a string with concat method).
  var currentIsArray=Array.isArray(current);var nextIsArray=Array.isArray(next);if(currentIsArray && nextIsArray){current.push.apply(current,next);return current;}if(currentIsArray){current.push(next);return current;}if(nextIsArray){ // A bit too dangerous to mutate `next`.
  return [current].concat(next);}return [current,next];}module.exports = accumulateInto;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],156:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule adler32
   */ /* jslint bitwise:true */'use strict';var MOD=65521; // This is a clean-room implementation of adler32 designed for detecting
  // if markup is not what we expect it to be. It does not need to be
  // cryptographically strong, only reasonably good at detecting if markup
  // generated on the server is different than that on the client.
  function adler32(data){var a=1;var b=0;for(var i=0;i < data.length;i++) {a = (a + data.charCodeAt(i)) % MOD;b = (b + a) % MOD;}return a | b << 16;}module.exports = adler32;},{}],157:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule camelize
   * @typechecks
   */var _hyphenPattern=/-(.)/g; /**
   * Camelcases a hyphenated string, for example:
   *
   *   > camelize('background-color')
   *   < "backgroundColor"
   *
   * @param {string} string
   * @return {string}
   */function camelize(string){return string.replace(_hyphenPattern,function(_,character){return character.toUpperCase();});}module.exports = camelize;},{}],158:[function(require,module,exports){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule camelizeStyleName
   * @typechecks
   */"use strict";var camelize=require("./camelize");var msPattern=/^-ms-/; /**
   * Camelcases a hyphenated CSS property name, for example:
   *
   *   > camelizeStyleName('background-color')
   *   < "backgroundColor"
   *   > camelizeStyleName('-moz-transition')
   *   < "MozTransition"
   *   > camelizeStyleName('-ms-transition')
   *   < "msTransition"
   *
   * As Andi Smith suggests
   * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
   * is converted to lowercase `ms`.
   *
   * @param {string} string
   * @return {string}
   */function camelizeStyleName(string){return camelize(string.replace(msPattern,'ms-'));}module.exports = camelizeStyleName;},{"./camelize":157}],159:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule containsNode
   * @typechecks
   */var isTextNode=require("./isTextNode"); /*jslint bitwise:true */ /**
   * Checks if a given DOM node contains or is another DOM node.
   *
   * @param {?DOMNode} outerNode Outer DOM node.
   * @param {?DOMNode} innerNode Inner DOM node.
   * @return {boolean} True if `outerNode` contains or is `innerNode`.
   */function containsNode(_x6,_x7){var _again2=true;_function2: while(_again2) {var outerNode=_x6,innerNode=_x7;_again2 = false;if(!outerNode || !innerNode){return false;}else if(outerNode === innerNode){return true;}else if(isTextNode(outerNode)){return false;}else if(isTextNode(innerNode)){_x6 = outerNode;_x7 = innerNode.parentNode;_again2 = true;continue _function2;}else if(outerNode.contains){return outerNode.contains(innerNode);}else if(outerNode.compareDocumentPosition){return !!(outerNode.compareDocumentPosition(innerNode) & 16);}else {return false;}}}module.exports = containsNode;},{"./isTextNode":189}],160:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule createArrayFromMixed
   * @typechecks
   */var toArray=require("./toArray"); /**
   * Perform a heuristic test to determine if an object is "array-like".
   *
   *   A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
   *   Joshu replied: "Mu."
   *
   * This function determines if its argument has "array nature": it returns
   * true if the argument is an actual array, an `arguments' object, or an
   * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
   *
   * It will return false for other array-like objects like Filelist.
   *
   * @param {*} obj
   * @return {boolean}
   */function hasArrayNature(obj){return  (// not null/false
  !!obj && ( // arrays are objects, NodeLists are functions in Safari
  typeof obj == 'object' || typeof obj == 'function') &&  // quacks like an array
  'length' in obj &&  // not window
  !('setInterval' in obj) &&  // no DOM node should be considered an array-like
  // a 'select' element has 'length' and 'item' properties on IE8
  typeof obj.nodeType != 'number' && ( // a real array
  // HTMLCollection/NodeList
  Array.isArray(obj) ||  // arguments
  'callee' in obj || 'item' in obj));} /**
   * Ensure that the argument is an array by wrapping it in an array if it is not.
   * Creates a copy of the argument if it is already an array.
   *
   * This is mostly useful idiomatically:
   *
   *   var createArrayFromMixed = require('createArrayFromMixed');
   *
   *   function takesOneOrMoreThings(things) {
   *     things = createArrayFromMixed(things);
   *     ...
   *   }
   *
   * This allows you to treat `things' as an array, but accept scalars in the API.
   *
   * If you need to convert an array-like object, like `arguments`, into an array
   * use toArray instead.
   *
   * @param {*} obj
   * @return {array}
   */function createArrayFromMixed(obj){if(!hasArrayNature(obj)){return [obj];}else if(Array.isArray(obj)){return obj.slice();}else {return toArray(obj);}}module.exports = createArrayFromMixed;},{"./toArray":202}],161:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule createFullPageComponent
   * @typechecks
   */'use strict'; // Defeat circular references by requiring this directly.
  var ReactClass=require("./ReactClass");var ReactElement=require("./ReactElement");var invariant=require("./invariant"); /**
   * Create a component that will throw an exception when unmounted.
   *
   * Components like <html> <head> and <body> can't be removed or added
   * easily in a cross-browser way, however it's valuable to be able to
   * take advantage of React's reconciliation for styling and <title>
   * management. So we just document it and throw in dangerous cases.
   *
   * @param {string} tag The tag to wrap
   * @return {function} convenience constructor of new component
   */function createFullPageComponent(tag){var elementFactory=ReactElement.createFactory(tag);var FullPageComponent=ReactClass.createClass({tagName:tag.toUpperCase(),displayName:'ReactFullPageComponent' + tag,componentWillUnmount:function componentWillUnmount(){"production" !== process.env.NODE_ENV?invariant(false,'%s tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, <head>, ' + 'and <body>) reliably and efficiently. To fix this, have a single ' + 'top-level component that never unmounts render these elements.',this.constructor.displayName):invariant(false);},render:function render(){return elementFactory(this.props);}});return FullPageComponent;}module.exports = createFullPageComponent;}).call(this,require('_process'));},{"./ReactClass":83,"./ReactElement":107,"./invariant":185,"_process":12}],162:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule createNodesFromMarkup
   * @typechecks
   */ /*jslint evil: true, sub: true */var ExecutionEnvironment=require("./ExecutionEnvironment");var createArrayFromMixed=require("./createArrayFromMixed");var getMarkupWrap=require("./getMarkupWrap");var invariant=require("./invariant"); /**
   * Dummy container used to render all markup.
   */var dummyNode=ExecutionEnvironment.canUseDOM?document.createElement('div'):null; /**
   * Pattern used by `getNodeName`.
   */var nodeNamePattern=/^\s*<(\w+)/; /**
   * Extracts the `nodeName` of the first element in a string of markup.
   *
   * @param {string} markup String of markup.
   * @return {?string} Node name of the supplied markup.
   */function getNodeName(markup){var nodeNameMatch=markup.match(nodeNamePattern);return nodeNameMatch && nodeNameMatch[1].toLowerCase();} /**
   * Creates an array containing the nodes rendered from the supplied markup. The
   * optionally supplied `handleScript` function will be invoked once for each
   * <script> element that is rendered. If no `handleScript` function is supplied,
   * an exception is thrown if any <script> elements are rendered.
   *
   * @param {string} markup A string of valid HTML markup.
   * @param {?function} handleScript Invoked once for each rendered <script>.
   * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
   */function createNodesFromMarkup(markup,handleScript){var node=dummyNode;"production" !== process.env.NODE_ENV?invariant(!!dummyNode,'createNodesFromMarkup dummy not initialized'):invariant(!!dummyNode);var nodeName=getNodeName(markup);var wrap=nodeName && getMarkupWrap(nodeName);if(wrap){node.innerHTML = wrap[1] + markup + wrap[2];var wrapDepth=wrap[0];while(wrapDepth--) {node = node.lastChild;}}else {node.innerHTML = markup;}var scripts=node.getElementsByTagName('script');if(scripts.length){"production" !== process.env.NODE_ENV?invariant(handleScript,'createNodesFromMarkup(...): Unexpected <script> element rendered.'):invariant(handleScript);createArrayFromMixed(scripts).forEach(handleScript);}var nodes=createArrayFromMixed(node.childNodes);while(node.lastChild) {node.removeChild(node.lastChild);}return nodes;}module.exports = createNodesFromMarkup;}).call(this,require('_process'));},{"./ExecutionEnvironment":70,"./createArrayFromMixed":160,"./getMarkupWrap":177,"./invariant":185,"_process":12}],163:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule dangerousStyleValue
   * @typechecks static-only
   */'use strict';var CSSProperty=require("./CSSProperty");var isUnitlessNumber=CSSProperty.isUnitlessNumber; /**
   * Convert a value into the proper css writable value. The style name `name`
   * should be logical (no hyphens), as specified
   * in `CSSProperty.isUnitlessNumber`.
   *
   * @param {string} name CSS property name such as `topMargin`.
   * @param {*} value CSS property value such as `10px`.
   * @return {string} Normalized style value with dimensions applied.
   */function dangerousStyleValue(name,value){ // Note that we've removed escapeTextForBrowser() calls here since the
  // whole string will be escaped when the attribute is injected into
  // the markup. If you provide unsafe user data here they can inject
  // arbitrary CSS which may be problematic (I couldn't repro this):
  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
  // This is not an XSS hole but instead a potential CSS injection issue
  // which has lead to a greater discussion about how we're going to
  // trust URLs moving forward. See #2115901
  var isEmpty=value == null || typeof value === 'boolean' || value === '';if(isEmpty){return '';}var isNonNumeric=isNaN(value);if(isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]){return '' + value; // cast to string
  }if(typeof value === 'string'){value = value.trim();}return value + 'px';}module.exports = dangerousStyleValue;},{"./CSSProperty":53}],164:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule emptyFunction
   */function makeEmptyFunction(arg){return function(){return arg;};} /**
   * This function accepts and discards inputs; it has no side effects. This is
   * primarily useful idiomatically for overridable function endpoints which
   * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
   */function emptyFunction(){}emptyFunction.thatReturns = makeEmptyFunction;emptyFunction.thatReturnsFalse = makeEmptyFunction(false);emptyFunction.thatReturnsTrue = makeEmptyFunction(true);emptyFunction.thatReturnsNull = makeEmptyFunction(null);emptyFunction.thatReturnsThis = function(){return this;};emptyFunction.thatReturnsArgument = function(arg){return arg;};module.exports = emptyFunction;},{}],165:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule emptyObject
   */"use strict";var emptyObject={};if("production" !== process.env.NODE_ENV){Object.freeze(emptyObject);}module.exports = emptyObject;}).call(this,require('_process'));},{"_process":12}],166:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule escapeTextContentForBrowser
   */'use strict';var ESCAPE_LOOKUP={'&':'&amp;','>':'&gt;','<':'&lt;','"':'&quot;','\'':'&#x27;'};var ESCAPE_REGEX=/[&><"']/g;function escaper(match){return ESCAPE_LOOKUP[match];} /**
   * Escapes text to prevent scripting attacks.
   *
   * @param {*} text Text value to escape.
   * @return {string} An escaped string.
   */function escapeTextContentForBrowser(text){return ('' + text).replace(ESCAPE_REGEX,escaper);}module.exports = escapeTextContentForBrowser;},{}],167:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule findDOMNode
   * @typechecks static-only
   */'use strict';var ReactCurrentOwner=require("./ReactCurrentOwner");var ReactInstanceMap=require("./ReactInstanceMap");var ReactMount=require("./ReactMount");var invariant=require("./invariant");var isNode=require("./isNode");var warning=require("./warning"); /**
   * Returns the DOM node rendered by this element.
   *
   * @param {ReactComponent|DOMElement} componentOrElement
   * @return {DOMElement} The root node of this element.
   */function findDOMNode(componentOrElement){if("production" !== process.env.NODE_ENV){var owner=ReactCurrentOwner.current;if(owner !== null){"production" !== process.env.NODE_ENV?warning(owner._warnedAboutRefsInRender,'%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.',owner.getName() || 'A component'):null;owner._warnedAboutRefsInRender = true;}}if(componentOrElement == null){return null;}if(isNode(componentOrElement)){return componentOrElement;}if(ReactInstanceMap.has(componentOrElement)){return ReactMount.getNodeFromInstance(componentOrElement);}"production" !== process.env.NODE_ENV?invariant(componentOrElement.render == null || typeof componentOrElement.render !== 'function','Component (with keys: %s) contains `render` method ' + 'but is not mounted in the DOM',Object.keys(componentOrElement)):invariant(componentOrElement.render == null || typeof componentOrElement.render !== 'function');"production" !== process.env.NODE_ENV?invariant(false,'Element appears to be neither ReactComponent nor DOMNode (keys: %s)',Object.keys(componentOrElement)):invariant(false);}module.exports = findDOMNode;}).call(this,require('_process'));},{"./ReactCurrentOwner":89,"./ReactInstanceMap":117,"./ReactMount":120,"./invariant":185,"./isNode":187,"./warning":204,"_process":12}],168:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule flattenChildren
   */'use strict';var traverseAllChildren=require("./traverseAllChildren");var warning=require("./warning"); /**
   * @param {function} traverseContext Context passed through traversal.
   * @param {?ReactComponent} child React child component.
   * @param {!string} name String name of key path to child.
   */function flattenSingleChildIntoContext(traverseContext,child,name){ // We found a component instance.
  var result=traverseContext;var keyUnique=!result.hasOwnProperty(name);if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(keyUnique,'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.',name):null;}if(keyUnique && child != null){result[name] = child;}} /**
   * Flattens children that are typically specified as `props.children`. Any null
   * children will not be included in the resulting object.
   * @return {!object} flattened children keyed by name.
   */function flattenChildren(children){if(children == null){return children;}var result={};traverseAllChildren(children,flattenSingleChildIntoContext,result);return result;}module.exports = flattenChildren;}).call(this,require('_process'));},{"./traverseAllChildren":203,"./warning":204,"_process":12}],169:[function(require,module,exports){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule focusNode
   */"use strict"; /**
   * @param {DOMElement} node input/textarea to focus
   */function focusNode(node){ // IE8 can throw "Can't move focus to the control because it is invisible,
  // not enabled, or of a type that does not accept the focus." for all kinds of
  // reasons that are too expensive and fragile to test.
  try{node.focus();}catch(e) {}}module.exports = focusNode;},{}],170:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule forEachAccumulated
   */'use strict'; /**
   * @param {array} an "accumulation" of items which is either an Array or
   * a single item. Useful when paired with the `accumulate` module. This is a
   * simple utility that allows us to reason about a collection of items, but
   * handling the case when there is exactly one item (and we do not need to
   * allocate an array).
   */var forEachAccumulated=function forEachAccumulated(arr,cb,scope){if(Array.isArray(arr)){arr.forEach(cb,scope);}else if(arr){cb.call(scope,arr);}};module.exports = forEachAccumulated;},{}],171:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getActiveElement
   * @typechecks
   */ /**
   * Same as document.activeElement but wraps in a try-catch block. In IE it is
   * not safe to call document.activeElement if there is nothing focused.
   *
   * The activeElement will be null only if the document body is not yet defined.
   */function getActiveElement() /*?DOMElement*/{try{return document.activeElement || document.body;}catch(e) {return document.body;}}module.exports = getActiveElement;},{}],172:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getEventCharCode
   * @typechecks static-only
   */'use strict'; /**
   * `charCode` represents the actual "character code" and is safe to use with
   * `String.fromCharCode`. As such, only keys that correspond to printable
   * characters produce a valid `charCode`, the only exception to this is Enter.
   * The Tab-key is considered non-printable and does not have a `charCode`,
   * presumably because it does not produce a tab-character in browsers.
   *
   * @param {object} nativeEvent Native browser event.
   * @return {string} Normalized `charCode` property.
   */function getEventCharCode(nativeEvent){var charCode;var keyCode=nativeEvent.keyCode;if('charCode' in nativeEvent){charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.
  if(charCode === 0 && keyCode === 13){charCode = 13;}}else { // IE8 does not implement `charCode`, but `keyCode` has the correct value.
  charCode = keyCode;} // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
  // Must not discard the (non-)printable Enter-key.
  if(charCode >= 32 || charCode === 13){return charCode;}return 0;}module.exports = getEventCharCode;},{}],173:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getEventKey
   * @typechecks static-only
   */'use strict';var getEventCharCode=require("./getEventCharCode"); /**
   * Normalization of deprecated HTML5 `key` values
   * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
   */var normalizeKey={'Esc':'Escape','Spacebar':' ','Left':'ArrowLeft','Up':'ArrowUp','Right':'ArrowRight','Down':'ArrowDown','Del':'Delete','Win':'OS','Menu':'ContextMenu','Apps':'ContextMenu','Scroll':'ScrollLock','MozPrintableKey':'Unidentified'}; /**
   * Translation from legacy `keyCode` to HTML5 `key`
   * Only special keys supported, all others depend on keyboard layout or browser
   * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
   */var translateToKey={8:'Backspace',9:'Tab',12:'Clear',13:'Enter',16:'Shift',17:'Control',18:'Alt',19:'Pause',20:'CapsLock',27:'Escape',32:' ',33:'PageUp',34:'PageDown',35:'End',36:'Home',37:'ArrowLeft',38:'ArrowUp',39:'ArrowRight',40:'ArrowDown',45:'Insert',46:'Delete',112:'F1',113:'F2',114:'F3',115:'F4',116:'F5',117:'F6',118:'F7',119:'F8',120:'F9',121:'F10',122:'F11',123:'F12',144:'NumLock',145:'ScrollLock',224:'Meta'}; /**
   * @param {object} nativeEvent Native browser event.
   * @return {string} Normalized `key` property.
   */function getEventKey(nativeEvent){if(nativeEvent.key){ // Normalize inconsistent values reported by browsers due to
  // implementations of a working draft specification.
  // FireFox implements `key` but returns `MozPrintableKey` for all
  // printable characters (normalized to `Unidentified`), ignore it.
  var key=normalizeKey[nativeEvent.key] || nativeEvent.key;if(key !== 'Unidentified'){return key;}} // Browser does not implement `key`, polyfill as much of it as we can.
  if(nativeEvent.type === 'keypress'){var charCode=getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can
  // thus be captured by `keypress`, no other non-printable key should.
  return charCode === 13?'Enter':String.fromCharCode(charCode);}if(nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup'){ // While user keyboard layout determines the actual meaning of each
  // `keyCode` value, almost all function keys have a universal value.
  return translateToKey[nativeEvent.keyCode] || 'Unidentified';}return '';}module.exports = getEventKey;},{"./getEventCharCode":172}],174:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getEventModifierState
   * @typechecks static-only
   */'use strict'; /**
   * Translation from modifier key to the associated property in the event.
   * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
   */var modifierKeyToProp={'Alt':'altKey','Control':'ctrlKey','Meta':'metaKey','Shift':'shiftKey'}; // IE8 does not implement getModifierState so we simply map it to the only
  // modifier keys exposed by the event itself, does not support Lock-keys.
  // Currently, all major browsers except Chrome seems to support Lock-keys.
  function modifierStateGetter(keyArg){ /*jshint validthis:true */var syntheticEvent=this;var nativeEvent=syntheticEvent.nativeEvent;if(nativeEvent.getModifierState){return nativeEvent.getModifierState(keyArg);}var keyProp=modifierKeyToProp[keyArg];return keyProp?!!nativeEvent[keyProp]:false;}function getEventModifierState(nativeEvent){return modifierStateGetter;}module.exports = getEventModifierState;},{}],175:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getEventTarget
   * @typechecks static-only
   */'use strict'; /**
   * Gets the target node from a native browser event by accounting for
   * inconsistencies in browser DOM APIs.
   *
   * @param {object} nativeEvent Native browser event.
   * @return {DOMEventTarget} Target node.
   */function getEventTarget(nativeEvent){var target=nativeEvent.target || nativeEvent.srcElement || window; // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
  // @see http://www.quirksmode.org/js/events_properties.html
  return target.nodeType === 3?target.parentNode:target;}module.exports = getEventTarget;},{}],176:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getIteratorFn
   * @typechecks static-only
   */'use strict'; /* global Symbol */var ITERATOR_SYMBOL=typeof Symbol === 'function' && Symbol.iterator;var FAUX_ITERATOR_SYMBOL='@@iterator'; // Before Symbol spec.
  /**
   * Returns the iterator method function contained on the iterable object.
   *
   * Be sure to invoke the function with the iterable as context:
   *
   *     var iteratorFn = getIteratorFn(myIterable);
   *     if (iteratorFn) {
   *       var iterator = iteratorFn.call(myIterable);
   *       ...
   *     }
   *
   * @param {?object} maybeIterable
   * @return {?function}
   */function getIteratorFn(maybeIterable){var iteratorFn=maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);if(typeof iteratorFn === 'function'){return iteratorFn;}}module.exports = getIteratorFn;},{}],177:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getMarkupWrap
   */var ExecutionEnvironment=require("./ExecutionEnvironment");var invariant=require("./invariant"); /**
   * Dummy container used to detect which wraps are necessary.
   */var dummyNode=ExecutionEnvironment.canUseDOM?document.createElement('div'):null; /**
   * Some browsers cannot use `innerHTML` to render certain elements standalone,
   * so we wrap them, render the wrapped nodes, then extract the desired node.
   *
   * In IE8, certain elements cannot render alone, so wrap all elements ('*').
   */var shouldWrap={ // Force wrapping for SVG elements because if they get created inside a <div>,
  // they will be initialized in the wrong namespace (and will not display).
  'circle':true,'clipPath':true,'defs':true,'ellipse':true,'g':true,'line':true,'linearGradient':true,'path':true,'polygon':true,'polyline':true,'radialGradient':true,'rect':true,'stop':true,'text':true};var selectWrap=[1,'<select multiple="true">','</select>'];var tableWrap=[1,'<table>','</table>'];var trWrap=[3,'<table><tbody><tr>','</tr></tbody></table>'];var svgWrap=[1,'<svg>','</svg>'];var markupWrap={'*':[1,'?<div>','</div>'],'area':[1,'<map>','</map>'],'col':[2,'<table><tbody></tbody><colgroup>','</colgroup></table>'],'legend':[1,'<fieldset>','</fieldset>'],'param':[1,'<object>','</object>'],'tr':[2,'<table><tbody>','</tbody></table>'],'optgroup':selectWrap,'option':selectWrap,'caption':tableWrap,'colgroup':tableWrap,'tbody':tableWrap,'tfoot':tableWrap,'thead':tableWrap,'td':trWrap,'th':trWrap,'circle':svgWrap,'clipPath':svgWrap,'defs':svgWrap,'ellipse':svgWrap,'g':svgWrap,'line':svgWrap,'linearGradient':svgWrap,'path':svgWrap,'polygon':svgWrap,'polyline':svgWrap,'radialGradient':svgWrap,'rect':svgWrap,'stop':svgWrap,'text':svgWrap}; /**
   * Gets the markup wrap configuration for the supplied `nodeName`.
   *
   * NOTE: This lazily detects which wraps are necessary for the current browser.
   *
   * @param {string} nodeName Lowercase `nodeName`.
   * @return {?array} Markup wrap configuration, if applicable.
   */function getMarkupWrap(nodeName){"production" !== process.env.NODE_ENV?invariant(!!dummyNode,'Markup wrapping node not initialized'):invariant(!!dummyNode);if(!markupWrap.hasOwnProperty(nodeName)){nodeName = '*';}if(!shouldWrap.hasOwnProperty(nodeName)){if(nodeName === '*'){dummyNode.innerHTML = '<link />';}else {dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';}shouldWrap[nodeName] = !dummyNode.firstChild;}return shouldWrap[nodeName]?markupWrap[nodeName]:null;}module.exports = getMarkupWrap;}).call(this,require('_process'));},{"./ExecutionEnvironment":70,"./invariant":185,"_process":12}],178:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getNodeForCharacterOffset
   */'use strict'; /**
   * Given any node return the first leaf node without children.
   *
   * @param {DOMElement|DOMTextNode} node
   * @return {DOMElement|DOMTextNode}
   */function getLeafNode(node){while(node && node.firstChild) {node = node.firstChild;}return node;} /**
   * Get the next sibling within a container. This will walk up the
   * DOM if a node's siblings have been exhausted.
   *
   * @param {DOMElement|DOMTextNode} node
   * @return {?DOMElement|DOMTextNode}
   */function getSiblingNode(node){while(node) {if(node.nextSibling){return node.nextSibling;}node = node.parentNode;}} /**
   * Get object describing the nodes which contain characters at offset.
   *
   * @param {DOMElement|DOMTextNode} root
   * @param {number} offset
   * @return {?object}
   */function getNodeForCharacterOffset(root,offset){var node=getLeafNode(root);var nodeStart=0;var nodeEnd=0;while(node) {if(node.nodeType === 3){nodeEnd = nodeStart + node.textContent.length;if(nodeStart <= offset && nodeEnd >= offset){return {node:node,offset:offset - nodeStart};}nodeStart = nodeEnd;}node = getLeafNode(getSiblingNode(node));}}module.exports = getNodeForCharacterOffset;},{}],179:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getReactRootElementInContainer
   */'use strict';var DOC_NODE_TYPE=9; /**
   * @param {DOMElement|DOMDocument} container DOM element that may contain
   *                                           a React component
   * @return {?*} DOM element that may have the reactRoot ID, or null.
   */function getReactRootElementInContainer(container){if(!container){return null;}if(container.nodeType === DOC_NODE_TYPE){return container.documentElement;}else {return container.firstChild;}}module.exports = getReactRootElementInContainer;},{}],180:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getTextContentAccessor
   */'use strict';var ExecutionEnvironment=require("./ExecutionEnvironment");var contentKey=null; /**
   * Gets the key used to access text content on a DOM node.
   *
   * @return {?string} Key used to access text content.
   * @internal
   */function getTextContentAccessor(){if(!contentKey && ExecutionEnvironment.canUseDOM){ // Prefer textContent to innerText because many browsers support both but
  // SVG <text> elements don't support innerText even when <div> does.
  contentKey = 'textContent' in document.documentElement?'textContent':'innerText';}return contentKey;}module.exports = getTextContentAccessor;},{"./ExecutionEnvironment":70}],181:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule getUnboundedScrollPosition
   * @typechecks
   */"use strict"; /**
   * Gets the scroll position of the supplied element or window.
   *
   * The return values are unbounded, unlike `getScrollPosition`. This means they
   * may be negative or exceed the element boundaries (which is possible using
   * inertial scrolling).
   *
   * @param {DOMWindow|DOMElement} scrollable
   * @return {object} Map with `x` and `y` keys.
   */function getUnboundedScrollPosition(scrollable){if(scrollable === window){return {x:window.pageXOffset || document.documentElement.scrollLeft,y:window.pageYOffset || document.documentElement.scrollTop};}return {x:scrollable.scrollLeft,y:scrollable.scrollTop};}module.exports = getUnboundedScrollPosition;},{}],182:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule hyphenate
   * @typechecks
   */var _uppercasePattern=/([A-Z])/g; /**
   * Hyphenates a camelcased string, for example:
   *
   *   > hyphenate('backgroundColor')
   *   < "background-color"
   *
   * For CSS style names, use `hyphenateStyleName` instead which works properly
   * with all vendor prefixes, including `ms`.
   *
   * @param {string} string
   * @return {string}
   */function hyphenate(string){return string.replace(_uppercasePattern,'-$1').toLowerCase();}module.exports = hyphenate;},{}],183:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule hyphenateStyleName
   * @typechecks
   */"use strict";var hyphenate=require("./hyphenate");var msPattern=/^ms-/; /**
   * Hyphenates a camelcased CSS property name, for example:
   *
   *   > hyphenateStyleName('backgroundColor')
   *   < "background-color"
   *   > hyphenateStyleName('MozTransition')
   *   < "-moz-transition"
   *   > hyphenateStyleName('msTransition')
   *   < "-ms-transition"
   *
   * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
   * is converted to `-ms-`.
   *
   * @param {string} string
   * @return {string}
   */function hyphenateStyleName(string){return hyphenate(string).replace(msPattern,'-ms-');}module.exports = hyphenateStyleName;},{"./hyphenate":182}],184:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule instantiateReactComponent
   * @typechecks static-only
   */'use strict';var ReactCompositeComponent=require("./ReactCompositeComponent");var ReactEmptyComponent=require("./ReactEmptyComponent");var ReactNativeComponent=require("./ReactNativeComponent");var assign=require("./Object.assign");var invariant=require("./invariant");var warning=require("./warning"); // To avoid a cyclic dependency, we create the final class in this module
  var ReactCompositeComponentWrapper=function ReactCompositeComponentWrapper(){};assign(ReactCompositeComponentWrapper.prototype,ReactCompositeComponent.Mixin,{_instantiateReactComponent:instantiateReactComponent}); /**
   * Check if the type reference is a known internal type. I.e. not a user
   * provided composite type.
   *
   * @param {function} type
   * @return {boolean} Returns true if this is a valid internal type.
   */function isInternalComponentType(type){return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';} /**
   * Given a ReactNode, create an instance that will actually be mounted.
   *
   * @param {ReactNode} node
   * @param {*} parentCompositeType The composite type that resolved this.
   * @return {object} A new instance of the element's constructor.
   * @protected
   */function instantiateReactComponent(node,parentCompositeType){var instance;if(node === null || node === false){node = ReactEmptyComponent.emptyElement;}if(typeof node === 'object'){var element=node;if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(element && (typeof element.type === 'function' || typeof element.type === 'string'),'Only functions or strings can be mounted as React components.'):null;} // Special case string values
  if(parentCompositeType === element.type && typeof element.type === 'string'){ // Avoid recursion if the wrapper renders itself.
  instance = ReactNativeComponent.createInternalComponent(element); // All native components are currently wrapped in a composite so we're
  // safe to assume that this is what we should instantiate.
  }else if(isInternalComponentType(element.type)){ // This is temporarily available for custom components that are not string
  // represenations. I.e. ART. Once those are updated to use the string
  // representation, we can drop this code path.
  instance = new element.type(element);}else {instance = new ReactCompositeComponentWrapper();}}else if(typeof node === 'string' || typeof node === 'number'){instance = ReactNativeComponent.createInstanceForText(node);}else {"production" !== process.env.NODE_ENV?invariant(false,'Encountered invalid React node of type %s',typeof node):invariant(false);}if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function','Only React Components can be mounted.'):null;} // Sets up the instance. This can probably just move into the constructor now.
  instance.construct(node); // These two fields are used by the DOM and ART diffing algorithms
  // respectively. Instead of using expandos on components, we should be
  // storing the state needed by the diffing algorithms elsewhere.
  instance._mountIndex = 0;instance._mountImage = null;if("production" !== process.env.NODE_ENV){instance._isOwnerNecessary = false;instance._warnedAboutRefsInRender = false;} // Internal instances should fully constructed at this point, so they should
  // not get any new fields added to them at this point.
  if("production" !== process.env.NODE_ENV){if(Object.preventExtensions){Object.preventExtensions(instance);}}return instance;}module.exports = instantiateReactComponent;}).call(this,require('_process'));},{"./Object.assign":76,"./ReactCompositeComponent":87,"./ReactEmptyComponent":109,"./ReactNativeComponent":123,"./invariant":185,"./warning":204,"_process":12}],185:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule invariant
   */"use strict"; /**
   * Use invariant() to assert state which your program assumes to be true.
   *
   * Provide sprintf-style format (only %s is supported) and arguments
   * to provide information about what broke and what you were
   * expecting.
   *
   * The invariant message will be stripped in production, but the invariant
   * will remain to ensure logic does not differ in production.
   */var invariant=function invariant(condition,format,a,b,c,d,e,f){if("production" !== process.env.NODE_ENV){if(format === undefined){throw new Error('invariant requires an error message argument');}}if(!condition){var error;if(format === undefined){error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');}else {var args=[a,b,c,d,e,f];var argIndex=0;error = new Error('Invariant Violation: ' + format.replace(/%s/g,function(){return args[argIndex++];}));}error.framesToPop = 1; // we don't care about invariant's own frame
  throw error;}};module.exports = invariant;}).call(this,require('_process'));},{"_process":12}],186:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule isEventSupported
   */'use strict';var ExecutionEnvironment=require("./ExecutionEnvironment");var useHasFeature;if(ExecutionEnvironment.canUseDOM){useHasFeature = document.implementation && document.implementation.hasFeature &&  // always returns true in newer browsers as per the standard.
  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
  document.implementation.hasFeature('','') !== true;} /**
   * Checks if an event is supported in the current execution environment.
   *
   * NOTE: This will not work correctly for non-generic events such as `change`,
   * `reset`, `load`, `error`, and `select`.
   *
   * Borrows from Modernizr.
   *
   * @param {string} eventNameSuffix Event name, e.g. "click".
   * @param {?boolean} capture Check if the capture phase is supported.
   * @return {boolean} True if the event is supported.
   * @internal
   * @license Modernizr 3.0.0pre (Custom Build) | MIT
   */function isEventSupported(eventNameSuffix,capture){if(!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)){return false;}var eventName='on' + eventNameSuffix;var isSupported=(eventName in document);if(!isSupported){var element=document.createElement('div');element.setAttribute(eventName,'return;');isSupported = typeof element[eventName] === 'function';}if(!isSupported && useHasFeature && eventNameSuffix === 'wheel'){ // This is the only way to test support for the `wheel` event in IE9+.
  isSupported = document.implementation.hasFeature('Events.wheel','3.0');}return isSupported;}module.exports = isEventSupported;},{"./ExecutionEnvironment":70}],187:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule isNode
   * @typechecks
   */ /**
   * @param {*} object The object to check.
   * @return {boolean} Whether or not the object is a DOM node.
   */function isNode(object){return !!(object && (typeof Node === 'function'?object instanceof Node:typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));}module.exports = isNode;},{}],188:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule isTextInputElement
   */'use strict'; /**
   * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
   */var supportedInputTypes={'color':true,'date':true,'datetime':true,'datetime-local':true,'email':true,'month':true,'number':true,'password':true,'range':true,'search':true,'tel':true,'text':true,'time':true,'url':true,'week':true};function isTextInputElement(elem){return elem && (elem.nodeName === 'INPUT' && supportedInputTypes[elem.type] || elem.nodeName === 'TEXTAREA');}module.exports = isTextInputElement;},{}],189:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule isTextNode
   * @typechecks
   */var isNode=require("./isNode"); /**
   * @param {*} object The object to check.
   * @return {boolean} Whether or not the object is a DOM text node.
   */function isTextNode(object){return isNode(object) && object.nodeType == 3;}module.exports = isTextNode;},{"./isNode":187}],190:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule keyMirror
   * @typechecks static-only
   */'use strict';var invariant=require("./invariant"); /**
   * Constructs an enumeration with keys equal to their value.
   *
   * For example:
   *
   *   var COLORS = keyMirror({blue: null, red: null});
   *   var myColor = COLORS.blue;
   *   var isColorValid = !!COLORS[myColor];
   *
   * The last line could not be performed if the values of the generated enum were
   * not equal to their keys.
   *
   *   Input:  {key1: val1, key2: val2}
   *   Output: {key1: key1, key2: key2}
   *
   * @param {object} obj
   * @return {object}
   */var keyMirror=function keyMirror(obj){var ret={};var key;"production" !== process.env.NODE_ENV?invariant(obj instanceof Object && !Array.isArray(obj),'keyMirror(...): Argument must be an object.'):invariant(obj instanceof Object && !Array.isArray(obj));for(key in obj) {if(!obj.hasOwnProperty(key)){continue;}ret[key] = key;}return ret;};module.exports = keyMirror;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],191:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule keyOf
   */ /**
   * Allows extraction of a minified key. Let's the build system minify keys
   * without loosing the ability to dynamically use key strings as values
   * themselves. Pass in an object with a single key/val pair and it will return
   * you the string key of that single record. Suppose you want to grab the
   * value for a key 'className' inside of an object. Key/val minification may
   * have aliased that key to be 'xa12'. keyOf({className: null}) will return
   * 'xa12' in that case. Resolve keys you want to use once at startup time, then
   * reuse those resolutions.
   */var keyOf=function keyOf(oneKeyObj){var key;for(key in oneKeyObj) {if(!oneKeyObj.hasOwnProperty(key)){continue;}return key;}return null;};module.exports = keyOf;},{}],192:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule mapObject
   */'use strict';var hasOwnProperty=Object.prototype.hasOwnProperty; /**
   * Executes the provided `callback` once for each enumerable own property in the
   * object and constructs a new object from the results. The `callback` is
   * invoked with three arguments:
   *
   *  - the property value
   *  - the property name
   *  - the object being traversed
   *
   * Properties that are added after the call to `mapObject` will not be visited
   * by `callback`. If the values of existing properties are changed, the value
   * passed to `callback` will be the value at the time `mapObject` visits them.
   * Properties that are deleted before being visited are not visited.
   *
   * @grep function objectMap()
   * @grep function objMap()
   *
   * @param {?object} object
   * @param {function} callback
   * @param {*} context
   * @return {?object}
   */function mapObject(object,callback,context){if(!object){return null;}var result={};for(var name in object) {if(hasOwnProperty.call(object,name)){result[name] = callback.call(context,object[name],name,object);}}return result;}module.exports = mapObject;},{}],193:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule memoizeStringOnly
   * @typechecks static-only
   */'use strict'; /**
   * Memoizes the return value of a function that accepts one string argument.
   *
   * @param {function} callback
   * @return {function}
   */function memoizeStringOnly(callback){var cache={};return function(string){if(!cache.hasOwnProperty(string)){cache[string] = callback.call(this,string);}return cache[string];};}module.exports = memoizeStringOnly;},{}],194:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule onlyChild
   */'use strict';var ReactElement=require("./ReactElement");var invariant=require("./invariant"); /**
   * Returns the first child in a collection of children and verifies that there
   * is only one child in the collection. The current implementation of this
   * function assumes that a single child gets passed without a wrapper, but the
   * purpose of this helper function is to abstract away the particular structure
   * of children.
   *
   * @param {?object} children Child collection structure.
   * @return {ReactComponent} The first and only `ReactComponent` contained in the
   * structure.
   */function onlyChild(children){"production" !== process.env.NODE_ENV?invariant(ReactElement.isValidElement(children),'onlyChild must be passed a children with exactly one child.'):invariant(ReactElement.isValidElement(children));return children;}module.exports = onlyChild;}).call(this,require('_process'));},{"./ReactElement":107,"./invariant":185,"_process":12}],195:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule performance
   * @typechecks
   */"use strict";var ExecutionEnvironment=require("./ExecutionEnvironment");var performance;if(ExecutionEnvironment.canUseDOM){performance = window.performance || window.msPerformance || window.webkitPerformance;}module.exports = performance || {};},{"./ExecutionEnvironment":70}],196:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule performanceNow
   * @typechecks
   */var performance=require("./performance"); /**
   * Detect if we can use `window.performance.now()` and gracefully fallback to
   * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
   * because of Facebook's testing infrastructure.
   */if(!performance || !performance.now){performance = Date;}var performanceNow=performance.now.bind(performance);module.exports = performanceNow;},{"./performance":195}],197:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule quoteAttributeValueForBrowser
   */'use strict';var escapeTextContentForBrowser=require("./escapeTextContentForBrowser"); /**
   * Escapes attribute value to prevent scripting attacks.
   *
   * @param {*} value Value to escape.
   * @return {string} An escaped string.
   */function quoteAttributeValueForBrowser(value){return '"' + escapeTextContentForBrowser(value) + '"';}module.exports = quoteAttributeValueForBrowser;},{"./escapeTextContentForBrowser":166}],198:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule setInnerHTML
   */ /* globals MSApp */'use strict';var ExecutionEnvironment=require("./ExecutionEnvironment");var WHITESPACE_TEST=/^[ \r\n\t\f]/;var NONVISIBLE_TEST=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/; /**
   * Set the innerHTML property of a node, ensuring that whitespace is preserved
   * even in IE8.
   *
   * @param {DOMElement} node
   * @param {string} html
   * @internal
   */var setInnerHTML=function setInnerHTML(node,html){node.innerHTML = html;}; // Win8 apps: Allow all html to be inserted
  if(typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction){setInnerHTML = function(node,html){MSApp.execUnsafeLocalFunction(function(){node.innerHTML = html;});};}if(ExecutionEnvironment.canUseDOM){ // IE8: When updating a just created node with innerHTML only leading
  // whitespace is removed. When updating an existing node with innerHTML
  // whitespace in root TextNodes is also collapsed.
  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
  // Feature detection; only IE8 is known to behave improperly like this.
  var testElement=document.createElement('div');testElement.innerHTML = ' ';if(testElement.innerHTML === ''){setInnerHTML = function(node,html){ // Magic theory: IE8 supposedly differentiates between added and updated
  // nodes when processing innerHTML, innerHTML on updated nodes suffers
  // from worse whitespace behavior. Re-adding a node like this triggers
  // the initial and more favorable whitespace behavior.
  // TODO: What to do on a detached node?
  if(node.parentNode){node.parentNode.replaceChild(node,node);} // We also implement a workaround for non-visible tags disappearing into
  // thin air on IE8, this only happens if there is no visible text
  // in-front of the non-visible tags. Piggyback on the whitespace fix
  // and simply check if any non-visible tags appear in the source.
  if(WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)){ // Recover leading whitespace by temporarily prepending any character.
  // \uFEFF has the potential advantage of being zero-width/invisible.
  node.innerHTML = "﻿" + html; // deleteData leaves an empty `TextNode` which offsets the index of all
  // children. Definitely want to avoid this.
  var textNode=node.firstChild;if(textNode.data.length === 1){node.removeChild(textNode);}else {textNode.deleteData(0,1);}}else {node.innerHTML = html;}};}}module.exports = setInnerHTML;},{"./ExecutionEnvironment":70}],199:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule setTextContent
   */'use strict';var ExecutionEnvironment=require("./ExecutionEnvironment");var escapeTextContentForBrowser=require("./escapeTextContentForBrowser");var setInnerHTML=require("./setInnerHTML"); /**
   * Set the textContent property of a node, ensuring that whitespace is preserved
   * even in IE8. innerText is a poor substitute for textContent and, among many
   * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
   * as it should.
   *
   * @param {DOMElement} node
   * @param {string} text
   * @internal
   */var setTextContent=function setTextContent(node,text){node.textContent = text;};if(ExecutionEnvironment.canUseDOM){if(!('textContent' in document.documentElement)){setTextContent = function(node,text){setInnerHTML(node,escapeTextContentForBrowser(text));};}}module.exports = setTextContent;},{"./ExecutionEnvironment":70,"./escapeTextContentForBrowser":166,"./setInnerHTML":198}],200:[function(require,module,exports){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule shallowEqual
   */'use strict'; /**
   * Performs equality by iterating through keys on an object and returning
   * false when any key has values which are not strictly equal between
   * objA and objB. Returns true when the values of all keys are strictly equal.
   *
   * @return {boolean}
   */function shallowEqual(objA,objB){if(objA === objB){return true;}var key; // Test for A's keys different from B.
  for(key in objA) {if(objA.hasOwnProperty(key) && (!objB.hasOwnProperty(key) || objA[key] !== objB[key])){return false;}} // Test for B's keys missing from A.
  for(key in objB) {if(objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)){return false;}}return true;}module.exports = shallowEqual;},{}],201:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule shouldUpdateReactComponent
   * @typechecks static-only
   */'use strict';var warning=require("./warning"); /**
   * Given a `prevElement` and `nextElement`, determines if the existing
   * instance should be updated as opposed to being destroyed or replaced by a new
   * instance. Both arguments are elements. This ensures that this logic can
   * operate on stateless trees without any backing instance.
   *
   * @param {?object} prevElement
   * @param {?object} nextElement
   * @return {boolean} True if the existing instance should be updated.
   * @protected
   */function shouldUpdateReactComponent(prevElement,nextElement){if(prevElement != null && nextElement != null){var prevType=typeof prevElement;var nextType=typeof nextElement;if(prevType === 'string' || prevType === 'number'){return nextType === 'string' || nextType === 'number';}else {if(nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key){var ownersMatch=prevElement._owner === nextElement._owner;var prevName=null;var nextName=null;var nextDisplayName=null;if("production" !== process.env.NODE_ENV){if(!ownersMatch){if(prevElement._owner != null && prevElement._owner.getPublicInstance() != null && prevElement._owner.getPublicInstance().constructor != null){prevName = prevElement._owner.getPublicInstance().constructor.displayName;}if(nextElement._owner != null && nextElement._owner.getPublicInstance() != null && nextElement._owner.getPublicInstance().constructor != null){nextName = nextElement._owner.getPublicInstance().constructor.displayName;}if(nextElement.type != null && nextElement.type.displayName != null){nextDisplayName = nextElement.type.displayName;}if(nextElement.type != null && typeof nextElement.type === 'string'){nextDisplayName = nextElement.type;}if(typeof nextElement.type !== 'string' || nextElement.type === 'input' || nextElement.type === 'textarea'){if(prevElement._owner != null && prevElement._owner._isOwnerNecessary === false || nextElement._owner != null && nextElement._owner._isOwnerNecessary === false){if(prevElement._owner != null){prevElement._owner._isOwnerNecessary = true;}if(nextElement._owner != null){nextElement._owner._isOwnerNecessary = true;}"production" !== process.env.NODE_ENV?warning(false,'<%s /> is being rendered by both %s and %s using the same ' + 'key (%s) in the same place. Currently, this means that ' + 'they don\'t preserve state. This behavior should be very ' + 'rare so we\'re considering deprecating it. Please contact ' + 'the React team and explain your use case so that we can ' + 'take that into consideration.',nextDisplayName || 'Unknown Component',prevName || '[Unknown]',nextName || '[Unknown]',prevElement.key):null;}}}}return ownersMatch;}}}return false;}module.exports = shouldUpdateReactComponent;}).call(this,require('_process'));},{"./warning":204,"_process":12}],202:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule toArray
   * @typechecks
   */var invariant=require("./invariant"); /**
   * Convert array-like objects to arrays.
   *
   * This API assumes the caller knows the contents of the data type. For less
   * well defined inputs use createArrayFromMixed.
   *
   * @param {object|function|filelist} obj
   * @return {array}
   */function toArray(obj){var length=obj.length; // Some browse builtin objects can report typeof 'function' (e.g. NodeList in
  // old versions of Safari).
  "production" !== process.env.NODE_ENV?invariant(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function'),'toArray: Array-like object expected'):invariant(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function'));"production" !== process.env.NODE_ENV?invariant(typeof length === 'number','toArray: Object needs a length property'):invariant(typeof length === 'number');"production" !== process.env.NODE_ENV?invariant(length === 0 || length - 1 in obj,'toArray: Object should have keys for indices'):invariant(length === 0 || length - 1 in obj); // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
  // without method will throw during the slice call and skip straight to the
  // fallback.
  if(obj.hasOwnProperty){try{return Array.prototype.slice.call(obj);}catch(e) { // IE < 9 does not support Array#slice on collections objects
  }} // Fall back to copying key by key. This assumes all keys have a value,
  // so will not preserve sparsely populated inputs.
  var ret=Array(length);for(var ii=0;ii < length;ii++) {ret[ii] = obj[ii];}return ret;}module.exports = toArray;}).call(this,require('_process'));},{"./invariant":185,"_process":12}],203:[function(require,module,exports){(function(process){ /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule traverseAllChildren
   */'use strict';var ReactElement=require("./ReactElement");var ReactFragment=require("./ReactFragment");var ReactInstanceHandles=require("./ReactInstanceHandles");var getIteratorFn=require("./getIteratorFn");var invariant=require("./invariant");var warning=require("./warning");var SEPARATOR=ReactInstanceHandles.SEPARATOR;var SUBSEPARATOR=':'; /**
   * TODO: Test that a single child and an array with one item have the same key
   * pattern.
   */var userProvidedKeyEscaperLookup={'=':'=0','.':'=1',':':'=2'};var userProvidedKeyEscapeRegex=/[=.:]/g;var didWarnAboutMaps=false;function userProvidedKeyEscaper(match){return userProvidedKeyEscaperLookup[match];} /**
   * Generate a key string that identifies a component within a set.
   *
   * @param {*} component A component that could contain a manual key.
   * @param {number} index Index that is used if a manual key is not provided.
   * @return {string}
   */function getComponentKey(component,index){if(component && component.key != null){ // Explicit key
  return wrapUserProvidedKey(component.key);} // Implicit key determined by the index in the set
  return index.toString(36);} /**
   * Escape a component key so that it is safe to use in a reactid.
   *
   * @param {*} key Component key to be escaped.
   * @return {string} An escaped string.
   */function escapeUserProvidedKey(text){return ('' + text).replace(userProvidedKeyEscapeRegex,userProvidedKeyEscaper);} /**
   * Wrap a `key` value explicitly provided by the user to distinguish it from
   * implicitly-generated keys generated by a component's index in its parent.
   *
   * @param {string} key Value of a user-provided `key` attribute
   * @return {string}
   */function wrapUserProvidedKey(key){return '$' + escapeUserProvidedKey(key);} /**
   * @param {?*} children Children tree container.
   * @param {!string} nameSoFar Name of the key path so far.
   * @param {!number} indexSoFar Number of children encountered until this point.
   * @param {!function} callback Callback to invoke with each child found.
   * @param {?*} traverseContext Used to pass information throughout the traversal
   * process.
   * @return {!number} The number of children in this subtree.
   */function traverseAllChildrenImpl(children,nameSoFar,indexSoFar,callback,traverseContext){var type=typeof children;if(type === 'undefined' || type === 'boolean'){ // All of the above are perceived as null.
  children = null;}if(children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)){callback(traverseContext,children, // If it's the only child, treat the name as if it was wrapped in an array
  // so that it's consistent if the number of children grows.
  nameSoFar === ''?SEPARATOR + getComponentKey(children,0):nameSoFar,indexSoFar);return 1;}var child,nextName,nextIndex;var subtreeCount=0; // Count of children found in the current subtree.
  if(Array.isArray(children)){for(var i=0;i < children.length;i++) {child = children[i];nextName = (nameSoFar !== ''?nameSoFar + SUBSEPARATOR:SEPARATOR) + getComponentKey(child,i);nextIndex = indexSoFar + subtreeCount;subtreeCount += traverseAllChildrenImpl(child,nextName,nextIndex,callback,traverseContext);}}else {var iteratorFn=getIteratorFn(children);if(iteratorFn){var iterator=iteratorFn.call(children);var step;if(iteratorFn !== children.entries){var ii=0;while(!(step = iterator.next()).done) {child = step.value;nextName = (nameSoFar !== ''?nameSoFar + SUBSEPARATOR:SEPARATOR) + getComponentKey(child,ii++);nextIndex = indexSoFar + subtreeCount;subtreeCount += traverseAllChildrenImpl(child,nextName,nextIndex,callback,traverseContext);}}else {if("production" !== process.env.NODE_ENV){"production" !== process.env.NODE_ENV?warning(didWarnAboutMaps,'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.'):null;didWarnAboutMaps = true;} // Iterator will provide entry [k,v] tuples rather than values.
  while(!(step = iterator.next()).done) {var entry=step.value;if(entry){child = entry[1];nextName = (nameSoFar !== ''?nameSoFar + SUBSEPARATOR:SEPARATOR) + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child,0);nextIndex = indexSoFar + subtreeCount;subtreeCount += traverseAllChildrenImpl(child,nextName,nextIndex,callback,traverseContext);}}}}else if(type === 'object'){"production" !== process.env.NODE_ENV?invariant(children.nodeType !== 1,'traverseAllChildren(...): Encountered an invalid child; DOM ' + 'elements are not valid children of React components.'):invariant(children.nodeType !== 1);var fragment=ReactFragment.extract(children);for(var key in fragment) {if(fragment.hasOwnProperty(key)){child = fragment[key];nextName = (nameSoFar !== ''?nameSoFar + SUBSEPARATOR:SEPARATOR) + wrapUserProvidedKey(key) + SUBSEPARATOR + getComponentKey(child,0);nextIndex = indexSoFar + subtreeCount;subtreeCount += traverseAllChildrenImpl(child,nextName,nextIndex,callback,traverseContext);}}}}return subtreeCount;} /**
   * Traverses children that are typically specified as `props.children`, but
   * might also be specified through attributes:
   *
   * - `traverseAllChildren(this.props.children, ...)`
   * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
   *
   * The `traverseContext` is an optional argument that is passed through the
   * entire traversal. It can be used to store accumulations or anything else that
   * the callback might find relevant.
   *
   * @param {?*} children Children tree object.
   * @param {!function} callback To invoke upon traversing each child.
   * @param {?*} traverseContext Context for traversal.
   * @return {!number} The number of children in this subtree.
   */function traverseAllChildren(children,callback,traverseContext){if(children == null){return 0;}return traverseAllChildrenImpl(children,'',0,callback,traverseContext);}module.exports = traverseAllChildren;}).call(this,require('_process'));},{"./ReactElement":107,"./ReactFragment":113,"./ReactInstanceHandles":116,"./getIteratorFn":176,"./invariant":185,"./warning":204,"_process":12}],204:[function(require,module,exports){(function(process){ /**
   * Copyright 2014-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule warning
   */"use strict";var emptyFunction=require("./emptyFunction"); /**
   * Similar to invariant but only logs a warning if the condition is not met.
   * This can be used to log issues in development environments in critical
   * paths. Removing the logging code for production environments will keep the
   * same logic and follow the same code paths.
   */var warning=emptyFunction;if("production" !== process.env.NODE_ENV){warning = function(condition,format){for(var args=[],$__0=2,$__1=arguments.length;$__0 < $__1;$__0++) args.push(arguments[$__0]);if(format === undefined){throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');}if(format.length < 10 || /^[s\W]*$/.test(format)){throw new Error('The warning format should be able to uniquely identify this ' + 'warning. Please, use a more descriptive format than: ' + format);}if(format.indexOf('Failed Composite propType: ') === 0){return; // Ignore CompositeComponent proptype check.
  }if(!condition){var argIndex=0;var message='Warning: ' + format.replace(/%s/g,function(){return args[argIndex++];});console.warn(message);try{ // --- Welcome to debugging React ---
  // This error was thrown as a convenience so that you can use this stack
  // to find the callsite that caused this warning to fire.
  throw new Error(message);}catch(x) {}}};}module.exports = warning;}).call(this,require('_process'));},{"./emptyFunction":164,"_process":12}],"alt":[function(require,module,exports){ /*global window*/'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _bind=Function.prototype.bind;var _get=function get(_x3,_x4,_x5){var _again=true;_function: while(_again) {var object=_x3,property=_x4,receiver=_x5;desc = parent = getter = undefined;_again = false;if(object === null)object = Function.prototype;var desc=Object.getOwnPropertyDescriptor(object,property);if(desc === undefined){var parent=Object.getPrototypeOf(object);if(parent === null){return undefined;}else {_x3 = parent;_x4 = property;_x5 = receiver;_again = true;continue _function;}}else if('value' in desc){return desc.value;}else {var getter=desc.get;if(getter === undefined){return undefined;}return getter.call(receiver);}}};var _createClass=(function(){function defineProperties(target,props){for(var i=0;i < props.length;i++) {var descriptor=props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if('value' in descriptor)descriptor.writable = true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};})();function _interopRequireDefault(obj){return obj && obj.__esModule?obj:{'default':obj};}function _interopRequireWildcard(obj){if(obj && obj.__esModule){return obj;}else {var newObj={};if(obj != null){for(var key in obj) {if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i < arr.length;i++) arr2[i] = arr[i];return arr2;}else {return Array.from(arr);}}function _inherits(subClass,superClass){if(typeof superClass !== 'function' && superClass !== null){throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);}subClass.prototype = Object.create(superClass && superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)subClass.__proto__ = superClass;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function');}}var _flux=require('flux');var _utilsStateFunctions=require('./utils/StateFunctions');var StateFunctions=_interopRequireWildcard(_utilsStateFunctions);var _utilsFunctions=require('../utils/functions');var fn=_interopRequireWildcard(_utilsFunctions);var _store=require('./store');var store=_interopRequireWildcard(_store);var _utilsAltUtils=require('./utils/AltUtils');var utils=_interopRequireWildcard(_utilsAltUtils);var _actions=require('./actions');var _actions2=_interopRequireDefault(_actions);var Alt=(function(){function Alt(){var config=arguments[0] === undefined?{}:arguments[0];_classCallCheck(this,Alt);this.config = config;this.serialize = config.serialize || JSON.stringify;this.deserialize = config.deserialize || JSON.parse;this.dispatcher = config.dispatcher || new _flux.Dispatcher();this.batchingFunction = config.batchingFunction || function(callback){return callback();};this.actions = {global:{}};this.stores = {};this.storeTransforms = config.storeTransforms || [];this.trapAsync = false;this._actionsRegistry = {};this._initSnapshot = {};this._lastSnapshot = {};}_createClass(Alt,[{key:'dispatch',value:function dispatch(action,data,details){var _this=this;this.batchingFunction(function(){var id=Math.random().toString(18).substr(2,16);return _this.dispatcher.dispatch({id:id,action:action,data:data,details:details});});}},{key:'createUnsavedStore',value:function createUnsavedStore(StoreModel){var key=StoreModel.displayName || '';store.createStoreConfig(this.config,StoreModel);var Store=store.transformStore(this.storeTransforms,StoreModel);for(var _len=arguments.length,args=Array(_len > 1?_len - 1:0),_key=1;_key < _len;_key++) {args[_key - 1] = arguments[_key];}return fn.isFunction(Store)?store.createStoreFromClass.apply(store,[this,Store,key].concat(args)):store.createStoreFromObject(this,Store,key);}},{key:'createStore',value:function createStore(StoreModel,iden){var key=iden || StoreModel.displayName || StoreModel.name || '';store.createStoreConfig(this.config,StoreModel);var Store=store.transformStore(this.storeTransforms,StoreModel); /*istanbul ignore next*/if(module.hot)delete this.stores[key];if(this.stores[key] || !key){if(this.stores[key]){utils.warn('A store named ' + key + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store');}else {utils.warn('Store name was not specified');}key = utils.uid(this.stores,key);}for(var _len2=arguments.length,args=Array(_len2 > 2?_len2 - 2:0),_key2=2;_key2 < _len2;_key2++) {args[_key2 - 2] = arguments[_key2];}var storeInstance=fn.isFunction(Store)?store.createStoreFromClass.apply(store,[this,Store,key].concat(args)):store.createStoreFromObject(this,Store,key);this.stores[key] = storeInstance;StateFunctions.saveInitialSnapshot(this,key);return storeInstance;}},{key:'generateActions',value:function generateActions(){var actions={name:'global'};for(var _len3=arguments.length,actionNames=Array(_len3),_key3=0;_key3 < _len3;_key3++) {actionNames[_key3] = arguments[_key3];}return this.createActions(actionNames.reduce(function(obj,action){obj[action] = utils.dispatchIdentity;return obj;},actions));}},{key:'createAction',value:function createAction(name,implementation,obj){return (0,_actions2['default'])(this,'global',name,implementation,obj);}},{key:'createActions',value:function createActions(ActionsClass){var _arguments2=arguments,_this2=this;var exportObj=arguments[1] === undefined?{}:arguments[1];var actions={};var key=utils.uid(this._actionsRegistry,ActionsClass.displayName || ActionsClass.name || 'Unknown');if(fn.isFunction(ActionsClass)){var _len4,argsForConstructor,_key4;(function(){fn.assign(actions,utils.getInternalMethods(ActionsClass,true));var ActionsGenerator=(function(_ActionsClass){function ActionsGenerator(){_classCallCheck(this,ActionsGenerator);for(var _len5=arguments.length,args=Array(_len5),_key5=0;_key5 < _len5;_key5++) {args[_key5] = arguments[_key5];}_get(Object.getPrototypeOf(ActionsGenerator.prototype),'constructor',this).apply(this,args);}_inherits(ActionsGenerator,_ActionsClass);_createClass(ActionsGenerator,[{key:'generateActions',value:function generateActions(){for(var _len6=arguments.length,actionNames=Array(_len6),_key6=0;_key6 < _len6;_key6++) {actionNames[_key6] = arguments[_key6];}actionNames.forEach(function(actionName){actions[actionName] = utils.dispatchIdentity;});}}]);return ActionsGenerator;})(ActionsClass);for(_len4 = _arguments2.length,argsForConstructor = Array(_len4 > 2?_len4 - 2:0),_key4 = 2;_key4 < _len4;_key4++) {argsForConstructor[_key4 - 2] = _arguments2[_key4];}fn.assign(actions,new (_bind.apply(ActionsGenerator,[null].concat(_toConsumableArray(argsForConstructor))))());})();}else {fn.assign(actions,ActionsClass);}this.actions[key] = this.actions[key] || {};fn.eachObject(function(actionName,action){if(!fn.isFunction(action)){return;} // create the action
  exportObj[actionName] = (0,_actions2['default'])(_this2,key,actionName,action,exportObj); // generate a constant
  var constant=utils.formatAsConstant(actionName);exportObj[constant] = exportObj[actionName].id;},[actions]);return exportObj;}},{key:'takeSnapshot',value:function takeSnapshot(){for(var _len7=arguments.length,storeNames=Array(_len7),_key7=0;_key7 < _len7;_key7++) {storeNames[_key7] = arguments[_key7];}var state=StateFunctions.snapshot(this,storeNames);fn.assign(this._lastSnapshot,state);return this.serialize(state);}},{key:'rollback',value:function rollback(){StateFunctions.setAppState(this,this.serialize(this._lastSnapshot),function(storeInst){storeInst.lifecycle('rollback');storeInst.emitChange();});}},{key:'recycle',value:function recycle(){for(var _len8=arguments.length,storeNames=Array(_len8),_key8=0;_key8 < _len8;_key8++) {storeNames[_key8] = arguments[_key8];}var initialSnapshot=storeNames.length?StateFunctions.filterSnapshots(this,this._initSnapshot,storeNames):this._initSnapshot;StateFunctions.setAppState(this,this.serialize(initialSnapshot),function(storeInst){storeInst.lifecycle('init');storeInst.emitChange();});}},{key:'flush',value:function flush(){var state=this.serialize(StateFunctions.snapshot(this));this.recycle();return state;}},{key:'bootstrap',value:function bootstrap(data){StateFunctions.setAppState(this,data,function(storeInst){storeInst.lifecycle('bootstrap');storeInst.emitChange();});}},{key:'prepare',value:function prepare(storeInst,payload){var data={};if(!storeInst.displayName){throw new ReferenceError('Store provided does not have a name');}data[storeInst.displayName] = payload;return this.serialize(data);}},{key:'addActions', // Instance type methods for injecting alt into your application as context
  value:function addActions(name,ActionsClass){for(var _len9=arguments.length,args=Array(_len9 > 2?_len9 - 2:0),_key9=2;_key9 < _len9;_key9++) {args[_key9 - 2] = arguments[_key9];}this.actions[name] = Array.isArray(ActionsClass)?this.generateActions.apply(this,ActionsClass):this.createActions.apply(this,[ActionsClass].concat(args));}},{key:'addStore',value:function addStore(name,StoreModel){for(var _len10=arguments.length,args=Array(_len10 > 2?_len10 - 2:0),_key10=2;_key10 < _len10;_key10++) {args[_key10 - 2] = arguments[_key10];}this.createStore.apply(this,[StoreModel,name].concat(args));}},{key:'getActions',value:function getActions(name){return this.actions[name];}},{key:'getStore',value:function getStore(name){return this.stores[name];}}],[{key:'debug',value:function debug(name,alt){var key='alt.js.org';if(typeof window !== 'undefined'){window[key] = window[key] || [];window[key].push({name:name,alt:alt});}return alt;}}]);return Alt;})();exports['default'] = Alt;module.exports = exports['default'];},{"../utils/functions":11,"./actions":1,"./store":4,"./utils/AltUtils":5,"./utils/StateFunctions":6,"flux":7}],"react-router":[function(require,module,exports){'use strict';exports.DefaultRoute = require('./components/DefaultRoute');exports.Link = require('./components/Link');exports.NotFoundRoute = require('./components/NotFoundRoute');exports.Redirect = require('./components/Redirect');exports.Route = require('./components/Route');exports.ActiveHandler = require('./components/RouteHandler');exports.RouteHandler = exports.ActiveHandler;exports.HashLocation = require('./locations/HashLocation');exports.HistoryLocation = require('./locations/HistoryLocation');exports.RefreshLocation = require('./locations/RefreshLocation');exports.StaticLocation = require('./locations/StaticLocation');exports.TestLocation = require('./locations/TestLocation');exports.ImitateBrowserBehavior = require('./behaviors/ImitateBrowserBehavior');exports.ScrollToTopBehavior = require('./behaviors/ScrollToTopBehavior');exports.History = require('./History');exports.Navigation = require('./Navigation');exports.State = require('./State');exports.createRoute = require('./Route').createRoute;exports.createDefaultRoute = require('./Route').createDefaultRoute;exports.createNotFoundRoute = require('./Route').createNotFoundRoute;exports.createRedirect = require('./Route').createRedirect;exports.createRoutesFromReactChildren = require('./createRoutesFromReactChildren');exports.create = require('./createRouter');exports.run = require('./runRouter');},{"./History":14,"./Navigation":16,"./Route":20,"./State":22,"./behaviors/ImitateBrowserBehavior":25,"./behaviors/ScrollToTopBehavior":26,"./components/DefaultRoute":28,"./components/Link":29,"./components/NotFoundRoute":30,"./components/Redirect":31,"./components/Route":32,"./components/RouteHandler":33,"./createRouter":34,"./createRoutesFromReactChildren":35,"./locations/HashLocation":38,"./locations/HistoryLocation":39,"./locations/RefreshLocation":40,"./locations/StaticLocation":41,"./locations/TestLocation":42,"./runRouter":43}],"react":[function(require,module,exports){module.exports = require('./lib/React');},{"./lib/React":78}],"underscore":[function(require,module,exports){ //     Underscore.js 1.8.3
  //     http://underscorejs.org
  //     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
  //     Underscore may be freely distributed under the MIT license.
  (function(){ // Baseline setup
  // --------------
  // Establish the root object, `window` in the browser, or `exports` on the server.
  var root=this; // Save the previous value of the `_` variable.
  var previousUnderscore=root._; // Save bytes in the minified (but not gzipped) version:
  var ArrayProto=Array.prototype,ObjProto=Object.prototype,FuncProto=Function.prototype; // Create quick reference variables for speed access to core prototypes.
  var push=ArrayProto.push,slice=ArrayProto.slice,toString=ObjProto.toString,hasOwnProperty=ObjProto.hasOwnProperty; // All **ECMAScript 5** native function implementations that we hope to use
  // are declared here.
  var nativeIsArray=Array.isArray,nativeKeys=Object.keys,nativeBind=FuncProto.bind,nativeCreate=Object.create; // Naked function reference for surrogate-prototype-swapping.
  var Ctor=function Ctor(){}; // Create a safe reference to the Underscore object for use below.
  var _=function _(obj){if(obj instanceof _)return obj;if(!(this instanceof _))return new _(obj);this._wrapped = obj;}; // Export the Underscore object for **Node.js**, with
  // backwards-compatibility for the old `require()` API. If we're in
  // the browser, add `_` as a global object.
  if(typeof exports !== 'undefined'){if(typeof module !== 'undefined' && module.exports){exports = module.exports = _;}exports._ = _;}else {root._ = _;} // Current version.
  _.VERSION = '1.8.3'; // Internal function that returns an efficient (for current engines) version
  // of the passed-in callback, to be repeatedly applied in other Underscore
  // functions.
  var optimizeCb=function optimizeCb(func,context,argCount){if(context === void 0)return func;switch(argCount == null?3:argCount){case 1:return function(value){return func.call(context,value);};case 2:return function(value,other){return func.call(context,value,other);};case 3:return function(value,index,collection){return func.call(context,value,index,collection);};case 4:return function(accumulator,value,index,collection){return func.call(context,accumulator,value,index,collection);};}return function(){return func.apply(context,arguments);};}; // A mostly-internal function to generate callbacks that can be applied
  // to each element in a collection, returning the desired result — either
  // identity, an arbitrary callback, a property matcher, or a property accessor.
  var cb=function cb(value,context,argCount){if(value == null)return _.identity;if(_.isFunction(value))return optimizeCb(value,context,argCount);if(_.isObject(value))return _.matcher(value);return _.property(value);};_.iteratee = function(value,context){return cb(value,context,Infinity);}; // An internal function for creating assigner functions.
  var createAssigner=function createAssigner(keysFunc,undefinedOnly){return function(obj){var length=arguments.length;if(length < 2 || obj == null)return obj;for(var index=1;index < length;index++) {var source=arguments[index],keys=keysFunc(source),l=keys.length;for(var i=0;i < l;i++) {var key=keys[i];if(!undefinedOnly || obj[key] === void 0)obj[key] = source[key];}}return obj;};}; // An internal function for creating a new object that inherits from another.
  var baseCreate=function baseCreate(prototype){if(!_.isObject(prototype))return {};if(nativeCreate)return nativeCreate(prototype);Ctor.prototype = prototype;var result=new Ctor();Ctor.prototype = null;return result;};var property=function property(key){return function(obj){return obj == null?void 0:obj[key];};}; // Helper for collection methods to determine whether a collection
  // should be iterated as an array or as an object
  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
  var MAX_ARRAY_INDEX=Math.pow(2,53) - 1;var getLength=property('length');var isArrayLike=function isArrayLike(collection){var length=getLength(collection);return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;}; // Collection Functions
  // --------------------
  // The cornerstone, an `each` implementation, aka `forEach`.
  // Handles raw objects in addition to array-likes. Treats all
  // sparse array-likes as if they were dense.
  _.each = _.forEach = function(obj,iteratee,context){iteratee = optimizeCb(iteratee,context);var i,length;if(isArrayLike(obj)){for(i = 0,length = obj.length;i < length;i++) {iteratee(obj[i],i,obj);}}else {var keys=_.keys(obj);for(i = 0,length = keys.length;i < length;i++) {iteratee(obj[keys[i]],keys[i],obj);}}return obj;}; // Return the results of applying the iteratee to each element.
  _.map = _.collect = function(obj,iteratee,context){iteratee = cb(iteratee,context);var keys=!isArrayLike(obj) && _.keys(obj),length=(keys || obj).length,results=Array(length);for(var index=0;index < length;index++) {var currentKey=keys?keys[index]:index;results[index] = iteratee(obj[currentKey],currentKey,obj);}return results;}; // Create a reducing function iterating left or right.
  function createReduce(dir){ // Optimized iterator function as using arguments.length
  // in the main function will deoptimize the, see #1991.
  function iterator(obj,iteratee,memo,keys,index,length){for(;index >= 0 && index < length;index += dir) {var currentKey=keys?keys[index]:index;memo = iteratee(memo,obj[currentKey],currentKey,obj);}return memo;}return function(obj,iteratee,memo,context){iteratee = optimizeCb(iteratee,context,4);var keys=!isArrayLike(obj) && _.keys(obj),length=(keys || obj).length,index=dir > 0?0:length - 1; // Determine the initial value if none is provided.
  if(arguments.length < 3){memo = obj[keys?keys[index]:index];index += dir;}return iterator(obj,iteratee,memo,keys,index,length);};} // **Reduce** builds up a single result from a list of values, aka `inject`,
  // or `foldl`.
  _.reduce = _.foldl = _.inject = createReduce(1); // The right-associative version of reduce, also known as `foldr`.
  _.reduceRight = _.foldr = createReduce(-1); // Return the first value which passes a truth test. Aliased as `detect`.
  _.find = _.detect = function(obj,predicate,context){var key;if(isArrayLike(obj)){key = _.findIndex(obj,predicate,context);}else {key = _.findKey(obj,predicate,context);}if(key !== void 0 && key !== -1)return obj[key];}; // Return all the elements that pass a truth test.
  // Aliased as `select`.
  _.filter = _.select = function(obj,predicate,context){var results=[];predicate = cb(predicate,context);_.each(obj,function(value,index,list){if(predicate(value,index,list))results.push(value);});return results;}; // Return all the elements for which a truth test fails.
  _.reject = function(obj,predicate,context){return _.filter(obj,_.negate(cb(predicate)),context);}; // Determine whether all of the elements match a truth test.
  // Aliased as `all`.
  _.every = _.all = function(obj,predicate,context){predicate = cb(predicate,context);var keys=!isArrayLike(obj) && _.keys(obj),length=(keys || obj).length;for(var index=0;index < length;index++) {var currentKey=keys?keys[index]:index;if(!predicate(obj[currentKey],currentKey,obj))return false;}return true;}; // Determine if at least one element in the object matches a truth test.
  // Aliased as `any`.
  _.some = _.any = function(obj,predicate,context){predicate = cb(predicate,context);var keys=!isArrayLike(obj) && _.keys(obj),length=(keys || obj).length;for(var index=0;index < length;index++) {var currentKey=keys?keys[index]:index;if(predicate(obj[currentKey],currentKey,obj))return true;}return false;}; // Determine if the array or object contains a given item (using `===`).
  // Aliased as `includes` and `include`.
  _.contains = _.includes = _.include = function(obj,item,fromIndex,guard){if(!isArrayLike(obj))obj = _.values(obj);if(typeof fromIndex != 'number' || guard)fromIndex = 0;return _.indexOf(obj,item,fromIndex) >= 0;}; // Invoke a method (with arguments) on every item in a collection.
  _.invoke = function(obj,method){var args=slice.call(arguments,2);var isFunc=_.isFunction(method);return _.map(obj,function(value){var func=isFunc?method:value[method];return func == null?func:func.apply(value,args);});}; // Convenience version of a common use case of `map`: fetching a property.
  _.pluck = function(obj,key){return _.map(obj,_.property(key));}; // Convenience version of a common use case of `filter`: selecting only objects
  // containing specific `key:value` pairs.
  _.where = function(obj,attrs){return _.filter(obj,_.matcher(attrs));}; // Convenience version of a common use case of `find`: getting the first object
  // containing specific `key:value` pairs.
  _.findWhere = function(obj,attrs){return _.find(obj,_.matcher(attrs));}; // Return the maximum element (or element-based computation).
  _.max = function(obj,iteratee,context){var result=-Infinity,lastComputed=-Infinity,value,computed;if(iteratee == null && obj != null){obj = isArrayLike(obj)?obj:_.values(obj);for(var i=0,length=obj.length;i < length;i++) {value = obj[i];if(value > result){result = value;}}}else {iteratee = cb(iteratee,context);_.each(obj,function(value,index,list){computed = iteratee(value,index,list);if(computed > lastComputed || computed === -Infinity && result === -Infinity){result = value;lastComputed = computed;}});}return result;}; // Return the minimum element (or element-based computation).
  _.min = function(obj,iteratee,context){var result=Infinity,lastComputed=Infinity,value,computed;if(iteratee == null && obj != null){obj = isArrayLike(obj)?obj:_.values(obj);for(var i=0,length=obj.length;i < length;i++) {value = obj[i];if(value < result){result = value;}}}else {iteratee = cb(iteratee,context);_.each(obj,function(value,index,list){computed = iteratee(value,index,list);if(computed < lastComputed || computed === Infinity && result === Infinity){result = value;lastComputed = computed;}});}return result;}; // Shuffle a collection, using the modern version of the
  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
  _.shuffle = function(obj){var set=isArrayLike(obj)?obj:_.values(obj);var length=set.length;var shuffled=Array(length);for(var index=0,rand;index < length;index++) {rand = _.random(0,index);if(rand !== index)shuffled[index] = shuffled[rand];shuffled[rand] = set[index];}return shuffled;}; // Sample **n** random values from a collection.
  // If **n** is not specified, returns a single random element.
  // The internal `guard` argument allows it to work with `map`.
  _.sample = function(obj,n,guard){if(n == null || guard){if(!isArrayLike(obj))obj = _.values(obj);return obj[_.random(obj.length - 1)];}return _.shuffle(obj).slice(0,Math.max(0,n));}; // Sort the object's values by a criterion produced by an iteratee.
  _.sortBy = function(obj,iteratee,context){iteratee = cb(iteratee,context);return _.pluck(_.map(obj,function(value,index,list){return {value:value,index:index,criteria:iteratee(value,index,list)};}).sort(function(left,right){var a=left.criteria;var b=right.criteria;if(a !== b){if(a > b || a === void 0)return 1;if(a < b || b === void 0)return -1;}return left.index - right.index;}),'value');}; // An internal function used for aggregate "group by" operations.
  var group=function group(behavior){return function(obj,iteratee,context){var result={};iteratee = cb(iteratee,context);_.each(obj,function(value,index){var key=iteratee(value,index,obj);behavior(result,value,key);});return result;};}; // Groups the object's values by a criterion. Pass either a string attribute
  // to group by, or a function that returns the criterion.
  _.groupBy = group(function(result,value,key){if(_.has(result,key))result[key].push(value);else result[key] = [value];}); // Indexes the object's values by a criterion, similar to `groupBy`, but for
  // when you know that your index values will be unique.
  _.indexBy = group(function(result,value,key){result[key] = value;}); // Counts instances of an object that group by a certain criterion. Pass
  // either a string attribute to count by, or a function that returns the
  // criterion.
  _.countBy = group(function(result,value,key){if(_.has(result,key))result[key]++;else result[key] = 1;}); // Safely create a real, live array from anything iterable.
  _.toArray = function(obj){if(!obj)return [];if(_.isArray(obj))return slice.call(obj);if(isArrayLike(obj))return _.map(obj,_.identity);return _.values(obj);}; // Return the number of elements in an object.
  _.size = function(obj){if(obj == null)return 0;return isArrayLike(obj)?obj.length:_.keys(obj).length;}; // Split a collection into two arrays: one whose elements all satisfy the given
  // predicate, and one whose elements all do not satisfy the predicate.
  _.partition = function(obj,predicate,context){predicate = cb(predicate,context);var pass=[],fail=[];_.each(obj,function(value,key,obj){(predicate(value,key,obj)?pass:fail).push(value);});return [pass,fail];}; // Array Functions
  // ---------------
  // Get the first element of an array. Passing **n** will return the first N
  // values in the array. Aliased as `head` and `take`. The **guard** check
  // allows it to work with `_.map`.
  _.first = _.head = _.take = function(array,n,guard){if(array == null)return void 0;if(n == null || guard)return array[0];return _.initial(array,array.length - n);}; // Returns everything but the last entry of the array. Especially useful on
  // the arguments object. Passing **n** will return all the values in
  // the array, excluding the last N.
  _.initial = function(array,n,guard){return slice.call(array,0,Math.max(0,array.length - (n == null || guard?1:n)));}; // Get the last element of an array. Passing **n** will return the last N
  // values in the array.
  _.last = function(array,n,guard){if(array == null)return void 0;if(n == null || guard)return array[array.length - 1];return _.rest(array,Math.max(0,array.length - n));}; // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
  // Especially useful on the arguments object. Passing an **n** will return
  // the rest N values in the array.
  _.rest = _.tail = _.drop = function(array,n,guard){return slice.call(array,n == null || guard?1:n);}; // Trim out all falsy values from an array.
  _.compact = function(array){return _.filter(array,_.identity);}; // Internal implementation of a recursive `flatten` function.
  var flatten=function flatten(input,shallow,strict,startIndex){var output=[],idx=0;for(var i=startIndex || 0,length=getLength(input);i < length;i++) {var value=input[i];if(isArrayLike(value) && (_.isArray(value) || _.isArguments(value))){ //flatten current level of array or arguments object
  if(!shallow)value = flatten(value,shallow,strict);var j=0,len=value.length;output.length += len;while(j < len) {output[idx++] = value[j++];}}else if(!strict){output[idx++] = value;}}return output;}; // Flatten out an array, either recursively (by default), or just one level.
  _.flatten = function(array,shallow){return flatten(array,shallow,false);}; // Return a version of the array that does not contain the specified value(s).
  _.without = function(array){return _.difference(array,slice.call(arguments,1));}; // Produce a duplicate-free version of the array. If the array has already
  // been sorted, you have the option of using a faster algorithm.
  // Aliased as `unique`.
  _.uniq = _.unique = function(array,isSorted,iteratee,context){if(!_.isBoolean(isSorted)){context = iteratee;iteratee = isSorted;isSorted = false;}if(iteratee != null)iteratee = cb(iteratee,context);var result=[];var seen=[];for(var i=0,length=getLength(array);i < length;i++) {var value=array[i],computed=iteratee?iteratee(value,i,array):value;if(isSorted){if(!i || seen !== computed)result.push(value);seen = computed;}else if(iteratee){if(!_.contains(seen,computed)){seen.push(computed);result.push(value);}}else if(!_.contains(result,value)){result.push(value);}}return result;}; // Produce an array that contains the union: each distinct element from all of
  // the passed-in arrays.
  _.union = function(){return _.uniq(flatten(arguments,true,true));}; // Produce an array that contains every item shared between all the
  // passed-in arrays.
  _.intersection = function(array){var result=[];var argsLength=arguments.length;for(var i=0,length=getLength(array);i < length;i++) {var item=array[i];if(_.contains(result,item))continue;for(var j=1;j < argsLength;j++) {if(!_.contains(arguments[j],item))break;}if(j === argsLength)result.push(item);}return result;}; // Take the difference between one array and a number of other arrays.
  // Only the elements present in just the first array will remain.
  _.difference = function(array){var rest=flatten(arguments,true,true,1);return _.filter(array,function(value){return !_.contains(rest,value);});}; // Zip together multiple lists into a single array -- elements that share
  // an index go together.
  _.zip = function(){return _.unzip(arguments);}; // Complement of _.zip. Unzip accepts an array of arrays and groups
  // each array's elements on shared indices
  _.unzip = function(array){var length=array && _.max(array,getLength).length || 0;var result=Array(length);for(var index=0;index < length;index++) {result[index] = _.pluck(array,index);}return result;}; // Converts lists into objects. Pass either a single array of `[key, value]`
  // pairs, or two parallel arrays of the same length -- one of keys, and one of
  // the corresponding values.
  _.object = function(list,values){var result={};for(var i=0,length=getLength(list);i < length;i++) {if(values){result[list[i]] = values[i];}else {result[list[i][0]] = list[i][1];}}return result;}; // Generator function to create the findIndex and findLastIndex functions
  function createPredicateIndexFinder(dir){return function(array,predicate,context){predicate = cb(predicate,context);var length=getLength(array);var index=dir > 0?0:length - 1;for(;index >= 0 && index < length;index += dir) {if(predicate(array[index],index,array))return index;}return -1;};} // Returns the first index on an array-like that passes a predicate test
  _.findIndex = createPredicateIndexFinder(1);_.findLastIndex = createPredicateIndexFinder(-1); // Use a comparator function to figure out the smallest index at which
  // an object should be inserted so as to maintain order. Uses binary search.
  _.sortedIndex = function(array,obj,iteratee,context){iteratee = cb(iteratee,context,1);var value=iteratee(obj);var low=0,high=getLength(array);while(low < high) {var mid=Math.floor((low + high) / 2);if(iteratee(array[mid]) < value)low = mid + 1;else high = mid;}return low;}; // Generator function to create the indexOf and lastIndexOf functions
  function createIndexFinder(dir,predicateFind,sortedIndex){return function(array,item,idx){var i=0,length=getLength(array);if(typeof idx == 'number'){if(dir > 0){i = idx >= 0?idx:Math.max(idx + length,i);}else {length = idx >= 0?Math.min(idx + 1,length):idx + length + 1;}}else if(sortedIndex && idx && length){idx = sortedIndex(array,item);return array[idx] === item?idx:-1;}if(item !== item){idx = predicateFind(slice.call(array,i,length),_.isNaN);return idx >= 0?idx + i:-1;}for(idx = dir > 0?i:length - 1;idx >= 0 && idx < length;idx += dir) {if(array[idx] === item)return idx;}return -1;};} // Return the position of the first occurrence of an item in an array,
  // or -1 if the item is not included in the array.
  // If the array is large and already in sort order, pass `true`
  // for **isSorted** to use binary search.
  _.indexOf = createIndexFinder(1,_.findIndex,_.sortedIndex);_.lastIndexOf = createIndexFinder(-1,_.findLastIndex); // Generate an integer Array containing an arithmetic progression. A port of
  // the native Python `range()` function. See
  // [the Python documentation](http://docs.python.org/library/functions.html#range).
  _.range = function(start,stop,step){if(stop == null){stop = start || 0;start = 0;}step = step || 1;var length=Math.max(Math.ceil((stop - start) / step),0);var range=Array(length);for(var idx=0;idx < length;idx++,start += step) {range[idx] = start;}return range;}; // Function (ahem) Functions
  // ------------------
  // Determines whether to execute a function as a constructor
  // or a normal function with the provided arguments
  var executeBound=function executeBound(sourceFunc,boundFunc,context,callingContext,args){if(!(callingContext instanceof boundFunc))return sourceFunc.apply(context,args);var self=baseCreate(sourceFunc.prototype);var result=sourceFunc.apply(self,args);if(_.isObject(result))return result;return self;}; // Create a function bound to a given object (assigning `this`, and arguments,
  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
  // available.
  _.bind = function(func,context){if(nativeBind && func.bind === nativeBind)return nativeBind.apply(func,slice.call(arguments,1));if(!_.isFunction(func))throw new TypeError('Bind must be called on a function');var args=slice.call(arguments,2);var bound=function bound(){return executeBound(func,bound,context,this,args.concat(slice.call(arguments)));};return bound;}; // Partially apply a function by creating a version that has had some of its
  // arguments pre-filled, without changing its dynamic `this` context. _ acts
  // as a placeholder, allowing any combination of arguments to be pre-filled.
  _.partial = function(func){var boundArgs=slice.call(arguments,1);var bound=function bound(){var position=0,length=boundArgs.length;var args=Array(length);for(var i=0;i < length;i++) {args[i] = boundArgs[i] === _?arguments[position++]:boundArgs[i];}while(position < arguments.length) args.push(arguments[position++]);return executeBound(func,bound,this,this,args);};return bound;}; // Bind a number of an object's methods to that object. Remaining arguments
  // are the method names to be bound. Useful for ensuring that all callbacks
  // defined on an object belong to it.
  _.bindAll = function(obj){var i,length=arguments.length,key;if(length <= 1)throw new Error('bindAll must be passed function names');for(i = 1;i < length;i++) {key = arguments[i];obj[key] = _.bind(obj[key],obj);}return obj;}; // Memoize an expensive function by storing its results.
  _.memoize = function(func,hasher){var memoize=function memoize(key){var cache=memoize.cache;var address='' + (hasher?hasher.apply(this,arguments):key);if(!_.has(cache,address))cache[address] = func.apply(this,arguments);return cache[address];};memoize.cache = {};return memoize;}; // Delays a function for the given number of milliseconds, and then calls
  // it with the arguments supplied.
  _.delay = function(func,wait){var args=slice.call(arguments,2);return setTimeout(function(){return func.apply(null,args);},wait);}; // Defers a function, scheduling it to run after the current call stack has
  // cleared.
  _.defer = _.partial(_.delay,_,1); // Returns a function, that, when invoked, will only be triggered at most once
  // during a given window of time. Normally, the throttled function will run
  // as much as it can, without ever going more than once per `wait` duration;
  // but if you'd like to disable the execution on the leading edge, pass
  // `{leading: false}`. To disable execution on the trailing edge, ditto.
  _.throttle = function(func,wait,options){var context,args,result;var timeout=null;var previous=0;if(!options)options = {};var later=function later(){previous = options.leading === false?0:_.now();timeout = null;result = func.apply(context,args);if(!timeout)context = args = null;};return function(){var now=_.now();if(!previous && options.leading === false)previous = now;var remaining=wait - (now - previous);context = this;args = arguments;if(remaining <= 0 || remaining > wait){if(timeout){clearTimeout(timeout);timeout = null;}previous = now;result = func.apply(context,args);if(!timeout)context = args = null;}else if(!timeout && options.trailing !== false){timeout = setTimeout(later,remaining);}return result;};}; // Returns a function, that, as long as it continues to be invoked, will not
  // be triggered. The function will be called after it stops being called for
  // N milliseconds. If `immediate` is passed, trigger the function on the
  // leading edge, instead of the trailing.
  _.debounce = function(func,wait,immediate){var timeout,args,context,timestamp,result;var later=function later(){var last=_.now() - timestamp;if(last < wait && last >= 0){timeout = setTimeout(later,wait - last);}else {timeout = null;if(!immediate){result = func.apply(context,args);if(!timeout)context = args = null;}}};return function(){context = this;args = arguments;timestamp = _.now();var callNow=immediate && !timeout;if(!timeout)timeout = setTimeout(later,wait);if(callNow){result = func.apply(context,args);context = args = null;}return result;};}; // Returns the first function passed as an argument to the second,
  // allowing you to adjust arguments, run code before and after, and
  // conditionally execute the original function.
  _.wrap = function(func,wrapper){return _.partial(wrapper,func);}; // Returns a negated version of the passed-in predicate.
  _.negate = function(predicate){return function(){return !predicate.apply(this,arguments);};}; // Returns a function that is the composition of a list of functions, each
  // consuming the return value of the function that follows.
  _.compose = function(){var args=arguments;var start=args.length - 1;return function(){var i=start;var result=args[start].apply(this,arguments);while(i--) result = args[i].call(this,result);return result;};}; // Returns a function that will only be executed on and after the Nth call.
  _.after = function(times,func){return function(){if(--times < 1){return func.apply(this,arguments);}};}; // Returns a function that will only be executed up to (but not including) the Nth call.
  _.before = function(times,func){var memo;return function(){if(--times > 0){memo = func.apply(this,arguments);}if(times <= 1)func = null;return memo;};}; // Returns a function that will be executed at most one time, no matter how
  // often you call it. Useful for lazy initialization.
  _.once = _.partial(_.before,2); // Object Functions
  // ----------------
  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
  var hasEnumBug=!({toString:null}).propertyIsEnumerable('toString');var nonEnumerableProps=['valueOf','isPrototypeOf','toString','propertyIsEnumerable','hasOwnProperty','toLocaleString'];function collectNonEnumProps(obj,keys){var nonEnumIdx=nonEnumerableProps.length;var constructor=obj.constructor;var proto=_.isFunction(constructor) && constructor.prototype || ObjProto; // Constructor is a special case.
  var prop='constructor';if(_.has(obj,prop) && !_.contains(keys,prop))keys.push(prop);while(nonEnumIdx--) {prop = nonEnumerableProps[nonEnumIdx];if(prop in obj && obj[prop] !== proto[prop] && !_.contains(keys,prop)){keys.push(prop);}}} // Retrieve the names of an object's own properties.
  // Delegates to **ECMAScript 5**'s native `Object.keys`
  _.keys = function(obj){if(!_.isObject(obj))return [];if(nativeKeys)return nativeKeys(obj);var keys=[];for(var key in obj) if(_.has(obj,key))keys.push(key); // Ahem, IE < 9.
  if(hasEnumBug)collectNonEnumProps(obj,keys);return keys;}; // Retrieve all the property names of an object.
  _.allKeys = function(obj){if(!_.isObject(obj))return [];var keys=[];for(var key in obj) keys.push(key); // Ahem, IE < 9.
  if(hasEnumBug)collectNonEnumProps(obj,keys);return keys;}; // Retrieve the values of an object's properties.
  _.values = function(obj){var keys=_.keys(obj);var length=keys.length;var values=Array(length);for(var i=0;i < length;i++) {values[i] = obj[keys[i]];}return values;}; // Returns the results of applying the iteratee to each element of the object
  // In contrast to _.map it returns an object
  _.mapObject = function(obj,iteratee,context){iteratee = cb(iteratee,context);var keys=_.keys(obj),length=keys.length,results={},currentKey;for(var index=0;index < length;index++) {currentKey = keys[index];results[currentKey] = iteratee(obj[currentKey],currentKey,obj);}return results;}; // Convert an object into a list of `[key, value]` pairs.
  _.pairs = function(obj){var keys=_.keys(obj);var length=keys.length;var pairs=Array(length);for(var i=0;i < length;i++) {pairs[i] = [keys[i],obj[keys[i]]];}return pairs;}; // Invert the keys and values of an object. The values must be serializable.
  _.invert = function(obj){var result={};var keys=_.keys(obj);for(var i=0,length=keys.length;i < length;i++) {result[obj[keys[i]]] = keys[i];}return result;}; // Return a sorted list of the function names available on the object.
  // Aliased as `methods`
  _.functions = _.methods = function(obj){var names=[];for(var key in obj) {if(_.isFunction(obj[key]))names.push(key);}return names.sort();}; // Extend a given object with all the properties in passed-in object(s).
  _.extend = createAssigner(_.allKeys); // Assigns a given object with all the own properties in the passed-in object(s)
  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
  _.extendOwn = _.assign = createAssigner(_.keys); // Returns the first key on an object that passes a predicate test
  _.findKey = function(obj,predicate,context){predicate = cb(predicate,context);var keys=_.keys(obj),key;for(var i=0,length=keys.length;i < length;i++) {key = keys[i];if(predicate(obj[key],key,obj))return key;}}; // Return a copy of the object only containing the whitelisted properties.
  _.pick = function(object,oiteratee,context){var result={},obj=object,iteratee,keys;if(obj == null)return result;if(_.isFunction(oiteratee)){keys = _.allKeys(obj);iteratee = optimizeCb(oiteratee,context);}else {keys = flatten(arguments,false,false,1);iteratee = function(value,key,obj){return key in obj;};obj = Object(obj);}for(var i=0,length=keys.length;i < length;i++) {var key=keys[i];var value=obj[key];if(iteratee(value,key,obj))result[key] = value;}return result;}; // Return a copy of the object without the blacklisted properties.
  _.omit = function(obj,iteratee,context){if(_.isFunction(iteratee)){iteratee = _.negate(iteratee);}else {var keys=_.map(flatten(arguments,false,false,1),String);iteratee = function(value,key){return !_.contains(keys,key);};}return _.pick(obj,iteratee,context);}; // Fill in a given object with default properties.
  _.defaults = createAssigner(_.allKeys,true); // Creates an object that inherits from the given prototype object.
  // If additional properties are provided then they will be added to the
  // created object.
  _.create = function(prototype,props){var result=baseCreate(prototype);if(props)_.extendOwn(result,props);return result;}; // Create a (shallow-cloned) duplicate of an object.
  _.clone = function(obj){if(!_.isObject(obj))return obj;return _.isArray(obj)?obj.slice():_.extend({},obj);}; // Invokes interceptor with the obj, and then returns obj.
  // The primary purpose of this method is to "tap into" a method chain, in
  // order to perform operations on intermediate results within the chain.
  _.tap = function(obj,interceptor){interceptor(obj);return obj;}; // Returns whether an object has a given set of `key:value` pairs.
  _.isMatch = function(object,attrs){var keys=_.keys(attrs),length=keys.length;if(object == null)return !length;var obj=Object(object);for(var i=0;i < length;i++) {var key=keys[i];if(attrs[key] !== obj[key] || !(key in obj))return false;}return true;}; // Internal recursive comparison function for `isEqual`.
  var eq=function eq(a,b,aStack,bStack){ // Identical objects are equal. `0 === -0`, but they aren't identical.
  // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
  if(a === b)return a !== 0 || 1 / a === 1 / b; // A strict comparison is necessary because `null == undefined`.
  if(a == null || b == null)return a === b; // Unwrap any wrapped objects.
  if(a instanceof _)a = a._wrapped;if(b instanceof _)b = b._wrapped; // Compare `[[Class]]` names.
  var className=toString.call(a);if(className !== toString.call(b))return false;switch(className){ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
  case '[object RegExp]': // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
  case '[object String]': // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
  // equivalent to `new String("5")`.
  return '' + a === '' + b;case '[object Number]': // `NaN`s are equivalent, but non-reflexive.
  // Object(NaN) is equivalent to NaN
  if(+a !== +a)return +b !== +b; // An `egal` comparison is performed for other numeric values.
  return +a === 0?1 / +a === 1 / b:+a === +b;case '[object Date]':case '[object Boolean]': // Coerce dates and booleans to numeric primitive values. Dates are compared by their
  // millisecond representations. Note that invalid dates with millisecond representations
  // of `NaN` are not equivalent.
  return +a === +b;}var areArrays=className === '[object Array]';if(!areArrays){if(typeof a != 'object' || typeof b != 'object')return false; // Objects with different constructors are not equivalent, but `Object`s or `Array`s
  // from different frames are.
  var aCtor=a.constructor,bCtor=b.constructor;if(aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && _.isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)){return false;}} // Assume equality for cyclic structures. The algorithm for detecting cyclic
  // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
  // Initializing stack of traversed objects.
  // It's done here since we only need them for objects and arrays comparison.
  aStack = aStack || [];bStack = bStack || [];var length=aStack.length;while(length--) { // Linear search. Performance is inversely proportional to the number of
  // unique nested structures.
  if(aStack[length] === a)return bStack[length] === b;} // Add the first object to the stack of traversed objects.
  aStack.push(a);bStack.push(b); // Recursively compare objects and arrays.
  if(areArrays){ // Compare array lengths to determine if a deep comparison is necessary.
  length = a.length;if(length !== b.length)return false; // Deep compare the contents, ignoring non-numeric properties.
  while(length--) {if(!eq(a[length],b[length],aStack,bStack))return false;}}else { // Deep compare objects.
  var keys=_.keys(a),key;length = keys.length; // Ensure that both objects contain the same number of properties before comparing deep equality.
  if(_.keys(b).length !== length)return false;while(length--) { // Deep compare each member
  key = keys[length];if(!(_.has(b,key) && eq(a[key],b[key],aStack,bStack)))return false;}} // Remove the first object from the stack of traversed objects.
  aStack.pop();bStack.pop();return true;}; // Perform a deep comparison to check if two objects are equal.
  _.isEqual = function(a,b){return eq(a,b);}; // Is a given array, string, or object empty?
  // An "empty" object has no enumerable own-properties.
  _.isEmpty = function(obj){if(obj == null)return true;if(isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)))return obj.length === 0;return _.keys(obj).length === 0;}; // Is a given value a DOM element?
  _.isElement = function(obj){return !!(obj && obj.nodeType === 1);}; // Is a given value an array?
  // Delegates to ECMA5's native Array.isArray
  _.isArray = nativeIsArray || function(obj){return toString.call(obj) === '[object Array]';}; // Is a given variable an object?
  _.isObject = function(obj){var type=typeof obj;return type === 'function' || type === 'object' && !!obj;}; // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
  _.each(['Arguments','Function','String','Number','Date','RegExp','Error'],function(name){_['is' + name] = function(obj){return toString.call(obj) === '[object ' + name + ']';};}); // Define a fallback version of the method in browsers (ahem, IE < 9), where
  // there isn't any inspectable "Arguments" type.
  if(!_.isArguments(arguments)){_.isArguments = function(obj){return _.has(obj,'callee');};} // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
  // IE 11 (#1621), and in Safari 8 (#1929).
  if(typeof /./ != 'function' && typeof Int8Array != 'object'){_.isFunction = function(obj){return typeof obj == 'function' || false;};} // Is a given object a finite number?
  _.isFinite = function(obj){return isFinite(obj) && !isNaN(parseFloat(obj));}; // Is the given value `NaN`? (NaN is the only number which does not equal itself).
  _.isNaN = function(obj){return _.isNumber(obj) && obj !== +obj;}; // Is a given value a boolean?
  _.isBoolean = function(obj){return obj === true || obj === false || toString.call(obj) === '[object Boolean]';}; // Is a given value equal to null?
  _.isNull = function(obj){return obj === null;}; // Is a given variable undefined?
  _.isUndefined = function(obj){return obj === void 0;}; // Shortcut function for checking if an object has a given property directly
  // on itself (in other words, not on a prototype).
  _.has = function(obj,key){return obj != null && hasOwnProperty.call(obj,key);}; // Utility Functions
  // -----------------
  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
  // previous owner. Returns a reference to the Underscore object.
  _.noConflict = function(){root._ = previousUnderscore;return this;}; // Keep the identity function around for default iteratees.
  _.identity = function(value){return value;}; // Predicate-generating functions. Often useful outside of Underscore.
  _.constant = function(value){return function(){return value;};};_.noop = function(){};_.property = property; // Generates a function for a given object that returns a given property.
  _.propertyOf = function(obj){return obj == null?function(){}:function(key){return obj[key];};}; // Returns a predicate for checking whether an object has a given set of
  // `key:value` pairs.
  _.matcher = _.matches = function(attrs){attrs = _.extendOwn({},attrs);return function(obj){return _.isMatch(obj,attrs);};}; // Run a function **n** times.
  _.times = function(n,iteratee,context){var accum=Array(Math.max(0,n));iteratee = optimizeCb(iteratee,context,1);for(var i=0;i < n;i++) accum[i] = iteratee(i);return accum;}; // Return a random integer between min and max (inclusive).
  _.random = function(min,max){if(max == null){max = min;min = 0;}return min + Math.floor(Math.random() * (max - min + 1));}; // A (possibly faster) way to get the current timestamp as an integer.
  _.now = Date.now || function(){return new Date().getTime();}; // List of HTML entities for escaping.
  var escapeMap={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#x27;','`':'&#x60;'};var unescapeMap=_.invert(escapeMap); // Functions for escaping and unescaping strings to/from HTML interpolation.
  var createEscaper=function createEscaper(map){var escaper=function escaper(match){return map[match];}; // Regexes for identifying a key that needs to be escaped
  var source='(?:' + _.keys(map).join('|') + ')';var testRegexp=RegExp(source);var replaceRegexp=RegExp(source,'g');return function(string){string = string == null?'':'' + string;return testRegexp.test(string)?string.replace(replaceRegexp,escaper):string;};};_.escape = createEscaper(escapeMap);_.unescape = createEscaper(unescapeMap); // If the value of the named `property` is a function then invoke it with the
  // `object` as context; otherwise, return it.
  _.result = function(object,property,fallback){var value=object == null?void 0:object[property];if(value === void 0){value = fallback;}return _.isFunction(value)?value.call(object):value;}; // Generate a unique integer id (unique within the entire client session).
  // Useful for temporary DOM ids.
  var idCounter=0;_.uniqueId = function(prefix){var id=++idCounter + '';return prefix?prefix + id:id;}; // By default, Underscore uses ERB-style template delimiters, change the
  // following template settings to use alternative delimiters.
  _.templateSettings = {evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g}; // When customizing `templateSettings`, if you don't want to define an
  // interpolation, evaluation or escaping regex, we need one that is
  // guaranteed not to match.
  var noMatch=/(.)^/; // Certain characters need to be escaped so that they can be put into a
  // string literal.
  var escapes={"'":"'",'\\':'\\','\r':'r','\n':'n',"\u2028":'u2028',"\u2029":'u2029'};var escaper=/\\|'|\r|\n|\u2028|\u2029/g;var escapeChar=function escapeChar(match){return '\\' + escapes[match];}; // JavaScript micro-templating, similar to John Resig's implementation.
  // Underscore templating handles arbitrary delimiters, preserves whitespace,
  // and correctly escapes quotes within interpolated code.
  // NB: `oldSettings` only exists for backwards compatibility.
  _.template = function(text,settings,oldSettings){if(!settings && oldSettings)settings = oldSettings;settings = _.defaults({},settings,_.templateSettings); // Combine delimiters into one regular expression via alternation.
  var matcher=RegExp([(settings.escape || noMatch).source,(settings.interpolate || noMatch).source,(settings.evaluate || noMatch).source].join('|') + '|$','g'); // Compile the template source, escaping string literals appropriately.
  var index=0;var source="__p+='";text.replace(matcher,function(match,escape,interpolate,evaluate,offset){source += text.slice(index,offset).replace(escaper,escapeChar);index = offset + match.length;if(escape){source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";}else if(interpolate){source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";}else if(evaluate){source += "';\n" + evaluate + "\n__p+='";} // Adobe VMs need the match returned to produce the correct offest.
  return match;});source += "';\n"; // If a variable is not specified, place data values in local scope.
  if(!settings.variable)source = 'with(obj||{}){\n' + source + '}\n';source = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + source + 'return __p;\n';try{var render=new Function(settings.variable || 'obj','_',source);}catch(e) {e.source = source;throw e;}var template=function template(data){return render.call(this,data,_);}; // Provide the compiled source as a convenience for precompilation.
  var argument=settings.variable || 'obj';template.source = 'function(' + argument + '){\n' + source + '}';return template;}; // Add a "chain" function. Start chaining a wrapped Underscore object.
  _.chain = function(obj){var instance=_(obj);instance._chain = true;return instance;}; // OOP
  // ---------------
  // If Underscore is called as a function, it returns a wrapped object that
  // can be used OO-style. This wrapper holds altered versions of all the
  // underscore functions. Wrapped objects may be chained.
  // Helper function to continue chaining intermediate results.
  var result=function result(instance,obj){return instance._chain?_(obj).chain():obj;}; // Add your own custom functions to the Underscore object.
  _.mixin = function(obj){_.each(_.functions(obj),function(name){var func=_[name] = obj[name];_.prototype[name] = function(){var args=[this._wrapped];push.apply(args,arguments);return result(this,func.apply(_,args));};});}; // Add all of the Underscore functions to the wrapper object.
  _.mixin(_); // Add all mutator Array functions to the wrapper.
  _.each(['pop','push','reverse','shift','sort','splice','unshift'],function(name){var method=ArrayProto[name];_.prototype[name] = function(){var obj=this._wrapped;method.apply(obj,arguments);if((name === 'shift' || name === 'splice') && obj.length === 0)delete obj[0];return result(this,obj);};}); // Add all accessor Array functions to the wrapper.
  _.each(['concat','join','slice'],function(name){var method=ArrayProto[name];_.prototype[name] = function(){return result(this,method.apply(this._wrapped,arguments));};}); // Extracts the result from a wrapped and chained object.
  _.prototype.value = function(){return this._wrapped;}; // Provide unwrapping proxy for some methods used in engine operations
  // such as arithmetic and JSON stringification.
  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;_.prototype.toString = function(){return '' + this._wrapped;}; // AMD registration happens at the end for compatibility with AMD loaders
  // that may not enforce next-turn semantics on modules. Even though general
  // practice for AMD registration is to be anonymous, underscore registers
  // as a named module because, like jQuery, it is a base library that is
  // popular enough to be bundled in a third party lib, but not be part of
  // an AMD load request. Those cases could generate an error when an
  // anonymous define() is called outside of a loader request.
  if(typeof define === 'function' && define.amd){define('underscore',[],function(){return _;});}}).call(this);},{}]},{},[]);
  
  //# sourceMappingURL=vendor.bundle-compiled.js.map