{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///backend.js","webpack:///webpack/bootstrap 0ba723809147dbeaa75b","webpack:///./src/backend.js","webpack:////Users/gaearon/p/react-devtools/agent/Agent.js","webpack:////Users/gaearon/p/react-devtools/~/events/events.js","webpack:////Users/gaearon/p/react-devtools/~/object-assign/index.js","webpack:////Users/gaearon/p/react-devtools/utils/guid.js","webpack:////Users/gaearon/p/react-devtools/agent/getIn.js","webpack:////Users/gaearon/p/react-devtools/agent/Bridge.js","webpack:////Users/gaearon/p/react-devtools/agent/consts.js","webpack:////Users/gaearon/p/react-devtools/~/es6-symbol/index.js","webpack:////Users/gaearon/p/react-devtools/~/es6-symbol/is-implemented.js","webpack:////Users/gaearon/p/react-devtools/~/es6-symbol/polyfill.js","webpack:////Users/gaearon/p/react-devtools/~/d/index.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/assign/index.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/assign/is-implemented.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/assign/shim.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/keys/index.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/keys/is-implemented.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/keys/shim.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/valid-value.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/normalize-options.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/object/is-callable.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/string/#/contains/index.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/string/#/contains/is-implemented.js","webpack:////Users/gaearon/p/react-devtools/~/es5-ext/string/#/contains/shim.js","webpack:////Users/gaearon/p/react-devtools/~/es6-symbol/validate-symbol.js","webpack:////Users/gaearon/p/react-devtools/~/es6-symbol/is-symbol.js","webpack:////Users/gaearon/p/react-devtools/agent/hydrate.js","webpack:////Users/gaearon/p/react-devtools/agent/dehydrate.js","webpack:////Users/gaearon/p/react-devtools/~/fbjs/lib/performanceNow.js","webpack:////Users/gaearon/p/react-devtools/~/fbjs/lib/performance.js","webpack:////Users/gaearon/p/react-devtools/~/fbjs/lib/ExecutionEnvironment.js","webpack:////Users/gaearon/p/react-devtools/backend/installGlobalHook.js","webpack:////Users/gaearon/p/react-devtools/plugins/Relay/installRelayHook.js","webpack:////Users/gaearon/p/react-devtools/agent/inject.js","webpack:////Users/gaearon/p/react-devtools/backend/backend.js","webpack:////Users/gaearon/p/react-devtools/backend/attachRenderer.js","webpack:////Users/gaearon/p/react-devtools/backend/getData.js","webpack:////Users/gaearon/p/react-devtools/backend/copyWithSet.js","webpack:////Users/gaearon/p/react-devtools/backend/getDisplayName.js","webpack:////Users/gaearon/p/react-devtools/backend/traverseAllChildrenImpl.js","webpack:////Users/gaearon/p/react-devtools/~/fbjs/lib/invariant.js","webpack:////Users/gaearon/p/react-devtools/backend/getData012.js","webpack:////Users/gaearon/p/react-devtools/backend/attachRendererFiber.js","webpack:////Users/gaearon/p/react-devtools/backend/getDataFiber.js","webpack:////Users/gaearon/p/react-devtools/backend/ReactTypeOfWork.js","webpack:////Users/gaearon/p/react-devtools/plugins/ReactNativeStyle/setupBackend.js","webpack:////Users/gaearon/p/react-devtools/plugins/ReactNativeStyle/resolveBoxStyle.js","webpack:////Users/gaearon/p/react-devtools/plugins/Relay/backend.js","webpack:////Users/gaearon/p/react-devtools/frontend/Highlighter/setup.js","webpack:////Users/gaearon/p/react-devtools/frontend/Highlighter/Highlighter.js","webpack:////Users/gaearon/p/react-devtools/frontend/Highlighter/Overlay.js","webpack:////Users/gaearon/p/react-devtools/frontend/Themes/Fonts.js","webpack:////Users/gaearon/p/react-devtools/frontend/Highlighter/MultiOverlay.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","connectToDevTools","options","scheduleRetry","setTimeout","handleClose","hasClosed","closeListeners","forEach","fn","handleMessage","evt","data","JSON","parse","e","console","error","messageListeners","log","_ref","_ref$host","host","undefined","_ref$port","port","websocket","_ref$resolveRNStyle","resolveRNStyle","_ref$isAppActive","isAppActive","uri","ws","window","WebSocket","onclose","onerror","onmessage","onopen","wall","listen","push","onClose","send","stringify","setupBackend","agent","emit","__REACT_DEVTOOLS_GLOBAL_HOOK__","bridge","Bridge","Agent","rnStyle","rnStyleMeasure","addBridge","setupRNStyle","setupRelay","_connectTimeout","warn","once","inject","clearTimeout","installGlobalHook","installRelayHook","document","on","setupHighlighter","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_typeof","Symbol","iterator","obj","_createClass","defineProperties","target","props","i","length","descriptor","defineProperty","key","protoProps","staticProps","_require","EventEmitter","assign","guid","getIn","_EventEmitter","global","capabilities","_this","getPrototypeOf","internalInstancesById","Map","idsByInternalInstances","WeakMap","renderers","elementData","roots","Set","reactInternals","lastSelected","get","publicInstance","$r","_prevSelected","_scrollUpdate","isReactDOM","createElement","scroll","body","scrollIntoView","dom","editTextContent","_updateScroll","bind","addEventListener","_onScroll","_onClick","_onMouseOver","_onResize","ev","_this2","removeListener","renderer","_this3","_setState","_setProps","_setContext","_makeGlobal","highlight","highlightMany","enabled","_inspectEnabled","text","node","getNodeForID","textContent","$node","$type","type","$inst","newSelected","$0","sentSelected","selectFromDOMNode","scrollToNode","forget","domElement","nodeType","Node","ELEMENT_NODE","parentElement","scrollIntoViewIfNeeded","name","ids","_this4","nodes","component","getNativeFromReactElement","quiet","offsetFromLeaf","arguments","getIDForNode","getId","getReactElementFromNative","_ref2","path","updater","setInProps","_ref3","setInState","_ref4","setInContext","_ref5","$tmp","internalInstance","has","set","add","_this5","children","map","canUpdate","forceUpdate","_this6","requestAnimationFrame","event","stopPropagation","preventDefault","_events","_maxListeners","isFunction","arg","isNumber","isObject","isUndefined","defaultMaxListeners","setMaxListeners","n","isNaN","er","handler","len","args","listeners","Error","err","context","Array","slice","apply","addListener","listener","newListener","warned","trace","g","fired","list","position","splice","removeAllListeners","ret","listenerCount","evlistener","emitter","toObject","val","hasOwnProperty","propIsEnumerable","propertyIsEnumerable","source","from","symbols","to","s","getOwnPropertySymbols","Math","random","toString","substr","_toConsumableArray","arr","isArray","arr2","base","reduce","attr","concat","getWindowFunction","polyfill","String","indexOf","_extends","consts","hydrate","dehydrate","performanceNow","lastRunTimeMS","cancelIdleCallback","requestIdleCallback","cb","delayMS","startTime","didTimeout","timeRemaining","Infinity","endTime","_cbs","_inspectables","_cid","_listeners","_buffer","_flushHandle","_callers","_paused","_wall","_handleMessage","cleaned","proto","protoclean","callback","prev","scheduleFlush","timeout","flushBufferWhileIdle","deadline","chunkCount","chunkSize","round","minChunkSize","take","min","max","currentBuffer","flushBufferSlice","bufferSlice","events","san","setInspectable","ix","off","payload","cancelFlush","_handleCall","_inspectResponse","fns","handlers","result","inspectable","protod","isFn","iterVal","count","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","entry","getOwnPropertyNames","newProto","pIsFn","inspected","meta","symbol","isConcatSpreadable","toPrimitive","toStringTag","unscopables","NativeSymbol","SymbolPolyfill","HiddenSymbol","d","validateSymbol","objPrototype","globalSymbols","generateName","created","desc","ie11BugWorkaround","postfix","gs","description","__description__","__name__","for","keyFor","hasInstance","match","replace","search","species","split","valueOf","normalizeOpts","isCallable","contains","dscr","w","foo","bar","trzy","keys","dest","src","l","object","process","str","searchString","isSymbol","x","last","pop","obj_","getPropType","_reactFragment","ArrayBuffer","isView","DataView","createDehydrated","readOnly","level","byteLength","uninspectable","item","res","performance","now","Date","ExecutionEnvironment","canUseDOM","msPerformance","webkitPerformance","canUseWorkers","Worker","canUseEventListeners","attachEvent","canUseViewport","screen","isInWorker","detectReactBuildType","version","bundleType","Function","Mount","_renderNewRootComponent","renderRootCode","hasDetectedBadDCE","hook","_renderers","helpers","checkDCE","code","reactBuildType","sub","supportsFiber","_fiberRoots","getFiberRoots","rendererID","onCommitFiberUnmount","fiber","handleCommitFiberUnmount","onCommitFiberRoot","mountedRoots","current","isKnownRoot","isUnmounting","memoizedState","element","handleCommitFiberRoot","decorate","old","_eventQueue","_listener","setRequestListener","recordRequest","start","request","requestNumber","then","response","end","textChunks","getQueryString","TEXT_CHUNK_LENGTH","getDebugName","variables","getVariables","instrumentRelayRequests","relayInternals","NetworkLayer","mutation","queries","query","instrumented","_relayInternals","subs","setReactInternals","walkTree","onMounted","addRoot","onUpdated","onUnmounted","success","reactDevtoolsAgent","attachRenderer","oldReact","React","__internals","rid","shutdown","cleanup","rootNodeIDMap","extras","isPre013","Reconciler","findFiberByHostInstance","attachRendererFiber","findNodeHandle","nativeTagToRootNodeID","nativeTag","ComponentTree","getNodeFromInstance","getClosestInstanceFromNode","getID","getNode","_rootNodeID","parentNode","oldMethods","oldRenderComponent","oldRenderRoot","decorateResult","renderComponent","_reactInternalInstance","Component","decorateMany","Mixin","mountComponent","getData012","updateComponent","unmountComponent","rootID","transaction","getData","performUpdateIfNecessary","nextChild","receiveComponent","visit","visitRoot","onMount","walkRoots","_instancesByReactRootID","_instancesByContainerID","restoreMany","onRoot","walkNode","child","olds","state","ref","_currentElement","_renderedComponent","_instance","_renderedChildren","childrenList","unfilteredChildren","filteredChildren","traverseAllChildrenImpl","_traverseContext","childType","_source","_nativeNode","_hostNode","getDisplayName","isReactTopLevelWrapper","_stringText","inst","enqueueForceUpdate","setState","setNativeProps","nativeProps","internalInst","copyWithSet","setIn","parent","copyWithSetImpl","idx","updated","cachedDisplayNames","displayName","FB_MODULE_RE","componentName","moduleName","startsWith","escape","escapeRegex","escaperLookup","=",":","escapedString","getComponentKey","index","nameSoFar","traverseContext","$$typeof","REACT_ELEMENT_TYPE","SEPARATOR","nextName","subtreeCount","nextNamePrefix","SUBSEPARATOR","iteratorFn","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","step","ii","addendum","childrenString","invariant","join","condition","format","a","b","f","argIndex","framesToPop","getOpaqueNode","opaqueNodes","alternate","hasDataChanged","prevFiber","nextFiber","tag","ClassComponent","effectTag","PerformedWork","stateNode","updateQueue","hasForceUpdate","memoizedProps","_debugSource","flushPendingEvents","pendingEvents","enqueueMount","getDataFiber","isRoot","HostRoot","enqueueUpdateIfNecessary","hasChildOrderChanged","enqueueUnmount","opaqueNode","unshift","mountFiber","outer","sibling","updateFiber","prevChildAtSameIndex","prevChild","wasMounted","isMounted","hostInstance","findHostInstanceByFiber","FunctionalComponent","HostPortal","containerInfo","HostComponent","HostText","Fragment","pendingProps","IndeterminateComponent","CoroutineComponent","CoroutineHandlerPhase","YieldComponent","_defineProperty","measureStyle","style","styleOverridesByHostComponentId","measure","y","width","height","left","top","margin","resolveBoxStyle","blank","padding","measuredLayout","shallowClone","nobj","renameStyle","oldName","newName","newStyle","customStyle","lastLength","setStyle","onCall","right","bottom","prefix","capFirst","toUpperCase","subscriptionEnabled","sendStoreData","DefaultStoreData","getNodeData","shouldEnable","_hook$_relayInternals","Highlighter","hl","hideHighlight","refreshMultiOverlay","startInspecting","stopInspecting","remove","captureSubscription","removeEventListener","makeMagnifier","button","innerHTML","backgroundColor","border","outline","cursor","fontSize","zIndex","Overlay","MultiOverlay","win","onSelect","_win","_onSelect","_overlay","_multiOverlay","_subs","_inspecting","onHover","onMouseDown","onClick","unsub","_button","removeChild","removeMultiOverlay","COMMENT_NODE","inspect","removeOverlay","refresh","cancelBubble","onclick","appendChild","findTipPos","dims","tipHeight","innerHeight","innerWidth","getElementDimensions","calculatedStyle","getComputedStyle","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","marginLeft","marginRight","marginTop","marginBottom","paddingLeft","paddingRight","paddingTop","paddingBottom","getOwnerWindow","ownerDocument","defaultView","getOwnerIframe","nodeWindow","frameElement","getBoundingClientRectWithBorderOffset","dimensions","mergeRectOffsets","getBoundingClientRect","rects","previousRect","rect","getNestedBoundingClientRect","boundaryWindow","ownerIframe","currentIframe","onlyOneMore","boxWrap","what","borderStyle","monospace","doc","container","content","borderColor","overlayStyles","background","pointerEvents","tip","borderRadius","fontFamily","family","fontWeight","sizes","normal","nameSpan","color","dimSpan","box","nodeName","toLowerCase","tipPos","large","sansSerif","small","_currentNodes","div","boxSizing"],"mappings":"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","file":"backend.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactDevToolsBackend\"] = factory();\n\telse\n\t\troot[\"ReactDevToolsBackend\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactDevToolsBackend\"] = factory();\n\telse\n\t\troot[\"ReactDevToolsBackend\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar Agent = __webpack_require__(1);\n\tvar Bridge = __webpack_require__(6);\n\tvar installGlobalHook = __webpack_require__(31);\n\tvar installRelayHook = __webpack_require__(32);\n\tvar inject = __webpack_require__(33);\n\tvar setupRNStyle = __webpack_require__(45);\n\tvar setupRelay = __webpack_require__(47);\n\t\n\tinstallGlobalHook(window);\n\tinstallRelayHook(window);\n\t\n\tif (window.document) {\n\t // This shell is universal, and might be used inside a web app.\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.on('react-devtools', function (agent) {\n\t var setupHighlighter = __webpack_require__(48);\n\t setupHighlighter(agent);\n\t });\n\t}\n\t\n\tfunction connectToDevTools(options) {\n\t var _ref = options || {},\n\t _ref$host = _ref.host,\n\t host = _ref$host === undefined ? 'localhost' : _ref$host,\n\t _ref$port = _ref.port,\n\t port = _ref$port === undefined ? 8097 : _ref$port,\n\t websocket = _ref.websocket,\n\t _ref$resolveRNStyle = _ref.resolveRNStyle,\n\t resolveRNStyle = _ref$resolveRNStyle === undefined ? null : _ref$resolveRNStyle,\n\t _ref$isAppActive = _ref.isAppActive,\n\t isAppActive = _ref$isAppActive === undefined ? function () {\n\t return true;\n\t } : _ref$isAppActive;\n\t\n\t function scheduleRetry() {\n\t // Two seconds because RN had issues with too fast retries.\n\t setTimeout(function () {\n\t return connectToDevTools(options);\n\t }, 2000);\n\t }\n\t\n\t if (!isAppActive()) {\n\t // If the app is in background, maybe retry later.\n\t // Don't actually attempt to connect until we're in foreground.\n\t scheduleRetry();\n\t return;\n\t }\n\t\n\t var messageListeners = [];\n\t var closeListeners = [];\n\t var uri = 'ws://' + host + ':' + port;\n\t // If existing websocket is passed, use it.\n\t // This is necessary to support our custom integrations.\n\t // See D6251744.\n\t var ws = websocket ? websocket : new window.WebSocket(uri);\n\t ws.onclose = handleClose;\n\t ws.onerror = handleClose;\n\t ws.onmessage = handleMessage;\n\t ws.onopen = function () {\n\t var wall = {\n\t listen: function listen(fn) {\n\t messageListeners.push(fn);\n\t },\n\t onClose: function onClose(fn) {\n\t closeListeners.push(fn);\n\t },\n\t send: function send(data) {\n\t ws.send(JSON.stringify(data));\n\t }\n\t };\n\t setupBackend(wall, resolveRNStyle);\n\t };\n\t\n\t var hasClosed = false;\n\t function handleClose() {\n\t if (!hasClosed) {\n\t hasClosed = true;\n\t scheduleRetry();\n\t closeListeners.forEach(function (fn) {\n\t return fn();\n\t });\n\t }\n\t }\n\t\n\t function handleMessage(evt) {\n\t var data;\n\t try {\n\t data = JSON.parse(evt.data);\n\t } catch (e) {\n\t console.error('failed to parse json: ' + evt.data);\n\t return;\n\t }\n\t messageListeners.forEach(function (fn) {\n\t try {\n\t fn(data);\n\t } catch (e) {\n\t // jsc doesn't play so well with tracebacks that go into eval'd code,\n\t // so the stack trace here will stop at the `eval()` call. Getting the\n\t // message that caused the error is the best we can do for now.\n\t console.log(data);\n\t throw e;\n\t }\n\t });\n\t }\n\t}\n\t\n\tfunction setupBackend(wall, resolveRNStyle) {\n\t wall.onClose(function () {\n\t if (agent) {\n\t agent.emit('shutdown');\n\t }\n\t // This appears necessary for plugin (e.g. Relay) cleanup.\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.emit('shutdown');\n\t bridge = null;\n\t agent = null;\n\t console.log('closing devtools');\n\t });\n\t\n\t var bridge = new Bridge(wall);\n\t var agent = new Agent(window, {\n\t rnStyle: !!resolveRNStyle,\n\t rnStyleMeasure: !!resolveRNStyle\n\t });\n\t agent.addBridge(bridge);\n\t\n\t if (resolveRNStyle) {\n\t setupRNStyle(bridge, agent, resolveRNStyle);\n\t }\n\t\n\t setupRelay(bridge, agent, window.__REACT_DEVTOOLS_GLOBAL_HOOK__);\n\t\n\t var _connectTimeout = setTimeout(function () {\n\t console.warn('react-devtools agent got no connection');\n\t }, 20000);\n\t\n\t agent.once('connected', function () {\n\t if (!agent) {\n\t return;\n\t }\n\t inject(window.__REACT_DEVTOOLS_GLOBAL_HOOK__, agent);\n\t clearTimeout(_connectTimeout);\n\t });\n\t}\n\t\n\tmodule.exports = { connectToDevTools: connectToDevTools };\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _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; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _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) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _require = __webpack_require__(2),\n\t EventEmitter = _require.EventEmitter;\n\t\n\tvar assign = __webpack_require__(3);\n\tvar guid = __webpack_require__(4);\n\tvar getIn = __webpack_require__(5);\n\t\n\t/**\n\t * The agent lives on the page in the same context as React, observes events\n\t * from the `backend`, and communicates (via a `Bridge`) with the frontend.\n\t *\n\t * It is responsible for generating string IDs (ElementID) for each react\n\t * element, maintaining a mapping of those IDs to elements, handling messages\n\t * from the frontend, and translating between react elements and native\n\t * handles.\n\t *\n\t *\n\t * React\n\t * |\n\t * v\n\t * backend\n\t * |\n\t * v\n\t * -----------\n\t * | **Agent** |\n\t * -----------\n\t * ^\n\t * |\n\t * v\n\t * (Bridge)\n\t * ^\n\t * |\n\t * serialization\n\t * |\n\t * v\n\t * (Bridge)\n\t * ^\n\t * |\n\t * v\n\t * ----------------\n\t * | Frontend Store |\n\t * ----------------\n\t *\n\t *\n\t * Events from the `backend`:\n\t * - root (got a root)\n\t * - mount (a component mounted)\n\t * - update (a component updated)\n\t * - unmount (a component mounted)\n\t *\n\t * Events from the `frontend` Store:\n\t * - see `addBridge` for subscriptions\n\t *\n\t * Events that Agent fires:\n\t * - selected\n\t * - hideHighlight\n\t * - startInspecting\n\t * - stopInspecting\n\t * - shutdown\n\t * - highlight /highlightMany\n\t * - setSelection\n\t * - root\n\t * - mount\n\t * - update\n\t * - unmount\n\t */\n\tvar Agent = function (_EventEmitter) {\n\t _inherits(Agent, _EventEmitter);\n\t\n\t // the window or global -> used to \"make a value available in the console\"\n\t function Agent(global, capabilities) {\n\t _classCallCheck(this, Agent);\n\t\n\t var _this = _possibleConstructorReturn(this, (Agent.__proto__ || Object.getPrototypeOf(Agent)).call(this));\n\t\n\t _this.global = global;\n\t _this.internalInstancesById = new Map();\n\t _this.idsByInternalInstances = new WeakMap();\n\t _this.renderers = new Map();\n\t _this.elementData = new Map();\n\t _this.roots = new Set();\n\t _this.reactInternals = {};\n\t var lastSelected;\n\t _this.on('selected', function (id) {\n\t var data = _this.elementData.get(id);\n\t if (data && data.publicInstance && _this.global.$r === lastSelected) {\n\t _this.global.$r = data.publicInstance;\n\t lastSelected = data.publicInstance;\n\t }\n\t });\n\t _this._prevSelected = null;\n\t _this._scrollUpdate = false;\n\t var isReactDOM = window.document && typeof window.document.createElement === 'function';\n\t _this.capabilities = assign({\n\t scroll: isReactDOM && typeof window.document.body.scrollIntoView === 'function',\n\t dom: isReactDOM,\n\t editTextContent: false\n\t }, capabilities);\n\t\n\t if (isReactDOM) {\n\t _this._updateScroll = _this._updateScroll.bind(_this);\n\t window.addEventListener('scroll', _this._onScroll.bind(_this), true);\n\t window.addEventListener('click', _this._onClick.bind(_this), true);\n\t window.addEventListener('mouseover', _this._onMouseOver.bind(_this), true);\n\t window.addEventListener('resize', _this._onResize.bind(_this), true);\n\t }\n\t return _this;\n\t }\n\t\n\t // returns an \"unsubscribe\" function\n\t\n\t\n\t _createClass(Agent, [{\n\t key: 'sub',\n\t value: function sub(ev, fn) {\n\t var _this2 = this;\n\t\n\t this.on(ev, fn);\n\t return function () {\n\t _this2.removeListener(ev, fn);\n\t };\n\t }\n\t }, {\n\t key: 'setReactInternals',\n\t value: function setReactInternals(renderer, reactInternals) {\n\t this.reactInternals[renderer] = reactInternals;\n\t }\n\t }, {\n\t key: 'addBridge',\n\t value: function addBridge(bridge) {\n\t var _this3 = this;\n\t\n\t /** Events received from the frontend **/\n\t // the initial handshake\n\t bridge.on('requestCapabilities', function () {\n\t bridge.send('capabilities', _this3.capabilities);\n\t _this3.emit('connected');\n\t });\n\t bridge.on('setState', this._setState.bind(this));\n\t bridge.on('setProps', this._setProps.bind(this));\n\t bridge.on('setContext', this._setContext.bind(this));\n\t bridge.on('makeGlobal', this._makeGlobal.bind(this));\n\t bridge.on('highlight', function (id) {\n\t return _this3.highlight(id);\n\t });\n\t bridge.on('highlightMany', function (id) {\n\t return _this3.highlightMany(id);\n\t });\n\t bridge.on('hideHighlight', function () {\n\t return _this3.emit('hideHighlight');\n\t });\n\t bridge.on('startInspecting', function () {\n\t return _this3.emit('startInspecting');\n\t });\n\t bridge.on('stopInspecting', function () {\n\t return _this3.emit('stopInspecting');\n\t });\n\t bridge.on('selected', function (id) {\n\t return _this3.emit('selected', id);\n\t });\n\t bridge.on('setInspectEnabled', function (enabled) {\n\t _this3._inspectEnabled = enabled;\n\t _this3.emit('stopInspecting');\n\t });\n\t bridge.on('shutdown', function () {\n\t return _this3.emit('shutdown');\n\t });\n\t bridge.on('changeTextContent', function (_ref) {\n\t var id = _ref.id,\n\t text = _ref.text;\n\t\n\t var node = _this3.getNodeForID(id);\n\t if (!node) {\n\t return;\n\t }\n\t node.textContent = text;\n\t });\n\t // used to \"inspect node in Elements pane\"\n\t bridge.on('putSelectedNode', function (id) {\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$node = _this3.getNodeForID(id);\n\t });\n\t // used to \"view source in Sources pane\"\n\t bridge.on('putSelectedInstance', function (id) {\n\t var node = _this3.elementData.get(id);\n\t if (node) {\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$type = node.type;\n\t } else {\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$type = null;\n\t }\n\t if (node && node.publicInstance) {\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$inst = node.publicInstance;\n\t } else {\n\t window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$inst = null;\n\t }\n\t });\n\t // used to select the inspected node ($0)\n\t bridge.on('checkSelection', function () {\n\t var newSelected = window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$0;\n\t if (newSelected !== _this3._prevSelected) {\n\t _this3._prevSelected = newSelected;\n\t var sentSelected = window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$node;\n\t if (newSelected !== sentSelected) {\n\t _this3.selectFromDOMNode(newSelected, true);\n\t }\n\t }\n\t });\n\t bridge.on('scrollToNode', function (id) {\n\t return _this3.scrollToNode(id);\n\t });\n\t bridge.on('traceupdatesstatechange', function (value) {\n\t return _this3.emit('traceupdatesstatechange', value);\n\t });\n\t bridge.on('colorizerchange', function (value) {\n\t return _this3.emit('colorizerchange', value);\n\t });\n\t\n\t /** Events sent to the frontend **/\n\t this.on('root', function (id) {\n\t return bridge.send('root', id);\n\t });\n\t this.on('mount', function (data) {\n\t return bridge.send('mount', data);\n\t });\n\t this.on('update', function (data) {\n\t return bridge.send('update', data);\n\t });\n\t this.on('unmount', function (id) {\n\t bridge.send('unmount', id);\n\t // once an element has been unmounted, the bridge doesn't need to be\n\t // able to inspect it anymore.\n\t bridge.forget(id);\n\t });\n\t this.on('setSelection', function (data) {\n\t return bridge.send('select', data);\n\t });\n\t this.on('setInspectEnabled', function (data) {\n\t return bridge.send('setInspectEnabled', data);\n\t });\n\t }\n\t }, {\n\t key: 'scrollToNode',\n\t value: function scrollToNode(id) {\n\t var node = this.getNodeForID(id);\n\t if (!node) {\n\t console.warn('unable to get the node for scrolling');\n\t return;\n\t }\n\t var domElement = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;\n\t if (!domElement) {\n\t console.warn('unable to get the domElement for scrolling');\n\t return;\n\t }\n\t\n\t if (typeof domElement.scrollIntoViewIfNeeded === 'function') {\n\t domElement.scrollIntoViewIfNeeded();\n\t } else if (typeof domElement.scrollIntoView === 'function') {\n\t domElement.scrollIntoView();\n\t }\n\t this.highlight(id);\n\t }\n\t }, {\n\t key: 'highlight',\n\t value: function highlight(id) {\n\t var data = this.elementData.get(id);\n\t var node = this.getNodeForID(id);\n\t if (data && node) {\n\t this.emit('highlight', { node: node, name: data.name, props: data.props });\n\t }\n\t }\n\t }, {\n\t key: 'highlightMany',\n\t value: function highlightMany(ids) {\n\t var _this4 = this;\n\t\n\t var nodes = [];\n\t ids.forEach(function (id) {\n\t var node = _this4.getNodeForID(id);\n\t if (node) {\n\t nodes.push(node);\n\t }\n\t });\n\t if (nodes.length) {\n\t this.emit('highlightMany', nodes);\n\t }\n\t }\n\t }, {\n\t key: 'getNodeForID',\n\t value: function getNodeForID(id) {\n\t var component = this.internalInstancesById.get(id);\n\t if (!component) {\n\t return null;\n\t }\n\t var renderer = this.renderers.get(id);\n\t if (renderer && this.reactInternals[renderer].getNativeFromReactElement) {\n\t return this.reactInternals[renderer].getNativeFromReactElement(component);\n\t }\n\t return null;\n\t }\n\t }, {\n\t key: 'selectFromDOMNode',\n\t value: function selectFromDOMNode(node, quiet) {\n\t var offsetFromLeaf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\t\n\t var id = this.getIDForNode(node);\n\t if (!id) {\n\t return;\n\t }\n\t this.emit('setSelection', { id: id, quiet: quiet, offsetFromLeaf: offsetFromLeaf });\n\t }\n\t\n\t // TODO: remove this method because it's breaking encapsulation.\n\t // It was used by RN inspector but this required leaking Fibers to it.\n\t // RN inspector will use selectFromDOMNode() instead now.\n\t // Remove this method in a few months after this comment was added.\n\t\n\t }, {\n\t key: 'selectFromReactInstance',\n\t value: function selectFromReactInstance(instance, quiet) {\n\t var id = this.getId(instance);\n\t if (!id) {\n\t console.log('no instance id', instance);\n\t return;\n\t }\n\t this.emit('setSelection', { id: id, quiet: quiet });\n\t }\n\t }, {\n\t key: 'getIDForNode',\n\t value: function getIDForNode(node) {\n\t if (!this.reactInternals) {\n\t return null;\n\t }\n\t var component;\n\t for (var renderer in this.reactInternals) {\n\t // If a renderer doesn't know about a reactId, it will throw an error.\n\t try {\n\t // $FlowFixMe possibly null - it's not null\n\t component = this.reactInternals[renderer].getReactElementFromNative(node);\n\t } catch (e) {}\n\t if (component) {\n\t return this.getId(component);\n\t }\n\t }\n\t return null;\n\t }\n\t }, {\n\t key: '_setProps',\n\t value: function _setProps(_ref2) {\n\t var id = _ref2.id,\n\t path = _ref2.path,\n\t value = _ref2.value;\n\t\n\t var data = this.elementData.get(id);\n\t if (data && data.updater && data.updater.setInProps) {\n\t data.updater.setInProps(path, value);\n\t } else {\n\t console.warn(\"trying to set props on a component that doesn't support it\");\n\t }\n\t }\n\t }, {\n\t key: '_setState',\n\t value: function _setState(_ref3) {\n\t var id = _ref3.id,\n\t path = _ref3.path,\n\t value = _ref3.value;\n\t\n\t var data = this.elementData.get(id);\n\t if (data && data.updater && data.updater.setInState) {\n\t data.updater.setInState(path, value);\n\t } else {\n\t console.warn(\"trying to set state on a component that doesn't support it\");\n\t }\n\t }\n\t }, {\n\t key: '_setContext',\n\t value: function _setContext(_ref4) {\n\t var id = _ref4.id,\n\t path = _ref4.path,\n\t value = _ref4.value;\n\t\n\t var data = this.elementData.get(id);\n\t if (data && data.updater && data.updater.setInContext) {\n\t data.updater.setInContext(path, value);\n\t } else {\n\t console.warn(\"trying to set context on a component that doesn't support it\");\n\t }\n\t }\n\t }, {\n\t key: '_makeGlobal',\n\t value: function _makeGlobal(_ref5) {\n\t var id = _ref5.id,\n\t path = _ref5.path;\n\t\n\t var data = this.elementData.get(id);\n\t if (!data) {\n\t return;\n\t }\n\t var value;\n\t if (path === 'instance') {\n\t value = data.publicInstance;\n\t } else {\n\t value = getIn(data, path);\n\t }\n\t this.global.$tmp = value;\n\t console.log('$tmp =', value);\n\t }\n\t }, {\n\t key: 'getId',\n\t value: function getId(internalInstance) {\n\t if ((typeof internalInstance === 'undefined' ? 'undefined' : _typeof(internalInstance)) !== 'object' || !internalInstance) {\n\t return internalInstance;\n\t }\n\t if (!this.idsByInternalInstances.has(internalInstance)) {\n\t this.idsByInternalInstances.set(internalInstance, guid());\n\t this.internalInstancesById.set(this.idsByInternalInstances.get(internalInstance), internalInstance);\n\t }\n\t return this.idsByInternalInstances.get(internalInstance);\n\t }\n\t }, {\n\t key: 'addRoot',\n\t value: function addRoot(renderer, internalInstance) {\n\t var id = this.getId(internalInstance);\n\t this.roots.add(id);\n\t this.emit('root', id);\n\t }\n\t }, {\n\t key: 'onMounted',\n\t value: function onMounted(renderer, component, data) {\n\t var _this5 = this;\n\t\n\t var id = this.getId(component);\n\t this.renderers.set(id, renderer);\n\t this.elementData.set(id, data);\n\t\n\t var send = assign({}, data);\n\t if (send.children && send.children.map) {\n\t send.children = send.children.map(function (c) {\n\t return _this5.getId(c);\n\t });\n\t }\n\t send.id = id;\n\t send.canUpdate = send.updater && !!send.updater.forceUpdate;\n\t delete send.type;\n\t delete send.updater;\n\t this.emit('mount', send);\n\t }\n\t }, {\n\t key: 'onUpdated',\n\t value: function onUpdated(component, data) {\n\t var _this6 = this;\n\t\n\t var id = this.getId(component);\n\t this.elementData.set(id, data);\n\t\n\t var send = assign({}, data);\n\t if (send.children && send.children.map) {\n\t send.children = send.children.map(function (c) {\n\t return _this6.getId(c);\n\t });\n\t }\n\t send.id = id;\n\t send.canUpdate = send.updater && !!send.updater.forceUpdate;\n\t delete send.type;\n\t delete send.updater;\n\t this.emit('update', send);\n\t }\n\t }, {\n\t key: 'onUnmounted',\n\t value: function onUnmounted(component) {\n\t var id = this.getId(component);\n\t this.elementData.delete(id);\n\t this.roots.delete(id);\n\t this.renderers.delete(id);\n\t this.emit('unmount', id);\n\t this.idsByInternalInstances.delete(component);\n\t }\n\t }, {\n\t key: '_onScroll',\n\t value: function _onScroll() {\n\t if (!this._scrollUpdate) {\n\t this._scrollUpdate = true;\n\t window.requestAnimationFrame(this._updateScroll);\n\t }\n\t }\n\t }, {\n\t key: '_updateScroll',\n\t value: function _updateScroll() {\n\t this.emit('refreshMultiOverlay');\n\t this.emit('stopInspecting');\n\t this._scrollUpdate = false;\n\t }\n\t }, {\n\t key: '_onClick',\n\t value: function _onClick(event) {\n\t if (!this._inspectEnabled) {\n\t return;\n\t }\n\t\n\t var id = this.getIDForNode(event.target);\n\t if (!id) {\n\t return;\n\t }\n\t\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t this.emit('setSelection', { id: id });\n\t this.emit('setInspectEnabled', false);\n\t }\n\t }, {\n\t key: '_onMouseOver',\n\t value: function _onMouseOver(event) {\n\t if (this._inspectEnabled) {\n\t var id = this.getIDForNode(event.target);\n\t if (!id) {\n\t return;\n\t }\n\t\n\t this.highlight(id);\n\t }\n\t }\n\t }, {\n\t key: '_onResize',\n\t value: function _onResize(event) {\n\t this.emit('stopInspecting');\n\t }\n\t }]);\n\t\n\t return Agent;\n\t}(EventEmitter);\n\t\n\tmodule.exports = Agent;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tfunction EventEmitter() {\n\t this._events = this._events || {};\n\t this._maxListeners = this._maxListeners || undefined;\n\t}\n\tmodule.exports = EventEmitter;\n\t\n\t// Backwards-compat with node 0.10.x\n\tEventEmitter.EventEmitter = EventEmitter;\n\t\n\tEventEmitter.prototype._events = undefined;\n\tEventEmitter.prototype._maxListeners = undefined;\n\t\n\t// By default EventEmitters will print a warning if more than 10 listeners are\n\t// added to it. This is a useful default which helps finding memory leaks.\n\tEventEmitter.defaultMaxListeners = 10;\n\t\n\t// Obviously not all Emitters should be limited to 10. This function allows\n\t// that to be increased. Set to zero for unlimited.\n\tEventEmitter.prototype.setMaxListeners = function(n) {\n\t if (!isNumber(n) || n < 0 || isNaN(n))\n\t throw TypeError('n must be a positive number');\n\t this._maxListeners = n;\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.emit = function(type) {\n\t var er, handler, len, args, i, listeners;\n\t\n\t if (!this._events)\n\t this._events = {};\n\t\n\t // If there is no 'error' event listener then throw.\n\t if (type === 'error') {\n\t if (!this._events.error ||\n\t (isObject(this._events.error) && !this._events.error.length)) {\n\t er = arguments[1];\n\t if (er instanceof Error) {\n\t throw er; // Unhandled 'error' event\n\t } else {\n\t // At least give some kind of context to the user\n\t var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n\t err.context = er;\n\t throw err;\n\t }\n\t }\n\t }\n\t\n\t handler = this._events[type];\n\t\n\t if (isUndefined(handler))\n\t return false;\n\t\n\t if (isFunction(handler)) {\n\t switch (arguments.length) {\n\t // fast cases\n\t case 1:\n\t handler.call(this);\n\t break;\n\t case 2:\n\t handler.call(this, arguments[1]);\n\t break;\n\t case 3:\n\t handler.call(this, arguments[1], arguments[2]);\n\t break;\n\t // slower\n\t default:\n\t args = Array.prototype.slice.call(arguments, 1);\n\t handler.apply(this, args);\n\t }\n\t } else if (isObject(handler)) {\n\t args = Array.prototype.slice.call(arguments, 1);\n\t listeners = handler.slice();\n\t len = listeners.length;\n\t for (i = 0; i < len; i++)\n\t listeners[i].apply(this, args);\n\t }\n\t\n\t return true;\n\t};\n\t\n\tEventEmitter.prototype.addListener = function(type, listener) {\n\t var m;\n\t\n\t if (!isFunction(listener))\n\t throw TypeError('listener must be a function');\n\t\n\t if (!this._events)\n\t this._events = {};\n\t\n\t // To avoid recursion in the case that type === \"newListener\"! Before\n\t // adding it to the listeners, first emit \"newListener\".\n\t if (this._events.newListener)\n\t this.emit('newListener', type,\n\t isFunction(listener.listener) ?\n\t listener.listener : listener);\n\t\n\t if (!this._events[type])\n\t // Optimize the case of one listener. Don't need the extra array object.\n\t this._events[type] = listener;\n\t else if (isObject(this._events[type]))\n\t // If we've already got an array, just append.\n\t this._events[type].push(listener);\n\t else\n\t // Adding the second element, need to change to array.\n\t this._events[type] = [this._events[type], listener];\n\t\n\t // Check for listener leak\n\t if (isObject(this._events[type]) && !this._events[type].warned) {\n\t if (!isUndefined(this._maxListeners)) {\n\t m = this._maxListeners;\n\t } else {\n\t m = EventEmitter.defaultMaxListeners;\n\t }\n\t\n\t if (m && m > 0 && this._events[type].length > m) {\n\t this._events[type].warned = true;\n\t console.error('(node) warning: possible EventEmitter memory ' +\n\t 'leak detected. %d listeners added. ' +\n\t 'Use emitter.setMaxListeners() to increase limit.',\n\t this._events[type].length);\n\t if (typeof console.trace === 'function') {\n\t // not supported in IE 10\n\t console.trace();\n\t }\n\t }\n\t }\n\t\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\t\n\tEventEmitter.prototype.once = function(type, listener) {\n\t if (!isFunction(listener))\n\t throw TypeError('listener must be a function');\n\t\n\t var fired = false;\n\t\n\t function g() {\n\t this.removeListener(type, g);\n\t\n\t if (!fired) {\n\t fired = true;\n\t listener.apply(this, arguments);\n\t }\n\t }\n\t\n\t g.listener = listener;\n\t this.on(type, g);\n\t\n\t return this;\n\t};\n\t\n\t// emits a 'removeListener' event iff the listener was removed\n\tEventEmitter.prototype.removeListener = function(type, listener) {\n\t var list, position, length, i;\n\t\n\t if (!isFunction(listener))\n\t throw TypeError('listener must be a function');\n\t\n\t if (!this._events || !this._events[type])\n\t return this;\n\t\n\t list = this._events[type];\n\t length = list.length;\n\t position = -1;\n\t\n\t if (list === listener ||\n\t (isFunction(list.listener) && list.listener === listener)) {\n\t delete this._events[type];\n\t if (this._events.removeListener)\n\t this.emit('removeListener', type, listener);\n\t\n\t } else if (isObject(list)) {\n\t for (i = length; i-- > 0;) {\n\t if (list[i] === listener ||\n\t (list[i].listener && list[i].listener === listener)) {\n\t position = i;\n\t break;\n\t }\n\t }\n\t\n\t if (position < 0)\n\t return this;\n\t\n\t if (list.length === 1) {\n\t list.length = 0;\n\t delete this._events[type];\n\t } else {\n\t list.splice(position, 1);\n\t }\n\t\n\t if (this._events.removeListener)\n\t this.emit('removeListener', type, listener);\n\t }\n\t\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.removeAllListeners = function(type) {\n\t var key, listeners;\n\t\n\t if (!this._events)\n\t return this;\n\t\n\t // not listening for removeListener, no need to emit\n\t if (!this._events.removeListener) {\n\t if (arguments.length === 0)\n\t this._events = {};\n\t else if (this._events[type])\n\t delete this._events[type];\n\t return this;\n\t }\n\t\n\t // emit removeListener for all listeners on all events\n\t if (arguments.length === 0) {\n\t for (key in this._events) {\n\t if (key === 'removeListener') continue;\n\t this.removeAllListeners(key);\n\t }\n\t this.removeAllListeners('removeListener');\n\t this._events = {};\n\t return this;\n\t }\n\t\n\t listeners = this._events[type];\n\t\n\t if (isFunction(listeners)) {\n\t this.removeListener(type, listeners);\n\t } else if (listeners) {\n\t // LIFO order\n\t while (listeners.length)\n\t this.removeListener(type, listeners[listeners.length - 1]);\n\t }\n\t delete this._events[type];\n\t\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.listeners = function(type) {\n\t var ret;\n\t if (!this._events || !this._events[type])\n\t ret = [];\n\t else if (isFunction(this._events[type]))\n\t ret = [this._events[type]];\n\t else\n\t ret = this._events[type].slice();\n\t return ret;\n\t};\n\t\n\tEventEmitter.prototype.listenerCount = function(type) {\n\t if (this._events) {\n\t var evlistener = this._events[type];\n\t\n\t if (isFunction(evlistener))\n\t return 1;\n\t else if (evlistener)\n\t return evlistener.length;\n\t }\n\t return 0;\n\t};\n\t\n\tEventEmitter.listenerCount = function(emitter, type) {\n\t return emitter.listenerCount(type);\n\t};\n\t\n\tfunction isFunction(arg) {\n\t return typeof arg === 'function';\n\t}\n\t\n\tfunction isNumber(arg) {\n\t return typeof arg === 'number';\n\t}\n\t\n\tfunction isObject(arg) {\n\t return typeof arg === 'object' && arg !== null;\n\t}\n\t\n\tfunction isUndefined(arg) {\n\t return arg === void 0;\n\t}\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t/* eslint-disable no-unused-vars */\n\t'use strict';\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tmodule.exports = Object.assign || function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (Object.getOwnPropertySymbols) {\n\t\t\t\tsymbols = Object.getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tfunction guid() {\n\t return 'g' + Math.random().toString(16).substr(2);\n\t}\n\t\n\tmodule.exports = guid;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction _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); } }\n\t\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t/**\n\t * Retrieves the value from the path of nested objects\n\t * @param {Object} base Base or root object for path\n\t * @param {Array} path nested path\n\t * @return {any} Value at end of path or `mull`\n\t */\n\tfunction getIn(base, path) {\n\t return path.reduce(function (obj, attr) {\n\t if (obj) {\n\t if (obj.hasOwnProperty(attr)) {\n\t return obj[attr];\n\t }\n\t if (typeof obj[Symbol.iterator] === 'function') {\n\t // Convert iterable to array and return array[index]\n\t return [].concat(_toConsumableArray(obj))[attr];\n\t }\n\t }\n\t\n\t return null;\n\t }, base);\n\t}\n\t\n\tmodule.exports = getIn;\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _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; }; }();\n\t\n\tfunction _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); } }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar consts = __webpack_require__(7);\n\tvar hydrate = __webpack_require__(26);\n\tvar dehydrate = __webpack_require__(27);\n\tvar getIn = __webpack_require__(5);\n\tvar performanceNow = __webpack_require__(28);\n\t\n\t// Use the polyfill if the function is not native implementation\n\tfunction getWindowFunction(name, polyfill) {\n\t if (String(window[name]).indexOf('[native code]') === -1) {\n\t return polyfill;\n\t }\n\t return window[name];\n\t}\n\t\n\t// Custom polyfill that runs the queue with a backoff.\n\t// If you change it, make sure it behaves reasonably well in Firefox.\n\tvar lastRunTimeMS = 5;\n\tvar cancelIdleCallback = getWindowFunction('cancelIdleCallback', clearTimeout);\n\tvar requestIdleCallback = getWindowFunction('requestIdleCallback', function (cb, options) {\n\t // Magic numbers determined by tweaking in Firefox.\n\t // There is no special meaning to them.\n\t var delayMS = 3000 * lastRunTimeMS;\n\t if (delayMS > 500) {\n\t delayMS = 500;\n\t }\n\t\n\t return setTimeout(function () {\n\t var startTime = performanceNow();\n\t cb({\n\t didTimeout: false,\n\t timeRemaining: function timeRemaining() {\n\t return Infinity;\n\t }\n\t });\n\t var endTime = performanceNow();\n\t lastRunTimeMS = (endTime - startTime) / 1000;\n\t }, delayMS);\n\t});\n\t\n\t/**\n\t * The bridge is responsible for serializing requests between the Agent and\n\t * the Frontend Store. It needs to be connected to a Wall object that can send\n\t * JSONable data to the bridge on the other side.\n\t *\n\t * complex data\n\t * |\n\t * v\n\t * [Bridge]\n\t * |\n\t * jsonable data\n\t * |\n\t * v\n\t * [wall]\n\t * |\n\t * v\n\t * ~ some barrier ~\n\t * |\n\t * v\n\t * [wall]\n\t * |\n\t * v\n\t * [Bridge]\n\t * |\n\t * v\n\t * \"hydrated\" data\n\t *\n\t * When an item is passed in that can't be serialized (anything other than a\n\t * plain array, object, or literal value), the object is \"cleaned\", and\n\t * rehydrated on the other side with `Symbol` attributes indicating that the\n\t * object needs to be inspected for more detail.\n\t *\n\t * Example:\n\t *\n\t * bridge.send('evname', {id: 'someid', foo: MyCoolObjectInstance})\n\t * ->\n\t * shows up, hydrated as\n\t * {\n\t * id: 'someid',\n\t * foo: {\n\t * [consts.name]: 'MyCoolObjectInstance',\n\t * [consts.type]: 'object',\n\t * [consts.meta]: {},\n\t * [consts.inspected]: false,\n\t * }\n\t * }\n\t *\n\t * The `consts` variables are Symbols, and as such are non-ennumerable.\n\t * The front-end therefore needs to check for `consts.inspected` on received\n\t * objects, and can thereby display object proxies and inspect them.\n\t *\n\t * Complex objects that are passed are expected to have a top-level `id`\n\t * attribute, which is used for later lookup + inspection. Once it has been\n\t * determined that an object is no longer needed, call `.forget(id)` to clean\n\t * up.\n\t */\n\tvar Bridge = function () {\n\t function Bridge(wall) {\n\t _classCallCheck(this, Bridge);\n\t\n\t this._cbs = new Map();\n\t this._inspectables = new Map();\n\t this._cid = 0;\n\t this._listeners = {};\n\t this._buffer = [];\n\t this._flushHandle = null;\n\t this._callers = {};\n\t this._paused = false;\n\t this._wall = wall;\n\t\n\t wall.listen(this._handleMessage.bind(this));\n\t }\n\t\n\t _createClass(Bridge, [{\n\t key: 'inspect',\n\t value: function inspect(id, path, cb) {\n\t var _cid = this._cid++;\n\t this._cbs.set(_cid, function (data, cleaned, proto, protoclean) {\n\t if (cleaned.length) {\n\t hydrate(data, cleaned);\n\t }\n\t if (proto && protoclean.length) {\n\t hydrate(proto, protoclean);\n\t }\n\t if (proto) {\n\t data[consts.proto] = proto;\n\t }\n\t cb(data);\n\t });\n\t\n\t this._wall.send({\n\t type: 'inspect',\n\t callback: _cid,\n\t path: path,\n\t id: id\n\t });\n\t }\n\t }, {\n\t key: 'call',\n\t value: function call(name, args, cb) {\n\t var _cid = this._cid++;\n\t this._cbs.set(_cid, cb);\n\t\n\t this._wall.send({\n\t type: 'call',\n\t callback: _cid,\n\t args: args,\n\t name: name\n\t });\n\t }\n\t }, {\n\t key: 'onCall',\n\t value: function onCall(name, handler) {\n\t if (this._callers[name]) {\n\t throw new Error('only one call handler per call name allowed');\n\t }\n\t this._callers[name] = handler;\n\t }\n\t }, {\n\t key: 'pause',\n\t value: function pause() {\n\t this._wall.send({\n\t type: 'pause'\n\t });\n\t }\n\t }, {\n\t key: 'resume',\n\t value: function resume() {\n\t this._wall.send({\n\t type: 'resume'\n\t });\n\t }\n\t }, {\n\t key: 'setInspectable',\n\t value: function setInspectable(id, data) {\n\t var prev = this._inspectables.get(id);\n\t if (!prev) {\n\t this._inspectables.set(id, data);\n\t return;\n\t }\n\t this._inspectables.set(id, _extends({}, prev, data));\n\t }\n\t }, {\n\t key: 'send',\n\t value: function send(evt, data) {\n\t this._buffer.push({ evt: evt, data: data });\n\t this.scheduleFlush();\n\t }\n\t }, {\n\t key: 'scheduleFlush',\n\t value: function scheduleFlush() {\n\t if (!this._flushHandle && this._buffer.length) {\n\t var timeout = this._paused ? 5000 : 500;\n\t this._flushHandle = requestIdleCallback(this.flushBufferWhileIdle.bind(this), { timeout: timeout });\n\t }\n\t }\n\t }, {\n\t key: 'cancelFlush',\n\t value: function cancelFlush() {\n\t if (this._flushHandle) {\n\t cancelIdleCallback(this._flushHandle);\n\t this._flushHandle = null;\n\t }\n\t }\n\t }, {\n\t key: 'flushBufferWhileIdle',\n\t value: function flushBufferWhileIdle(deadline) {\n\t this._flushHandle = null;\n\t\n\t // Magic numbers were determined by tweaking in a heavy UI and seeing\n\t // what performs reasonably well both when DevTools are hidden and visible.\n\t // The goal is that we try to catch up but avoid blocking the UI.\n\t // When paused, it's okay to lag more, but not forever because otherwise\n\t // when user activates React tab, it will freeze syncing.\n\t var chunkCount = this._paused ? 20 : 10;\n\t var chunkSize = Math.round(this._buffer.length / chunkCount);\n\t var minChunkSize = this._paused ? 50 : 100;\n\t\n\t while (this._buffer.length && (deadline.timeRemaining() > 0 || deadline.didTimeout)) {\n\t var take = Math.min(this._buffer.length, Math.max(minChunkSize, chunkSize));\n\t var currentBuffer = this._buffer.splice(0, take);\n\t this.flushBufferSlice(currentBuffer);\n\t }\n\t\n\t if (this._buffer.length) {\n\t this.scheduleFlush();\n\t }\n\t }\n\t }, {\n\t key: 'flushBufferSlice',\n\t value: function flushBufferSlice(bufferSlice) {\n\t var _this = this;\n\t\n\t var events = bufferSlice.map(function (_ref) {\n\t var evt = _ref.evt,\n\t data = _ref.data;\n\t\n\t var cleaned = [];\n\t var san = dehydrate(data, cleaned);\n\t if (cleaned.length) {\n\t _this.setInspectable(data.id, data);\n\t }\n\t return { type: 'event', evt: evt, data: san, cleaned: cleaned };\n\t });\n\t this._wall.send({ type: 'many-events', events: events });\n\t }\n\t }, {\n\t key: 'forget',\n\t value: function forget(id) {\n\t this._inspectables.delete(id);\n\t }\n\t }, {\n\t key: 'on',\n\t value: function on(evt, fn) {\n\t if (!this._listeners[evt]) {\n\t this._listeners[evt] = [fn];\n\t } else {\n\t this._listeners[evt].push(fn);\n\t }\n\t }\n\t }, {\n\t key: 'off',\n\t value: function off(evt, fn) {\n\t if (!this._listeners[evt]) {\n\t return;\n\t }\n\t var ix = this._listeners[evt].indexOf(fn);\n\t if (ix !== -1) {\n\t this._listeners[evt].splice(ix, 1);\n\t }\n\t }\n\t }, {\n\t key: 'once',\n\t value: function once(evt, fn) {\n\t var self = this;\n\t var listener = function listener() {\n\t fn.apply(this, arguments);\n\t self.off(evt, listener);\n\t };\n\t this.on(evt, listener);\n\t }\n\t }, {\n\t key: '_handleMessage',\n\t value: function _handleMessage(payload) {\n\t var _this2 = this;\n\t\n\t if (payload.type === 'resume') {\n\t this._paused = false;\n\t this.scheduleFlush();\n\t return;\n\t }\n\t\n\t if (payload.type === 'pause') {\n\t this._paused = true;\n\t this.cancelFlush();\n\t return;\n\t }\n\t\n\t if (payload.type === 'callback') {\n\t var callback = this._cbs.get(payload.id);\n\t if (callback) {\n\t callback.apply(undefined, _toConsumableArray(payload.args));\n\t this._cbs.delete(payload.id);\n\t }\n\t return;\n\t }\n\t\n\t if (payload.type === 'call') {\n\t this._handleCall(payload.name, payload.args, payload.callback);\n\t return;\n\t }\n\t\n\t if (payload.type === 'inspect') {\n\t this._inspectResponse(payload.id, payload.path, payload.callback);\n\t return;\n\t }\n\t\n\t if (payload.type === 'event') {\n\t // console.log('[bridge<-]', payload.evt);\n\t if (payload.cleaned) {\n\t hydrate(payload.data, payload.cleaned);\n\t }\n\t var fns = this._listeners[payload.evt];\n\t var data = payload.data;\n\t if (fns) {\n\t fns.forEach(function (fn) {\n\t return fn(data);\n\t });\n\t }\n\t }\n\t\n\t if (payload.type === 'many-events') {\n\t payload.events.forEach(function (event) {\n\t // console.log('[bridge<-]', payload.evt);\n\t if (event.cleaned) {\n\t hydrate(event.data, event.cleaned);\n\t }\n\t var handlers = _this2._listeners[event.evt];\n\t if (handlers) {\n\t handlers.forEach(function (fn) {\n\t return fn(event.data);\n\t });\n\t }\n\t });\n\t }\n\t }\n\t }, {\n\t key: '_handleCall',\n\t value: function _handleCall(name, args, callback) {\n\t if (!this._callers[name]) {\n\t console.warn('unknown call: \"' + name + '\"');\n\t return;\n\t }\n\t args = !Array.isArray(args) ? [args] : args;\n\t var result;\n\t try {\n\t result = this._callers[name].apply(null, args);\n\t } catch (e) {\n\t console.error('Failed to call', e);\n\t return;\n\t }\n\t this._wall.send({\n\t type: 'callback',\n\t id: callback,\n\t args: [result]\n\t });\n\t }\n\t }, {\n\t key: '_inspectResponse',\n\t value: function _inspectResponse(id, path, callback) {\n\t var inspectable = this._inspectables.get(id);\n\t var result = {};\n\t var cleaned = [];\n\t var proto = null;\n\t var protoclean = [];\n\t\n\t if (inspectable) {\n\t var val = getIn(inspectable, path);\n\t var protod = false;\n\t var isFn = typeof val === 'function';\n\t\n\t if (val && typeof val[Symbol.iterator] === 'function') {\n\t var iterVal = Object.create({}); // flow throws \"object literal incompatible with object type\"\n\t var count = 0;\n\t var _iteratorNormalCompletion = true;\n\t var _didIteratorError = false;\n\t var _iteratorError = undefined;\n\t\n\t try {\n\t for (var _iterator = val[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t var entry = _step.value;\n\t\n\t if (count > 100) {\n\t // TODO: replace this if block with better logic to handle large iterables\n\t break;\n\t }\n\t iterVal[count] = entry;\n\t count++;\n\t }\n\t } catch (err) {\n\t _didIteratorError = true;\n\t _iteratorError = err;\n\t } finally {\n\t try {\n\t if (!_iteratorNormalCompletion && _iterator.return) {\n\t _iterator.return();\n\t }\n\t } finally {\n\t if (_didIteratorError) {\n\t throw _iteratorError;\n\t }\n\t }\n\t }\n\t\n\t val = iterVal;\n\t }\n\t\n\t Object.getOwnPropertyNames(val).forEach(function (name) {\n\t if (name === '__proto__') {\n\t protod = true;\n\t }\n\t if (isFn && (name === 'arguments' || name === 'callee' || name === 'caller')) {\n\t return;\n\t }\n\t result[name] = dehydrate(val[name], cleaned, [name]);\n\t });\n\t\n\t /* eslint-disable no-proto */\n\t if (!protod && val.__proto__ && val.constructor.name !== 'Object') {\n\t var newProto = {};\n\t var pIsFn = typeof val.__proto__ === 'function';\n\t Object.getOwnPropertyNames(val.__proto__).forEach(function (name) {\n\t if (pIsFn && (name === 'arguments' || name === 'callee' || name === 'caller')) {\n\t return;\n\t }\n\t newProto[name] = dehydrate(val.__proto__[name], protoclean, [name]);\n\t });\n\t proto = newProto;\n\t }\n\t /* eslint-enable no-proto */\n\t }\n\t\n\t this._wall.send({\n\t type: 'callback',\n\t id: callback,\n\t args: [result, cleaned, proto, protoclean]\n\t });\n\t }\n\t }]);\n\t\n\t return Bridge;\n\t}();\n\t\n\tmodule.exports = Bridge;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _Symbol = __webpack_require__(8);\n\t\n\tmodule.exports = {\n\t name: _Symbol('name'),\n\t type: _Symbol('type'),\n\t inspected: _Symbol('inspected'),\n\t meta: _Symbol('meta'),\n\t proto: _Symbol('proto')\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(9)() ? Symbol : __webpack_require__(10);\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t\tvar symbol;\n\t\tif (typeof Symbol !== 'function') return false;\n\t\tsymbol = Symbol('test symbol');\n\t\ttry { String(symbol); } catch (e) { return false; }\n\t\tif (typeof Symbol.iterator === 'symbol') return true;\n\t\n\t\t// Return 'true' for polyfills\n\t\tif (typeof Symbol.isConcatSpreadable !== 'object') return false;\n\t\tif (typeof Symbol.iterator !== 'object') return false;\n\t\tif (typeof Symbol.toPrimitive !== 'object') return false;\n\t\tif (typeof Symbol.toStringTag !== 'object') return false;\n\t\tif (typeof Symbol.unscopables !== 'object') return false;\n\t\n\t\treturn true;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// ES2015 Symbol polyfill for environments that do not support it (or partially support it_\n\t\n\t'use strict';\n\t\n\tvar d = __webpack_require__(11)\n\t , validateSymbol = __webpack_require__(24)\n\t\n\t , create = Object.create, defineProperties = Object.defineProperties\n\t , defineProperty = Object.defineProperty, objPrototype = Object.prototype\n\t , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create(null);\n\t\n\tif (typeof Symbol === 'function') NativeSymbol = Symbol;\n\t\n\tvar generateName = (function () {\n\t\tvar created = create(null);\n\t\treturn function (desc) {\n\t\t\tvar postfix = 0, name, ie11BugWorkaround;\n\t\t\twhile (created[desc + (postfix || '')]) ++postfix;\n\t\t\tdesc += (postfix || '');\n\t\t\tcreated[desc] = true;\n\t\t\tname = '@@' + desc;\n\t\t\tdefineProperty(objPrototype, name, d.gs(null, function (value) {\n\t\t\t\t// For IE11 issue see:\n\t\t\t\t// https://connect.microsoft.com/IE/feedbackdetail/view/1928508/\n\t\t\t\t// ie11-broken-getters-on-dom-objects\n\t\t\t\t// https://github.com/medikoo/es6-symbol/issues/12\n\t\t\t\tif (ie11BugWorkaround) return;\n\t\t\t\tie11BugWorkaround = true;\n\t\t\t\tdefineProperty(this, name, d(value));\n\t\t\t\tie11BugWorkaround = false;\n\t\t\t}));\n\t\t\treturn name;\n\t\t};\n\t}());\n\t\n\t// Internal constructor (not one exposed) for creating Symbol instances.\n\t// This one is used to ensure that `someSymbol instanceof Symbol` always return false\n\tHiddenSymbol = function Symbol(description) {\n\t\tif (this instanceof HiddenSymbol) throw new TypeError('TypeError: Symbol is not a constructor');\n\t\treturn SymbolPolyfill(description);\n\t};\n\t\n\t// Exposed `Symbol` constructor\n\t// (returns instances of HiddenSymbol)\n\tmodule.exports = SymbolPolyfill = function Symbol(description) {\n\t\tvar symbol;\n\t\tif (this instanceof Symbol) throw new TypeError('TypeError: Symbol is not a constructor');\n\t\tsymbol = create(HiddenSymbol.prototype);\n\t\tdescription = (description === undefined ? '' : String(description));\n\t\treturn defineProperties(symbol, {\n\t\t\t__description__: d('', description),\n\t\t\t__name__: d('', generateName(description))\n\t\t});\n\t};\n\tdefineProperties(SymbolPolyfill, {\n\t\tfor: d(function (key) {\n\t\t\tif (globalSymbols[key]) return globalSymbols[key];\n\t\t\treturn (globalSymbols[key] = SymbolPolyfill(String(key)));\n\t\t}),\n\t\tkeyFor: d(function (s) {\n\t\t\tvar key;\n\t\t\tvalidateSymbol(s);\n\t\t\tfor (key in globalSymbols) if (globalSymbols[key] === s) return key;\n\t\t}),\n\t\n\t\t// If there's native implementation of given symbol, let's fallback to it\n\t\t// to ensure proper interoperability with other native functions e.g. Array.from\n\t\thasInstance: d('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')),\n\t\tisConcatSpreadable: d('', (NativeSymbol && NativeSymbol.isConcatSpreadable) ||\n\t\t\tSymbolPolyfill('isConcatSpreadable')),\n\t\titerator: d('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')),\n\t\tmatch: d('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')),\n\t\treplace: d('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')),\n\t\tsearch: d('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')),\n\t\tspecies: d('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')),\n\t\tsplit: d('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')),\n\t\ttoPrimitive: d('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')),\n\t\ttoStringTag: d('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')),\n\t\tunscopables: d('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables'))\n\t});\n\t\n\t// Internal tweaks for real symbol producer\n\tdefineProperties(HiddenSymbol.prototype, {\n\t\tconstructor: d(SymbolPolyfill),\n\t\ttoString: d('', function () { return this.__name__; })\n\t});\n\t\n\t// Proper implementation of methods exposed on Symbol.prototype\n\t// They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype\n\tdefineProperties(SymbolPolyfill.prototype, {\n\t\ttoString: d(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }),\n\t\tvalueOf: d(function () { return validateSymbol(this); })\n\t});\n\tdefineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d('',\n\t\tfunction () { return validateSymbol(this); }));\n\tdefineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d('c', 'Symbol'));\n\t\n\t// Proper implementaton of toPrimitive and toStringTag for returned symbol instances\n\tdefineProperty(HiddenSymbol.prototype, SymbolPolyfill.toStringTag,\n\t\td('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));\n\t\n\t// Note: It's important to define `toPrimitive` as last one, as some implementations\n\t// implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)\n\t// And that may invoke error in definition flow:\n\t// See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149\n\tdefineProperty(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,\n\t\td('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar assign = __webpack_require__(12)\n\t , normalizeOpts = __webpack_require__(19)\n\t , isCallable = __webpack_require__(20)\n\t , contains = __webpack_require__(21)\n\t\n\t , d;\n\t\n\td = module.exports = function (dscr, value/*, options*/) {\n\t\tvar c, e, w, options, desc;\n\t\tif ((arguments.length < 2) || (typeof dscr !== 'string')) {\n\t\t\toptions = value;\n\t\t\tvalue = dscr;\n\t\t\tdscr = null;\n\t\t} else {\n\t\t\toptions = arguments[2];\n\t\t}\n\t\tif (dscr == null) {\n\t\t\tc = w = true;\n\t\t\te = false;\n\t\t} else {\n\t\t\tc = contains.call(dscr, 'c');\n\t\t\te = contains.call(dscr, 'e');\n\t\t\tw = contains.call(dscr, 'w');\n\t\t}\n\t\n\t\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\t\treturn !options ? desc : assign(normalizeOpts(options), desc);\n\t};\n\t\n\td.gs = function (dscr, get, set/*, options*/) {\n\t\tvar c, e, options, desc;\n\t\tif (typeof dscr !== 'string') {\n\t\t\toptions = set;\n\t\t\tset = get;\n\t\t\tget = dscr;\n\t\t\tdscr = null;\n\t\t} else {\n\t\t\toptions = arguments[3];\n\t\t}\n\t\tif (get == null) {\n\t\t\tget = undefined;\n\t\t} else if (!isCallable(get)) {\n\t\t\toptions = get;\n\t\t\tget = set = undefined;\n\t\t} else if (set == null) {\n\t\t\tset = undefined;\n\t\t} else if (!isCallable(set)) {\n\t\t\toptions = set;\n\t\t\tset = undefined;\n\t\t}\n\t\tif (dscr == null) {\n\t\t\tc = true;\n\t\t\te = false;\n\t\t} else {\n\t\t\tc = contains.call(dscr, 'c');\n\t\t\te = contains.call(dscr, 'e');\n\t\t}\n\t\n\t\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\t\treturn !options ? desc : assign(normalizeOpts(options), desc);\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(13)()\n\t\t? Object.assign\n\t\t: __webpack_require__(14);\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t\tvar assign = Object.assign, obj;\n\t\tif (typeof assign !== 'function') return false;\n\t\tobj = { foo: 'raz' };\n\t\tassign(obj, { bar: 'dwa' }, { trzy: 'trzy' });\n\t\treturn (obj.foo + obj.bar + obj.trzy) === 'razdwatrzy';\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar keys = __webpack_require__(15)\n\t , value = __webpack_require__(18)\n\t\n\t , max = Math.max;\n\t\n\tmodule.exports = function (dest, src/*, …srcn*/) {\n\t\tvar error, i, l = max(arguments.length, 2), assign;\n\t\tdest = Object(value(dest));\n\t\tassign = function (key) {\n\t\t\ttry { dest[key] = src[key]; } catch (e) {\n\t\t\t\tif (!error) error = e;\n\t\t\t}\n\t\t};\n\t\tfor (i = 1; i < l; ++i) {\n\t\t\tsrc = arguments[i];\n\t\t\tkeys(src).forEach(assign);\n\t\t}\n\t\tif (error !== undefined) throw error;\n\t\treturn dest;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(16)()\n\t\t? Object.keys\n\t\t: __webpack_require__(17);\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t\ttry {\n\t\t\tObject.keys('primitive');\n\t\t\treturn true;\n\t\t} catch (e) { return false; }\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar keys = Object.keys;\n\t\n\tmodule.exports = function (object) {\n\t\treturn keys(object == null ? object : Object(object));\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function (value) {\n\t\tif (value == null) throw new TypeError(\"Cannot use null or undefined\");\n\t\treturn value;\n\t};\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar forEach = Array.prototype.forEach, create = Object.create;\n\t\n\tvar process = function (src, obj) {\n\t\tvar key;\n\t\tfor (key in src) obj[key] = src[key];\n\t};\n\t\n\tmodule.exports = function (options/*, …options*/) {\n\t\tvar result = create(null);\n\t\tforEach.call(arguments, function (options) {\n\t\t\tif (options == null) return;\n\t\t\tprocess(Object(options), result);\n\t\t});\n\t\treturn result;\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t// Deprecated\n\t\n\t'use strict';\n\t\n\tmodule.exports = function (obj) { return typeof obj === 'function'; };\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(22)()\n\t\t? String.prototype.contains\n\t\t: __webpack_require__(23);\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar str = 'razdwatrzy';\n\t\n\tmodule.exports = function () {\n\t\tif (typeof str.contains !== 'function') return false;\n\t\treturn ((str.contains('dwa') === true) && (str.contains('foo') === false));\n\t};\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar indexOf = String.prototype.indexOf;\n\t\n\tmodule.exports = function (searchString/*, position*/) {\n\t\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n\t};\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar isSymbol = __webpack_require__(25);\n\t\n\tmodule.exports = function (value) {\n\t\tif (!isSymbol(value)) throw new TypeError(value + \" is not a symbol\");\n\t\treturn value;\n\t};\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function (x) {\n\t\treturn (x && ((typeof x === 'symbol') || (x['@@toStringTag'] === 'Symbol'))) || false;\n\t};\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar consts = __webpack_require__(7);\n\t\n\tfunction hydrate(data, cleaned) {\n\t cleaned.forEach(function (path) {\n\t var last = path.pop();\n\t var obj = path.reduce(function (obj_, attr) {\n\t return obj_ ? obj_[attr] : null;\n\t }, data);\n\t if (!obj || !obj[last]) {\n\t return;\n\t }\n\t var replace = {};\n\t replace[consts.name] = obj[last].name;\n\t replace[consts.type] = obj[last].type;\n\t replace[consts.meta] = obj[last].meta;\n\t replace[consts.inspected] = false;\n\t obj[last] = replace;\n\t });\n\t}\n\t\n\tmodule.exports = hydrate;\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\t/**\n\t * Get a enhanced/artificial type string based on the object instance\n\t */\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tfunction getPropType(data) {\n\t if (!data) {\n\t return null;\n\t }\n\t var type = typeof data === 'undefined' ? 'undefined' : _typeof(data);\n\t\n\t if (type === 'object') {\n\t if (data._reactFragment) {\n\t return 'react_fragment';\n\t }\n\t if (Array.isArray(data)) {\n\t return 'array';\n\t }\n\t if (ArrayBuffer.isView(data)) {\n\t if (data instanceof DataView) {\n\t return 'data_view';\n\t }\n\t return 'typed_array';\n\t }\n\t if (data instanceof ArrayBuffer) {\n\t return 'array_buffer';\n\t }\n\t if (typeof data[Symbol.iterator] === 'function') {\n\t return 'iterator';\n\t }\n\t if (Object.prototype.toString.call(data) === '[object Date]') {\n\t return 'date';\n\t }\n\t }\n\t\n\t return type;\n\t}\n\t\n\t/**\n\t * Generate the dehydrated metadata for complex object instances\n\t */\n\tfunction createDehydrated(type, data, cleaned, path) {\n\t var meta = {};\n\t\n\t if (type === 'array' || type === 'typed_array') {\n\t meta.length = data.length;\n\t }\n\t if (type === 'iterator' || type === 'typed_array') {\n\t meta.readOnly = true;\n\t }\n\t\n\t cleaned.push(path);\n\t\n\t return {\n\t type: type,\n\t meta: meta,\n\t name: !data.constructor || data.constructor.name === 'Object' ? '' : data.constructor.name\n\t };\n\t}\n\t\n\t/**\n\t * Strip out complex data (instances, functions, and data nested > 2 levels\n\t * deep). The paths of the stripped out objects are appended to the `cleaned`\n\t * list. On the other side of the barrier, the cleaned list is used to\n\t * \"re-hydrate\" the cleaned representation into an object with symbols as\n\t * attributes, so that a sanitized object can be distinguished from a normal\n\t * object.\n\t *\n\t * Input: {\"some\": {\"attr\": fn()}, \"other\": AnInstance}\n\t * Output: {\n\t * \"some\": {\n\t * \"attr\": {\"name\": the fn.name, type: \"function\"}\n\t * },\n\t * \"other\": {\n\t * \"name\": \"AnInstance\",\n\t * \"type\": \"object\",\n\t * },\n\t * }\n\t * and cleaned = [[\"some\", \"attr\"], [\"other\"]]\n\t */\n\tfunction dehydrate(data, cleaned) {\n\t var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\t var level = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\t\n\t\n\t var type = getPropType(data);\n\t\n\t switch (type) {\n\t\n\t case 'function':\n\t cleaned.push(path);\n\t return {\n\t name: data.name,\n\t type: 'function'\n\t };\n\t\n\t case 'string':\n\t return data.length <= 500 ? data : data.slice(0, 500) + '...';\n\t\n\t // We have to do this assignment b/c Flow doesn't think \"symbol\" is\n\t // something typeof would return. Error 'unexpected predicate \"symbol\"'\n\t case 'symbol':\n\t cleaned.push(path);\n\t return {\n\t type: 'symbol',\n\t name: data.toString()\n\t };\n\t\n\t // React Fragments error if you try to inspect them.\n\t case 'react_fragment':\n\t return 'A React Fragment';\n\t\n\t // ArrayBuffers error if you try to inspect them.\n\t case 'array_buffer':\n\t case 'data_view':\n\t cleaned.push(path);\n\t return {\n\t type: type,\n\t name: type === 'data_view' ? 'DataView' : 'ArrayBuffer',\n\t meta: {\n\t length: data.byteLength,\n\t uninspectable: true\n\t }\n\t };\n\t\n\t case 'array':\n\t if (level > 2) {\n\t return createDehydrated(type, data, cleaned, path);\n\t }\n\t return data.map(function (item, i) {\n\t return dehydrate(item, cleaned, path.concat([i]), level + 1);\n\t });\n\t\n\t case 'typed_array':\n\t case 'iterator':\n\t return createDehydrated(type, data, cleaned, path);\n\t case 'date':\n\t cleaned.push(path);\n\t return {\n\t name: data.toString(),\n\t type: 'date',\n\t meta: {\n\t uninspectable: true\n\t }\n\t };\n\t case 'object':\n\t if (level > 2 || data.constructor && typeof data.constructor === 'function' && data.constructor.name !== 'Object') {\n\t return createDehydrated(type, data, cleaned, path);\n\t } else {\n\t\n\t var res = {};\n\t for (var name in data) {\n\t res[name] = dehydrate(data[name], cleaned, path.concat([name]), level + 1);\n\t }\n\t return res;\n\t }\n\t\n\t default:\n\t return data;\n\t }\n\t}\n\t\n\tmodule.exports = dehydrate;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule performanceNow\n\t * @typechecks\n\t */\n\t\n\t'use strict';\n\t\n\tvar performance = __webpack_require__(29);\n\t\n\tvar performanceNow;\n\t\n\t/**\n\t * Detect if we can use `window.performance.now()` and gracefully fallback to\n\t * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n\t * because of Facebook's testing infrastructure.\n\t */\n\tif (performance.now) {\n\t performanceNow = function () {\n\t return performance.now();\n\t };\n\t} else {\n\t performanceNow = function () {\n\t return Date.now();\n\t };\n\t}\n\t\n\tmodule.exports = performanceNow;\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule performance\n\t * @typechecks\n\t */\n\t\n\t'use strict';\n\t\n\tvar ExecutionEnvironment = __webpack_require__(30);\n\t\n\tvar performance;\n\t\n\tif (ExecutionEnvironment.canUseDOM) {\n\t performance = window.performance || window.msPerformance || window.webkitPerformance;\n\t}\n\t\n\tmodule.exports = performance || {};\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ExecutionEnvironment\n\t */\n\t\n\t'use strict';\n\t\n\tvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\t\n\t/**\n\t * Simple, lightweight module assisting with the detection and context of\n\t * Worker. Helps avoid circular dependencies and allows code to reason about\n\t * whether or not they are in a Worker, even if they never include the main\n\t * `ReactWorker` dependency.\n\t */\n\tvar ExecutionEnvironment = {\n\t\n\t canUseDOM: canUseDOM,\n\t\n\t canUseWorkers: typeof Worker !== 'undefined',\n\t\n\t canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\t\n\t canUseViewport: canUseDOM && !!window.screen,\n\t\n\t isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\t\n\t};\n\t\n\tmodule.exports = ExecutionEnvironment;\n\n/***/ },\n/* 31 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\t/**\n\t * NOTE: This file cannot `require` any other modules. We `.toString()` the\n\t * function in some places and inject the source into the page.\n\t */\n\tfunction installGlobalHook(window) {\n\t if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n\t return;\n\t }\n\t function detectReactBuildType(renderer) {\n\t try {\n\t if (typeof renderer.version === 'string') {\n\t // React DOM Fiber (16+)\n\t if (renderer.bundleType > 0) {\n\t // This is not a production build.\n\t // We are currently only using 0 (PROD) and 1 (DEV)\n\t // but might add 2 (PROFILE) in the future.\n\t return 'development';\n\t }\n\t\n\t // React 16 uses flat bundles. If we report the bundle as production\n\t // version, it means we also minified and envified it ourselves.\n\t return 'production';\n\t // Note: There is still a risk that the CommonJS entry point has not\n\t // been envified or uglified. In this case the user would have *both*\n\t // development and production bundle, but only the prod one would run.\n\t // This would be really bad. We have a separate check for this because\n\t // it happens *outside* of the renderer injection. See `checkDCE` below.\n\t }\n\t var toString = Function.prototype.toString;\n\t if (renderer.Mount && renderer.Mount._renderNewRootComponent) {\n\t // React DOM Stack\n\t var renderRootCode = toString.call(renderer.Mount._renderNewRootComponent);\n\t // Filter out bad results (if that is even possible):\n\t if (renderRootCode.indexOf('function') !== 0) {\n\t // Hope for the best if we're not sure.\n\t return 'production';\n\t }\n\t // Check for React DOM Stack < 15.1.0 in development.\n\t // If it contains \"storedMeasure\" call, it's wrapped in ReactPerf (DEV only).\n\t // This would be true even if it's minified, as method name still matches.\n\t if (renderRootCode.indexOf('storedMeasure') !== -1) {\n\t return 'development';\n\t }\n\t // For other versions (and configurations) it's not so easy.\n\t // Let's quickly exclude proper production builds.\n\t // If it contains a warning message, it's either a DEV build,\n\t // or an PROD build without proper dead code elimination.\n\t if (renderRootCode.indexOf('should be a pure function') !== -1) {\n\t // Now how do we tell a DEV build from a bad PROD build?\n\t // If we see NODE_ENV, we're going to assume this is a dev build\n\t // because most likely it is referring to an empty shim.\n\t if (renderRootCode.indexOf('NODE_ENV') !== -1) {\n\t return 'development';\n\t }\n\t // If we see \"development\", we're dealing with an envified DEV build\n\t // (such as the official React DEV UMD).\n\t if (renderRootCode.indexOf('development') !== -1) {\n\t return 'development';\n\t }\n\t // I've seen process.env.NODE_ENV !== 'production' being smartly\n\t // replaced by `true` in DEV by Webpack. I don't know how that\n\t // works but we can safely guard against it because `true` was\n\t // never used in the function source since it was written.\n\t if (renderRootCode.indexOf('true') !== -1) {\n\t return 'development';\n\t }\n\t // By now either it is a production build that has not been minified,\n\t // or (worse) this is a minified development build using non-standard\n\t // environment (e.g. \"staging\"). We're going to look at whether\n\t // the function argument name is mangled:\n\t if (\n\t // 0.13 to 15\n\t renderRootCode.indexOf('nextElement') !== -1 ||\n\t // 0.12\n\t renderRootCode.indexOf('nextComponent') !== -1) {\n\t // We can't be certain whether this is a development build or not,\n\t // but it is definitely unminified.\n\t return 'unminified';\n\t } else {\n\t // This is likely a minified development build.\n\t return 'development';\n\t }\n\t }\n\t // By now we know that it's envified and dead code elimination worked,\n\t // but what if it's still not minified? (Is this even possible?)\n\t // Let's check matches for the first argument name.\n\t if (\n\t // 0.13 to 15\n\t renderRootCode.indexOf('nextElement') !== -1 ||\n\t // 0.12\n\t renderRootCode.indexOf('nextComponent') !== -1) {\n\t return 'unminified';\n\t }\n\t // Seems like we're using the production version.\n\t // Now let's check if we're still on 0.14 or lower:\n\t if (renderRootCode.indexOf('._registerComponent') !== -1) {\n\t // TODO: we can remove the condition above once 16\n\t // is older than a year. Since this branch only runs\n\t // for Stack, we can flip it completely when Stack\n\t // is old enough. The branch for Fiber is above,\n\t // and it can check renderer.version directly.\n\t return 'outdated';\n\t }\n\t // We're all good.\n\t return 'production';\n\t }\n\t } catch (err) {\n\t // Weird environments may exist.\n\t // This code needs a higher fault tolerance\n\t // because it runs even with closed DevTools.\n\t // TODO: should we catch errors in all injected code, and not just this part?\n\t }\n\t return 'production';\n\t }\n\t\n\t var hasDetectedBadDCE = false;\n\t\n\t var hook = {\n\t // Shared between Stack and Fiber:\n\t _renderers: {},\n\t helpers: {},\n\t checkDCE: function checkDCE(fn) {\n\t // This runs for production versions of React.\n\t // Needs to be super safe.\n\t try {\n\t var toString = Function.prototype.toString;\n\t var code = toString.call(fn);\n\t // This is a string embedded in the passed function under DEV-only\n\t // condition. However the function executes only in PROD. Therefore,\n\t // if we see it, dead code elimination did not work.\n\t if (code.indexOf('^_^') > -1) {\n\t // Remember to report during next injection.\n\t hasDetectedBadDCE = true;\n\t // Bonus: throw an exception hoping that it gets picked up by\n\t // a reporting system. Not synchronously so that it doesn't break the\n\t // calling code.\n\t setTimeout(function () {\n\t throw new Error('React is running in production mode, but dead code ' + 'elimination has not been applied. Read how to correctly ' + 'configure React for production: ' + 'https://fb.me/react-perf-use-the-production-build');\n\t });\n\t }\n\t } catch (err) {}\n\t },\n\t inject: function inject(renderer) {\n\t var id = Math.random().toString(16).slice(2);\n\t hook._renderers[id] = renderer;\n\t var reactBuildType = hasDetectedBadDCE ? 'deadcode' : detectReactBuildType(renderer);\n\t hook.emit('renderer', { id: id, renderer: renderer, reactBuildType: reactBuildType });\n\t return id;\n\t },\n\t _listeners: {},\n\t sub: function sub(evt, fn) {\n\t hook.on(evt, fn);\n\t return function () {\n\t return hook.off(evt, fn);\n\t };\n\t },\n\t on: function on(evt, fn) {\n\t if (!hook._listeners[evt]) {\n\t hook._listeners[evt] = [];\n\t }\n\t hook._listeners[evt].push(fn);\n\t },\n\t off: function off(evt, fn) {\n\t if (!hook._listeners[evt]) {\n\t return;\n\t }\n\t var ix = hook._listeners[evt].indexOf(fn);\n\t if (ix !== -1) {\n\t hook._listeners[evt].splice(ix, 1);\n\t }\n\t if (!hook._listeners[evt].length) {\n\t hook._listeners[evt] = null;\n\t }\n\t },\n\t emit: function emit(evt, data) {\n\t if (hook._listeners[evt]) {\n\t hook._listeners[evt].map(function (fn) {\n\t return fn(data);\n\t });\n\t }\n\t },\n\t // Fiber-only:\n\t supportsFiber: true,\n\t _fiberRoots: {},\n\t getFiberRoots: function getFiberRoots(rendererID) {\n\t var roots = hook._fiberRoots;\n\t if (!roots[rendererID]) {\n\t roots[rendererID] = new Set();\n\t }\n\t return roots[rendererID];\n\t },\n\t\n\t onCommitFiberUnmount: function onCommitFiberUnmount(rendererID, fiber) {\n\t // TODO: can we use hook for roots too?\n\t if (hook.helpers[rendererID]) {\n\t hook.helpers[rendererID].handleCommitFiberUnmount(fiber);\n\t }\n\t },\n\t onCommitFiberRoot: function onCommitFiberRoot(rendererID, root) {\n\t var mountedRoots = hook.getFiberRoots(rendererID);\n\t var current = root.current;\n\t var isKnownRoot = mountedRoots.has(root);\n\t var isUnmounting = current.memoizedState == null || current.memoizedState.element == null;\n\t // Keep track of mounted roots so we can hydrate when DevTools connect.\n\t if (!isKnownRoot && !isUnmounting) {\n\t mountedRoots.add(root);\n\t } else if (isKnownRoot && isUnmounting) {\n\t mountedRoots.delete(root);\n\t }\n\t if (hook.helpers[rendererID]) {\n\t hook.helpers[rendererID].handleCommitFiberRoot(root);\n\t }\n\t }\n\t };\n\t Object.defineProperty(window, '__REACT_DEVTOOLS_GLOBAL_HOOK__', {\n\t value: hook\n\t });\n\t}\n\t\n\tmodule.exports = installGlobalHook;\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\t/**\n\t * NOTE: This file cannot `require` any other modules. We `.toString()` the\n\t * function in some places and inject the source into the page.\n\t * Also do not declare any variables in top level scope!\n\t */\n\t\n\tfunction installRelayHook(window) {\n\t var performance = window.performance;\n\t var performanceNow;\n\t if (performance && typeof performance.now === 'function') {\n\t performanceNow = function performanceNow() {\n\t return performance.now();\n\t };\n\t } else {\n\t performanceNow = function performanceNow() {\n\t return Date.now();\n\t };\n\t }\n\t\n\t var TEXT_CHUNK_LENGTH = 500;\n\t\n\t var hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\t if (!hook) {\n\t return;\n\t }\n\t\n\t function decorate(obj, attr, fn) {\n\t var old = obj[attr];\n\t obj[attr] = function () {\n\t var res = old.apply(this, arguments);\n\t fn.apply(this, arguments);\n\t return res;\n\t };\n\t }\n\t\n\t var _eventQueue = [];\n\t var _listener = null;\n\t function emit(name, data) {\n\t _eventQueue.push({ name: name, data: data });\n\t if (_listener) {\n\t _listener(name, data);\n\t }\n\t }\n\t\n\t function setRequestListener(listener) {\n\t if (_listener) {\n\t throw new Error('Relay Devtools: Called only call setRequestListener once.');\n\t }\n\t _listener = listener;\n\t _eventQueue.forEach(function (_ref) {\n\t var name = _ref.name,\n\t data = _ref.data;\n\t\n\t listener(name, data);\n\t });\n\t\n\t return function () {\n\t _listener = null;\n\t };\n\t }\n\t\n\t function recordRequest(type, start, request, requestNumber) {\n\t var id = Math.random().toString(16).substr(2);\n\t request.then(function (response) {\n\t emit('relay:success', {\n\t id: id,\n\t end: performanceNow(),\n\t response: response.response\n\t });\n\t }, function (error) {\n\t emit('relay:failure', {\n\t id: id,\n\t end: performanceNow(),\n\t error: error\n\t });\n\t });\n\t var textChunks = [];\n\t var text = request.getQueryString();\n\t while (text.length > 0) {\n\t textChunks.push(text.substr(0, TEXT_CHUNK_LENGTH));\n\t text = text.substr(TEXT_CHUNK_LENGTH);\n\t }\n\t return {\n\t id: id,\n\t name: request.getDebugName(),\n\t requestNumber: requestNumber,\n\t start: start,\n\t text: textChunks,\n\t type: type,\n\t variables: request.getVariables()\n\t };\n\t }\n\t\n\t var requestNumber = 0;\n\t\n\t function instrumentRelayRequests(relayInternals) {\n\t var NetworkLayer = relayInternals.NetworkLayer;\n\t\n\t decorate(NetworkLayer, 'sendMutation', function (mutation) {\n\t requestNumber++;\n\t emit('relay:pending', [recordRequest('mutation', performanceNow(), mutation, requestNumber)]);\n\t });\n\t\n\t decorate(NetworkLayer, 'sendQueries', function (queries) {\n\t requestNumber++;\n\t var start = performanceNow();\n\t emit('relay:pending', queries.map(function (query) {\n\t return recordRequest('query', start, query, requestNumber);\n\t }));\n\t });\n\t\n\t var instrumented = {};\n\t for (var key in relayInternals) {\n\t if (relayInternals.hasOwnProperty(key)) {\n\t instrumented[key] = relayInternals[key];\n\t }\n\t }\n\t instrumented.setRequestListener = setRequestListener;\n\t return instrumented;\n\t }\n\t\n\t var _relayInternals = null;\n\t Object.defineProperty(hook, '_relayInternals', {\n\t configurable: true,\n\t set: function set(relayInternals) {\n\t _relayInternals = instrumentRelayRequests(relayInternals);\n\t },\n\t get: function get() {\n\t return _relayInternals;\n\t }\n\t });\n\t}\n\t\n\tmodule.exports = installRelayHook;\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar setupBackend = __webpack_require__(34);\n\t\n\tmodule.exports = function (hook, agent) {\n\t var subs = [hook.sub('renderer-attached', function (_ref) {\n\t var id = _ref.id,\n\t renderer = _ref.renderer,\n\t helpers = _ref.helpers;\n\t\n\t agent.setReactInternals(id, helpers);\n\t helpers.walkTree(agent.onMounted.bind(agent, id), agent.addRoot.bind(agent, id));\n\t }), hook.sub('root', function (_ref2) {\n\t var renderer = _ref2.renderer,\n\t internalInstance = _ref2.internalInstance;\n\t return agent.addRoot(renderer, internalInstance);\n\t }), hook.sub('mount', function (_ref3) {\n\t var renderer = _ref3.renderer,\n\t internalInstance = _ref3.internalInstance,\n\t data = _ref3.data;\n\t return agent.onMounted(renderer, internalInstance, data);\n\t }), hook.sub('update', function (_ref4) {\n\t var renderer = _ref4.renderer,\n\t internalInstance = _ref4.internalInstance,\n\t data = _ref4.data;\n\t return agent.onUpdated(internalInstance, data);\n\t }), hook.sub('unmount', function (_ref5) {\n\t var renderer = _ref5.renderer,\n\t internalInstance = _ref5.internalInstance;\n\t return agent.onUnmounted(internalInstance);\n\t })];\n\t\n\t var success = setupBackend(hook);\n\t if (!success) {\n\t return;\n\t }\n\t\n\t hook.emit('react-devtools', agent);\n\t hook.reactDevtoolsAgent = agent;\n\t agent.on('shutdown', function () {\n\t subs.forEach(function (fn) {\n\t return fn();\n\t });\n\t hook.reactDevtoolsAgent = null;\n\t });\n\t};\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t *\n\t * This is the chrome devtools\n\t *\n\t * 1. Devtools sets the __REACT_DEVTOOLS_GLOBAL_HOOK__ global.\n\t * 2. React (if present) calls .inject() with the internal renderer\n\t * 3. Devtools sees the renderer, and then adds this backend, along with the Agent\n\t * and whatever else is needed.\n\t * 4. The agent then calls `.emit('react-devtools', agent)`\n\t *\n\t * Now things are hooked up.\n\t *\n\t * When devtools closes, it calls `cleanup()` to remove the listeners\n\t * and any overhead caused by the backend.\n\t */\n\t'use strict';\n\t\n\tvar attachRenderer = __webpack_require__(35);\n\t\n\tmodule.exports = function setupBackend(hook) {\n\t var oldReact = window.React && window.React.__internals;\n\t if (oldReact && Object.keys(hook._renderers).length === 0) {\n\t hook.inject(oldReact);\n\t }\n\t\n\t for (var rid in hook._renderers) {\n\t hook.helpers[rid] = attachRenderer(hook, rid, hook._renderers[rid]);\n\t hook.emit('renderer-attached', { id: rid, renderer: hook._renderers[rid], helpers: hook.helpers[rid] });\n\t }\n\t\n\t hook.on('renderer', function (_ref) {\n\t var id = _ref.id,\n\t renderer = _ref.renderer;\n\t\n\t hook.helpers[id] = attachRenderer(hook, id, renderer);\n\t hook.emit('renderer-attached', { id: id, renderer: renderer, helpers: hook.helpers[id] });\n\t });\n\t\n\t var shutdown = function shutdown() {\n\t for (var id in hook.helpers) {\n\t hook.helpers[id].cleanup();\n\t }\n\t hook.off('shutdown', shutdown);\n\t };\n\t hook.on('shutdown', shutdown);\n\t\n\t return true;\n\t};\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar getData = __webpack_require__(36);\n\tvar getData012 = __webpack_require__(41);\n\tvar attachRendererFiber = __webpack_require__(42);\n\t\n\t/**\n\t * This takes care of patching the renderer to emit events on the global\n\t * `Hook`. The returned object has a `.cleanup` method to un-patch everything.\n\t */\n\tfunction attachRenderer(hook, rid, renderer) {\n\t var rootNodeIDMap = new Map();\n\t var extras = {};\n\t // Before 0.13 there was no Reconciler, so we patch Component.Mixin\n\t var isPre013 = !renderer.Reconciler;\n\t\n\t // React Fiber\n\t if (typeof renderer.findFiberByHostInstance === 'function') {\n\t return attachRendererFiber(hook, rid, renderer);\n\t }\n\t\n\t // React Native\n\t if (renderer.Mount.findNodeHandle && renderer.Mount.nativeTagToRootNodeID) {\n\t extras.getNativeFromReactElement = function (component) {\n\t return renderer.Mount.findNodeHandle(component);\n\t };\n\t\n\t extras.getReactElementFromNative = function (nativeTag) {\n\t var id = renderer.Mount.nativeTagToRootNodeID(nativeTag);\n\t return rootNodeIDMap.get(id);\n\t };\n\t // React DOM 15+\n\t } else if (renderer.ComponentTree) {\n\t extras.getNativeFromReactElement = function (component) {\n\t return renderer.ComponentTree.getNodeFromInstance(component);\n\t };\n\t\n\t extras.getReactElementFromNative = function (node) {\n\t return renderer.ComponentTree.getClosestInstanceFromNode(node);\n\t };\n\t // React DOM\n\t } else if (renderer.Mount.getID && renderer.Mount.getNode) {\n\t extras.getNativeFromReactElement = function (component) {\n\t try {\n\t return renderer.Mount.getNode(component._rootNodeID);\n\t } catch (e) {\n\t return undefined;\n\t }\n\t };\n\t\n\t extras.getReactElementFromNative = function (node) {\n\t var id = renderer.Mount.getID(node);\n\t while (node && node.parentNode && !id) {\n\t node = node.parentNode;\n\t id = renderer.Mount.getID(node);\n\t }\n\t return rootNodeIDMap.get(id);\n\t };\n\t } else {\n\t console.warn('Unknown react version (does not have getID), probably an unshimmed React Native');\n\t }\n\t\n\t var oldMethods;\n\t var oldRenderComponent;\n\t var oldRenderRoot;\n\t\n\t // React DOM\n\t if (renderer.Mount._renderNewRootComponent) {\n\t oldRenderRoot = decorateResult(renderer.Mount, '_renderNewRootComponent', function (internalInstance) {\n\t hook.emit('root', { renderer: rid, internalInstance: internalInstance });\n\t });\n\t // React Native\n\t } else if (renderer.Mount.renderComponent) {\n\t oldRenderComponent = decorateResult(renderer.Mount, 'renderComponent', function (internalInstance) {\n\t hook.emit('root', { renderer: rid, internalInstance: internalInstance._reactInternalInstance });\n\t });\n\t }\n\t\n\t if (renderer.Component) {\n\t console.error('You are using a version of React with limited support in this version of the devtools.\\nPlease upgrade to use at least 0.13, or you can downgrade to use the old version of the devtools:\\ninstructions here https://github.com/facebook/react-devtools/tree/devtools-next#how-do-i-use-this-for-react--013');\n\t // 0.11 - 0.12\n\t // $FlowFixMe renderer.Component is not \"possibly undefined\"\n\t oldMethods = decorateMany(renderer.Component.Mixin, {\n\t mountComponent: function mountComponent() {\n\t var _this = this;\n\t\n\t rootNodeIDMap.set(this._rootNodeID, this);\n\t // FIXME DOMComponent calls Component.Mixin, and sets up the\n\t // `children` *after* that call, meaning we don't have access to the\n\t // children at this point. Maybe we should find something else to shim\n\t // (do we have access to DOMComponent here?) so that we don't have to\n\t // setTimeout.\n\t setTimeout(function () {\n\t hook.emit('mount', { internalInstance: _this, data: getData012(_this), renderer: rid });\n\t }, 0);\n\t },\n\t updateComponent: function updateComponent() {\n\t var _this2 = this;\n\t\n\t setTimeout(function () {\n\t hook.emit('update', { internalInstance: _this2, data: getData012(_this2), renderer: rid });\n\t }, 0);\n\t },\n\t unmountComponent: function unmountComponent() {\n\t hook.emit('unmount', { internalInstance: this, renderer: rid });\n\t rootNodeIDMap.delete(this._rootNodeID, this);\n\t }\n\t });\n\t } else if (renderer.Reconciler) {\n\t oldMethods = decorateMany(renderer.Reconciler, {\n\t mountComponent: function mountComponent(internalInstance, rootID, transaction, context) {\n\t var data = getData(internalInstance);\n\t rootNodeIDMap.set(internalInstance._rootNodeID, internalInstance);\n\t hook.emit('mount', { internalInstance: internalInstance, data: data, renderer: rid });\n\t },\n\t performUpdateIfNecessary: function performUpdateIfNecessary(internalInstance, nextChild, transaction, context) {\n\t hook.emit('update', { internalInstance: internalInstance, data: getData(internalInstance), renderer: rid });\n\t },\n\t receiveComponent: function receiveComponent(internalInstance, nextChild, transaction, context) {\n\t hook.emit('update', { internalInstance: internalInstance, data: getData(internalInstance), renderer: rid });\n\t },\n\t unmountComponent: function unmountComponent(internalInstance) {\n\t hook.emit('unmount', { internalInstance: internalInstance, renderer: rid });\n\t rootNodeIDMap.delete(internalInstance._rootNodeID, internalInstance);\n\t }\n\t });\n\t }\n\t\n\t extras.walkTree = function (visit, visitRoot) {\n\t var onMount = function onMount(component, data) {\n\t rootNodeIDMap.set(component._rootNodeID, component);\n\t visit(component, data);\n\t };\n\t walkRoots(renderer.Mount._instancesByReactRootID || renderer.Mount._instancesByContainerID, onMount, visitRoot, isPre013);\n\t };\n\t\n\t extras.cleanup = function () {\n\t if (oldMethods) {\n\t if (renderer.Component) {\n\t restoreMany(renderer.Component.Mixin, oldMethods);\n\t } else {\n\t restoreMany(renderer.Reconciler, oldMethods);\n\t }\n\t }\n\t if (oldRenderRoot) {\n\t renderer.Mount._renderNewRootComponent = oldRenderRoot;\n\t }\n\t if (oldRenderComponent) {\n\t renderer.Mount.renderComponent = oldRenderComponent;\n\t }\n\t oldMethods = null;\n\t oldRenderRoot = null;\n\t oldRenderComponent = null;\n\t };\n\t\n\t return extras;\n\t}\n\t\n\tfunction walkRoots(roots, onMount, onRoot, isPre013) {\n\t for (var name in roots) {\n\t walkNode(roots[name], onMount, isPre013);\n\t onRoot(roots[name]);\n\t }\n\t}\n\t\n\tfunction walkNode(internalInstance, onMount, isPre013) {\n\t var data = isPre013 ? getData012(internalInstance) : getData(internalInstance);\n\t if (data.children && Array.isArray(data.children)) {\n\t data.children.forEach(function (child) {\n\t return walkNode(child, onMount, isPre013);\n\t });\n\t }\n\t onMount(internalInstance, data);\n\t}\n\t\n\tfunction decorateResult(obj, attr, fn) {\n\t var old = obj[attr];\n\t obj[attr] = function (instance) {\n\t var res = old.apply(this, arguments);\n\t fn(res);\n\t return res;\n\t };\n\t return old;\n\t}\n\t\n\tfunction decorate(obj, attr, fn) {\n\t var old = obj[attr];\n\t obj[attr] = function (instance) {\n\t var res = old.apply(this, arguments);\n\t fn.apply(this, arguments);\n\t return res;\n\t };\n\t return old;\n\t}\n\t\n\tfunction decorateMany(source, fns) {\n\t var olds = {};\n\t for (var name in fns) {\n\t olds[name] = decorate(source, name, fns[name]);\n\t }\n\t return olds;\n\t}\n\t\n\tfunction restoreMany(source, olds) {\n\t for (var name in olds) {\n\t source[name] = olds[name];\n\t }\n\t}\n\t\n\tmodule.exports = attachRenderer;\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar copyWithSet = __webpack_require__(37);\n\tvar getDisplayName = __webpack_require__(38);\n\tvar traverseAllChildrenImpl = __webpack_require__(39);\n\t\n\t/**\n\t * Convert a react internal instance to a sanitized data object.\n\t */\n\tfunction getData(internalInstance) {\n\t var children = null;\n\t var props = null;\n\t var state = null;\n\t var context = null;\n\t var updater = null;\n\t var name = null;\n\t var type = null;\n\t var key = null;\n\t var ref = null;\n\t var source = null;\n\t var text = null;\n\t var publicInstance = null;\n\t var nodeType = 'Native';\n\t // If the parent is a native node without rendered children, but with\n\t // multiple string children, then the `element` that gets passed in here is\n\t // a plain value -- a string or number.\n\t if ((typeof internalInstance === 'undefined' ? 'undefined' : _typeof(internalInstance)) !== 'object') {\n\t nodeType = 'Text';\n\t text = internalInstance + '';\n\t } else if (internalInstance._currentElement === null || internalInstance._currentElement === false) {\n\t nodeType = 'Empty';\n\t } else if (internalInstance._renderedComponent) {\n\t nodeType = 'NativeWrapper';\n\t children = [internalInstance._renderedComponent];\n\t props = internalInstance._instance.props;\n\t state = internalInstance._instance.state;\n\t context = internalInstance._instance.context;\n\t if (context && Object.keys(context).length === 0) {\n\t context = null;\n\t }\n\t } else if (internalInstance._renderedChildren) {\n\t children = childrenList(internalInstance._renderedChildren);\n\t } else if (internalInstance._currentElement && internalInstance._currentElement.props) {\n\t // This is a native node without rendered children -- meaning the children\n\t // prop is the unfiltered list of children.\n\t // This may include 'null' or even other invalid values, so we need to\n\t // filter it the same way that ReactDOM does.\n\t // Instead of pulling in the whole React library, we just copied over the\n\t // 'traverseAllChildrenImpl' method.\n\t // https://github.com/facebook/react/blob/240b84ed8e1db715d759afaae85033718a0b24e1/src/isomorphic/children/ReactChildren.js#L112-L158\n\t var unfilteredChildren = internalInstance._currentElement.props.children;\n\t var filteredChildren = [];\n\t traverseAllChildrenImpl(unfilteredChildren, '', // nameSoFar\n\t function (_traverseContext, child) {\n\t var childType = typeof child === 'undefined' ? 'undefined' : _typeof(child);\n\t if (childType === 'string' || childType === 'number') {\n\t filteredChildren.push(child);\n\t }\n\t });\n\t if (filteredChildren.length <= 1) {\n\t // children must be an array of nodes or a string or undefined\n\t // can't be an empty array\n\t children = filteredChildren.length ? String(filteredChildren[0]) : undefined;\n\t } else {\n\t children = filteredChildren;\n\t }\n\t }\n\t\n\t if (!props && internalInstance._currentElement && internalInstance._currentElement.props) {\n\t props = internalInstance._currentElement.props;\n\t }\n\t\n\t // != used deliberately here to catch undefined and null\n\t if (internalInstance._currentElement != null) {\n\t type = internalInstance._currentElement.type;\n\t if (internalInstance._currentElement.key) {\n\t key = String(internalInstance._currentElement.key);\n\t }\n\t source = internalInstance._currentElement._source;\n\t ref = internalInstance._currentElement.ref;\n\t if (typeof type === 'string') {\n\t name = type;\n\t if (internalInstance._nativeNode != null) {\n\t publicInstance = internalInstance._nativeNode;\n\t }\n\t if (internalInstance._hostNode != null) {\n\t publicInstance = internalInstance._hostNode;\n\t }\n\t } else if (typeof type === 'function') {\n\t nodeType = 'Composite';\n\t name = getDisplayName(type);\n\t // 0.14 top-level wrapper\n\t // TODO(jared): The backend should just act as if these don't exist.\n\t if (internalInstance._renderedComponent && (internalInstance._currentElement.props === internalInstance._renderedComponent._currentElement || internalInstance._currentElement.type.isReactTopLevelWrapper)) {\n\t nodeType = 'Wrapper';\n\t }\n\t if (name === null) {\n\t name = 'No display name';\n\t }\n\t } else if (typeof internalInstance._stringText === 'string') {\n\t nodeType = 'Text';\n\t text = internalInstance._stringText;\n\t } else {\n\t name = getDisplayName(type);\n\t }\n\t }\n\t\n\t if (internalInstance._instance) {\n\t var inst = internalInstance._instance;\n\t\n\t // A forceUpdate for stateless (functional) components.\n\t var forceUpdate = inst.forceUpdate || inst.updater && inst.updater.enqueueForceUpdate && function (cb) {\n\t inst.updater.enqueueForceUpdate(this, cb, 'forceUpdate');\n\t };\n\t updater = {\n\t setState: inst.setState && inst.setState.bind(inst),\n\t forceUpdate: forceUpdate && forceUpdate.bind(inst),\n\t setInProps: forceUpdate && setInProps.bind(null, internalInstance, forceUpdate),\n\t setInState: inst.forceUpdate && setInState.bind(null, inst),\n\t setInContext: forceUpdate && setInContext.bind(null, inst, forceUpdate)\n\t };\n\t if (typeof type === 'function') {\n\t publicInstance = inst;\n\t }\n\t\n\t // TODO: React ART currently falls in this bucket, but this doesn't\n\t // actually make sense and we should clean this up after stabilizing our\n\t // API for backends\n\t if (inst._renderedChildren) {\n\t children = childrenList(inst._renderedChildren);\n\t }\n\t }\n\t\n\t if (typeof internalInstance.setNativeProps === 'function') {\n\t // For editing styles in RN\n\t updater = {\n\t setNativeProps: function setNativeProps(nativeProps) {\n\t internalInstance.setNativeProps(nativeProps);\n\t }\n\t };\n\t }\n\t\n\t return {\n\t nodeType: nodeType,\n\t type: type,\n\t key: key,\n\t ref: ref,\n\t source: source,\n\t name: name,\n\t props: props,\n\t state: state,\n\t context: context,\n\t children: children,\n\t text: text,\n\t updater: updater,\n\t publicInstance: publicInstance\n\t };\n\t}\n\t\n\tfunction setInProps(internalInst, forceUpdate, path, value) {\n\t var element = internalInst._currentElement;\n\t internalInst._currentElement = _extends({}, element, {\n\t props: copyWithSet(element.props, path, value)\n\t });\n\t forceUpdate.call(internalInst._instance);\n\t}\n\t\n\tfunction setInState(inst, path, value) {\n\t setIn(inst.state, path, value);\n\t inst.forceUpdate();\n\t}\n\t\n\tfunction setInContext(inst, forceUpdate, path, value) {\n\t setIn(inst.context, path, value);\n\t forceUpdate.call(inst);\n\t}\n\t\n\tfunction setIn(obj, path, value) {\n\t var last = path.pop();\n\t var parent = path.reduce(function (obj_, attr) {\n\t return obj_ ? obj_[attr] : null;\n\t }, obj);\n\t if (parent) {\n\t parent[last] = value;\n\t }\n\t}\n\t\n\tfunction childrenList(children) {\n\t var res = [];\n\t for (var name in children) {\n\t res.push(children[name]);\n\t }\n\t return res;\n\t}\n\t\n\tmodule.exports = getData;\n\n/***/ },\n/* 37 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tfunction copyWithSetImpl(obj, path, idx, value) {\n\t if (idx >= path.length) {\n\t return value;\n\t }\n\t var key = path[idx];\n\t var updated = Array.isArray(obj) ? obj.slice() : _extends({}, obj);\n\t // $FlowFixMe number or string is fine here\n\t updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n\t return updated;\n\t}\n\t\n\tfunction copyWithSet(obj, path, value) {\n\t return copyWithSetImpl(obj, path, 0, value);\n\t}\n\t\n\tmodule.exports = copyWithSet;\n\n/***/ },\n/* 38 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar FB_MODULE_RE = /^(.*) \\[from (.*)\\]$/;\n\tvar cachedDisplayNames = new WeakMap();\n\t\n\tfunction getDisplayName(type) {\n\t if (cachedDisplayNames.has(type)) {\n\t return cachedDisplayNames.get(type);\n\t }\n\t\n\t var displayName = void 0;\n\t\n\t // The displayName property is not guaranteed to be a string.\n\t // It's only safe to use for our purposes if it's a string.\n\t // github.com/facebook/react-devtools/issues/803\n\t if (typeof type.displayName === 'string') {\n\t displayName = type.displayName;\n\t }\n\t\n\t if (!displayName) {\n\t displayName = type.name || 'Unknown';\n\t }\n\t\n\t // Facebook-specific hack to turn \"Image [from Image.react]\" into just \"Image\".\n\t // We need displayName with module name for error reports but it clutters the DevTools.\n\t var match = displayName.match(FB_MODULE_RE);\n\t if (match) {\n\t var componentName = match[1];\n\t var moduleName = match[2];\n\t if (componentName && moduleName) {\n\t if (moduleName === componentName || moduleName.startsWith(componentName + '.')) {\n\t displayName = componentName;\n\t }\n\t }\n\t }\n\t\n\t cachedDisplayNames.set(type, displayName);\n\t return displayName;\n\t}\n\t\n\tmodule.exports = getDisplayName;\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar invariant = __webpack_require__(40);\n\t\n\tvar SEPARATOR = '.';\n\tvar SUBSEPARATOR = ':';\n\t\n\tvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\t// The Symbol used to tag the ReactElement type. If there is no native Symbol\n\t// nor polyfill, then a plain number is used for performance.\n\tvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n\tvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element') || 0xeac7;\n\t\n\t/**\n\t * Escape and wrap key so it is safe to use as a reactid\n\t *\n\t * @param {string} key to be escaped.\n\t * @return {string} the escaped key.\n\t */\n\tfunction escape(key) {\n\t var escapeRegex = /[=:]/g;\n\t var escaperLookup = {\n\t '=': '=0',\n\t ':': '=2'\n\t };\n\t var escapedString = ('' + key).replace(escapeRegex, function (match) {\n\t return escaperLookup[match];\n\t });\n\t\n\t return '$' + escapedString;\n\t}\n\t\n\t/**\n\t * Generate a key string that identifies a component within a set.\n\t *\n\t * @param {*} component A component that could contain a manual key.\n\t * @param {number} index Index that is used if a manual key is not provided.\n\t * @return {string}\n\t */\n\tfunction getComponentKey(component, index) {\n\t // Do some typechecking here since we call this blindly. We want to ensure\n\t // that we don't block potential future ES APIs.\n\t if ((typeof component === 'undefined' ? 'undefined' : _typeof(component)) === 'object' && component !== null && component.key != null) {\n\t // Explicit key\n\t return escape(component.key);\n\t }\n\t // Implicit key determined by the index in the set\n\t return index.toString(36);\n\t}\n\t\n\t/**\n\t * We do a copied the 'traverseAllChildrenImpl' method from\n\t * `React.Children` so that we don't pull in the whole React library.\n\t * @param {?*} children Children tree container.\n\t * @param {!string} nameSoFar Name of the key path so far.\n\t * @param {!function} callback Callback to invoke with each child found.\n\t * @param {?*} traverseContext Used to pass information throughout the traversal\n\t * process.\n\t * @return {!number} The number of children in this subtree.\n\t */\n\tfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n\t var type = typeof children === 'undefined' ? 'undefined' : _typeof(children);\n\t\n\t if (type === 'undefined' || type === 'boolean') {\n\t // All of the above are perceived as null.\n\t children = null;\n\t }\n\t\n\t if (children === null || type === 'string' || type === 'number' ||\n\t // The following is inlined from ReactElement. This means we can optimize\n\t // some checks. React Fiber also inlines this logic for similar purposes.\n\t type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\n\t callback(traverseContext, children,\n\t // If it's the only child, treat the name as if it was wrapped in an array\n\t // so that it's consistent if the number of children grows.\n\t nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n\t return 1;\n\t }\n\t\n\t var child;\n\t var nextName;\n\t var subtreeCount = 0; // Count of children found in the current subtree.\n\t var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\t\n\t if (Array.isArray(children)) {\n\t for (var i = 0; i < children.length; i++) {\n\t child = children[i];\n\t nextName = nextNamePrefix + getComponentKey(child, i);\n\t subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n\t }\n\t } else {\n\t var iteratorFn = ITERATOR_SYMBOL && children[ITERATOR_SYMBOL] || children[FAUX_ITERATOR_SYMBOL];\n\t if (typeof iteratorFn === 'function') {\n\t var iterator = iteratorFn.call(children);\n\t var step;\n\t var ii = 0;\n\t while (!(step = iterator.next()).done) {\n\t child = step.value;\n\t nextName = nextNamePrefix + getComponentKey(child, ii++);\n\t subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n\t }\n\t } else if (type === 'object') {\n\t var addendum = ' If you meant to render a collection of children, use an array ' + 'instead.';\n\t var childrenString = '' + children;\n\t invariant(false, 'The React Devtools cannot render an object as a child. (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\n\t }\n\t }\n\t\n\t return subtreeCount;\n\t}\n\t\n\tmodule.exports = traverseAllChildrenImpl;\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule invariant\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\t\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t if (false) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t }\n\t\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\t\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\t\n\tmodule.exports = invariant;\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar copyWithSet = __webpack_require__(37);\n\t\n\tfunction getData012(internalInstance) {\n\t var children = null;\n\t var props = internalInstance.props;\n\t var state = internalInstance.state;\n\t var context = internalInstance.context;\n\t var updater = null;\n\t var name = null;\n\t var type = null;\n\t var key = null;\n\t var ref = null;\n\t var text = null;\n\t var publicInstance = null;\n\t var nodeType = 'Native';\n\t if (internalInstance._renderedComponent) {\n\t nodeType = 'Wrapper';\n\t children = [internalInstance._renderedComponent];\n\t if (context && Object.keys(context).length === 0) {\n\t context = null;\n\t }\n\t } else if (internalInstance._renderedChildren) {\n\t name = internalInstance.constructor.displayName;\n\t children = childrenList(internalInstance._renderedChildren);\n\t } else if (typeof props.children === 'string') {\n\t // string children\n\t name = internalInstance.constructor.displayName;\n\t children = props.children;\n\t nodeType = 'Native';\n\t }\n\t\n\t if (!props && internalInstance._currentElement && internalInstance._currentElement.props) {\n\t props = internalInstance._currentElement.props;\n\t }\n\t\n\t if (internalInstance._currentElement) {\n\t type = internalInstance._currentElement.type;\n\t if (internalInstance._currentElement.key) {\n\t key = String(internalInstance._currentElement.key);\n\t }\n\t ref = internalInstance._currentElement.ref;\n\t if (typeof type === 'string') {\n\t name = type;\n\t } else {\n\t nodeType = 'Composite';\n\t name = type.displayName;\n\t if (!name) {\n\t name = 'No display name';\n\t }\n\t }\n\t }\n\t\n\t if (!name) {\n\t name = internalInstance.constructor.displayName || 'No display name';\n\t nodeType = 'Composite';\n\t }\n\t\n\t if (typeof props === 'string') {\n\t nodeType = 'Text';\n\t text = props;\n\t props = null;\n\t name = null;\n\t }\n\t\n\t if (internalInstance.forceUpdate) {\n\t updater = {\n\t setState: internalInstance.setState.bind(internalInstance),\n\t forceUpdate: internalInstance.forceUpdate.bind(internalInstance),\n\t setInProps: internalInstance.forceUpdate && setInProps.bind(null, internalInstance),\n\t setInState: internalInstance.forceUpdate && setInState.bind(null, internalInstance),\n\t setInContext: internalInstance.forceUpdate && setInContext.bind(null, internalInstance)\n\t };\n\t publicInstance = internalInstance;\n\t }\n\t\n\t return {\n\t nodeType: nodeType,\n\t type: type,\n\t key: key,\n\t ref: ref,\n\t source: null,\n\t name: name,\n\t props: props,\n\t state: state,\n\t context: context,\n\t children: children,\n\t text: text,\n\t updater: updater,\n\t publicInstance: publicInstance\n\t };\n\t}\n\t\n\tfunction setInProps(inst, path, value) {\n\t inst.props = copyWithSet(inst.props, path, value);\n\t inst.forceUpdate();\n\t}\n\t\n\tfunction setInState(inst, path, value) {\n\t setIn(inst.state, path, value);\n\t inst.forceUpdate();\n\t}\n\t\n\tfunction setInContext(inst, path, value) {\n\t setIn(inst.context, path, value);\n\t inst.forceUpdate();\n\t}\n\t\n\tfunction setIn(obj, path, value) {\n\t var last = path.pop();\n\t var parent = path.reduce(function (obj_, attr) {\n\t return obj_ ? obj_[attr] : null;\n\t }, obj);\n\t if (parent) {\n\t parent[last] = value;\n\t }\n\t}\n\t\n\tfunction childrenList(children) {\n\t var res = [];\n\t for (var name in children) {\n\t res.push(children[name]);\n\t }\n\t return res;\n\t}\n\t\n\tmodule.exports = getData012;\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar getDataFiber = __webpack_require__(43);\n\t\n\tvar _require = __webpack_require__(44),\n\t ClassComponent = _require.ClassComponent,\n\t HostRoot = _require.HostRoot;\n\t\n\t// Inlined from ReactTypeOfSideEffect\n\t\n\t\n\tvar PerformedWork = 1;\n\t\n\tfunction attachRendererFiber(hook, rid, renderer) {\n\t // This is a slightly annoying indirection.\n\t // It is currently necessary because DevTools wants\n\t // to use unique objects as keys for instances.\n\t // However fibers have two versions.\n\t // We use this set to remember first encountered fiber for\n\t // each conceptual instance.\n\t var opaqueNodes = new Set();\n\t function getOpaqueNode(fiber) {\n\t if (opaqueNodes.has(fiber)) {\n\t return fiber;\n\t }\n\t var alternate = fiber.alternate;\n\t\n\t if (alternate != null && opaqueNodes.has(alternate)) {\n\t return alternate;\n\t }\n\t opaqueNodes.add(fiber);\n\t return fiber;\n\t }\n\t\n\t function hasDataChanged(prevFiber, nextFiber) {\n\t if (prevFiber.tag === ClassComponent) {\n\t // Skip if the class performed no work (shouldComponentUpdate bailout).\n\t // eslint-disable-next-line no-bitwise\n\t if ((nextFiber.effectTag & PerformedWork) !== PerformedWork) {\n\t return false;\n\t }\n\t\n\t // Only classes have context.\n\t if (prevFiber.stateNode.context !== nextFiber.stateNode.context) {\n\t return true;\n\t }\n\t // Force updating won't update state or props.\n\t if (nextFiber.updateQueue != null && nextFiber.updateQueue.hasForceUpdate) {\n\t return true;\n\t }\n\t }\n\t // Compare the fields that would result in observable changes in DevTools.\n\t // We don't compare type, tag, index, and key, because these are known to match.\n\t return prevFiber.memoizedProps !== nextFiber.memoizedProps || prevFiber.memoizedState !== nextFiber.memoizedState || prevFiber.ref !== nextFiber.ref || prevFiber._debugSource !== nextFiber._debugSource;\n\t }\n\t\n\t var pendingEvents = [];\n\t\n\t function flushPendingEvents() {\n\t var events = pendingEvents;\n\t pendingEvents = [];\n\t for (var i = 0; i < events.length; i++) {\n\t var event = events[i];\n\t hook.emit(event.type, event);\n\t }\n\t }\n\t\n\t function enqueueMount(fiber) {\n\t pendingEvents.push({\n\t internalInstance: getOpaqueNode(fiber),\n\t data: getDataFiber(fiber, getOpaqueNode),\n\t renderer: rid,\n\t type: 'mount'\n\t });\n\t\n\t var isRoot = fiber.tag === HostRoot;\n\t if (isRoot) {\n\t pendingEvents.push({\n\t internalInstance: getOpaqueNode(fiber),\n\t renderer: rid,\n\t type: 'root'\n\t });\n\t }\n\t }\n\t\n\t function enqueueUpdateIfNecessary(fiber, hasChildOrderChanged) {\n\t if (!hasChildOrderChanged && !hasDataChanged(fiber.alternate, fiber)) {\n\t return;\n\t }\n\t pendingEvents.push({\n\t internalInstance: getOpaqueNode(fiber),\n\t data: getDataFiber(fiber, getOpaqueNode),\n\t renderer: rid,\n\t type: 'update'\n\t });\n\t }\n\t\n\t function enqueueUnmount(fiber) {\n\t var isRoot = fiber.tag === HostRoot;\n\t var opaqueNode = getOpaqueNode(fiber);\n\t var event = {\n\t internalInstance: opaqueNode,\n\t renderer: rid,\n\t type: 'unmount'\n\t };\n\t if (isRoot) {\n\t pendingEvents.push(event);\n\t } else {\n\t // Non-root fibers are deleted during the commit phase.\n\t // They are deleted in the child-first order. However\n\t // DevTools currently expects deletions to be parent-first.\n\t // This is why we unshift deletions rather than push them.\n\t pendingEvents.unshift(event);\n\t }\n\t opaqueNodes.delete(opaqueNode);\n\t }\n\t\n\t function mountFiber(fiber) {\n\t // Depth-first.\n\t // Logs mounting of children first, parents later.\n\t var node = fiber;\n\t outer: while (true) {\n\t if (node.child) {\n\t node.child.return = node;\n\t node = node.child;\n\t continue;\n\t }\n\t enqueueMount(node);\n\t if (node == fiber) {\n\t return;\n\t }\n\t if (node.sibling) {\n\t node.sibling.return = node.return;\n\t node = node.sibling;\n\t continue;\n\t }\n\t while (node.return) {\n\t node = node.return;\n\t enqueueMount(node);\n\t if (node == fiber) {\n\t return;\n\t }\n\t if (node.sibling) {\n\t node.sibling.return = node.return;\n\t node = node.sibling;\n\t continue outer;\n\t }\n\t }\n\t return;\n\t }\n\t }\n\t\n\t function updateFiber(nextFiber, prevFiber) {\n\t var hasChildOrderChanged = false;\n\t if (nextFiber.child !== prevFiber.child) {\n\t // If the first child is different, we need to traverse them.\n\t // Each next child will be either a new child (mount) or an alternate (update).\n\t var nextChild = nextFiber.child;\n\t var prevChildAtSameIndex = prevFiber.child;\n\t while (nextChild) {\n\t // We already know children will be referentially different because\n\t // they are either new mounts or alternates of previous children.\n\t // Schedule updates and mounts depending on whether alternates exist.\n\t // We don't track deletions here because they are reported separately.\n\t if (nextChild.alternate) {\n\t var prevChild = nextChild.alternate;\n\t updateFiber(nextChild, prevChild);\n\t // However we also keep track if the order of the children matches\n\t // the previous order. They are always different referentially, but\n\t // if the instances line up conceptually we'll want to know that.\n\t if (!hasChildOrderChanged && prevChild !== prevChildAtSameIndex) {\n\t hasChildOrderChanged = true;\n\t }\n\t } else {\n\t mountFiber(nextChild);\n\t if (!hasChildOrderChanged) {\n\t hasChildOrderChanged = true;\n\t }\n\t }\n\t // Try the next child.\n\t nextChild = nextChild.sibling;\n\t // Advance the pointer in the previous list so that we can\n\t // keep comparing if they line up.\n\t if (!hasChildOrderChanged && prevChildAtSameIndex != null) {\n\t prevChildAtSameIndex = prevChildAtSameIndex.sibling;\n\t }\n\t }\n\t // If we have no more children, but used to, they don't line up.\n\t if (!hasChildOrderChanged && prevChildAtSameIndex != null) {\n\t hasChildOrderChanged = true;\n\t }\n\t }\n\t enqueueUpdateIfNecessary(nextFiber, hasChildOrderChanged);\n\t }\n\t\n\t function walkTree() {\n\t hook.getFiberRoots(rid).forEach(function (root) {\n\t // Hydrate all the roots for the first time.\n\t mountFiber(root.current);\n\t });\n\t flushPendingEvents();\n\t }\n\t\n\t function cleanup() {\n\t // We don't patch any methods so there is no cleanup.\n\t }\n\t\n\t function handleCommitFiberUnmount(fiber) {\n\t // This is not recursive.\n\t // We can't traverse fibers after unmounting so instead\n\t // we rely on React telling us about each unmount.\n\t // It will be flushed after the root is committed.\n\t enqueueUnmount(fiber);\n\t }\n\t\n\t function handleCommitFiberRoot(root) {\n\t var current = root.current;\n\t var alternate = current.alternate;\n\t if (alternate) {\n\t // TODO: relying on this seems a bit fishy.\n\t var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null;\n\t var isMounted = current.memoizedState != null && current.memoizedState.element != null;\n\t if (!wasMounted && isMounted) {\n\t // Mount a new root.\n\t mountFiber(current);\n\t } else if (wasMounted && isMounted) {\n\t // Update an existing root.\n\t updateFiber(current, alternate);\n\t } else if (wasMounted && !isMounted) {\n\t // Unmount an existing root.\n\t enqueueUnmount(current);\n\t }\n\t } else {\n\t // Mount a new root.\n\t mountFiber(current);\n\t }\n\t // We're done here.\n\t flushPendingEvents();\n\t }\n\t\n\t // The naming is confusing.\n\t // They deal with opaque nodes (fibers), not elements.\n\t function getNativeFromReactElement(fiber) {\n\t try {\n\t var opaqueNode = fiber;\n\t var hostInstance = renderer.findHostInstanceByFiber(opaqueNode);\n\t return hostInstance;\n\t } catch (err) {\n\t // The fiber might have unmounted by now.\n\t return null;\n\t }\n\t }\n\t function getReactElementFromNative(hostInstance) {\n\t var fiber = renderer.findFiberByHostInstance(hostInstance);\n\t if (fiber != null) {\n\t // TODO: type fibers.\n\t var opaqueNode = getOpaqueNode(fiber);\n\t return opaqueNode;\n\t }\n\t return null;\n\t }\n\t return {\n\t getNativeFromReactElement: getNativeFromReactElement,\n\t getReactElementFromNative: getReactElementFromNative,\n\t handleCommitFiberRoot: handleCommitFiberRoot,\n\t handleCommitFiberUnmount: handleCommitFiberUnmount,\n\t cleanup: cleanup,\n\t walkTree: walkTree\n\t };\n\t}\n\t\n\tmodule.exports = attachRendererFiber;\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar copyWithSet = __webpack_require__(37);\n\tvar getDisplayName = __webpack_require__(38);\n\t\n\tvar _require = __webpack_require__(44),\n\t FunctionalComponent = _require.FunctionalComponent,\n\t ClassComponent = _require.ClassComponent,\n\t HostRoot = _require.HostRoot,\n\t HostPortal = _require.HostPortal,\n\t HostComponent = _require.HostComponent,\n\t HostText = _require.HostText,\n\t Fragment = _require.Fragment;\n\t\n\t// TODO: we might want to change the data structure\n\t// once we no longer suppport Stack versions of `getData`.\n\t\n\t\n\tfunction getDataFiber(fiber, getOpaqueNode) {\n\t var type = fiber.type;\n\t var key = fiber.key;\n\t var ref = fiber.ref;\n\t var source = fiber._debugSource;\n\t var publicInstance = null;\n\t var props = null;\n\t var state = null;\n\t var children = null;\n\t var context = null;\n\t var updater = null;\n\t var nodeType = null;\n\t var name = null;\n\t var text = null;\n\t\n\t switch (fiber.tag) {\n\t case FunctionalComponent:\n\t case ClassComponent:\n\t nodeType = 'Composite';\n\t name = getDisplayName(fiber.type);\n\t publicInstance = fiber.stateNode;\n\t props = fiber.memoizedProps;\n\t state = fiber.memoizedState;\n\t if (publicInstance != null) {\n\t context = publicInstance.context;\n\t if (context && Object.keys(context).length === 0) {\n\t context = null;\n\t }\n\t }\n\t var inst = publicInstance;\n\t if (inst) {\n\t updater = {\n\t setState: inst.setState && inst.setState.bind(inst),\n\t forceUpdate: inst.forceUpdate && inst.forceUpdate.bind(inst),\n\t setInProps: inst.forceUpdate && setInProps.bind(null, fiber),\n\t setInState: inst.forceUpdate && setInState.bind(null, inst),\n\t setInContext: inst.forceUpdate && setInContext.bind(null, inst)\n\t };\n\t }\n\t children = [];\n\t break;\n\t case HostRoot:\n\t nodeType = 'Wrapper';\n\t children = [];\n\t break;\n\t case HostPortal:\n\t nodeType = 'Portal';\n\t name = 'ReactPortal';\n\t props = {\n\t target: fiber.stateNode.containerInfo\n\t };\n\t children = [];\n\t break;\n\t case HostComponent:\n\t nodeType = 'Native';\n\t name = fiber.type;\n\t\n\t // TODO (bvaughn) we plan to remove this prefix anyway.\n\t // We can cut this special case out when it's gone.\n\t name = name.replace('topsecret-', '');\n\t\n\t publicInstance = fiber.stateNode;\n\t props = fiber.memoizedProps;\n\t if (typeof props.children === 'string' || typeof props.children === 'number') {\n\t children = props.children.toString();\n\t } else {\n\t children = [];\n\t }\n\t if (typeof fiber.stateNode.setNativeProps === 'function') {\n\t // For editing styles in RN\n\t updater = {\n\t setNativeProps: function setNativeProps(nativeProps) {\n\t fiber.stateNode.setNativeProps(nativeProps);\n\t }\n\t };\n\t }\n\t break;\n\t case HostText:\n\t nodeType = 'Text';\n\t text = fiber.memoizedProps;\n\t break;\n\t case Fragment:\n\t nodeType = 'Wrapper';\n\t children = [];\n\t break;\n\t default:\n\t // Coroutines and yields\n\t nodeType = 'Native';\n\t props = fiber.memoizedProps;\n\t name = 'TODO_NOT_IMPLEMENTED_YET';\n\t children = [];\n\t break;\n\t }\n\t\n\t if (Array.isArray(children)) {\n\t var child = fiber.child;\n\t while (child) {\n\t children.push(getOpaqueNode(child));\n\t child = child.sibling;\n\t }\n\t }\n\t\n\t return {\n\t nodeType: nodeType,\n\t type: type,\n\t key: key,\n\t ref: ref,\n\t source: source,\n\t name: name,\n\t props: props,\n\t state: state,\n\t context: context,\n\t children: children,\n\t text: text,\n\t updater: updater,\n\t publicInstance: publicInstance\n\t };\n\t}\n\t\n\tfunction setInProps(fiber, path, value) {\n\t var inst = fiber.stateNode;\n\t fiber.pendingProps = copyWithSet(inst.props, path, value);\n\t if (fiber.alternate) {\n\t // We don't know which fiber is the current one because DevTools may bail out of getDataFiber() call,\n\t // and so the data object may refer to another version of the fiber. Therefore we update pendingProps\n\t // on both. I hope that this is safe.\n\t fiber.alternate.pendingProps = fiber.pendingProps;\n\t }\n\t fiber.stateNode.forceUpdate();\n\t}\n\t\n\tfunction setInState(inst, path, value) {\n\t setIn(inst.state, path, value);\n\t inst.forceUpdate();\n\t}\n\t\n\tfunction setInContext(inst, path, value) {\n\t setIn(inst.context, path, value);\n\t inst.forceUpdate();\n\t}\n\t\n\tfunction setIn(obj, path, value) {\n\t var last = path.pop();\n\t var parent = path.reduce(function (obj_, attr) {\n\t return obj_ ? obj_[attr] : null;\n\t }, obj);\n\t if (parent) {\n\t parent[last] = value;\n\t }\n\t}\n\t\n\tmodule.exports = getDataFiber;\n\n/***/ },\n/* 44 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\t// Copied from React repo.\n\t\n\tmodule.exports = {\n\t IndeterminateComponent: 0, // Before we know whether it is functional or class\n\t FunctionalComponent: 1,\n\t ClassComponent: 2,\n\t HostRoot: 3, // Root of a host tree. Could be nested inside another node.\n\t HostPortal: 4, // A subtree. Could be an entry point to a different renderer.\n\t HostComponent: 5,\n\t HostText: 6,\n\t CoroutineComponent: 7,\n\t CoroutineHandlerPhase: 8,\n\t YieldComponent: 9,\n\t Fragment: 10\n\t};\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\tvar resolveBoxStyle = __webpack_require__(46);\n\t\n\tvar styleOverridesByHostComponentId = {};\n\t\n\tmodule.exports = function setupRNStyle(bridge, agent, resolveRNStyle) {\n\t bridge.onCall('rn-style:get', function (id) {\n\t var node = agent.elementData.get(id);\n\t if (!node || !node.props) {\n\t return null;\n\t }\n\t return resolveRNStyle(node.props.style);\n\t });\n\t\n\t bridge.on('rn-style:measure', function (id) {\n\t measureStyle(agent, bridge, resolveRNStyle, id);\n\t });\n\t\n\t bridge.on('rn-style:rename', function (_ref) {\n\t var id = _ref.id,\n\t oldName = _ref.oldName,\n\t newName = _ref.newName,\n\t val = _ref.val;\n\t\n\t renameStyle(agent, id, oldName, newName, val);\n\t setTimeout(function () {\n\t return measureStyle(agent, bridge, resolveRNStyle, id);\n\t });\n\t });\n\t\n\t bridge.on('rn-style:set', function (_ref2) {\n\t var id = _ref2.id,\n\t attr = _ref2.attr,\n\t val = _ref2.val;\n\t\n\t setStyle(agent, id, attr, val);\n\t setTimeout(function () {\n\t return measureStyle(agent, bridge, resolveRNStyle, id);\n\t });\n\t });\n\t};\n\t\n\tvar blank = {\n\t top: 0,\n\t left: 0,\n\t right: 0,\n\t bottom: 0\n\t};\n\t\n\tfunction measureStyle(agent, bridge, resolveRNStyle, id) {\n\t var node = agent.elementData.get(id);\n\t if (!node || !node.props) {\n\t bridge.send('rn-style:measure', {});\n\t return;\n\t }\n\t\n\t var style = resolveRNStyle(node.props.style);\n\t // If it's a host component we edited before, amend styles.\n\t if (styleOverridesByHostComponentId[id]) {\n\t style = Object.assign({}, style, styleOverridesByHostComponentId[id]);\n\t }\n\t\n\t var instance = node.publicInstance;\n\t if (!instance || !instance.measure) {\n\t bridge.send('rn-style:measure', { style: style });\n\t return;\n\t }\n\t\n\t instance.measure(function (x, y, width, height, left, top) {\n\t // RN Android sometimes returns undefined here. Don't send measurements in this case.\n\t // https://github.com/jhen0409/react-native-debugger/issues/84#issuecomment-304611817\n\t if (typeof x !== 'number') {\n\t bridge.send('rn-style:measure', { style: style });\n\t return;\n\t }\n\t var margin = style && resolveBoxStyle('margin', style) || blank;\n\t var padding = style && resolveBoxStyle('padding', style) || blank;\n\t bridge.send('rn-style:measure', {\n\t style: style,\n\t measuredLayout: {\n\t x: x,\n\t y: y,\n\t width: width,\n\t height: height,\n\t left: left,\n\t top: top,\n\t margin: margin,\n\t padding: padding\n\t }\n\t });\n\t });\n\t}\n\t\n\tfunction shallowClone(obj) {\n\t var nobj = {};\n\t for (var n in obj) {\n\t nobj[n] = obj[n];\n\t }\n\t return nobj;\n\t}\n\t\n\tfunction renameStyle(agent, id, oldName, newName, val) {\n\t var _ref3;\n\t\n\t var data = agent.elementData.get(id);\n\t var newStyle = newName ? (_ref3 = {}, _defineProperty(_ref3, oldName, undefined), _defineProperty(_ref3, newName, val), _ref3) : _defineProperty({}, oldName, undefined);\n\t\n\t if (data && data.updater && data.updater.setInProps) {\n\t // First attempt: use setInProps().\n\t // We do this for composite components, and it works relatively well.\n\t var style = data && data.props && data.props.style;\n\t var customStyle;\n\t if (Array.isArray(style)) {\n\t var lastLength = style.length - 1;\n\t if (_typeof(style[lastLength]) === 'object' && !Array.isArray(style[lastLength])) {\n\t customStyle = shallowClone(style[lastLength]);\n\t delete customStyle[oldName];\n\t if (newName) {\n\t customStyle[newName] = val;\n\t } else {\n\t customStyle[oldName] = undefined;\n\t }\n\t // $FlowFixMe we know that updater is not null here\n\t data.updater.setInProps(['style', lastLength], customStyle);\n\t } else {\n\t style = style.concat([newStyle]);\n\t // $FlowFixMe we know that updater is not null here\n\t data.updater.setInProps(['style'], style);\n\t }\n\t } else {\n\t if ((typeof style === 'undefined' ? 'undefined' : _typeof(style)) === 'object') {\n\t customStyle = shallowClone(style);\n\t delete customStyle[oldName];\n\t if (newName) {\n\t customStyle[newName] = val;\n\t } else {\n\t customStyle[oldName] = undefined;\n\t }\n\t // $FlowFixMe we know that updater is not null here\n\t data.updater.setInProps(['style'], customStyle);\n\t } else {\n\t style = [style, newStyle];\n\t data.updater.setInProps(['style'], style);\n\t }\n\t }\n\t } else if (data && data.updater && data.updater.setNativeProps) {\n\t // Fallback: use setNativeProps(). We're dealing with a host component.\n\t // Remember to \"correct\" resolved styles when we read them next time.\n\t if (!styleOverridesByHostComponentId[id]) {\n\t styleOverridesByHostComponentId[id] = newStyle;\n\t } else {\n\t Object.assign(styleOverridesByHostComponentId[id], newStyle);\n\t }\n\t data.updater.setNativeProps({ style: newStyle });\n\t } else {\n\t return;\n\t }\n\t agent.emit('hideHighlight');\n\t}\n\t\n\tfunction setStyle(agent, id, attr, val) {\n\t var data = agent.elementData.get(id);\n\t var newStyle = _defineProperty({}, attr, val);\n\t\n\t if (data && data.updater && data.updater.setInProps) {\n\t // First attempt: use setInProps().\n\t // We do this for composite components, and it works relatively well.\n\t var style = data.props && data.props.style;\n\t if (Array.isArray(style)) {\n\t var lastLength = style.length - 1;\n\t if (_typeof(style[lastLength]) === 'object' && !Array.isArray(style[lastLength])) {\n\t // $FlowFixMe we know that updater is not null here\n\t data.updater.setInProps(['style', lastLength, attr], val);\n\t } else {\n\t style = style.concat([newStyle]);\n\t // $FlowFixMe we know that updater is not null here\n\t data.updater.setInProps(['style'], style);\n\t }\n\t } else {\n\t style = [style, newStyle];\n\t data.updater.setInProps(['style'], style);\n\t }\n\t } else if (data && data.updater && data.updater.setNativeProps) {\n\t // Fallback: use setNativeProps(). We're dealing with a host component.\n\t // Remember to \"correct\" resolved styles when we read them next time.\n\t if (!styleOverridesByHostComponentId[id]) {\n\t styleOverridesByHostComponentId[id] = newStyle;\n\t } else {\n\t Object.assign(styleOverridesByHostComponentId[id], newStyle);\n\t }\n\t data.updater.setNativeProps({ style: newStyle });\n\t } else {\n\t return;\n\t }\n\t agent.emit('hideHighlight');\n\t}\n\n/***/ },\n/* 46 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t\n\t/**\n\t * This is mirror from\n\t * https://github.com/facebook/react-native/blob/master/Libraries/Inspector/resolveBoxStyle.js\n\t *\n\t * Resolve a style property into it's component parts, e.g.\n\t *\n\t * resolveBoxStyle('margin', {margin: 5, marginBottom: 10})\n\t * ->\n\t * {top: 5, left: 5, right: 5, bottom: 10}\n\t *\n\t * If none are set, returns false.\n\t */\n\tfunction resolveBoxStyle(prefix, style) {\n\t var res = {};\n\t var subs = ['top', 'left', 'bottom', 'right'];\n\t var set = false;\n\t subs.forEach(function (sub) {\n\t res[sub] = style[prefix] || 0;\n\t });\n\t if (style[prefix]) {\n\t set = true;\n\t }\n\t if (style[prefix + 'Vertical']) {\n\t res.top = res.bottom = style[prefix + 'Vertical'];\n\t set = true;\n\t }\n\t if (style[prefix + 'Horizontal']) {\n\t res.left = res.right = style[prefix + 'Horizontal'];\n\t set = true;\n\t }\n\t subs.forEach(function (sub) {\n\t var val = style[prefix + capFirst(sub)];\n\t if (val) {\n\t res[sub] = val;\n\t set = true;\n\t }\n\t });\n\t if (!set) {\n\t return null;\n\t }\n\t return res;\n\t}\n\t\n\tfunction capFirst(text) {\n\t return text[0].toUpperCase() + text.slice(1);\n\t}\n\t\n\tmodule.exports = resolveBoxStyle;\n\n/***/ },\n/* 47 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tfunction decorate(obj, attr, fn) {\n\t var old = obj[attr];\n\t obj[attr] = function () {\n\t var res = old.apply(this, arguments);\n\t fn.apply(this, arguments);\n\t return res;\n\t };\n\t return function () {\n\t obj[attr] = old;\n\t };\n\t}\n\t\n\tvar subscriptionEnabled = false;\n\t\n\tmodule.exports = function (bridge, agent, hook) {\n\t var shouldEnable = !!hook._relayInternals;\n\t\n\t bridge.onCall('relay:check', function () {\n\t return shouldEnable;\n\t });\n\t if (!shouldEnable) {\n\t return;\n\t }\n\t var _hook$_relayInternals = hook._relayInternals,\n\t DefaultStoreData = _hook$_relayInternals.DefaultStoreData,\n\t setRequestListener = _hook$_relayInternals.setRequestListener;\n\t\n\t\n\t function sendStoreData() {\n\t if (subscriptionEnabled) {\n\t bridge.send('relay:store', {\n\t id: 'relay:store',\n\t nodes: DefaultStoreData.getNodeData()\n\t });\n\t }\n\t }\n\t\n\t bridge.onCall('relay:store:enable', function () {\n\t subscriptionEnabled = true;\n\t sendStoreData();\n\t });\n\t\n\t bridge.onCall('relay:store:disable', function () {\n\t subscriptionEnabled = false;\n\t });\n\t\n\t sendStoreData();\n\t decorate(DefaultStoreData, 'handleUpdatePayload', sendStoreData);\n\t decorate(DefaultStoreData, 'handleQueryPayload', sendStoreData);\n\t\n\t var removeListener = setRequestListener(function (event, data) {\n\t bridge.send(event, data);\n\t });\n\t hook.on('shutdown', removeListener);\n\t};\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar Highlighter = __webpack_require__(49);\n\t\n\tmodule.exports = function setup(agent) {\n\t var hl = new Highlighter(window, function (node) {\n\t agent.selectFromDOMNode(node);\n\t });\n\t agent.on('highlight', function (data) {\n\t return hl.highlight(data.node, data.name);\n\t });\n\t agent.on('highlightMany', function (nodes) {\n\t return hl.highlightMany(nodes);\n\t });\n\t agent.on('hideHighlight', function () {\n\t return hl.hideHighlight();\n\t });\n\t agent.on('refreshMultiOverlay', function () {\n\t return hl.refreshMultiOverlay();\n\t });\n\t agent.on('startInspecting', function () {\n\t return hl.startInspecting();\n\t });\n\t agent.on('stopInspecting', function () {\n\t return hl.stopInspecting();\n\t });\n\t agent.on('shutdown', function () {\n\t hl.remove();\n\t });\n\t};\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _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; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar Overlay = __webpack_require__(50);\n\tvar MultiOverlay = __webpack_require__(52);\n\t\n\t/**\n\t * Manages the highlighting of items on an html page, as well as\n\t * hover-to-inspect.\n\t */\n\t\n\tvar Highlighter = function () {\n\t function Highlighter(win, onSelect) {\n\t _classCallCheck(this, Highlighter);\n\t\n\t this._win = win;\n\t this._onSelect = onSelect;\n\t this._overlay = null;\n\t this._multiOverlay = null;\n\t this._subs = [];\n\t }\n\t\n\t _createClass(Highlighter, [{\n\t key: 'startInspecting',\n\t value: function startInspecting() {\n\t this._inspecting = true;\n\t this._subs = [captureSubscription(this._win, 'mouseover', this.onHover.bind(this)), captureSubscription(this._win, 'mousedown', this.onMouseDown.bind(this)), captureSubscription(this._win, 'click', this.onClick.bind(this))];\n\t }\n\t }, {\n\t key: 'stopInspecting',\n\t value: function stopInspecting() {\n\t this._subs.forEach(function (unsub) {\n\t return unsub();\n\t });\n\t this.hideHighlight();\n\t }\n\t }, {\n\t key: 'remove',\n\t value: function remove() {\n\t this.stopInspecting();\n\t if (this._button && this._button.parentNode) {\n\t this._button.parentNode.removeChild(this._button);\n\t }\n\t }\n\t }, {\n\t key: 'highlight',\n\t value: function highlight(node, name) {\n\t this.removeMultiOverlay();\n\t if (node.nodeType !== Node.COMMENT_NODE) {\n\t if (!this._overlay) {\n\t this._overlay = new Overlay(this._win);\n\t }\n\t this._overlay.inspect(node, name);\n\t }\n\t }\n\t }, {\n\t key: 'highlightMany',\n\t value: function highlightMany(nodes) {\n\t this.removeOverlay();\n\t if (!this._multiOverlay) {\n\t this._multiOverlay = new MultiOverlay(this._win);\n\t }\n\t this._multiOverlay.highlightMany(nodes);\n\t }\n\t }, {\n\t key: 'hideHighlight',\n\t value: function hideHighlight() {\n\t this._inspecting = false;\n\t this.removeOverlay();\n\t this.removeMultiOverlay();\n\t }\n\t }, {\n\t key: 'refreshMultiOverlay',\n\t value: function refreshMultiOverlay() {\n\t if (!this._multiOverlay) {\n\t return;\n\t }\n\t this._multiOverlay.refresh();\n\t }\n\t }, {\n\t key: 'removeOverlay',\n\t value: function removeOverlay() {\n\t if (!this._overlay) {\n\t return;\n\t }\n\t this._overlay.remove();\n\t this._overlay = null;\n\t }\n\t }, {\n\t key: 'removeMultiOverlay',\n\t value: function removeMultiOverlay() {\n\t if (!this._multiOverlay) {\n\t return;\n\t }\n\t this._multiOverlay.remove();\n\t this._multiOverlay = null;\n\t }\n\t }, {\n\t key: 'onMouseDown',\n\t value: function onMouseDown(evt) {\n\t if (!this._inspecting) {\n\t return;\n\t }\n\t evt.preventDefault();\n\t evt.stopPropagation();\n\t evt.cancelBubble = true;\n\t this._onSelect(evt.target);\n\t }\n\t }, {\n\t key: 'onClick',\n\t value: function onClick(evt) {\n\t if (!this._inspecting) {\n\t return;\n\t }\n\t this._subs.forEach(function (unsub) {\n\t return unsub();\n\t });\n\t evt.preventDefault();\n\t evt.stopPropagation();\n\t evt.cancelBubble = true;\n\t this.hideHighlight();\n\t }\n\t }, {\n\t key: 'onHover',\n\t value: function onHover(evt) {\n\t if (!this._inspecting) {\n\t return;\n\t }\n\t evt.preventDefault();\n\t evt.stopPropagation();\n\t evt.cancelBubble = true;\n\t this.highlight(evt.target);\n\t }\n\t }, {\n\t key: 'injectButton',\n\t value: function injectButton() {\n\t this._button = makeMagnifier();\n\t this._button.onclick = this.startInspecting.bind(this);\n\t this._win.document.body.appendChild(this._button);\n\t }\n\t }]);\n\t\n\t return Highlighter;\n\t}();\n\t\n\tfunction captureSubscription(obj, evt, cb) {\n\t obj.addEventListener(evt, cb, true);\n\t return function () {\n\t return obj.removeEventListener(evt, cb, true);\n\t };\n\t}\n\t\n\tfunction makeMagnifier() {\n\t var button = window.document.createElement('button');\n\t button.innerHTML = '🔍';\n\t button.style.backgroundColor = 'transparent';\n\t button.style.border = 'none';\n\t button.style.outline = 'none';\n\t button.style.cursor = 'pointer';\n\t button.style.position = 'fixed';\n\t button.style.bottom = '10px';\n\t button.style.right = '10px';\n\t button.style.fontSize = '30px';\n\t button.style.zIndex = 10000000;\n\t return button;\n\t}\n\t\n\tmodule.exports = Highlighter;\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _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; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar assign = __webpack_require__(3);\n\t\n\tvar _require = __webpack_require__(51),\n\t monospace = _require.monospace;\n\t\n\t/**\n\t * Note that this component is not affected by the active Theme,\n\t * Because it highlights elements in the main Chrome window (outside of devtools).\n\t * The colors below were chosen to roughly match those used by Chrome devtools.\n\t */\n\tvar Overlay = function () {\n\t function Overlay(window) {\n\t _classCallCheck(this, Overlay);\n\t\n\t var doc = window.document;\n\t this.win = window;\n\t this.container = doc.createElement('div');\n\t this.node = doc.createElement('div');\n\t this.border = doc.createElement('div');\n\t this.padding = doc.createElement('div');\n\t this.content = doc.createElement('div');\n\t\n\t this.border.style.borderColor = overlayStyles.border;\n\t this.padding.style.borderColor = overlayStyles.padding;\n\t this.content.style.backgroundColor = overlayStyles.background;\n\t\n\t assign(this.node.style, {\n\t borderColor: overlayStyles.margin,\n\t pointerEvents: 'none',\n\t position: 'fixed'\n\t });\n\t\n\t this.tip = doc.createElement('div');\n\t assign(this.tip.style, {\n\t backgroundColor: '#333740',\n\t borderRadius: '2px',\n\t fontFamily: monospace.family,\n\t fontWeight: 'bold',\n\t padding: '3px 5px',\n\t position: 'fixed',\n\t fontSize: monospace.sizes.normal\n\t });\n\t\n\t this.nameSpan = doc.createElement('span');\n\t this.tip.appendChild(this.nameSpan);\n\t assign(this.nameSpan.style, {\n\t color: '#ee78e6',\n\t borderRight: '1px solid #aaaaaa',\n\t paddingRight: '0.5rem',\n\t marginRight: '0.5rem'\n\t });\n\t this.dimSpan = doc.createElement('span');\n\t this.tip.appendChild(this.dimSpan);\n\t assign(this.dimSpan.style, {\n\t color: '#d7d7d7'\n\t });\n\t\n\t this.container.style.zIndex = 10000000;\n\t this.node.style.zIndex = 10000000;\n\t this.tip.style.zIndex = 10000000;\n\t this.container.appendChild(this.node);\n\t this.container.appendChild(this.tip);\n\t this.node.appendChild(this.border);\n\t this.border.appendChild(this.padding);\n\t this.padding.appendChild(this.content);\n\t doc.body.appendChild(this.container);\n\t }\n\t\n\t _createClass(Overlay, [{\n\t key: 'remove',\n\t value: function remove() {\n\t if (this.container.parentNode) {\n\t this.container.parentNode.removeChild(this.container);\n\t }\n\t }\n\t }, {\n\t key: 'inspect',\n\t value: function inspect(node, name) {\n\t // We can't get the size of text nodes or comment nodes. React as of v15\n\t // heavily uses comment nodes to delimit text.\n\t if (node.nodeType !== Node.ELEMENT_NODE) {\n\t return;\n\t }\n\t var box = getNestedBoundingClientRect(node, this.win);\n\t var dims = getElementDimensions(node);\n\t\n\t boxWrap(dims, 'margin', this.node);\n\t boxWrap(dims, 'border', this.border);\n\t boxWrap(dims, 'padding', this.padding);\n\t\n\t assign(this.content.style, {\n\t height: box.height - dims.borderTop - dims.borderBottom - dims.paddingTop - dims.paddingBottom + 'px',\n\t width: box.width - dims.borderLeft - dims.borderRight - dims.paddingLeft - dims.paddingRight + 'px'\n\t });\n\t\n\t assign(this.node.style, {\n\t top: box.top - dims.marginTop + 'px',\n\t left: box.left - dims.marginLeft + 'px'\n\t });\n\t\n\t this.nameSpan.textContent = name || node.nodeName.toLowerCase();\n\t this.dimSpan.textContent = box.width + 'px × ' + box.height + 'px';\n\t\n\t var tipPos = findTipPos({\n\t top: box.top - dims.marginTop,\n\t left: box.left - dims.marginLeft,\n\t height: box.height + dims.marginTop + dims.marginBottom,\n\t width: box.width + dims.marginLeft + dims.marginRight\n\t }, this.win);\n\t assign(this.tip.style, tipPos);\n\t }\n\t }]);\n\t\n\t return Overlay;\n\t}();\n\t\n\tfunction findTipPos(dims, win) {\n\t var tipHeight = 20;\n\t var margin = 5;\n\t var top;\n\t if (dims.top + dims.height + tipHeight <= win.innerHeight) {\n\t if (dims.top + dims.height < 0) {\n\t top = margin;\n\t } else {\n\t top = dims.top + dims.height + margin;\n\t }\n\t } else if (dims.top - tipHeight <= win.innerHeight) {\n\t if (dims.top - tipHeight - margin < margin) {\n\t top = margin;\n\t } else {\n\t top = dims.top - tipHeight - margin;\n\t }\n\t } else {\n\t top = win.innerHeight - tipHeight - margin;\n\t }\n\t\n\t top += 'px';\n\t\n\t if (dims.left < 0) {\n\t return { top: top, left: margin };\n\t }\n\t if (dims.left + 200 > win.innerWidth) {\n\t return { top: top, right: margin };\n\t }\n\t return { top: top, left: dims.left + margin + 'px' };\n\t}\n\t\n\tfunction getElementDimensions(domElement) {\n\t var calculatedStyle = window.getComputedStyle(domElement);\n\t\n\t return {\n\t borderLeft: +calculatedStyle.borderLeftWidth.match(/[0-9]*/)[0],\n\t borderRight: +calculatedStyle.borderRightWidth.match(/[0-9]*/)[0],\n\t borderTop: +calculatedStyle.borderTopWidth.match(/[0-9]*/)[0],\n\t borderBottom: +calculatedStyle.borderBottomWidth.match(/[0-9]*/)[0],\n\t marginLeft: +calculatedStyle.marginLeft.match(/[0-9]*/)[0],\n\t marginRight: +calculatedStyle.marginRight.match(/[0-9]*/)[0],\n\t marginTop: +calculatedStyle.marginTop.match(/[0-9]*/)[0],\n\t marginBottom: +calculatedStyle.marginBottom.match(/[0-9]*/)[0],\n\t paddingLeft: +calculatedStyle.paddingLeft.match(/[0-9]*/)[0],\n\t paddingRight: +calculatedStyle.paddingRight.match(/[0-9]*/)[0],\n\t paddingTop: +calculatedStyle.paddingTop.match(/[0-9]*/)[0],\n\t paddingBottom: +calculatedStyle.paddingBottom.match(/[0-9]*/)[0]\n\t };\n\t}\n\t\n\t// Get the window object for the document that a node belongs to,\n\t// or return null if it cannot be found (node not attached to DOM,\n\t// etc).\n\tfunction getOwnerWindow(node) {\n\t if (!node.ownerDocument) {\n\t return null;\n\t }\n\t return node.ownerDocument.defaultView;\n\t}\n\t\n\t// Get the iframe containing a node, or return null if it cannot\n\t// be found (node not within iframe, etc).\n\tfunction getOwnerIframe(node) {\n\t var nodeWindow = getOwnerWindow(node);\n\t if (nodeWindow) {\n\t return nodeWindow.frameElement;\n\t }\n\t return null;\n\t}\n\t\n\t// Get a bounding client rect for a node, with an\n\t// offset added to compensate for its border.\n\tfunction getBoundingClientRectWithBorderOffset(node) {\n\t var dimensions = getElementDimensions(node);\n\t\n\t return mergeRectOffsets([node.getBoundingClientRect(), {\n\t top: dimensions.borderTop,\n\t left: dimensions.borderLeft,\n\t bottom: dimensions.borderBottom,\n\t right: dimensions.borderRight,\n\t // This width and height won't get used by mergeRectOffsets (since this\n\t // is not the first rect in the array), but we set them so that this\n\t // object typechecks as a DOMRect.\n\t width: 0,\n\t height: 0\n\t }]);\n\t}\n\t\n\t// Add together the top, left, bottom, and right properties of\n\t// each DOMRect, but keep the width and height of the first one.\n\tfunction mergeRectOffsets(rects) {\n\t return rects.reduce(function (previousRect, rect) {\n\t if (previousRect == null) {\n\t return rect;\n\t }\n\t\n\t return {\n\t top: previousRect.top + rect.top,\n\t left: previousRect.left + rect.left,\n\t width: previousRect.width,\n\t height: previousRect.height,\n\t bottom: previousRect.bottom + rect.bottom,\n\t right: previousRect.right + rect.right\n\t };\n\t });\n\t}\n\t\n\t// Calculate a boundingClientRect for a node relative to boundaryWindow,\n\t// taking into account any offsets caused by intermediate iframes.\n\tfunction getNestedBoundingClientRect(node, boundaryWindow) {\n\t var ownerIframe = getOwnerIframe(node);\n\t if (ownerIframe && ownerIframe !== boundaryWindow) {\n\t var rects = [node.getBoundingClientRect()];\n\t var currentIframe = ownerIframe;\n\t var onlyOneMore = false;\n\t while (currentIframe) {\n\t var rect = getBoundingClientRectWithBorderOffset(currentIframe);\n\t rects.push(rect);\n\t currentIframe = getOwnerIframe(currentIframe);\n\t\n\t if (onlyOneMore) {\n\t break;\n\t }\n\t // We don't want to calculate iframe offsets upwards beyond\n\t // the iframe containing the boundaryWindow, but we\n\t // need to calculate the offset relative to the boundaryWindow.\n\t if (currentIframe && getOwnerWindow(currentIframe) === boundaryWindow) {\n\t onlyOneMore = true;\n\t }\n\t }\n\t\n\t return mergeRectOffsets(rects);\n\t } else {\n\t return node.getBoundingClientRect();\n\t }\n\t}\n\t\n\tfunction boxWrap(dims, what, node) {\n\t assign(node.style, {\n\t borderTopWidth: dims[what + 'Top'] + 'px',\n\t borderLeftWidth: dims[what + 'Left'] + 'px',\n\t borderRightWidth: dims[what + 'Right'] + 'px',\n\t borderBottomWidth: dims[what + 'Bottom'] + 'px',\n\t borderStyle: 'solid'\n\t });\n\t}\n\t\n\tvar overlayStyles = {\n\t background: 'rgba(120, 170, 210, 0.7)',\n\t padding: 'rgba(77, 200, 0, 0.3)',\n\t margin: 'rgba(255, 155, 0, 0.3)',\n\t border: 'rgba(255, 200, 50, 0.3)'\n\t};\n\t\n\tmodule.exports = Overlay;\n\n/***/ },\n/* 51 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tmodule.exports = {\n\t monospace: {\n\t family: 'Menlo, Consolas, monospace',\n\t sizes: {\n\t normal: 11,\n\t large: 14\n\t }\n\t },\n\t sansSerif: {\n\t family: '\"Helvetica Neue\", \"Lucida Grande\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, sans-serif',\n\t sizes: {\n\t small: 10,\n\t normal: 12,\n\t large: 14\n\t }\n\t }\n\t};\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\tvar _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; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar assign = __webpack_require__(3);\n\t\n\tvar MultiOverlay = function () {\n\t function MultiOverlay(window) {\n\t _classCallCheck(this, MultiOverlay);\n\t\n\t this.win = window;\n\t var doc = window.document;\n\t this.container = doc.createElement('div');\n\t doc.body.appendChild(this.container);\n\t this._currentNodes = null;\n\t }\n\t\n\t _createClass(MultiOverlay, [{\n\t key: 'highlightMany',\n\t value: function highlightMany(nodes) {\n\t var _this = this;\n\t\n\t this._currentNodes = nodes;\n\t this.container.innerHTML = '';\n\t\n\t nodes.forEach(function (node) {\n\t var div = _this.win.document.createElement('div');\n\t if (typeof node.getBoundingClientRect !== 'function') {\n\t return;\n\t }\n\t var box = node.getBoundingClientRect();\n\t if (box.bottom < 0 || box.top > window.innerHeight) {\n\t return;\n\t }\n\t assign(div.style, {\n\t top: box.top + 'px',\n\t left: box.left + 'px',\n\t width: box.width + 'px',\n\t height: box.height + 'px',\n\t border: '2px dotted rgba(200, 100, 100, .8)',\n\t boxSizing: 'border-box',\n\t backgroundColor: 'rgba(200, 100, 100, .2)',\n\t position: 'fixed',\n\t zIndex: 10000000,\n\t pointerEvents: 'none'\n\t });\n\t _this.container.appendChild(div);\n\t });\n\t }\n\t }, {\n\t key: 'refresh',\n\t value: function refresh() {\n\t if (this._currentNodes) {\n\t this.highlightMany(this._currentNodes);\n\t }\n\t }\n\t }, {\n\t key: 'remove',\n\t value: function remove() {\n\t if (this.container.parentNode) {\n\t this.container.parentNode.removeChild(this.container);\n\t this._currentNodes = null;\n\t }\n\t }\n\t }]);\n\t\n\t return MultiOverlay;\n\t}();\n\t\n\tmodule.exports = MultiOverlay;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** backend.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 0ba723809147dbeaa75b\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\ntype ConnectOptions = {\n host?: string,\n port?: number,\n resolveRNStyle?: (style: number) => ?Object,\n isAppActive?: () => boolean,\n websocket?: ?WebSocket,\n};\n\nvar Agent = require('../../../agent/Agent');\nvar Bridge = require('../../../agent/Bridge');\nvar installGlobalHook = require('../../../backend/installGlobalHook');\nvar installRelayHook = require('../../../plugins/Relay/installRelayHook');\nvar inject = require('../../../agent/inject');\nvar setupRNStyle = require('../../../plugins/ReactNativeStyle/setupBackend');\nvar setupRelay = require('../../../plugins/Relay/backend');\n\ninstallGlobalHook(window);\ninstallRelayHook(window);\n\nif (window.document) {\n // This shell is universal, and might be used inside a web app.\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.on('react-devtools', agent => {\n var setupHighlighter = require('../../../frontend/Highlighter/setup');\n setupHighlighter(agent);\n });\n}\n\nfunction connectToDevTools(options: ?ConnectOptions) {\n var {\n host = 'localhost',\n port = 8097,\n websocket,\n resolveRNStyle = null,\n isAppActive = () => true,\n } = options || {};\n\n function scheduleRetry() {\n // Two seconds because RN had issues with too fast retries.\n setTimeout(() => connectToDevTools(options), 2000);\n }\n\n if (!isAppActive()) {\n // If the app is in background, maybe retry later.\n // Don't actually attempt to connect until we're in foreground.\n scheduleRetry();\n return;\n }\n\n var messageListeners = [];\n var closeListeners = [];\n var uri = 'ws://' + host + ':' + port;\n // If existing websocket is passed, use it.\n // This is necessary to support our custom integrations.\n // See D6251744.\n var ws = websocket ? websocket : new window.WebSocket(uri);\n ws.onclose = handleClose;\n ws.onerror = handleClose;\n ws.onmessage = handleMessage;\n ws.onopen = function() {\n var wall = {\n listen(fn) {\n messageListeners.push(fn);\n },\n onClose(fn) {\n closeListeners.push(fn);\n },\n send(data) {\n ws.send(JSON.stringify(data));\n },\n };\n setupBackend(wall, resolveRNStyle);\n };\n\n var hasClosed = false;\n function handleClose() {\n if (!hasClosed) {\n hasClosed = true;\n scheduleRetry();\n closeListeners.forEach(fn => fn());\n }\n }\n\n function handleMessage(evt) {\n var data;\n try {\n data = JSON.parse(evt.data);\n } catch (e) {\n console.error('failed to parse json: ' + evt.data);\n return;\n }\n messageListeners.forEach(fn => {\n try {\n fn(data);\n } catch (e) {\n // jsc doesn't play so well with tracebacks that go into eval'd code,\n // so the stack trace here will stop at the `eval()` call. Getting the\n // message that caused the error is the best we can do for now.\n console.log(data);\n throw e;\n }\n });\n }\n}\n\nfunction setupBackend(wall, resolveRNStyle) {\n wall.onClose(() => {\n if (agent) {\n agent.emit('shutdown');\n }\n // This appears necessary for plugin (e.g. Relay) cleanup.\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.emit('shutdown');\n bridge = null;\n agent = null;\n console.log('closing devtools');\n });\n\n var bridge = new Bridge(wall);\n var agent = new Agent(window, {\n rnStyle: !!resolveRNStyle,\n rnStyleMeasure: !!resolveRNStyle,\n });\n agent.addBridge(bridge);\n\n if (resolveRNStyle) {\n setupRNStyle(bridge, agent, resolveRNStyle);\n }\n\n setupRelay(bridge, agent, window.__REACT_DEVTOOLS_GLOBAL_HOOK__);\n\n var _connectTimeout = setTimeout(() => {\n console.warn('react-devtools agent got no connection');\n }, 20000);\n\n agent.once('connected', () => {\n if (!agent) {\n return;\n }\n inject(window.__REACT_DEVTOOLS_GLOBAL_HOOK__, agent);\n clearTimeout(_connectTimeout);\n });\n}\n\nmodule.exports = { connectToDevTools };\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/backend.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar {EventEmitter} = require('events');\n\nvar assign = require('object-assign');\nvar guid = require('../utils/guid');\nvar getIn = require('./getIn');\n\nimport type {RendererID, DataType, OpaqueNodeHandle, NativeType, Helpers} from '../backend/types';\n\ntype ElementID = string;\n\nimport type Bridge from './Bridge';\n\n/**\n * The agent lives on the page in the same context as React, observes events\n * from the `backend`, and communicates (via a `Bridge`) with the frontend.\n *\n * It is responsible for generating string IDs (ElementID) for each react\n * element, maintaining a mapping of those IDs to elements, handling messages\n * from the frontend, and translating between react elements and native\n * handles.\n *\n *\n * React\n * |\n * v\n * backend\n * |\n * v\n * -----------\n * | **Agent** |\n * -----------\n * ^\n * |\n * v\n * (Bridge)\n * ^\n * |\n * serialization\n * |\n * v\n * (Bridge)\n * ^\n * |\n * v\n * ----------------\n * | Frontend Store |\n * ----------------\n *\n *\n * Events from the `backend`:\n * - root (got a root)\n * - mount (a component mounted)\n * - update (a component updated)\n * - unmount (a component mounted)\n *\n * Events from the `frontend` Store:\n * - see `addBridge` for subscriptions\n *\n * Events that Agent fires:\n * - selected\n * - hideHighlight\n * - startInspecting\n * - stopInspecting\n * - shutdown\n * - highlight /highlightMany\n * - setSelection\n * - root\n * - mount\n * - update\n * - unmount\n */\nclass Agent extends EventEmitter {\n // the window or global -> used to \"make a value available in the console\"\n global: Object;\n internalInstancesById: Map;\n idsByInternalInstances: WeakMap;\n renderers: Map;\n elementData: Map;\n roots: Set;\n reactInternals: {[key: RendererID]: Helpers};\n _prevSelected: ?NativeType;\n _scrollUpdate: boolean;\n capabilities: {[key: string]: boolean};\n _updateScroll: () => void;\n _inspectEnabled: boolean;\n\n constructor(global: Object, capabilities?: Object) {\n super();\n this.global = global;\n this.internalInstancesById = new Map();\n this.idsByInternalInstances = new WeakMap();\n this.renderers = new Map();\n this.elementData = new Map();\n this.roots = new Set();\n this.reactInternals = {};\n var lastSelected;\n this.on('selected', id => {\n var data = this.elementData.get(id);\n if (data && data.publicInstance && this.global.$r === lastSelected) {\n this.global.$r = data.publicInstance;\n lastSelected = data.publicInstance;\n }\n });\n this._prevSelected = null;\n this._scrollUpdate = false;\n var isReactDOM = window.document && typeof window.document.createElement === 'function';\n this.capabilities = assign({\n scroll: isReactDOM && typeof window.document.body.scrollIntoView === 'function',\n dom: isReactDOM,\n editTextContent: false,\n }, capabilities);\n\n if (isReactDOM) {\n this._updateScroll = this._updateScroll.bind(this);\n window.addEventListener('scroll', this._onScroll.bind(this), true);\n window.addEventListener('click', this._onClick.bind(this), true);\n window.addEventListener('mouseover', this._onMouseOver.bind(this), true);\n window.addEventListener('resize', this._onResize.bind(this), true);\n }\n }\n\n // returns an \"unsubscribe\" function\n sub(ev: string, fn: (data: any) => void): () => void {\n this.on(ev, fn);\n return () => {\n this.removeListener(ev, fn);\n };\n }\n\n setReactInternals(renderer: RendererID, reactInternals: Helpers) {\n this.reactInternals[renderer] = reactInternals;\n }\n\n addBridge(bridge: Bridge) {\n /** Events received from the frontend **/\n // the initial handshake\n bridge.on('requestCapabilities', () => {\n bridge.send('capabilities', this.capabilities);\n this.emit('connected');\n });\n bridge.on('setState', this._setState.bind(this));\n bridge.on('setProps', this._setProps.bind(this));\n bridge.on('setContext', this._setContext.bind(this));\n bridge.on('makeGlobal', this._makeGlobal.bind(this));\n bridge.on('highlight', id => this.highlight(id));\n bridge.on('highlightMany', id => this.highlightMany(id));\n bridge.on('hideHighlight', () => this.emit('hideHighlight'));\n bridge.on('startInspecting', () => this.emit('startInspecting'));\n bridge.on('stopInspecting', () => this.emit('stopInspecting'));\n bridge.on('selected', id => this.emit('selected', id));\n bridge.on('setInspectEnabled', enabled => {\n this._inspectEnabled = enabled;\n this.emit('stopInspecting');\n });\n bridge.on('shutdown', () => this.emit('shutdown'));\n bridge.on('changeTextContent', ({id, text}) => {\n var node = this.getNodeForID(id);\n if (!node) {\n return;\n }\n node.textContent = text;\n });\n // used to \"inspect node in Elements pane\"\n bridge.on('putSelectedNode', id => {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$node = this.getNodeForID(id);\n });\n // used to \"view source in Sources pane\"\n bridge.on('putSelectedInstance', id => {\n var node = this.elementData.get(id);\n if (node) {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$type = node.type;\n } else {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$type = null;\n }\n if (node && node.publicInstance) {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$inst = node.publicInstance;\n } else {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$inst = null;\n }\n });\n // used to select the inspected node ($0)\n bridge.on('checkSelection', () => {\n var newSelected = window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$0;\n if (newSelected !== this._prevSelected) {\n this._prevSelected = newSelected;\n var sentSelected = window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$node;\n if (newSelected !== sentSelected) {\n this.selectFromDOMNode(newSelected, true);\n }\n }\n });\n bridge.on('scrollToNode', id => this.scrollToNode(id));\n bridge.on('traceupdatesstatechange', value => this.emit('traceupdatesstatechange', value));\n bridge.on('colorizerchange', value => this.emit('colorizerchange', value));\n\n /** Events sent to the frontend **/\n this.on('root', id => bridge.send('root', id));\n this.on('mount', data => bridge.send('mount', data));\n this.on('update', data => bridge.send('update', data));\n this.on('unmount', id => {\n bridge.send('unmount', id);\n // once an element has been unmounted, the bridge doesn't need to be\n // able to inspect it anymore.\n bridge.forget(id);\n });\n this.on('setSelection', data => bridge.send('select', data));\n this.on('setInspectEnabled', data => bridge.send('setInspectEnabled', data));\n }\n\n scrollToNode(id: ElementID): void {\n var node = this.getNodeForID(id);\n if (!node) {\n console.warn('unable to get the node for scrolling');\n return;\n }\n var domElement = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;\n if (!domElement) {\n console.warn('unable to get the domElement for scrolling');\n return;\n }\n\n if (typeof domElement.scrollIntoViewIfNeeded === 'function') {\n domElement.scrollIntoViewIfNeeded();\n } else if (typeof domElement.scrollIntoView === 'function') {\n domElement.scrollIntoView();\n }\n this.highlight(id);\n }\n\n highlight(id: ElementID) {\n var data = this.elementData.get(id);\n var node = this.getNodeForID(id);\n if (data && node) {\n this.emit('highlight', {node, name: data.name, props: data.props});\n }\n }\n\n highlightMany(ids: Array) {\n var nodes = [];\n ids.forEach(id => {\n var node = this.getNodeForID(id);\n if (node) {\n nodes.push(node);\n }\n });\n if (nodes.length) {\n this.emit('highlightMany', nodes);\n }\n }\n\n getNodeForID(id: ElementID): ?Object {\n var component = this.internalInstancesById.get(id);\n if (!component) {\n return null;\n }\n var renderer = this.renderers.get(id);\n if (renderer && this.reactInternals[renderer].getNativeFromReactElement) {\n return this.reactInternals[renderer].getNativeFromReactElement(component);\n }\n return null;\n }\n\n selectFromDOMNode(node: Object, quiet?: boolean, offsetFromLeaf: ?number = 0) {\n var id = this.getIDForNode(node);\n if (!id) {\n return;\n }\n this.emit('setSelection', {id, quiet, offsetFromLeaf});\n }\n\n // TODO: remove this method because it's breaking encapsulation.\n // It was used by RN inspector but this required leaking Fibers to it.\n // RN inspector will use selectFromDOMNode() instead now.\n // Remove this method in a few months after this comment was added.\n selectFromReactInstance(instance: OpaqueNodeHandle, quiet?: boolean) {\n var id = this.getId(instance);\n if (!id) {\n console.log('no instance id', instance);\n return;\n }\n this.emit('setSelection', {id, quiet});\n }\n\n getIDForNode(node: Object): ?ElementID {\n if (!this.reactInternals) {\n return null;\n }\n var component;\n for (var renderer in this.reactInternals) {\n // If a renderer doesn't know about a reactId, it will throw an error.\n try {\n // $FlowFixMe possibly null - it's not null\n component = this.reactInternals[renderer].getReactElementFromNative(node);\n } catch (e) {}\n if (component) {\n return this.getId(component);\n }\n }\n return null;\n }\n\n _setProps({id, path, value}: {id: ElementID, path: Array, value: any}) {\n var data = this.elementData.get(id);\n if (data && data.updater && data.updater.setInProps) {\n data.updater.setInProps(path, value);\n } else {\n console.warn(\"trying to set props on a component that doesn't support it\");\n }\n }\n\n _setState({id, path, value}: {id: ElementID, path: Array, value: any}) {\n var data = this.elementData.get(id);\n if (data && data.updater && data.updater.setInState) {\n data.updater.setInState(path, value);\n } else {\n console.warn(\"trying to set state on a component that doesn't support it\");\n }\n }\n\n _setContext({id, path, value}: {id: ElementID, path: Array, value: any}) {\n var data = this.elementData.get(id);\n if (data && data.updater && data.updater.setInContext) {\n data.updater.setInContext(path, value);\n } else {\n console.warn(\"trying to set context on a component that doesn't support it\");\n }\n }\n\n _makeGlobal({id, path}: {id: ElementID, path: Array}) {\n var data = this.elementData.get(id);\n if (!data) {\n return;\n }\n var value;\n if (path === 'instance') {\n value = data.publicInstance;\n } else {\n value = getIn(data, path);\n }\n this.global.$tmp = value;\n console.log('$tmp =', value);\n }\n\n getId(internalInstance: OpaqueNodeHandle): ElementID {\n if (typeof internalInstance !== 'object' || !internalInstance) {\n return internalInstance;\n }\n if (!this.idsByInternalInstances.has(internalInstance)) {\n this.idsByInternalInstances.set(internalInstance, guid());\n this.internalInstancesById.set(\n this.idsByInternalInstances.get(internalInstance),\n internalInstance\n );\n }\n return this.idsByInternalInstances.get(internalInstance);\n }\n\n addRoot(renderer: RendererID, internalInstance: OpaqueNodeHandle) {\n var id = this.getId(internalInstance);\n this.roots.add(id);\n this.emit('root', id);\n }\n\n onMounted(renderer: RendererID, component: OpaqueNodeHandle, data: DataType) {\n var id = this.getId(component);\n this.renderers.set(id, renderer);\n this.elementData.set(id, data);\n\n var send = assign({}, data);\n if (send.children && send.children.map) {\n send.children = send.children.map(c => this.getId(c));\n }\n send.id = id;\n send.canUpdate = send.updater && !!send.updater.forceUpdate;\n delete send.type;\n delete send.updater;\n this.emit('mount', send);\n }\n\n onUpdated(component: OpaqueNodeHandle, data: DataType) {\n var id = this.getId(component);\n this.elementData.set(id, data);\n\n var send = assign({}, data);\n if (send.children && send.children.map) {\n send.children = send.children.map(c => this.getId(c));\n }\n send.id = id;\n send.canUpdate = send.updater && !!send.updater.forceUpdate;\n delete send.type;\n delete send.updater;\n this.emit('update', send);\n }\n\n onUnmounted(component: OpaqueNodeHandle) {\n var id = this.getId(component);\n this.elementData.delete(id);\n this.roots.delete(id);\n this.renderers.delete(id);\n this.emit('unmount', id);\n this.idsByInternalInstances.delete(component);\n }\n\n _onScroll() {\n if (!this._scrollUpdate) {\n this._scrollUpdate = true;\n window.requestAnimationFrame(this._updateScroll);\n }\n }\n\n _updateScroll() {\n this.emit('refreshMultiOverlay');\n this.emit('stopInspecting');\n this._scrollUpdate = false;\n }\n\n _onClick(event: Event) {\n if (!this._inspectEnabled) {\n return;\n }\n\n var id = this.getIDForNode(event.target);\n if (!id) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n this.emit('setSelection', {id});\n this.emit('setInspectEnabled', false);\n }\n\n _onMouseOver(event: Event) {\n if (this._inspectEnabled) {\n const id = this.getIDForNode(event.target);\n if (!id) {\n return;\n }\n \n this.highlight(id);\n }\n }\n\n _onResize(event: Event) {\n this.emit('stopInspecting');\n }\n}\n\nmodule.exports = Agent;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/Agent.js\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/events/events.js\n ** module id = 2\n ** module chunks = 0\n **/","/* eslint-disable no-unused-vars */\n'use strict';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nmodule.exports = Object.assign || function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tsymbols = Object.getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/object-assign/index.js\n ** module id = 3\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nfunction guid(): string {\n return 'g' + Math.random().toString(16).substr(2);\n}\n\nmodule.exports = guid;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/utils/guid.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/**\n * Retrieves the value from the path of nested objects\n * @param {Object} base Base or root object for path\n * @param {Array} path nested path\n * @return {any} Value at end of path or `mull`\n */\nfunction getIn(base, path) {\n return path.reduce((obj, attr) => {\n if (obj) {\n if (obj.hasOwnProperty(attr)) {\n return obj[attr];\n }\n if (typeof obj[Symbol.iterator] === 'function') {\n // Convert iterable to array and return array[index]\n return [...obj][attr];\n }\n }\n\n return null;\n }, base);\n}\n\nmodule.exports = getIn;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/getIn.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar consts = require('./consts');\nvar hydrate = require('./hydrate');\nvar dehydrate = require('./dehydrate');\nvar getIn = require('./getIn');\nvar performanceNow = require('fbjs/lib/performanceNow');\n\n// Use the polyfill if the function is not native implementation\nfunction getWindowFunction(name, polyfill): Function {\n if (String(window[name]).indexOf('[native code]') === -1) {\n return polyfill;\n }\n return window[name];\n}\n\n// Custom polyfill that runs the queue with a backoff.\n// If you change it, make sure it behaves reasonably well in Firefox.\nvar lastRunTimeMS = 5;\nvar cancelIdleCallback = getWindowFunction('cancelIdleCallback', clearTimeout);\nvar requestIdleCallback = getWindowFunction('requestIdleCallback', function(cb, options) {\n // Magic numbers determined by tweaking in Firefox.\n // There is no special meaning to them.\n var delayMS = 3000 * lastRunTimeMS;\n if (delayMS > 500) {\n delayMS = 500;\n }\n\n return setTimeout(() => {\n var startTime = performanceNow();\n cb({\n didTimeout: false,\n timeRemaining() {\n return Infinity;\n },\n });\n var endTime = performanceNow();\n lastRunTimeMS = (endTime - startTime) / 1000;\n }, delayMS);\n});\n\ntype AnyFn = (...x: any) => any;\nexport type Wall = {\n listen: (fn: (data: PayloadType) => void) => void,\n send: (data: PayloadType) => void,\n};\n\ntype IdleDeadline = {\n didTimeout: bool,\n timeRemaining: () => number,\n};\n\ntype EventPayload = {\n type: 'event',\n cleaned: ?Array>,\n evt: string,\n data: any,\n};\n\ntype PayloadType = {\n type: 'inspect',\n id: string,\n path: Array,\n callback: number,\n} | {\n type: 'many-events',\n events: Array,\n} | {\n type: 'call',\n name: string,\n args: Array,\n callback: number,\n} | {\n type: 'callback',\n id: number,\n args: Array,\n} | {\n type: 'pause',\n} | {\n type: 'resume',\n} | EventPayload;\n\n/**\n * The bridge is responsible for serializing requests between the Agent and\n * the Frontend Store. It needs to be connected to a Wall object that can send\n * JSONable data to the bridge on the other side.\n *\n * complex data\n * |\n * v\n * [Bridge]\n * |\n * jsonable data\n * |\n * v\n * [wall]\n * |\n * v\n * ~ some barrier ~\n * |\n * v\n * [wall]\n * |\n * v\n * [Bridge]\n * |\n * v\n * \"hydrated\" data\n *\n * When an item is passed in that can't be serialized (anything other than a\n * plain array, object, or literal value), the object is \"cleaned\", and\n * rehydrated on the other side with `Symbol` attributes indicating that the\n * object needs to be inspected for more detail.\n *\n * Example:\n *\n * bridge.send('evname', {id: 'someid', foo: MyCoolObjectInstance})\n * ->\n * shows up, hydrated as\n * {\n * id: 'someid',\n * foo: {\n * [consts.name]: 'MyCoolObjectInstance',\n * [consts.type]: 'object',\n * [consts.meta]: {},\n * [consts.inspected]: false,\n * }\n * }\n *\n * The `consts` variables are Symbols, and as such are non-ennumerable.\n * The front-end therefore needs to check for `consts.inspected` on received\n * objects, and can thereby display object proxies and inspect them.\n *\n * Complex objects that are passed are expected to have a top-level `id`\n * attribute, which is used for later lookup + inspection. Once it has been\n * determined that an object is no longer needed, call `.forget(id)` to clean\n * up.\n */\nclass Bridge {\n _buffer: Array<{evt: string, data: any}>;\n _cbs: Map;\n _cid: number;\n _inspectables: Map;\n _listeners: {[key: string]: Array<(data: any) => void>};\n _flushHandle: ?number;\n _wall: Wall;\n _callers: {[key: string]: AnyFn};\n _paused: boolean;\n\n constructor(wall: Wall) {\n this._cbs = new Map();\n this._inspectables = new Map();\n this._cid = 0;\n this._listeners = {};\n this._buffer = [];\n this._flushHandle = null;\n this._callers = {};\n this._paused = false;\n this._wall = wall;\n\n wall.listen(this._handleMessage.bind(this));\n }\n\n inspect(id: string, path: Array, cb: (val: any) => any) {\n var _cid = this._cid++;\n this._cbs.set(_cid, (data, cleaned, proto, protoclean) => {\n if (cleaned.length) {\n hydrate(data, cleaned);\n }\n if (proto && protoclean.length) {\n hydrate(proto, protoclean);\n }\n if (proto) {\n data[consts.proto] = proto;\n }\n cb(data);\n });\n\n this._wall.send({\n type: 'inspect',\n callback: _cid,\n path,\n id,\n });\n }\n\n call(name: string, args: Array, cb: (val: any) => any) {\n var _cid = this._cid++;\n this._cbs.set(_cid, cb);\n\n this._wall.send({\n type: 'call',\n callback: _cid,\n args,\n name,\n });\n }\n\n onCall(name: string, handler: (data: any) => any) {\n if (this._callers[name]) {\n throw new Error('only one call handler per call name allowed');\n }\n this._callers[name] = handler;\n }\n\n pause() {\n this._wall.send({\n type: 'pause',\n });\n }\n\n resume() {\n this._wall.send({\n type: 'resume',\n });\n }\n\n setInspectable(id: string, data: Object) {\n var prev = this._inspectables.get(id);\n if (!prev) {\n this._inspectables.set(id, data);\n return;\n }\n this._inspectables.set(id, {...prev, ...data});\n }\n\n send(evt: string, data: any) {\n this._buffer.push({evt, data});\n this.scheduleFlush();\n }\n\n scheduleFlush() {\n if (!this._flushHandle && this._buffer.length) {\n var timeout = this._paused ? 5000 : 500;\n this._flushHandle = requestIdleCallback(\n this.flushBufferWhileIdle.bind(this),\n {timeout}\n );\n }\n }\n\n cancelFlush() {\n if (this._flushHandle) {\n cancelIdleCallback(this._flushHandle);\n this._flushHandle = null;\n }\n }\n\n flushBufferWhileIdle(deadline: IdleDeadline) {\n this._flushHandle = null;\n\n // Magic numbers were determined by tweaking in a heavy UI and seeing\n // what performs reasonably well both when DevTools are hidden and visible.\n // The goal is that we try to catch up but avoid blocking the UI.\n // When paused, it's okay to lag more, but not forever because otherwise\n // when user activates React tab, it will freeze syncing.\n var chunkCount = this._paused ? 20 : 10;\n var chunkSize = Math.round(this._buffer.length / chunkCount);\n var minChunkSize = this._paused ? 50 : 100;\n\n while (this._buffer.length && (\n deadline.timeRemaining() > 0 ||\n deadline.didTimeout\n )) {\n var take = Math.min(this._buffer.length, Math.max(minChunkSize, chunkSize));\n var currentBuffer = this._buffer.splice(0, take);\n this.flushBufferSlice(currentBuffer);\n }\n\n if (this._buffer.length) {\n this.scheduleFlush();\n }\n }\n\n flushBufferSlice(bufferSlice: Array<{evt: string, data: any}>) {\n var events = bufferSlice.map(({evt, data}) => {\n var cleaned = [];\n var san = dehydrate(data, cleaned);\n if (cleaned.length) {\n this.setInspectable(data.id, data);\n }\n return {type: 'event', evt, data: san, cleaned};\n });\n this._wall.send({type: 'many-events', events});\n }\n\n forget(id: string) {\n this._inspectables.delete(id);\n }\n\n on(evt: string, fn: AnyFn) {\n if (!this._listeners[evt]) {\n this._listeners[evt] = [fn];\n } else {\n this._listeners[evt].push(fn);\n }\n }\n\n off(evt: string, fn: AnyFn) {\n if (!this._listeners[evt]) {\n return;\n }\n var ix = this._listeners[evt].indexOf(fn);\n if (ix !== -1) {\n this._listeners[evt].splice(ix, 1);\n }\n }\n\n once(evt: string, fn: AnyFn) {\n var self = this;\n var listener = function() {\n fn.apply(this, arguments);\n self.off(evt, listener);\n };\n this.on(evt, listener);\n }\n\n _handleMessage(payload: PayloadType) {\n if (payload.type === 'resume') {\n this._paused = false;\n this.scheduleFlush();\n return;\n }\n\n if (payload.type === 'pause') {\n this._paused = true;\n this.cancelFlush();\n return;\n }\n\n if (payload.type === 'callback') {\n var callback = this._cbs.get(payload.id);\n if (callback) {\n callback(...payload.args);\n this._cbs.delete(payload.id);\n }\n return;\n }\n\n if (payload.type === 'call') {\n this._handleCall(payload.name, payload.args, payload.callback);\n return;\n }\n\n if (payload.type === 'inspect') {\n this._inspectResponse(payload.id, payload.path, payload.callback);\n return;\n }\n\n if (payload.type === 'event') {\n // console.log('[bridge<-]', payload.evt);\n if (payload.cleaned) {\n hydrate(payload.data, payload.cleaned);\n }\n var fns = this._listeners[payload.evt];\n var data = payload.data;\n if (fns) {\n fns.forEach(fn => fn(data));\n }\n }\n\n if (payload.type === 'many-events') {\n payload.events.forEach(event => {\n // console.log('[bridge<-]', payload.evt);\n if (event.cleaned) {\n hydrate(event.data, event.cleaned);\n }\n var handlers = this._listeners[event.evt];\n if (handlers) {\n handlers.forEach(fn => fn(event.data));\n }\n });\n }\n }\n\n _handleCall(name: string, args: Array, callback: number) {\n if (!this._callers[name]) {\n console.warn('unknown call: \"' + name + '\"');\n return;\n }\n args = !Array.isArray(args) ? [args] : args;\n var result;\n try {\n result = this._callers[name].apply(null, args);\n } catch (e) {\n console.error('Failed to call', e);\n return;\n }\n this._wall.send({\n type: 'callback',\n id: callback,\n args: [result],\n });\n }\n\n _inspectResponse(id: string, path: Array, callback: number) {\n var inspectable = this._inspectables.get(id);\n var result = {};\n var cleaned = [];\n var proto = null;\n var protoclean = [];\n\n if (inspectable) {\n var val = getIn(inspectable, path);\n var protod = false;\n var isFn = typeof val === 'function';\n\n if (val && typeof val[Symbol.iterator] === 'function') {\n var iterVal = Object.create({}); // flow throws \"object literal incompatible with object type\"\n var count = 0;\n for (const entry of val) {\n if (count > 100) {\n // TODO: replace this if block with better logic to handle large iterables\n break;\n }\n iterVal[count] = entry;\n count++;\n }\n val = iterVal;\n }\n\n Object.getOwnPropertyNames(val).forEach(name => {\n if (name === '__proto__') {\n protod = true;\n }\n if (isFn && (name === 'arguments' || name === 'callee' || name === 'caller')) {\n return;\n }\n result[name] = dehydrate(val[name], cleaned, [name]);\n });\n\n /* eslint-disable no-proto */\n if (!protod && val.__proto__ && val.constructor.name !== 'Object') {\n var newProto = {};\n var pIsFn = typeof val.__proto__ === 'function';\n Object.getOwnPropertyNames(val.__proto__).forEach(name => {\n if (pIsFn && (name === 'arguments' || name === 'callee' || name === 'caller')) {\n return;\n }\n newProto[name] = dehydrate(val.__proto__[name], protoclean, [name]);\n });\n proto = newProto;\n }\n /* eslint-enable no-proto */\n }\n\n this._wall.send({\n type: 'callback',\n id: callback,\n args: [result, cleaned, proto, protoclean],\n });\n }\n}\n\nmodule.exports = Bridge;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/Bridge.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar Symbol = require('es6-symbol');\n\nmodule.exports = {\n name: Symbol('name'),\n type: Symbol('type'),\n inspected: Symbol('inspected'),\n meta: Symbol('meta'),\n proto: Symbol('proto'),\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/consts.js\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')() ? Symbol : require('./polyfill');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es6-symbol/index.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function () {\n\tvar symbol;\n\tif (typeof Symbol !== 'function') return false;\n\tsymbol = Symbol('test symbol');\n\ttry { String(symbol); } catch (e) { return false; }\n\tif (typeof Symbol.iterator === 'symbol') return true;\n\n\t// Return 'true' for polyfills\n\tif (typeof Symbol.isConcatSpreadable !== 'object') return false;\n\tif (typeof Symbol.iterator !== 'object') return false;\n\tif (typeof Symbol.toPrimitive !== 'object') return false;\n\tif (typeof Symbol.toStringTag !== 'object') return false;\n\tif (typeof Symbol.unscopables !== 'object') return false;\n\n\treturn true;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es6-symbol/is-implemented.js\n ** module id = 9\n ** module chunks = 0\n **/","// ES2015 Symbol polyfill for environments that do not support it (or partially support it_\n\n'use strict';\n\nvar d = require('d')\n , validateSymbol = require('./validate-symbol')\n\n , create = Object.create, defineProperties = Object.defineProperties\n , defineProperty = Object.defineProperty, objPrototype = Object.prototype\n , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create(null);\n\nif (typeof Symbol === 'function') NativeSymbol = Symbol;\n\nvar generateName = (function () {\n\tvar created = create(null);\n\treturn function (desc) {\n\t\tvar postfix = 0, name, ie11BugWorkaround;\n\t\twhile (created[desc + (postfix || '')]) ++postfix;\n\t\tdesc += (postfix || '');\n\t\tcreated[desc] = true;\n\t\tname = '@@' + desc;\n\t\tdefineProperty(objPrototype, name, d.gs(null, function (value) {\n\t\t\t// For IE11 issue see:\n\t\t\t// https://connect.microsoft.com/IE/feedbackdetail/view/1928508/\n\t\t\t// ie11-broken-getters-on-dom-objects\n\t\t\t// https://github.com/medikoo/es6-symbol/issues/12\n\t\t\tif (ie11BugWorkaround) return;\n\t\t\tie11BugWorkaround = true;\n\t\t\tdefineProperty(this, name, d(value));\n\t\t\tie11BugWorkaround = false;\n\t\t}));\n\t\treturn name;\n\t};\n}());\n\n// Internal constructor (not one exposed) for creating Symbol instances.\n// This one is used to ensure that `someSymbol instanceof Symbol` always return false\nHiddenSymbol = function Symbol(description) {\n\tif (this instanceof HiddenSymbol) throw new TypeError('TypeError: Symbol is not a constructor');\n\treturn SymbolPolyfill(description);\n};\n\n// Exposed `Symbol` constructor\n// (returns instances of HiddenSymbol)\nmodule.exports = SymbolPolyfill = function Symbol(description) {\n\tvar symbol;\n\tif (this instanceof Symbol) throw new TypeError('TypeError: Symbol is not a constructor');\n\tsymbol = create(HiddenSymbol.prototype);\n\tdescription = (description === undefined ? '' : String(description));\n\treturn defineProperties(symbol, {\n\t\t__description__: d('', description),\n\t\t__name__: d('', generateName(description))\n\t});\n};\ndefineProperties(SymbolPolyfill, {\n\tfor: d(function (key) {\n\t\tif (globalSymbols[key]) return globalSymbols[key];\n\t\treturn (globalSymbols[key] = SymbolPolyfill(String(key)));\n\t}),\n\tkeyFor: d(function (s) {\n\t\tvar key;\n\t\tvalidateSymbol(s);\n\t\tfor (key in globalSymbols) if (globalSymbols[key] === s) return key;\n\t}),\n\n\t// If there's native implementation of given symbol, let's fallback to it\n\t// to ensure proper interoperability with other native functions e.g. Array.from\n\thasInstance: d('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')),\n\tisConcatSpreadable: d('', (NativeSymbol && NativeSymbol.isConcatSpreadable) ||\n\t\tSymbolPolyfill('isConcatSpreadable')),\n\titerator: d('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')),\n\tmatch: d('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')),\n\treplace: d('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')),\n\tsearch: d('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')),\n\tspecies: d('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')),\n\tsplit: d('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')),\n\ttoPrimitive: d('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')),\n\ttoStringTag: d('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')),\n\tunscopables: d('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables'))\n});\n\n// Internal tweaks for real symbol producer\ndefineProperties(HiddenSymbol.prototype, {\n\tconstructor: d(SymbolPolyfill),\n\ttoString: d('', function () { return this.__name__; })\n});\n\n// Proper implementation of methods exposed on Symbol.prototype\n// They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype\ndefineProperties(SymbolPolyfill.prototype, {\n\ttoString: d(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }),\n\tvalueOf: d(function () { return validateSymbol(this); })\n});\ndefineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d('',\n\tfunction () { return validateSymbol(this); }));\ndefineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d('c', 'Symbol'));\n\n// Proper implementaton of toPrimitive and toStringTag for returned symbol instances\ndefineProperty(HiddenSymbol.prototype, SymbolPolyfill.toStringTag,\n\td('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));\n\n// Note: It's important to define `toPrimitive` as last one, as some implementations\n// implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)\n// And that may invoke error in definition flow:\n// See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149\ndefineProperty(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,\n\td('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es6-symbol/polyfill.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar assign = require('es5-ext/object/assign')\n , normalizeOpts = require('es5-ext/object/normalize-options')\n , isCallable = require('es5-ext/object/is-callable')\n , contains = require('es5-ext/string/#/contains')\n\n , d;\n\nd = module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif ((arguments.length < 2) || (typeof dscr !== 'string')) {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (dscr == null) {\n\t\tc = w = true;\n\t\te = false;\n\t} else {\n\t\tc = contains.call(dscr, 'c');\n\t\te = contains.call(dscr, 'e');\n\t\tw = contains.call(dscr, 'w');\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== 'string') {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (get == null) {\n\t\tget = undefined;\n\t} else if (!isCallable(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (set == null) {\n\t\tset = undefined;\n\t} else if (!isCallable(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (dscr == null) {\n\t\tc = true;\n\t\te = false;\n\t} else {\n\t\tc = contains.call(dscr, 'c');\n\t\te = contains.call(dscr, 'e');\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/d/index.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')()\n\t? Object.assign\n\t: require('./shim');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/assign/index.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== 'function') return false;\n\tobj = { foo: 'raz' };\n\tassign(obj, { bar: 'dwa' }, { trzy: 'trzy' });\n\treturn (obj.foo + obj.bar + obj.trzy) === 'razdwatrzy';\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/assign/is-implemented.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar keys = require('../keys')\n , value = require('../valid-value')\n\n , max = Math.max;\n\nmodule.exports = function (dest, src/*, …srcn*/) {\n\tvar error, i, l = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry { dest[key] = src[key]; } catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < l; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/assign/shim.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')()\n\t? Object.keys\n\t: require('./shim');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/keys/index.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys('primitive');\n\t\treturn true;\n\t} catch (e) { return false; }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/keys/is-implemented.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) {\n\treturn keys(object == null ? object : Object(object));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/keys/shim.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function (value) {\n\tif (value == null) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/valid-value.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\nmodule.exports = function (options/*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (options == null) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/normalize-options.js\n ** module id = 19\n ** module chunks = 0\n **/","// Deprecated\n\n'use strict';\n\nmodule.exports = function (obj) { return typeof obj === 'function'; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/object/is-callable.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')()\n\t? String.prototype.contains\n\t: require('./shim');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/string/#/contains/index.js\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar str = 'razdwatrzy';\n\nmodule.exports = function () {\n\tif (typeof str.contains !== 'function') return false;\n\treturn ((str.contains('dwa') === true) && (str.contains('foo') === false));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/string/#/contains/is-implemented.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString/*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es5-ext/string/#/contains/shim.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar isSymbol = require('./is-symbol');\n\nmodule.exports = function (value) {\n\tif (!isSymbol(value)) throw new TypeError(value + \" is not a symbol\");\n\treturn value;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es6-symbol/validate-symbol.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function (x) {\n\treturn (x && ((typeof x === 'symbol') || (x['@@toStringTag'] === 'Symbol'))) || false;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/es6-symbol/is-symbol.js\n ** module id = 25\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar consts = require('./consts');\n\nfunction hydrate(data: Object, cleaned: Array>): void {\n cleaned.forEach(path => {\n var last = path.pop();\n var obj = path.reduce((obj_, attr) => obj_ ? obj_[attr] : null, data);\n if (!obj || !obj[last]) {\n return;\n }\n var replace: {[key: Symbol]: boolean | string} = {};\n replace[consts.name] = obj[last].name;\n replace[consts.type] = obj[last].type;\n replace[consts.meta] = obj[last].meta;\n replace[consts.inspected] = false;\n obj[last] = replace;\n });\n}\n\nmodule.exports = hydrate;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/hydrate.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\n/**\n * Get a enhanced/artificial type string based on the object instance\n */\nfunction getPropType(data: Object): string | null {\n if (!data) {\n return null;\n }\n var type = typeof data;\n\n if (type === 'object') {\n if (data._reactFragment) {\n return 'react_fragment';\n }\n if (Array.isArray(data)) {\n return 'array';\n }\n if (ArrayBuffer.isView(data)) {\n if (data instanceof DataView) {\n return 'data_view';\n }\n return 'typed_array';\n }\n if (data instanceof ArrayBuffer) {\n return 'array_buffer';\n }\n if (typeof data[Symbol.iterator] === 'function') {\n return 'iterator';\n }\n if (Object.prototype.toString.call(data) === '[object Date]') {\n return 'date';\n }\n }\n\n return type;\n}\n\n/**\n * Generate the dehydrated metadata for complex object instances\n */\nfunction createDehydrated(type: string, data: Object, cleaned: Array>, path: Array): Object {\n var meta = {};\n\n if (type === 'array' || type === 'typed_array') {\n meta.length = data.length;\n }\n if (type === 'iterator' || type === 'typed_array') {\n meta.readOnly = true;\n }\n\n cleaned.push(path);\n\n return {\n type,\n meta,\n name: !data.constructor || data.constructor.name === 'Object' ? '' : data.constructor.name,\n };\n}\n\n/**\n * Strip out complex data (instances, functions, and data nested > 2 levels\n * deep). The paths of the stripped out objects are appended to the `cleaned`\n * list. On the other side of the barrier, the cleaned list is used to\n * \"re-hydrate\" the cleaned representation into an object with symbols as\n * attributes, so that a sanitized object can be distinguished from a normal\n * object.\n *\n * Input: {\"some\": {\"attr\": fn()}, \"other\": AnInstance}\n * Output: {\n * \"some\": {\n * \"attr\": {\"name\": the fn.name, type: \"function\"}\n * },\n * \"other\": {\n * \"name\": \"AnInstance\",\n * \"type\": \"object\",\n * },\n * }\n * and cleaned = [[\"some\", \"attr\"], [\"other\"]]\n */\nfunction dehydrate(data: Object, cleaned: Array>, path?: Array = [], level?: number = 0): string | Object {\n\n var type = getPropType(data);\n\n switch (type) {\n\n case 'function':\n cleaned.push(path);\n return {\n name: data.name,\n type: 'function',\n };\n\n case 'string':\n return data.length <= 500 ? data : data.slice(0, 500) + '...';\n\n // We have to do this assignment b/c Flow doesn't think \"symbol\" is\n // something typeof would return. Error 'unexpected predicate \"symbol\"'\n case 'symbol':\n cleaned.push(path);\n return {\n type: 'symbol',\n name: data.toString(),\n };\n\n // React Fragments error if you try to inspect them.\n case 'react_fragment':\n return 'A React Fragment';\n\n // ArrayBuffers error if you try to inspect them.\n case 'array_buffer':\n case 'data_view':\n cleaned.push(path);\n return {\n type,\n name: type === 'data_view' ? 'DataView' : 'ArrayBuffer',\n meta: {\n length: data.byteLength,\n uninspectable: true,\n },\n };\n\n case 'array':\n if (level > 2) {\n return createDehydrated(type, data, cleaned, path);\n }\n return data.map((item, i) => dehydrate(item, cleaned, path.concat([i]), level + 1));\n\n case 'typed_array':\n case 'iterator':\n return createDehydrated(type, data, cleaned, path);\n case 'date':\n cleaned.push(path);\n return {\n name: data.toString(),\n type: 'date',\n meta: {\n uninspectable: true,\n },\n };\n case 'object':\n if (level > 2 || (data.constructor && typeof data.constructor === 'function' && data.constructor.name !== 'Object')) {\n return createDehydrated(type, data, cleaned, path);\n } else {\n\n var res = {};\n for (var name in data) {\n res[name] = dehydrate(data[name], cleaned, path.concat([name]), level + 1);\n }\n return res;\n }\n\n default:\n return data;\n }\n}\n\nmodule.exports = dehydrate;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/dehydrate.js\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performanceNow\n * @typechecks\n */\n\n'use strict';\n\nvar performance = require('./performance');\n\nvar performanceNow;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (performance.now) {\n performanceNow = function () {\n return performance.now();\n };\n} else {\n performanceNow = function () {\n return Date.now();\n };\n}\n\nmodule.exports = performanceNow;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/fbjs/lib/performanceNow.js\n ** module id = 28\n ** module chunks = 0\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performance\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/fbjs/lib/performance.js\n ** module id = 29\n ** module chunks = 0\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 30\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {Hook} from './types';\n\n/**\n * NOTE: This file cannot `require` any other modules. We `.toString()` the\n * function in some places and inject the source into the page.\n */\nfunction installGlobalHook(window: Object) {\n if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n return;\n }\n function detectReactBuildType(renderer) {\n try {\n if (typeof renderer.version === 'string') {\n // React DOM Fiber (16+)\n if (renderer.bundleType > 0) {\n // This is not a production build.\n // We are currently only using 0 (PROD) and 1 (DEV)\n // but might add 2 (PROFILE) in the future.\n return 'development';\n }\n\n // React 16 uses flat bundles. If we report the bundle as production\n // version, it means we also minified and envified it ourselves.\n return 'production';\n // Note: There is still a risk that the CommonJS entry point has not\n // been envified or uglified. In this case the user would have *both*\n // development and production bundle, but only the prod one would run.\n // This would be really bad. We have a separate check for this because\n // it happens *outside* of the renderer injection. See `checkDCE` below.\n }\n var toString = Function.prototype.toString;\n if (renderer.Mount && renderer.Mount._renderNewRootComponent) {\n // React DOM Stack\n var renderRootCode = toString.call(renderer.Mount._renderNewRootComponent);\n // Filter out bad results (if that is even possible):\n if (renderRootCode.indexOf('function') !== 0) {\n // Hope for the best if we're not sure.\n return 'production';\n }\n // Check for React DOM Stack < 15.1.0 in development.\n // If it contains \"storedMeasure\" call, it's wrapped in ReactPerf (DEV only).\n // This would be true even if it's minified, as method name still matches.\n if (renderRootCode.indexOf('storedMeasure') !== -1) {\n return 'development';\n }\n // For other versions (and configurations) it's not so easy.\n // Let's quickly exclude proper production builds.\n // If it contains a warning message, it's either a DEV build,\n // or an PROD build without proper dead code elimination.\n if (renderRootCode.indexOf('should be a pure function') !== -1) {\n // Now how do we tell a DEV build from a bad PROD build?\n // If we see NODE_ENV, we're going to assume this is a dev build\n // because most likely it is referring to an empty shim.\n if (renderRootCode.indexOf('NODE_ENV') !== -1) {\n return 'development';\n }\n // If we see \"development\", we're dealing with an envified DEV build\n // (such as the official React DEV UMD).\n if (renderRootCode.indexOf('development') !== -1) {\n return 'development';\n }\n // I've seen process.env.NODE_ENV !== 'production' being smartly\n // replaced by `true` in DEV by Webpack. I don't know how that\n // works but we can safely guard against it because `true` was\n // never used in the function source since it was written.\n if (renderRootCode.indexOf('true') !== -1) {\n return 'development';\n }\n // By now either it is a production build that has not been minified,\n // or (worse) this is a minified development build using non-standard\n // environment (e.g. \"staging\"). We're going to look at whether\n // the function argument name is mangled:\n if (\n // 0.13 to 15\n renderRootCode.indexOf('nextElement') !== -1 ||\n // 0.12\n renderRootCode.indexOf('nextComponent') !== -1\n ) {\n // We can't be certain whether this is a development build or not,\n // but it is definitely unminified.\n return 'unminified';\n } else {\n // This is likely a minified development build.\n return 'development';\n }\n }\n // By now we know that it's envified and dead code elimination worked,\n // but what if it's still not minified? (Is this even possible?)\n // Let's check matches for the first argument name.\n if (\n // 0.13 to 15\n renderRootCode.indexOf('nextElement') !== -1 ||\n // 0.12\n renderRootCode.indexOf('nextComponent') !== -1\n ) {\n return 'unminified';\n }\n // Seems like we're using the production version.\n // Now let's check if we're still on 0.14 or lower:\n if (renderRootCode.indexOf('._registerComponent') !== -1) {\n // TODO: we can remove the condition above once 16\n // is older than a year. Since this branch only runs\n // for Stack, we can flip it completely when Stack\n // is old enough. The branch for Fiber is above,\n // and it can check renderer.version directly.\n return 'outdated';\n }\n // We're all good.\n return 'production';\n }\n } catch (err) {\n // Weird environments may exist.\n // This code needs a higher fault tolerance\n // because it runs even with closed DevTools.\n // TODO: should we catch errors in all injected code, and not just this part?\n }\n return 'production';\n }\n\n let hasDetectedBadDCE = false;\n\n const hook = ({\n // Shared between Stack and Fiber:\n _renderers: {},\n helpers: {},\n checkDCE: function(fn) {\n // This runs for production versions of React.\n // Needs to be super safe.\n try {\n var toString = Function.prototype.toString;\n var code = toString.call(fn);\n // This is a string embedded in the passed function under DEV-only\n // condition. However the function executes only in PROD. Therefore,\n // if we see it, dead code elimination did not work.\n if (code.indexOf('^_^') > -1) {\n // Remember to report during next injection.\n hasDetectedBadDCE = true;\n // Bonus: throw an exception hoping that it gets picked up by\n // a reporting system. Not synchronously so that it doesn't break the\n // calling code.\n setTimeout(function() {\n throw new Error(\n 'React is running in production mode, but dead code ' +\n 'elimination has not been applied. Read how to correctly ' +\n 'configure React for production: ' +\n 'https://fb.me/react-perf-use-the-production-build'\n );\n });\n }\n } catch (err) { }\n },\n inject: function(renderer) {\n var id = Math.random().toString(16).slice(2);\n hook._renderers[id] = renderer;\n var reactBuildType = hasDetectedBadDCE ?\n 'deadcode' :\n detectReactBuildType(renderer);\n hook.emit('renderer', {id, renderer, reactBuildType});\n return id;\n },\n _listeners: {},\n sub: function(evt, fn) {\n hook.on(evt, fn);\n return () => hook.off(evt, fn);\n },\n on: function(evt, fn) {\n if (!hook._listeners[evt]) {\n hook._listeners[evt] = [];\n }\n hook._listeners[evt].push(fn);\n },\n off: function(evt, fn) {\n if (!hook._listeners[evt]) {\n return;\n }\n var ix = hook._listeners[evt].indexOf(fn);\n if (ix !== -1) {\n hook._listeners[evt].splice(ix, 1);\n }\n if (!hook._listeners[evt].length) {\n hook._listeners[evt] = null;\n }\n },\n emit: function(evt, data) {\n if (hook._listeners[evt]) {\n hook._listeners[evt].map(fn => fn(data));\n }\n },\n // Fiber-only:\n supportsFiber: true,\n _fiberRoots: {},\n getFiberRoots(rendererID) {\n const roots = hook._fiberRoots;\n if (!roots[rendererID]) {\n roots[rendererID] = new Set();\n }\n return roots[rendererID];\n },\n onCommitFiberUnmount: function(rendererID, fiber) {\n // TODO: can we use hook for roots too?\n if (hook.helpers[rendererID]) {\n hook.helpers[rendererID].handleCommitFiberUnmount(fiber);\n }\n },\n onCommitFiberRoot: function(rendererID, root) {\n const mountedRoots = hook.getFiberRoots(rendererID);\n const current = root.current;\n const isKnownRoot = mountedRoots.has(root);\n const isUnmounting = current.memoizedState == null || current.memoizedState.element == null;\n // Keep track of mounted roots so we can hydrate when DevTools connect.\n if (!isKnownRoot && !isUnmounting) {\n mountedRoots.add(root);\n } else if (isKnownRoot && isUnmounting) {\n mountedRoots.delete(root);\n }\n if (hook.helpers[rendererID]) {\n hook.helpers[rendererID].handleCommitFiberRoot(root);\n }\n },\n });\n Object.defineProperty(window, '__REACT_DEVTOOLS_GLOBAL_HOOK__', {\n value: (hook : Hook),\n });\n}\n\nmodule.exports = installGlobalHook;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/installGlobalHook.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\n/**\n * NOTE: This file cannot `require` any other modules. We `.toString()` the\n * function in some places and inject the source into the page.\n * Also do not declare any variables in top level scope!\n */\n\nfunction installRelayHook(window: Object) {\n var performance = window.performance;\n var performanceNow;\n if (performance && typeof performance.now === 'function') {\n performanceNow = () => performance.now();\n } else {\n performanceNow = () => Date.now();\n }\n\n const TEXT_CHUNK_LENGTH = 500;\n\n var hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (!hook) {\n return;\n }\n\n function decorate(obj, attr, fn) {\n var old = obj[attr];\n obj[attr] = function() {\n var res = old.apply(this, arguments);\n fn.apply(this, arguments);\n return res;\n };\n }\n\n var _eventQueue = [];\n var _listener = null;\n function emit(name: string, data: mixed) {\n _eventQueue.push({name, data});\n if (_listener) {\n _listener(name, data);\n }\n }\n\n function setRequestListener(\n listener: (name: string, data: mixed) => void\n ): () => void {\n if (_listener) {\n throw new Error(\n 'Relay Devtools: Called only call setRequestListener once.'\n );\n }\n _listener = listener;\n _eventQueue.forEach(({name, data}) => {\n listener(name, data);\n });\n\n return () => {\n _listener = null;\n };\n }\n\n function recordRequest(\n type: 'mutation' | 'query',\n start: number,\n request,\n requestNumber: number,\n ) {\n var id = Math.random().toString(16).substr(2);\n request.then(\n response => {\n emit('relay:success', {\n id: id,\n end: performanceNow(),\n response: response.response,\n });\n },\n error => {\n emit('relay:failure', {\n id: id,\n end: performanceNow(),\n error: error,\n });\n },\n );\n const textChunks = [];\n let text = request.getQueryString();\n while (text.length > 0) {\n textChunks.push(text.substr(0, TEXT_CHUNK_LENGTH));\n text = text.substr(TEXT_CHUNK_LENGTH);\n }\n return {\n id: id,\n name: request.getDebugName(),\n requestNumber: requestNumber,\n start: start,\n text: textChunks,\n type: type,\n variables: request.getVariables(),\n };\n }\n\n let requestNumber = 0;\n\n function instrumentRelayRequests(relayInternals: Object) {\n var NetworkLayer = relayInternals.NetworkLayer;\n\n decorate(NetworkLayer, 'sendMutation', mutation => {\n requestNumber++;\n emit(\n 'relay:pending',\n [recordRequest('mutation', performanceNow(), mutation, requestNumber)]\n );\n });\n\n decorate(NetworkLayer, 'sendQueries', queries => {\n requestNumber++;\n const start = performanceNow();\n emit(\n 'relay:pending',\n queries.map(query => recordRequest('query', start, query, requestNumber))\n );\n });\n\n var instrumented = {};\n for (var key in relayInternals) {\n if (relayInternals.hasOwnProperty(key)) {\n instrumented[key] = relayInternals[key];\n }\n }\n instrumented.setRequestListener = setRequestListener;\n return instrumented;\n }\n\n var _relayInternals = null;\n Object.defineProperty(hook, '_relayInternals', ({\n configurable: true,\n set: function(relayInternals) {\n _relayInternals = instrumentRelayRequests(relayInternals);\n },\n get: function() {\n return _relayInternals;\n },\n }: any));\n}\n\nmodule.exports = installRelayHook;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/plugins/Relay/installRelayHook.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {Hook} from '../backend/types';\nimport type Agent from './Agent';\n\nvar setupBackend = require('../backend/backend');\n\nmodule.exports = function(hook: Hook, agent: Agent) {\n var subs = [\n hook.sub('renderer-attached', ({id, renderer, helpers}) => {\n agent.setReactInternals(id, helpers);\n helpers.walkTree(agent.onMounted.bind(agent, id), agent.addRoot.bind(agent, id));\n }),\n hook.sub('root', ({renderer, internalInstance}) => agent.addRoot(renderer, internalInstance)),\n hook.sub('mount', ({renderer, internalInstance, data}) => agent.onMounted(renderer, internalInstance, data)),\n hook.sub('update', ({renderer, internalInstance, data}) => agent.onUpdated(internalInstance, data)),\n hook.sub('unmount', ({renderer, internalInstance}) => agent.onUnmounted(internalInstance)),\n ];\n\n var success = setupBackend(hook);\n if (!success) {\n return;\n }\n\n hook.emit('react-devtools', agent);\n hook.reactDevtoolsAgent = agent;\n agent.on('shutdown', () => {\n subs.forEach(fn => fn());\n hook.reactDevtoolsAgent = null;\n });\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/agent/inject.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n *\n * This is the chrome devtools\n *\n * 1. Devtools sets the __REACT_DEVTOOLS_GLOBAL_HOOK__ global.\n * 2. React (if present) calls .inject() with the internal renderer\n * 3. Devtools sees the renderer, and then adds this backend, along with the Agent\n * and whatever else is needed.\n * 4. The agent then calls `.emit('react-devtools', agent)`\n *\n * Now things are hooked up.\n *\n * When devtools closes, it calls `cleanup()` to remove the listeners\n * and any overhead caused by the backend.\n */\n'use strict';\n\nimport type {Hook} from './types';\n\nvar attachRenderer = require('./attachRenderer');\n\nmodule.exports = function setupBackend(hook: Hook): boolean {\n var oldReact = window.React && window.React.__internals;\n if (oldReact && Object.keys(hook._renderers).length === 0) {\n hook.inject(oldReact);\n }\n\n for (var rid in hook._renderers) {\n hook.helpers[rid] = attachRenderer(hook, rid, hook._renderers[rid]);\n hook.emit('renderer-attached', {id: rid, renderer: hook._renderers[rid], helpers: hook.helpers[rid]});\n }\n\n hook.on('renderer', ({id, renderer}) => {\n hook.helpers[id] = attachRenderer(hook, id, renderer);\n hook.emit('renderer-attached', {id, renderer, helpers: hook.helpers[id]});\n });\n\n var shutdown = () => {\n for (var id in hook.helpers) {\n hook.helpers[id].cleanup();\n }\n hook.off('shutdown', shutdown);\n };\n hook.on('shutdown', shutdown);\n\n return true;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/backend.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {DataType, OpaqueNodeHandle, Hook, ReactRenderer, Helpers} from './types';\nvar getData = require('./getData');\nvar getData012 = require('./getData012');\nvar attachRendererFiber = require('./attachRendererFiber');\n\ntype NodeLike = {};\n\n/**\n * This takes care of patching the renderer to emit events on the global\n * `Hook`. The returned object has a `.cleanup` method to un-patch everything.\n */\nfunction attachRenderer(hook: Hook, rid: string, renderer: ReactRenderer): Helpers {\n var rootNodeIDMap = new Map();\n var extras = {};\n // Before 0.13 there was no Reconciler, so we patch Component.Mixin\n var isPre013 = !renderer.Reconciler;\n\n // React Fiber\n if (typeof renderer.findFiberByHostInstance === 'function') {\n return attachRendererFiber(hook, rid, renderer);\n }\n\n // React Native\n if (renderer.Mount.findNodeHandle && renderer.Mount.nativeTagToRootNodeID) {\n extras.getNativeFromReactElement = function(component) {\n return renderer.Mount.findNodeHandle(component);\n };\n\n extras.getReactElementFromNative = function(nativeTag) {\n var id = renderer.Mount.nativeTagToRootNodeID(nativeTag);\n return rootNodeIDMap.get(id);\n };\n // React DOM 15+\n } else if (renderer.ComponentTree) {\n extras.getNativeFromReactElement = function(component) {\n return renderer.ComponentTree.getNodeFromInstance(component);\n };\n\n extras.getReactElementFromNative = function(node) {\n return renderer.ComponentTree.getClosestInstanceFromNode(node);\n };\n // React DOM\n } else if (renderer.Mount.getID && renderer.Mount.getNode) {\n extras.getNativeFromReactElement = function(component) {\n try {\n return renderer.Mount.getNode(component._rootNodeID);\n } catch (e) {\n return undefined;\n }\n };\n\n extras.getReactElementFromNative = function(node) {\n var id = renderer.Mount.getID(node);\n while (node && node.parentNode && !id) {\n node = node.parentNode;\n id = renderer.Mount.getID(node);\n }\n return rootNodeIDMap.get(id);\n };\n } else {\n console.warn('Unknown react version (does not have getID), probably an unshimmed React Native');\n }\n\n var oldMethods;\n var oldRenderComponent;\n var oldRenderRoot;\n\n // React DOM\n if (renderer.Mount._renderNewRootComponent) {\n oldRenderRoot = decorateResult(renderer.Mount, '_renderNewRootComponent', (internalInstance) => {\n hook.emit('root', {renderer: rid, internalInstance});\n });\n // React Native\n } else if (renderer.Mount.renderComponent) {\n oldRenderComponent = decorateResult(renderer.Mount, 'renderComponent', internalInstance => {\n hook.emit('root', {renderer: rid, internalInstance: internalInstance._reactInternalInstance});\n });\n }\n\n if (renderer.Component) {\n console.error('You are using a version of React with limited support in this version of the devtools.\\nPlease upgrade to use at least 0.13, or you can downgrade to use the old version of the devtools:\\ninstructions here https://github.com/facebook/react-devtools/tree/devtools-next#how-do-i-use-this-for-react--013');\n // 0.11 - 0.12\n // $FlowFixMe renderer.Component is not \"possibly undefined\"\n oldMethods = decorateMany(renderer.Component.Mixin, {\n mountComponent() {\n rootNodeIDMap.set(this._rootNodeID, this);\n // FIXME DOMComponent calls Component.Mixin, and sets up the\n // `children` *after* that call, meaning we don't have access to the\n // children at this point. Maybe we should find something else to shim\n // (do we have access to DOMComponent here?) so that we don't have to\n // setTimeout.\n setTimeout(() => {\n hook.emit('mount', {internalInstance: this, data: getData012(this), renderer: rid});\n }, 0);\n },\n updateComponent() {\n setTimeout(() => {\n hook.emit('update', {internalInstance: this, data: getData012(this), renderer: rid});\n }, 0);\n },\n unmountComponent() {\n hook.emit('unmount', {internalInstance: this, renderer: rid});\n rootNodeIDMap.delete(this._rootNodeID, this);\n },\n });\n } else if (renderer.Reconciler) {\n oldMethods = decorateMany(renderer.Reconciler, {\n mountComponent(internalInstance, rootID, transaction, context) {\n var data = getData(internalInstance);\n rootNodeIDMap.set(internalInstance._rootNodeID, internalInstance);\n hook.emit('mount', {internalInstance, data, renderer: rid});\n },\n performUpdateIfNecessary(internalInstance, nextChild, transaction, context) {\n hook.emit('update', {internalInstance, data: getData(internalInstance), renderer: rid});\n },\n receiveComponent(internalInstance, nextChild, transaction, context) {\n hook.emit('update', {internalInstance, data: getData(internalInstance), renderer: rid});\n },\n unmountComponent(internalInstance) {\n hook.emit('unmount', {internalInstance, renderer: rid});\n rootNodeIDMap.delete(internalInstance._rootNodeID, internalInstance);\n },\n });\n }\n\n extras.walkTree = function(visit: (component: OpaqueNodeHandle, data: DataType) => void, visitRoot: (internalInstance: OpaqueNodeHandle) => void) {\n var onMount = (component, data) => {\n rootNodeIDMap.set(component._rootNodeID, component);\n visit(component, data);\n };\n walkRoots(renderer.Mount._instancesByReactRootID || renderer.Mount._instancesByContainerID, onMount, visitRoot, isPre013);\n };\n\n extras.cleanup = function() {\n if (oldMethods) {\n if (renderer.Component) {\n restoreMany(renderer.Component.Mixin, oldMethods);\n } else {\n restoreMany(renderer.Reconciler, oldMethods);\n }\n }\n if (oldRenderRoot) {\n renderer.Mount._renderNewRootComponent = oldRenderRoot;\n }\n if (oldRenderComponent) {\n renderer.Mount.renderComponent = oldRenderComponent;\n }\n oldMethods = null;\n oldRenderRoot = null;\n oldRenderComponent = null;\n };\n\n return extras;\n}\n\nfunction walkRoots(roots, onMount, onRoot, isPre013) {\n for (var name in roots) {\n walkNode(roots[name], onMount, isPre013);\n onRoot(roots[name]);\n }\n}\n\nfunction walkNode(internalInstance, onMount, isPre013) {\n var data = isPre013 ? getData012(internalInstance) : getData(internalInstance);\n if (data.children && Array.isArray(data.children)) {\n data.children.forEach(child => walkNode(child, onMount, isPre013));\n }\n onMount(internalInstance, data);\n}\n\nfunction decorateResult(obj, attr, fn) {\n var old = obj[attr];\n obj[attr] = function(instance: NodeLike) {\n var res = old.apply(this, arguments);\n fn(res);\n return res;\n };\n return old;\n}\n\nfunction decorate(obj, attr, fn) {\n var old = obj[attr];\n obj[attr] = function(instance: NodeLike) {\n var res = old.apply(this, arguments);\n fn.apply(this, arguments);\n return res;\n };\n return old;\n}\n\nfunction decorateMany(source, fns) {\n var olds = {};\n for (var name in fns) {\n olds[name] = decorate(source, name, fns[name]);\n }\n return olds;\n}\n\nfunction restoreMany(source, olds) {\n for (var name in olds) {\n source[name] = olds[name];\n }\n}\n\nmodule.exports = attachRenderer;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/attachRenderer.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {DataType} from './types';\nvar copyWithSet = require('./copyWithSet');\nvar getDisplayName = require('./getDisplayName');\nvar traverseAllChildrenImpl = require('./traverseAllChildrenImpl');\n\n/**\n * Convert a react internal instance to a sanitized data object.\n */\nfunction getData(internalInstance: Object): DataType {\n var children = null;\n var props = null;\n var state = null;\n var context = null;\n var updater = null;\n var name = null;\n var type = null;\n var key = null;\n var ref = null;\n var source = null;\n var text = null;\n var publicInstance = null;\n var nodeType = 'Native';\n // If the parent is a native node without rendered children, but with\n // multiple string children, then the `element` that gets passed in here is\n // a plain value -- a string or number.\n if (typeof internalInstance !== 'object') {\n nodeType = 'Text';\n text = internalInstance + '';\n } else if (internalInstance._currentElement === null || internalInstance._currentElement === false) {\n nodeType = 'Empty';\n } else if (internalInstance._renderedComponent) {\n nodeType = 'NativeWrapper';\n children = [internalInstance._renderedComponent];\n props = internalInstance._instance.props;\n state = internalInstance._instance.state;\n context = internalInstance._instance.context;\n if (context && Object.keys(context).length === 0) {\n context = null;\n }\n } else if (internalInstance._renderedChildren) {\n children = childrenList(internalInstance._renderedChildren);\n } else if (internalInstance._currentElement && internalInstance._currentElement.props) {\n // This is a native node without rendered children -- meaning the children\n // prop is the unfiltered list of children.\n // This may include 'null' or even other invalid values, so we need to\n // filter it the same way that ReactDOM does.\n // Instead of pulling in the whole React library, we just copied over the\n // 'traverseAllChildrenImpl' method.\n // https://github.com/facebook/react/blob/240b84ed8e1db715d759afaae85033718a0b24e1/src/isomorphic/children/ReactChildren.js#L112-L158\n const unfilteredChildren = internalInstance._currentElement.props.children;\n var filteredChildren = [];\n traverseAllChildrenImpl(\n unfilteredChildren,\n '', // nameSoFar\n (_traverseContext, child) => {\n const childType = typeof child;\n if (childType === 'string' || childType === 'number') {\n filteredChildren.push(child);\n }\n },\n // traverseContext\n );\n if (filteredChildren.length <= 1) {\n // children must be an array of nodes or a string or undefined\n // can't be an empty array\n children = filteredChildren.length\n ? String(filteredChildren[0])\n : undefined;\n } else {\n children = filteredChildren;\n }\n }\n\n if (!props && internalInstance._currentElement && internalInstance._currentElement.props) {\n props = internalInstance._currentElement.props;\n }\n\n // != used deliberately here to catch undefined and null\n if (internalInstance._currentElement != null) {\n type = internalInstance._currentElement.type;\n if (internalInstance._currentElement.key) {\n key = String(internalInstance._currentElement.key);\n }\n source = internalInstance._currentElement._source;\n ref = internalInstance._currentElement.ref;\n if (typeof type === 'string') {\n name = type;\n if (internalInstance._nativeNode != null) {\n publicInstance = internalInstance._nativeNode;\n }\n if (internalInstance._hostNode != null) {\n publicInstance = internalInstance._hostNode;\n }\n } else if (typeof type === 'function') {\n nodeType = 'Composite';\n name = getDisplayName(type);\n // 0.14 top-level wrapper\n // TODO(jared): The backend should just act as if these don't exist.\n if (internalInstance._renderedComponent && (\n internalInstance._currentElement.props === internalInstance._renderedComponent._currentElement ||\n internalInstance._currentElement.type.isReactTopLevelWrapper\n )) {\n nodeType = 'Wrapper';\n }\n if (name === null) {\n name = 'No display name';\n }\n } else if (typeof internalInstance._stringText === 'string') {\n nodeType = 'Text';\n text = internalInstance._stringText;\n } else {\n name = getDisplayName(type);\n }\n }\n\n if (internalInstance._instance) {\n var inst = internalInstance._instance;\n\n // A forceUpdate for stateless (functional) components.\n var forceUpdate = inst.forceUpdate || (inst.updater && inst.updater.enqueueForceUpdate && function(cb) {\n inst.updater.enqueueForceUpdate(this, cb, 'forceUpdate');\n });\n updater = {\n setState: inst.setState && inst.setState.bind(inst),\n forceUpdate: forceUpdate && forceUpdate.bind(inst),\n setInProps: forceUpdate && setInProps.bind(null, internalInstance, forceUpdate),\n setInState: inst.forceUpdate && setInState.bind(null, inst),\n setInContext: forceUpdate && setInContext.bind(null, inst, forceUpdate),\n };\n if (typeof type === 'function') {\n publicInstance = inst;\n }\n\n // TODO: React ART currently falls in this bucket, but this doesn't\n // actually make sense and we should clean this up after stabilizing our\n // API for backends\n if (inst._renderedChildren) {\n children = childrenList(inst._renderedChildren);\n }\n }\n\n if (typeof internalInstance.setNativeProps === 'function') {\n // For editing styles in RN\n updater = {\n setNativeProps(nativeProps) {\n internalInstance.setNativeProps(nativeProps);\n },\n };\n }\n\n return {\n nodeType,\n type,\n key,\n ref,\n source,\n name,\n props,\n state,\n context,\n children,\n text,\n updater,\n publicInstance,\n };\n}\n\nfunction setInProps(internalInst, forceUpdate, path: Array, value: any) {\n var element = internalInst._currentElement;\n internalInst._currentElement = {\n ...element,\n props: copyWithSet(element.props, path, value),\n };\n forceUpdate.call(internalInst._instance);\n}\n\nfunction setInState(inst, path: Array, value: any) {\n setIn(inst.state, path, value);\n inst.forceUpdate();\n}\n\nfunction setInContext(inst, forceUpdate, path: Array, value: any) {\n setIn(inst.context, path, value);\n forceUpdate.call(inst);\n}\n\nfunction setIn(obj: Object, path: Array, value: any) {\n var last = path.pop();\n var parent = path.reduce((obj_, attr) => obj_ ? obj_[attr] : null, obj);\n if (parent) {\n parent[last] = value;\n }\n}\n\nfunction childrenList(children) {\n var res = [];\n for (var name in children) {\n res.push(children[name]);\n }\n return res;\n}\n\nmodule.exports = getData;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/getData.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nfunction copyWithSetImpl(obj, path, idx, value) {\n if (idx >= path.length) {\n return value;\n }\n var key = path[idx];\n var updated = Array.isArray(obj) ? obj.slice() : {...obj};\n // $FlowFixMe number or string is fine here\n updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n return updated;\n}\n\nfunction copyWithSet(obj: Object | Array, path: Array, value: any): Object | Array {\n return copyWithSetImpl(obj, path, 0, value);\n}\n\nmodule.exports = copyWithSet;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/copyWithSet.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nconst FB_MODULE_RE = /^(.*) \\[from (.*)\\]$/;\nconst cachedDisplayNames = new WeakMap();\n\nfunction getDisplayName(type: Function): string {\n if (cachedDisplayNames.has(type)) {\n return cachedDisplayNames.get(type);\n }\n\n let displayName;\n\n // The displayName property is not guaranteed to be a string.\n // It's only safe to use for our purposes if it's a string.\n // github.com/facebook/react-devtools/issues/803\n if (typeof type.displayName === 'string') {\n displayName = type.displayName;\n }\n\n if (!displayName) {\n displayName = type.name || 'Unknown';\n }\n\n // Facebook-specific hack to turn \"Image [from Image.react]\" into just \"Image\".\n // We need displayName with module name for error reports but it clutters the DevTools.\n const match = displayName.match(FB_MODULE_RE);\n if (match) {\n const componentName = match[1];\n const moduleName = match[2];\n if (componentName && moduleName) {\n if (\n moduleName === componentName ||\n moduleName.startsWith(componentName + '.')\n ) {\n displayName = componentName;\n }\n }\n }\n\n cachedDisplayNames.set(type, displayName);\n return displayName;\n}\n\nmodule.exports = getDisplayName;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/getDisplayName.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nconst REACT_ELEMENT_TYPE =\n (\n typeof Symbol === 'function'\n && Symbol.for\n && Symbol.for('react.element')\n )\n || 0xeac7;\n\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\nfunction escape(key: string): string {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2',\n };\n var escapedString = ('' + key).replace(escapeRegex, function(match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (\n typeof component === 'object' &&\n component !== null &&\n component.key != null\n ) {\n // Explicit key\n return escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * We do a copied the 'traverseAllChildrenImpl' method from\n * `React.Children` so that we don't pull in the whole React library.\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(\n children: any,\n nameSoFar: string,\n callback: Function,\n traverseContext: any\n): number {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (\n children === null ||\n type === 'string' ||\n type === 'number' ||\n // The following is inlined from ReactElement. This means we can optimize\n // some checks. React Fiber also inlines this logic for similar purposes.\n (type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE)\n ) {\n callback(\n traverseContext,\n children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar,\n );\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(\n child,\n nextName,\n callback,\n traverseContext,\n );\n }\n } else {\n var iteratorFn =\n (ITERATOR_SYMBOL && children[ITERATOR_SYMBOL]) ||\n children[FAUX_ITERATOR_SYMBOL];\n if (typeof iteratorFn === 'function') {\n var iterator = iteratorFn.call(children);\n var step;\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(\n child,\n nextName,\n callback,\n traverseContext,\n );\n }\n } else if (type === 'object') {\n var addendum =\n ' If you meant to render a collection of children, use an array ' +\n 'instead.';\n var childrenString = '' + children;\n invariant(\n false,\n 'The React Devtools cannot render an object as a child. (found: %s).%s',\n childrenString === '[object Object]'\n ? 'object with keys {' + Object.keys(children).join(', ') + '}'\n : childrenString,\n addendum,\n );\n }\n }\n\n return subtreeCount;\n}\n\nmodule.exports = traverseAllChildrenImpl;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/traverseAllChildrenImpl.js\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** /Users/gaearon/p/react-devtools/~/fbjs/lib/invariant.js\n ** module id = 40\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {DataType} from './types';\nvar copyWithSet = require('./copyWithSet');\n\nfunction getData012(internalInstance: Object): DataType {\n var children = null;\n var props = internalInstance.props;\n var state = internalInstance.state;\n var context = internalInstance.context;\n var updater = null;\n var name = null;\n var type = null;\n var key = null;\n var ref = null;\n var text = null;\n var publicInstance = null;\n var nodeType = 'Native';\n if (internalInstance._renderedComponent) {\n nodeType = 'Wrapper';\n children = [internalInstance._renderedComponent];\n if (context && Object.keys(context).length === 0) {\n context = null;\n }\n } else if (internalInstance._renderedChildren) {\n name = internalInstance.constructor.displayName;\n children = childrenList(internalInstance._renderedChildren);\n } else if (typeof props.children === 'string') {\n // string children\n name = internalInstance.constructor.displayName;\n children = props.children;\n nodeType = 'Native';\n }\n\n if (!props && internalInstance._currentElement && internalInstance._currentElement.props) {\n props = internalInstance._currentElement.props;\n }\n\n if (internalInstance._currentElement) {\n type = internalInstance._currentElement.type;\n if (internalInstance._currentElement.key) {\n key = String(internalInstance._currentElement.key);\n }\n ref = internalInstance._currentElement.ref;\n if (typeof type === 'string') {\n name = type;\n } else {\n nodeType = 'Composite';\n name = type.displayName;\n if (!name) {\n name = 'No display name';\n }\n }\n }\n\n if (!name) {\n name = internalInstance.constructor.displayName || 'No display name';\n nodeType = 'Composite';\n }\n\n if (typeof props === 'string') {\n nodeType = 'Text';\n text = props;\n props = null;\n name = null;\n }\n\n if (internalInstance.forceUpdate) {\n updater = {\n setState: internalInstance.setState.bind(internalInstance),\n forceUpdate: internalInstance.forceUpdate.bind(internalInstance),\n setInProps: internalInstance.forceUpdate && setInProps.bind(null, internalInstance),\n setInState: internalInstance.forceUpdate && setInState.bind(null, internalInstance),\n setInContext: internalInstance.forceUpdate && setInContext.bind(null, internalInstance),\n };\n publicInstance = internalInstance;\n }\n\n return {\n nodeType,\n type,\n key,\n ref,\n source: null,\n name,\n props,\n state,\n context,\n children,\n text,\n updater,\n publicInstance,\n };\n}\n\nfunction setInProps(inst, path: Array, value: any) {\n inst.props = copyWithSet(inst.props, path, value);\n inst.forceUpdate();\n}\n\nfunction setInState(inst, path: Array, value: any) {\n setIn(inst.state, path, value);\n inst.forceUpdate();\n}\n\nfunction setInContext(inst, path: Array, value: any) {\n setIn(inst.context, path, value);\n inst.forceUpdate();\n}\n\nfunction setIn(obj: Object, path: Array, value: any) {\n var last = path.pop();\n var parent = path.reduce((obj_, attr) => obj_ ? obj_[attr] : null, obj);\n if (parent) {\n parent[last] = value;\n }\n}\n\nfunction childrenList(children) {\n var res = [];\n for (var name in children) {\n res.push(children[name]);\n }\n return res;\n}\n\nmodule.exports = getData012;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/getData012.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {Hook, ReactRenderer, Helpers} from './types';\nvar getDataFiber = require('./getDataFiber');\nvar {\n ClassComponent,\n HostRoot,\n} = require('./ReactTypeOfWork');\n\n// Inlined from ReactTypeOfSideEffect\nvar PerformedWork = 1;\n\nfunction attachRendererFiber(hook: Hook, rid: string, renderer: ReactRenderer): Helpers {\n // This is a slightly annoying indirection.\n // It is currently necessary because DevTools wants\n // to use unique objects as keys for instances.\n // However fibers have two versions.\n // We use this set to remember first encountered fiber for\n // each conceptual instance.\n const opaqueNodes = new Set();\n function getOpaqueNode(fiber) {\n if (opaqueNodes.has(fiber)) {\n return fiber;\n }\n const {alternate} = fiber;\n if (alternate != null && opaqueNodes.has(alternate)) {\n return alternate;\n }\n opaqueNodes.add(fiber);\n return fiber;\n }\n\n function hasDataChanged(prevFiber, nextFiber) {\n if (prevFiber.tag === ClassComponent) {\n // Skip if the class performed no work (shouldComponentUpdate bailout).\n // eslint-disable-next-line no-bitwise\n if ((nextFiber.effectTag & PerformedWork) !== PerformedWork) {\n return false;\n }\n\n // Only classes have context.\n if (prevFiber.stateNode.context !== nextFiber.stateNode.context) {\n return true;\n }\n // Force updating won't update state or props.\n if (nextFiber.updateQueue != null && nextFiber.updateQueue.hasForceUpdate) {\n return true;\n }\n }\n // Compare the fields that would result in observable changes in DevTools.\n // We don't compare type, tag, index, and key, because these are known to match.\n return (\n prevFiber.memoizedProps !== nextFiber.memoizedProps ||\n prevFiber.memoizedState !== nextFiber.memoizedState ||\n prevFiber.ref !== nextFiber.ref ||\n prevFiber._debugSource !== nextFiber._debugSource\n );\n }\n\n let pendingEvents = [];\n\n function flushPendingEvents() {\n const events = pendingEvents;\n pendingEvents = [];\n for (let i = 0; i < events.length; i++) {\n const event = events[i];\n hook.emit(event.type, event);\n }\n }\n\n function enqueueMount(fiber) {\n pendingEvents.push({\n internalInstance: getOpaqueNode(fiber),\n data: getDataFiber(fiber, getOpaqueNode),\n renderer: rid,\n type: 'mount',\n });\n\n const isRoot = fiber.tag === HostRoot;\n if (isRoot) {\n pendingEvents.push({\n internalInstance: getOpaqueNode(fiber),\n renderer: rid,\n type: 'root',\n });\n }\n }\n\n function enqueueUpdateIfNecessary(fiber, hasChildOrderChanged) {\n if (!hasChildOrderChanged && !hasDataChanged(fiber.alternate, fiber)) {\n return;\n }\n pendingEvents.push({\n internalInstance: getOpaqueNode(fiber),\n data: getDataFiber(fiber, getOpaqueNode),\n renderer: rid,\n type: 'update',\n });\n }\n\n function enqueueUnmount(fiber) {\n const isRoot = fiber.tag === HostRoot;\n const opaqueNode = getOpaqueNode(fiber);\n const event = {\n internalInstance: opaqueNode,\n renderer: rid,\n type: 'unmount',\n };\n if (isRoot) {\n pendingEvents.push(event);\n } else {\n // Non-root fibers are deleted during the commit phase.\n // They are deleted in the child-first order. However\n // DevTools currently expects deletions to be parent-first.\n // This is why we unshift deletions rather than push them.\n pendingEvents.unshift(event);\n }\n opaqueNodes.delete(opaqueNode);\n }\n\n function mountFiber(fiber) {\n // Depth-first.\n // Logs mounting of children first, parents later.\n let node = fiber;\n outer: while (true) {\n if (node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n enqueueMount(node);\n if (node == fiber) {\n return;\n }\n if (node.sibling) {\n node.sibling.return = node.return;\n node = node.sibling;\n continue;\n }\n while (node.return) {\n node = node.return;\n enqueueMount(node);\n if (node == fiber) {\n return;\n }\n if (node.sibling) {\n node.sibling.return = node.return;\n node = node.sibling;\n continue outer;\n }\n }\n return;\n }\n }\n\n function updateFiber(nextFiber, prevFiber) {\n let hasChildOrderChanged = false;\n if (nextFiber.child !== prevFiber.child) {\n // If the first child is different, we need to traverse them.\n // Each next child will be either a new child (mount) or an alternate (update).\n let nextChild = nextFiber.child;\n let prevChildAtSameIndex = prevFiber.child;\n while (nextChild) {\n // We already know children will be referentially different because\n // they are either new mounts or alternates of previous children.\n // Schedule updates and mounts depending on whether alternates exist.\n // We don't track deletions here because they are reported separately.\n if (nextChild.alternate) {\n const prevChild = nextChild.alternate;\n updateFiber(nextChild, prevChild);\n // However we also keep track if the order of the children matches\n // the previous order. They are always different referentially, but\n // if the instances line up conceptually we'll want to know that.\n if (!hasChildOrderChanged && prevChild !== prevChildAtSameIndex) {\n hasChildOrderChanged = true;\n }\n } else {\n mountFiber(nextChild);\n if (!hasChildOrderChanged) {\n hasChildOrderChanged = true;\n }\n }\n // Try the next child.\n nextChild = nextChild.sibling;\n // Advance the pointer in the previous list so that we can\n // keep comparing if they line up.\n if (!hasChildOrderChanged && prevChildAtSameIndex != null) {\n prevChildAtSameIndex = prevChildAtSameIndex.sibling;\n }\n }\n // If we have no more children, but used to, they don't line up.\n if (!hasChildOrderChanged && prevChildAtSameIndex != null) {\n hasChildOrderChanged = true;\n }\n }\n enqueueUpdateIfNecessary(nextFiber, hasChildOrderChanged);\n }\n\n function walkTree() {\n hook.getFiberRoots(rid).forEach(root => {\n // Hydrate all the roots for the first time.\n mountFiber(root.current);\n });\n flushPendingEvents();\n }\n\n function cleanup() {\n // We don't patch any methods so there is no cleanup.\n }\n\n function handleCommitFiberUnmount(fiber) {\n // This is not recursive.\n // We can't traverse fibers after unmounting so instead\n // we rely on React telling us about each unmount.\n // It will be flushed after the root is committed.\n enqueueUnmount(fiber);\n }\n\n function handleCommitFiberRoot(root) {\n const current = root.current;\n const alternate = current.alternate;\n if (alternate) {\n // TODO: relying on this seems a bit fishy.\n const wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null;\n const isMounted = current.memoizedState != null && current.memoizedState.element != null;\n if (!wasMounted && isMounted) {\n // Mount a new root.\n mountFiber(current);\n } else if (wasMounted && isMounted) {\n // Update an existing root.\n updateFiber(current, alternate);\n } else if (wasMounted && !isMounted) {\n // Unmount an existing root.\n enqueueUnmount(current);\n }\n } else {\n // Mount a new root.\n mountFiber(current);\n }\n // We're done here.\n flushPendingEvents();\n }\n\n // The naming is confusing.\n // They deal with opaque nodes (fibers), not elements.\n function getNativeFromReactElement(fiber) {\n try {\n const opaqueNode = fiber;\n const hostInstance = renderer.findHostInstanceByFiber(opaqueNode);\n return hostInstance;\n } catch (err) {\n // The fiber might have unmounted by now.\n return null;\n }\n }\n function getReactElementFromNative(hostInstance) {\n const fiber = renderer.findFiberByHostInstance(hostInstance);\n if (fiber != null) {\n // TODO: type fibers.\n const opaqueNode = getOpaqueNode((fiber: any));\n return opaqueNode;\n }\n return null;\n }\n return {\n getNativeFromReactElement,\n getReactElementFromNative,\n handleCommitFiberRoot,\n handleCommitFiberUnmount,\n cleanup,\n walkTree,\n };\n}\n\nmodule.exports = attachRendererFiber;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/attachRendererFiber.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {DataType} from './types';\nvar copyWithSet = require('./copyWithSet');\nvar getDisplayName = require('./getDisplayName');\nvar {\n FunctionalComponent,\n ClassComponent,\n HostRoot,\n HostPortal,\n HostComponent,\n HostText,\n Fragment,\n} = require('./ReactTypeOfWork');\n\n// TODO: we might want to change the data structure\n// once we no longer suppport Stack versions of `getData`.\nfunction getDataFiber(fiber: Object, getOpaqueNode: (fiber: Object) => Object): DataType {\n var type = fiber.type;\n var key = fiber.key;\n var ref = fiber.ref;\n var source = fiber._debugSource;\n var publicInstance = null;\n var props = null;\n var state = null;\n var children = null;\n var context = null;\n var updater = null;\n var nodeType = null;\n var name = null;\n var text = null;\n\n switch (fiber.tag) {\n case FunctionalComponent:\n case ClassComponent:\n nodeType = 'Composite';\n name = getDisplayName(fiber.type);\n publicInstance = fiber.stateNode;\n props = fiber.memoizedProps;\n state = fiber.memoizedState;\n if (publicInstance != null) {\n context = publicInstance.context;\n if (context && Object.keys(context).length === 0) {\n context = null;\n }\n }\n const inst = publicInstance;\n if (inst) {\n updater = {\n setState: inst.setState && inst.setState.bind(inst),\n forceUpdate: inst.forceUpdate && inst.forceUpdate.bind(inst),\n setInProps: inst.forceUpdate && setInProps.bind(null, fiber),\n setInState: inst.forceUpdate && setInState.bind(null, inst),\n setInContext: inst.forceUpdate && setInContext.bind(null, inst),\n };\n }\n children = [];\n break;\n case HostRoot:\n nodeType = 'Wrapper';\n children = [];\n break;\n case HostPortal:\n nodeType = 'Portal';\n name = 'ReactPortal';\n props = {\n target: fiber.stateNode.containerInfo,\n };\n children = [];\n break;\n case HostComponent:\n nodeType = 'Native';\n name = fiber.type;\n\n // TODO (bvaughn) we plan to remove this prefix anyway.\n // We can cut this special case out when it's gone.\n name = name.replace('topsecret-', '');\n\n publicInstance = fiber.stateNode;\n props = fiber.memoizedProps;\n if (\n typeof props.children === 'string' ||\n typeof props.children === 'number'\n ) {\n children = props.children.toString();\n } else {\n children = [];\n }\n if (typeof fiber.stateNode.setNativeProps === 'function') {\n // For editing styles in RN\n updater = {\n setNativeProps(nativeProps) {\n fiber.stateNode.setNativeProps(nativeProps);\n },\n };\n }\n break;\n case HostText:\n nodeType = 'Text';\n text = fiber.memoizedProps;\n break;\n case Fragment:\n nodeType = 'Wrapper';\n children = [];\n break;\n default: // Coroutines and yields\n nodeType = 'Native';\n props = fiber.memoizedProps;\n name = 'TODO_NOT_IMPLEMENTED_YET';\n children = [];\n break;\n }\n\n if (Array.isArray(children)) {\n let child = fiber.child;\n while (child) {\n children.push(getOpaqueNode(child));\n child = child.sibling;\n }\n }\n\n return {\n nodeType,\n type,\n key,\n ref,\n source,\n name,\n props,\n state,\n context,\n children,\n text,\n updater,\n publicInstance,\n };\n}\n\nfunction setInProps(fiber, path: Array, value: any) {\n const inst = fiber.stateNode;\n fiber.pendingProps = copyWithSet(inst.props, path, value);\n if (fiber.alternate) {\n // We don't know which fiber is the current one because DevTools may bail out of getDataFiber() call,\n // and so the data object may refer to another version of the fiber. Therefore we update pendingProps\n // on both. I hope that this is safe.\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n fiber.stateNode.forceUpdate();\n}\n\nfunction setInState(inst, path: Array, value: any) {\n setIn(inst.state, path, value);\n inst.forceUpdate();\n}\n\nfunction setInContext(inst, path: Array, value: any) {\n setIn(inst.context, path, value);\n inst.forceUpdate();\n}\n\nfunction setIn(obj: Object, path: Array, value: any) {\n var last = path.pop();\n var parent = path.reduce((obj_, attr) => obj_ ? obj_[attr] : null, obj);\n if (parent) {\n parent[last] = value;\n }\n}\n\nmodule.exports = getDataFiber;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/getDataFiber.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\n// Copied from React repo.\n\nmodule.exports = {\n IndeterminateComponent: 0, // Before we know whether it is functional or class\n FunctionalComponent: 1,\n ClassComponent: 2,\n HostRoot: 3, // Root of a host tree. Could be nested inside another node.\n HostPortal: 4, // A subtree. Could be an entry point to a different renderer.\n HostComponent: 5,\n HostText: 6,\n CoroutineComponent: 7,\n CoroutineHandlerPhase: 8,\n YieldComponent: 9,\n Fragment: 10,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/backend/ReactTypeOfWork.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar resolveBoxStyle = require('./resolveBoxStyle');\n\nimport type Bridge from '../../agent/Bridge';\nimport type Agent from '../../agent/Agent';\n\nvar styleOverridesByHostComponentId = {};\n\nmodule.exports = function setupRNStyle(\n bridge: Bridge,\n agent: Agent,\n resolveRNStyle: (style: number) => ?Object,\n) {\n bridge.onCall('rn-style:get', id => {\n var node = agent.elementData.get(id);\n if (!node || !node.props) {\n return null;\n }\n return resolveRNStyle(node.props.style);\n });\n\n bridge.on('rn-style:measure', id => {\n measureStyle(agent, bridge, resolveRNStyle, id);\n });\n\n bridge.on('rn-style:rename', ({id, oldName, newName, val}) => {\n renameStyle(agent, id, oldName, newName, val);\n setTimeout(() => measureStyle(agent, bridge, resolveRNStyle, id));\n });\n\n bridge.on('rn-style:set', ({id, attr, val}) => {\n setStyle(agent, id, attr, val);\n setTimeout(() => measureStyle(agent, bridge, resolveRNStyle, id));\n });\n};\n\nvar blank = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n};\n\nfunction measureStyle(agent, bridge, resolveRNStyle, id) {\n var node = agent.elementData.get(id);\n if (!node || !node.props) {\n bridge.send('rn-style:measure', {});\n return;\n }\n\n let style = resolveRNStyle(node.props.style);\n // If it's a host component we edited before, amend styles.\n if (styleOverridesByHostComponentId[id]) {\n style = Object.assign({}, style, styleOverridesByHostComponentId[id]);\n }\n\n var instance = node.publicInstance;\n if (!instance || !instance.measure) {\n bridge.send('rn-style:measure', {style});\n return;\n }\n\n instance.measure((x, y, width, height, left, top) => {\n // RN Android sometimes returns undefined here. Don't send measurements in this case.\n // https://github.com/jhen0409/react-native-debugger/issues/84#issuecomment-304611817\n if (typeof x !== 'number') {\n bridge.send('rn-style:measure', {style});\n return;\n }\n var margin = (style && resolveBoxStyle('margin', style)) || blank;\n var padding = (style && resolveBoxStyle('padding', style)) || blank;\n bridge.send('rn-style:measure', {\n style,\n measuredLayout: {\n x,\n y,\n width,\n height,\n left,\n top,\n margin,\n padding,\n },\n });\n });\n}\n\nfunction shallowClone(obj) {\n var nobj = {};\n for (var n in obj) {\n nobj[n] = obj[n];\n }\n return nobj;\n}\n\nfunction renameStyle(agent, id, oldName, newName, val) {\n var data = agent.elementData.get(id);\n var newStyle = newName\n ? {[oldName]: undefined, [newName]: val}\n : {[oldName]: undefined};\n\n if (data && data.updater && data.updater.setInProps) {\n // First attempt: use setInProps().\n // We do this for composite components, and it works relatively well.\n var style = data && data.props && data.props.style;\n var customStyle;\n if (Array.isArray(style)) {\n var lastLength = style.length - 1;\n if (typeof style[lastLength] === 'object' && !Array.isArray(style[lastLength])) {\n customStyle = shallowClone(style[lastLength]);\n delete customStyle[oldName];\n if (newName) {\n customStyle[newName] = val;\n } else {\n customStyle[oldName] = undefined;\n }\n // $FlowFixMe we know that updater is not null here\n data.updater.setInProps(['style', lastLength], customStyle);\n } else {\n style = style.concat([newStyle]);\n // $FlowFixMe we know that updater is not null here\n data.updater.setInProps(['style'], style);\n }\n } else {\n if (typeof style === 'object') {\n customStyle = shallowClone(style);\n delete customStyle[oldName];\n if (newName) {\n customStyle[newName] = val;\n } else {\n customStyle[oldName] = undefined;\n }\n // $FlowFixMe we know that updater is not null here\n data.updater.setInProps(['style'], customStyle);\n } else {\n style = [style, newStyle];\n data.updater.setInProps(['style'], style);\n }\n }\n } else if (data && data.updater && data.updater.setNativeProps) {\n // Fallback: use setNativeProps(). We're dealing with a host component.\n // Remember to \"correct\" resolved styles when we read them next time.\n if (!styleOverridesByHostComponentId[id]) {\n styleOverridesByHostComponentId[id] = newStyle;\n } else {\n Object.assign(styleOverridesByHostComponentId[id], newStyle);\n }\n data.updater.setNativeProps({ style: newStyle });\n } else {\n return;\n }\n agent.emit('hideHighlight');\n}\n\nfunction setStyle(agent, id, attr, val) {\n var data = agent.elementData.get(id);\n var newStyle = {[attr]: val};\n\n if (data && data.updater && data.updater.setInProps) {\n // First attempt: use setInProps().\n // We do this for composite components, and it works relatively well.\n var style = data.props && data.props.style;\n if (Array.isArray(style)) {\n var lastLength = style.length - 1;\n if (typeof style[lastLength] === 'object' && !Array.isArray(style[lastLength])) {\n // $FlowFixMe we know that updater is not null here\n data.updater.setInProps(['style', lastLength, attr], val);\n } else {\n style = style.concat([newStyle]);\n // $FlowFixMe we know that updater is not null here\n data.updater.setInProps(['style'], style);\n }\n } else {\n style = [style, newStyle];\n data.updater.setInProps(['style'], style);\n }\n } else if (data && data.updater && data.updater.setNativeProps) {\n // Fallback: use setNativeProps(). We're dealing with a host component.\n // Remember to \"correct\" resolved styles when we read them next time.\n if (!styleOverridesByHostComponentId[id]) {\n styleOverridesByHostComponentId[id] = newStyle;\n } else {\n Object.assign(styleOverridesByHostComponentId[id], newStyle);\n }\n data.updater.setNativeProps({ style: newStyle });\n } else {\n return;\n }\n agent.emit('hideHighlight');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/plugins/ReactNativeStyle/setupBackend.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n\n/**\n * This is mirror from\n * https://github.com/facebook/react-native/blob/master/Libraries/Inspector/resolveBoxStyle.js\n *\n * Resolve a style property into it's component parts, e.g.\n *\n * resolveBoxStyle('margin', {margin: 5, marginBottom: 10})\n * ->\n * {top: 5, left: 5, right: 5, bottom: 10}\n *\n * If none are set, returns false.\n */\nfunction resolveBoxStyle(prefix: string, style: Object): ?Object {\n var res = {};\n var subs = ['top', 'left', 'bottom', 'right'];\n var set = false;\n subs.forEach(sub => {\n res[sub] = style[prefix] || 0;\n });\n if (style[prefix]) {\n set = true;\n }\n if (style[prefix + 'Vertical']) {\n res.top = res.bottom = style[prefix + 'Vertical'];\n set = true;\n }\n if (style[prefix + 'Horizontal']) {\n res.left = res.right = style[prefix + 'Horizontal'];\n set = true;\n }\n subs.forEach(sub => {\n var val = style[prefix + capFirst(sub)];\n if (val) {\n res[sub] = val;\n set = true;\n }\n });\n if (!set) {\n return null;\n }\n return res;\n}\n\nfunction capFirst(text) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nmodule.exports = resolveBoxStyle;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/plugins/ReactNativeStyle/resolveBoxStyle.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type Bridge from '../../agent/Bridge';\nimport type Agent from '../../agent/Agent';\n\nfunction decorate(obj, attr, fn) {\n var old = obj[attr];\n obj[attr] = function() {\n var res = old.apply(this, arguments);\n fn.apply(this, arguments);\n return res;\n };\n return () => {\n obj[attr] = old;\n };\n}\n\nlet subscriptionEnabled = false;\n\nmodule.exports = (bridge: Bridge, agent: Agent, hook: Object) => {\n var shouldEnable = !!hook._relayInternals;\n\n bridge.onCall('relay:check', () => shouldEnable);\n if (!shouldEnable) {\n return;\n }\n var {\n DefaultStoreData,\n setRequestListener,\n } = hook._relayInternals;\n\n function sendStoreData() {\n if (subscriptionEnabled) {\n bridge.send('relay:store', {\n id: 'relay:store',\n nodes: DefaultStoreData.getNodeData(),\n });\n }\n }\n\n bridge.onCall('relay:store:enable', () => {\n subscriptionEnabled = true;\n sendStoreData();\n });\n\n bridge.onCall('relay:store:disable', () => {\n subscriptionEnabled = false;\n });\n\n sendStoreData();\n decorate(DefaultStoreData, 'handleUpdatePayload', sendStoreData);\n decorate(DefaultStoreData, 'handleQueryPayload', sendStoreData);\n\n var removeListener = setRequestListener((event, data) => {\n bridge.send(event, data);\n });\n hook.on('shutdown', removeListener);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/plugins/Relay/backend.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar Highlighter = require('./Highlighter');\n\nimport type Agent from '../../agent/Agent';\n\nmodule.exports = function setup(agent: Agent) {\n var hl = new Highlighter(window, node => {\n agent.selectFromDOMNode(node);\n });\n agent.on('highlight', data => hl.highlight(data.node, data.name));\n agent.on('highlightMany', nodes => hl.highlightMany(nodes));\n agent.on('hideHighlight', () => hl.hideHighlight());\n agent.on('refreshMultiOverlay', () => hl.refreshMultiOverlay());\n agent.on('startInspecting', () => hl.startInspecting());\n agent.on('stopInspecting', () => hl.stopInspecting());\n agent.on('shutdown', () => {\n hl.remove();\n });\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/frontend/Highlighter/setup.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nimport type {DOMNode, DOMEvent} from '../types';\n\nvar Overlay = require('./Overlay');\nvar MultiOverlay = require('./MultiOverlay');\n\n/**\n * Manages the highlighting of items on an html page, as well as\n * hover-to-inspect.\n */\nclass Highlighter {\n _overlay: ?Overlay;\n _multiOverlay: ?MultiOverlay;\n _win: Object;\n _onSelect: (node: DOMNode) => void;\n _inspecting: boolean;\n _subs: Array<() => void>;\n _button: DOMNode;\n\n constructor(win: Object, onSelect: (node: DOMNode) => void) {\n this._win = win;\n this._onSelect = onSelect;\n this._overlay = null;\n this._multiOverlay = null;\n this._subs = [];\n }\n\n startInspecting() {\n this._inspecting = true;\n this._subs = [\n captureSubscription(this._win, 'mouseover', this.onHover.bind(this)),\n captureSubscription(this._win, 'mousedown', this.onMouseDown.bind(this)),\n captureSubscription(this._win, 'click', this.onClick.bind(this)),\n ];\n }\n\n stopInspecting() {\n this._subs.forEach(unsub => unsub());\n this.hideHighlight();\n }\n\n remove() {\n this.stopInspecting();\n if (this._button && this._button.parentNode) {\n this._button.parentNode.removeChild(this._button);\n }\n }\n\n highlight(node: DOMNode, name?: string) {\n this.removeMultiOverlay();\n if (node.nodeType !== Node.COMMENT_NODE) {\n if (!this._overlay) {\n this._overlay = new Overlay(this._win);\n }\n this._overlay.inspect(node, name);\n }\n }\n\n highlightMany(nodes: Array) {\n this.removeOverlay();\n if (!this._multiOverlay) {\n this._multiOverlay = new MultiOverlay(this._win);\n }\n this._multiOverlay.highlightMany(nodes);\n }\n\n hideHighlight() {\n this._inspecting = false;\n this.removeOverlay();\n this.removeMultiOverlay();\n }\n\n refreshMultiOverlay() {\n if (!this._multiOverlay) {\n return;\n }\n this._multiOverlay.refresh();\n }\n\n removeOverlay() {\n if (!this._overlay) {\n return;\n }\n this._overlay.remove();\n this._overlay = null;\n }\n\n removeMultiOverlay() {\n if (!this._multiOverlay) {\n return;\n }\n this._multiOverlay.remove();\n this._multiOverlay = null;\n }\n\n onMouseDown(evt: DOMEvent) {\n if (!this._inspecting) {\n return;\n }\n evt.preventDefault();\n evt.stopPropagation();\n evt.cancelBubble = true;\n this._onSelect(evt.target);\n }\n\n onClick(evt: DOMEvent) {\n if (!this._inspecting) {\n return;\n }\n this._subs.forEach(unsub => unsub());\n evt.preventDefault();\n evt.stopPropagation();\n evt.cancelBubble = true;\n this.hideHighlight();\n }\n\n onHover(evt: DOMEvent) {\n if (!this._inspecting) {\n return;\n }\n evt.preventDefault();\n evt.stopPropagation();\n evt.cancelBubble = true;\n this.highlight(evt.target);\n }\n\n injectButton() {\n this._button = makeMagnifier();\n this._button.onclick = this.startInspecting.bind(this);\n this._win.document.body.appendChild(this._button);\n }\n}\n\nfunction captureSubscription(obj, evt, cb) {\n obj.addEventListener(evt, cb, true);\n return () => obj.removeEventListener(evt, cb, true);\n}\n\nfunction makeMagnifier() {\n var button = window.document.createElement('button');\n button.innerHTML = '🔍';\n button.style.backgroundColor = 'transparent';\n button.style.border = 'none';\n button.style.outline = 'none';\n button.style.cursor = 'pointer';\n button.style.position = 'fixed';\n button.style.bottom = '10px';\n button.style.right = '10px';\n button.style.fontSize = '30px';\n button.style.zIndex = 10000000;\n return button;\n}\n\nmodule.exports = Highlighter;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/frontend/Highlighter/Highlighter.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar assign = require('object-assign');\nvar {monospace} = require('../Themes/Fonts');\n\nimport type {DOMNode, DOMRect, Window} from '../types';\n\n/**\n * Note that this component is not affected by the active Theme,\n * Because it highlights elements in the main Chrome window (outside of devtools).\n * The colors below were chosen to roughly match those used by Chrome devtools.\n */\nclass Overlay {\n win: Object;\n container: DOMNode;\n node: DOMNode;\n border: DOMNode;\n padding: DOMNode;\n content: DOMNode;\n tip: DOMNode;\n nameSpan: DOMNode;\n dimSpan: DOMNode;\n\n constructor(window: Object) {\n var doc = window.document;\n this.win = window;\n this.container = doc.createElement('div');\n this.node = doc.createElement('div');\n this.border = doc.createElement('div');\n this.padding = doc.createElement('div');\n this.content = doc.createElement('div');\n\n this.border.style.borderColor = overlayStyles.border;\n this.padding.style.borderColor = overlayStyles.padding;\n this.content.style.backgroundColor = overlayStyles.background;\n\n assign(this.node.style, {\n borderColor: overlayStyles.margin,\n pointerEvents: 'none',\n position: 'fixed',\n });\n\n this.tip = doc.createElement('div');\n assign(this.tip.style, {\n backgroundColor: '#333740',\n borderRadius: '2px',\n fontFamily: monospace.family,\n fontWeight: 'bold',\n padding: '3px 5px',\n position: 'fixed',\n fontSize: monospace.sizes.normal,\n });\n\n this.nameSpan = doc.createElement('span');\n this.tip.appendChild(this.nameSpan);\n assign(this.nameSpan.style, {\n color: '#ee78e6',\n borderRight: '1px solid #aaaaaa',\n paddingRight: '0.5rem',\n marginRight: '0.5rem',\n });\n this.dimSpan = doc.createElement('span');\n this.tip.appendChild(this.dimSpan);\n assign(this.dimSpan.style, {\n color: '#d7d7d7',\n });\n\n this.container.style.zIndex = 10000000;\n this.node.style.zIndex = 10000000;\n this.tip.style.zIndex = 10000000;\n this.container.appendChild(this.node);\n this.container.appendChild(this.tip);\n this.node.appendChild(this.border);\n this.border.appendChild(this.padding);\n this.padding.appendChild(this.content);\n doc.body.appendChild(this.container);\n }\n\n remove() {\n if (this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n }\n\n inspect(node: DOMNode, name?: ?string) {\n // We can't get the size of text nodes or comment nodes. React as of v15\n // heavily uses comment nodes to delimit text.\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n var box = getNestedBoundingClientRect(node, this.win);\n var dims = getElementDimensions(node);\n\n boxWrap(dims, 'margin', this.node);\n boxWrap(dims, 'border', this.border);\n boxWrap(dims, 'padding', this.padding);\n\n assign(this.content.style, {\n height: box.height - dims.borderTop - dims.borderBottom - dims.paddingTop - dims.paddingBottom + 'px',\n width: box.width - dims.borderLeft - dims.borderRight - dims.paddingLeft - dims.paddingRight + 'px',\n });\n\n assign(this.node.style, {\n top: box.top - dims.marginTop + 'px',\n left: box.left - dims.marginLeft + 'px',\n });\n\n this.nameSpan.textContent = (name || node.nodeName.toLowerCase());\n this.dimSpan.textContent = box.width + 'px × ' + box.height + 'px';\n\n var tipPos = findTipPos({\n top: box.top - dims.marginTop,\n left: box.left - dims.marginLeft,\n height: box.height + dims.marginTop + dims.marginBottom,\n width: box.width + dims.marginLeft + dims.marginRight,\n }, this.win);\n assign(this.tip.style, tipPos);\n }\n}\n\nfunction findTipPos(dims, win) {\n var tipHeight = 20;\n var margin = 5;\n var top;\n if (dims.top + dims.height + tipHeight <= win.innerHeight) {\n if (dims.top + dims.height < 0) {\n top = margin;\n } else {\n top = dims.top + dims.height + margin;\n }\n } else if (dims.top - tipHeight <= win.innerHeight) {\n if (dims.top - tipHeight - margin < margin) {\n top = margin;\n } else {\n top = dims.top - tipHeight - margin;\n }\n } else {\n top = win.innerHeight - tipHeight - margin;\n }\n\n top += 'px';\n\n if (dims.left < 0) {\n return {top, left: margin};\n }\n if (dims.left + 200 > win.innerWidth) {\n return {top, right: margin};\n }\n return {top, left: dims.left + margin + 'px'};\n}\n\nfunction getElementDimensions(domElement) {\n var calculatedStyle = window.getComputedStyle(domElement);\n\n return {\n borderLeft: +calculatedStyle.borderLeftWidth.match(/[0-9]*/)[0],\n borderRight: +calculatedStyle.borderRightWidth.match(/[0-9]*/)[0],\n borderTop: +calculatedStyle.borderTopWidth.match(/[0-9]*/)[0],\n borderBottom: +calculatedStyle.borderBottomWidth.match(/[0-9]*/)[0],\n marginLeft: +calculatedStyle.marginLeft.match(/[0-9]*/)[0],\n marginRight: +calculatedStyle.marginRight.match(/[0-9]*/)[0],\n marginTop: +calculatedStyle.marginTop.match(/[0-9]*/)[0],\n marginBottom: +calculatedStyle.marginBottom.match(/[0-9]*/)[0],\n paddingLeft: +calculatedStyle.paddingLeft.match(/[0-9]*/)[0],\n paddingRight: +calculatedStyle.paddingRight.match(/[0-9]*/)[0],\n paddingTop: +calculatedStyle.paddingTop.match(/[0-9]*/)[0],\n paddingBottom: +calculatedStyle.paddingBottom.match(/[0-9]*/)[0],\n };\n}\n\n// Get the window object for the document that a node belongs to,\n// or return null if it cannot be found (node not attached to DOM,\n// etc).\nfunction getOwnerWindow(node: DOMNode): Window | null {\n if (!node.ownerDocument) {\n return null;\n }\n return node.ownerDocument.defaultView;\n}\n\n// Get the iframe containing a node, or return null if it cannot\n// be found (node not within iframe, etc).\nfunction getOwnerIframe(node: DOMNode): DOMNode | null {\n var nodeWindow = getOwnerWindow(node);\n if (nodeWindow) {\n return nodeWindow.frameElement;\n }\n return null;\n}\n\n// Get a bounding client rect for a node, with an\n// offset added to compensate for its border.\nfunction getBoundingClientRectWithBorderOffset(node: DOMNode) {\n var dimensions = getElementDimensions(node);\n\n return mergeRectOffsets([\n node.getBoundingClientRect(),\n {\n top: dimensions.borderTop,\n left: dimensions.borderLeft,\n bottom: dimensions.borderBottom,\n right: dimensions.borderRight,\n // This width and height won't get used by mergeRectOffsets (since this\n // is not the first rect in the array), but we set them so that this\n // object typechecks as a DOMRect.\n width: 0,\n height: 0,\n },\n ]);\n}\n\n// Add together the top, left, bottom, and right properties of\n// each DOMRect, but keep the width and height of the first one.\nfunction mergeRectOffsets(rects: Array): DOMRect {\n return rects.reduce((previousRect, rect) => {\n if (previousRect == null) {\n return rect;\n }\n\n return {\n top: previousRect.top + rect.top,\n left: previousRect.left + rect.left,\n width: previousRect.width,\n height: previousRect.height,\n bottom: previousRect.bottom + rect.bottom,\n right: previousRect.right + rect.right,\n };\n });\n}\n\n// Calculate a boundingClientRect for a node relative to boundaryWindow,\n// taking into account any offsets caused by intermediate iframes.\nfunction getNestedBoundingClientRect(node: DOMNode, boundaryWindow: Window): DOMRect {\n var ownerIframe = getOwnerIframe(node);\n if (\n ownerIframe &&\n ownerIframe !== boundaryWindow\n ) {\n var rects = [node.getBoundingClientRect()];\n var currentIframe = ownerIframe;\n var onlyOneMore = false;\n while (currentIframe) {\n var rect = getBoundingClientRectWithBorderOffset(currentIframe);\n rects.push(rect);\n currentIframe = getOwnerIframe(currentIframe);\n\n if (onlyOneMore) {\n break;\n }\n // We don't want to calculate iframe offsets upwards beyond\n // the iframe containing the boundaryWindow, but we\n // need to calculate the offset relative to the boundaryWindow.\n if (currentIframe && getOwnerWindow(currentIframe) === boundaryWindow) {\n onlyOneMore = true;\n }\n }\n\n return mergeRectOffsets(rects);\n } else {\n return node.getBoundingClientRect();\n }\n}\n\nfunction boxWrap(dims, what, node) {\n assign(node.style, {\n borderTopWidth: dims[what + 'Top'] + 'px',\n borderLeftWidth: dims[what + 'Left'] + 'px',\n borderRightWidth: dims[what + 'Right'] + 'px',\n borderBottomWidth: dims[what + 'Bottom'] + 'px',\n borderStyle: 'solid',\n });\n}\n\nvar overlayStyles = {\n background: 'rgba(120, 170, 210, 0.7)',\n padding: 'rgba(77, 200, 0, 0.3)',\n margin: 'rgba(255, 155, 0, 0.3)',\n border: 'rgba(255, 200, 50, 0.3)',\n};\n\nmodule.exports = Overlay;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/frontend/Highlighter/Overlay.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nmodule.exports = {\n monospace: {\n family: 'Menlo, Consolas, monospace',\n sizes: {\n normal: 11,\n large: 14,\n },\n },\n sansSerif: {\n family: '\"Helvetica Neue\", \"Lucida Grande\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, sans-serif',\n sizes: {\n small: 10,\n normal: 12,\n large: 14,\n },\n },\n};\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/frontend/Themes/Fonts.js\n **/","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @flow\n */\n'use strict';\n\nvar assign = require('object-assign');\n\nimport type {DOMNode} from '../types';\n\nclass MultiOverlay {\n win: Object;\n container: DOMNode;\n _currentNodes: ?Array;\n\n constructor(window: Object) {\n this.win = window;\n var doc = window.document;\n this.container = doc.createElement('div');\n doc.body.appendChild(this.container);\n this._currentNodes = null;\n }\n\n highlightMany(nodes: Array) {\n this._currentNodes = nodes;\n this.container.innerHTML = '';\n\n nodes.forEach(node => {\n var div = this.win.document.createElement('div');\n if (typeof node.getBoundingClientRect !== 'function') {\n return;\n }\n var box = node.getBoundingClientRect();\n if (box.bottom < 0 || box.top > window.innerHeight) {\n return;\n }\n assign(div.style, {\n top: box.top + 'px',\n left: box.left + 'px',\n width: box.width + 'px',\n height: box.height + 'px',\n border: '2px dotted rgba(200, 100, 100, .8)',\n boxSizing: 'border-box',\n backgroundColor: 'rgba(200, 100, 100, .2)',\n position: 'fixed',\n zIndex: 10000000,\n pointerEvents: 'none',\n });\n this.container.appendChild(div);\n });\n }\n\n refresh() {\n if (this._currentNodes) {\n this.highlightMany(this._currentNodes);\n }\n }\n\n remove() {\n if (this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n this._currentNodes = null;\n }\n }\n}\n\nmodule.exports = MultiOverlay;\n\n\n\n/** WEBPACK FOOTER **\n ** /Users/gaearon/p/react-devtools/frontend/Highlighter/MultiOverlay.js\n **/"],"sourceRoot":""}