text: /******/ (function(modules) { // webpackBootstrap
  /******/ 	// The module cache
  /******/ 	var installedModules = {};
  
  /******/ 	// The require function
  /******/ 	function __webpack_require__(moduleId) {
  
  /******/ 		// Check if module is in cache
  /******/ 		if(installedModules[moduleId])
  /******/ 			return installedModules[moduleId].exports;
  
  /******/ 		// Create a new module (and put it into the cache)
  /******/ 		var module = installedModules[moduleId] = {
  /******/ 			exports: {},
  /******/ 			id: moduleId,
  /******/ 			loaded: false
  /******/ 		};
  
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  
  /******/ 		// Flag the module as loaded
  /******/ 		module.loaded = true;
  
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  
  
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "";
  
  /******/ 	// Load entry module and return exports
  /******/ 	return __webpack_require__(0);
  /******/ })
  /************************************************************************/
  /******/ ([
  /* 0 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	'use strict';
  	
  		var _window2 = __webpack_require__(1);
  	
  		var _window = _interopRequireWildcard(_window2);
  	
  		var _HTMLElement = __webpack_require__(5);
  	
  		var _HTMLElement2 = _interopRequireDefault(_HTMLElement);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  	
  		var global = GameGlobal;
  	
  		function inject() {
  			_window.addEventListener = function (type, listener) {
  				_window.document.addEventListener(type, listener);
  			};
  			_window.removeEventListener = function (type, listener) {
  				_window.document.removeEventListener(type, listener);
  			};
  	
  			if (_window.canvas) {
  				_window.canvas.addEventListener = _window.addEventListener;
  				_window.canvas.removeEventListener = _window.removeEventListener;
  			}
  	
  			var _wx$getSystemInfoSync = wx.getSystemInfoSync(),
  					platform = _wx$getSystemInfoSync.platform;
  	
  			// 开发者工具无法重定义 window
  	
  	
  			if (platform === 'devtools') {
  				for (var key in _window) {
  					var descriptor = Object.getOwnPropertyDescriptor(global, key);
  	
  					if (!descriptor || descriptor.configurable === true) {
  						Object.defineProperty(window, key, {
  							value: _window[key]
  						});
  					}
  				}
  	
  				for (var _key in _window.document) {
  					var _descriptor = Object.getOwnPropertyDescriptor(global.document, _key);
  	
  					if (!_descriptor || _descriptor.configurable === true) {
  						Object.defineProperty(global.document, _key, {
  							value: _window.document[_key]
  						});
  					}
  				}
  				window.parent = window;
  			} else {
  				for (var _key2 in _window) {
  					global[_key2] = _window[_key2];
  				}
  				global.window = _window;
  				window = global;
  				window.top = window.parent = window;
  			}
  		}
  	
  		if (!GameGlobal.__isAdapterInjected) {
  			GameGlobal.__isAdapterInjected = true;
  			inject();
  		}
  	
  	/***/ }),
  	/* 1 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.cancelAnimationFrame = exports.requestAnimationFrame = exports.clearInterval = exports.clearTimeout = exports.setInterval = exports.setTimeout = exports.canvas = exports.location = exports.localStorage = exports.HTMLElement = exports.FileReader = exports.Audio = exports.ImageBitmap = exports.Image = exports.WebSocket = exports.XMLHttpRequest = exports.navigator = exports.document = undefined;
  	
  		var _WindowProperties = __webpack_require__(2);
  	
  		Object.keys(_WindowProperties).forEach(function (key) {
  			if (key === "default" || key === "__esModule") return;
  			Object.defineProperty(exports, key, {
  				enumerable: true,
  				get: function get() {
  					return _WindowProperties[key];
  				}
  			});
  		});
  	
  		var _constructor = __webpack_require__(4);
  	
  		Object.keys(_constructor).forEach(function (key) {
  			if (key === "default" || key === "__esModule") return;
  			Object.defineProperty(exports, key, {
  				enumerable: true,
  				get: function get() {
  					return _constructor[key];
  				}
  			});
  		});
  	
  		var _Canvas = __webpack_require__(10);
  	
  		var _Canvas2 = _interopRequireDefault(_Canvas);
  	
  		var _document2 = __webpack_require__(11);
  	
  		var _document3 = _interopRequireDefault(_document2);
  	
  		var _navigator2 = __webpack_require__(18);
  	
  		var _navigator3 = _interopRequireDefault(_navigator2);
  	
  		var _XMLHttpRequest2 = __webpack_require__(19);
  	
  		var _XMLHttpRequest3 = _interopRequireDefault(_XMLHttpRequest2);
  	
  		var _WebSocket2 = __webpack_require__(20);
  	
  		var _WebSocket3 = _interopRequireDefault(_WebSocket2);
  	
  		var _Image2 = __webpack_require__(12);
  	
  		var _Image3 = _interopRequireDefault(_Image2);
  	
  		var _ImageBitmap2 = __webpack_require__(21);
  	
  		var _ImageBitmap3 = _interopRequireDefault(_ImageBitmap2);
  	
  		var _Audio2 = __webpack_require__(13);
  	
  		var _Audio3 = _interopRequireDefault(_Audio2);
  	
  		var _FileReader2 = __webpack_require__(22);
  	
  		var _FileReader3 = _interopRequireDefault(_FileReader2);
  	
  		var _HTMLElement2 = __webpack_require__(5);
  	
  		var _HTMLElement3 = _interopRequireDefault(_HTMLElement2);
  	
  		var _localStorage2 = __webpack_require__(23);
  	
  		var _localStorage3 = _interopRequireDefault(_localStorage2);
  	
  		var _location2 = __webpack_require__(24);
  	
  		var _location3 = _interopRequireDefault(_location2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		exports.document = _document3.default;
  		exports.navigator = _navigator3.default;
  		exports.XMLHttpRequest = _XMLHttpRequest3.default;
  		exports.WebSocket = _WebSocket3.default;
  		exports.Image = _Image3.default;
  		exports.ImageBitmap = _ImageBitmap3.default;
  		exports.Audio = _Audio3.default;
  		exports.FileReader = _FileReader3.default;
  		exports.HTMLElement = _HTMLElement3.default;
  		exports.localStorage = _localStorage3.default;
  		exports.location = _location3.default;
  	
  	
  		// 暴露全局的 canvas
  		var canvas = new _Canvas2.default();
  	
  		exports.canvas = canvas;
  		exports.setTimeout = setTimeout;
  		exports.setInterval = setInterval;
  		exports.clearTimeout = clearTimeout;
  		exports.clearInterval = clearInterval;
  		exports.requestAnimationFrame = requestAnimationFrame;
  		exports.cancelAnimationFrame = cancelAnimationFrame;
  	
  	/***/ }),
  	/* 2 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.performance = exports.ontouchend = exports.ontouchmove = exports.ontouchstart = exports.screen = exports.devicePixelRatio = exports.innerHeight = exports.innerWidth = undefined;
  	
  		var _performance2 = __webpack_require__(3);
  	
  		var _performance3 = _interopRequireDefault(_performance2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		var _wx$getSystemInfoSync = wx.getSystemInfoSync(),
  				screenWidth = _wx$getSystemInfoSync.screenWidth,
  				screenHeight = _wx$getSystemInfoSync.screenHeight,
  				devicePixelRatio = _wx$getSystemInfoSync.devicePixelRatio;
  	
  		var innerWidth = exports.innerWidth = screenWidth;
  		var innerHeight = exports.innerHeight = screenHeight;
  		exports.devicePixelRatio = devicePixelRatio;
  		var screen = exports.screen = {
  			availWidth: innerWidth,
  			availHeight: innerHeight
  		};
  		var ontouchstart = exports.ontouchstart = null;
  		var ontouchmove = exports.ontouchmove = null;
  		var ontouchend = exports.ontouchend = null;
  	
  		exports.performance = _performance3.default;
  	
  	/***/ }),
  	/* 3 */
  	/***/ (function(module, exports) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		var performance = void 0;
  	
  		if (wx.getPerformance) {
  			var _wx$getSystemInfoSync = wx.getSystemInfoSync(),
  					platform = _wx$getSystemInfoSync.platform;
  	
  			var wxPerf = wx.getPerformance();
  			var initTime = wxPerf.now();
  	
  			var clientPerfAdapter = Object.assign({}, wxPerf, {
  				now: function now() {
  					return (wxPerf.now() - initTime) / 1000;
  				}
  			});
  	
  			performance = platform === 'devtools' ? wxPerf : clientPerfAdapter;
  		}
  	
  		exports.default = performance;
  	
  	/***/ }),
  	/* 4 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.HTMLCanvasElement = exports.HTMLImageElement = undefined;
  	
  		var _HTMLElement3 = __webpack_require__(5);
  	
  		var _HTMLElement4 = _interopRequireDefault(_HTMLElement3);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var HTMLImageElement = exports.HTMLImageElement = function (_HTMLElement) {
  			_inherits(HTMLImageElement, _HTMLElement);
  	
  			function HTMLImageElement() {
  				_classCallCheck(this, HTMLImageElement);
  	
  				return _possibleConstructorReturn(this, (HTMLImageElement.__proto__ || Object.getPrototypeOf(HTMLImageElement)).call(this, 'img'));
  			}
  	
  			return HTMLImageElement;
  		}(_HTMLElement4.default);
  	
  		var HTMLCanvasElement = exports.HTMLCanvasElement = function (_HTMLElement2) {
  			_inherits(HTMLCanvasElement, _HTMLElement2);
  	
  			function HTMLCanvasElement() {
  				_classCallCheck(this, HTMLCanvasElement);
  	
  				return _possibleConstructorReturn(this, (HTMLCanvasElement.__proto__ || Object.getPrototypeOf(HTMLCanvasElement)).call(this, 'canvas'));
  			}
  	
  			return HTMLCanvasElement;
  		}(_HTMLElement4.default);
  	
  	/***/ }),
  	/* 5 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		var _Element2 = __webpack_require__(6);
  	
  		var _Element3 = _interopRequireDefault(_Element2);
  	
  		var _util = __webpack_require__(9);
  	
  		var _WindowProperties = __webpack_require__(2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var HTMLElement = function (_Element) {
  			_inherits(HTMLElement, _Element);
  	
  			function HTMLElement() {
  				var tagName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  	
  				_classCallCheck(this, HTMLElement);
  	
  				var _this = _possibleConstructorReturn(this, (HTMLElement.__proto__ || Object.getPrototypeOf(HTMLElement)).call(this));
  	
  				_this.className = '';
  				_this.childern = [];
  				_this.style = {
  					width: _WindowProperties.innerWidth + 'px',
  					height: _WindowProperties.innerHeight + 'px'
  				};
  				_this.insertBefore = _util.noop;
  				_this.innerHTML = '';
  	
  				_this.tagName = tagName.toUpperCase();
  				return _this;
  			}
  	
  			_createClass(HTMLElement, [{
  				key: 'setAttribute',
  				value: function setAttribute(name, value) {
  					this[name] = value;
  				}
  			}, {
  				key: 'getAttribute',
  				value: function getAttribute(name) {
  					return this[name];
  				}
  			}, {
  				key: 'getBoundingClientRect',
  				value: function getBoundingClientRect() {
  					return {
  						top: 0,
  						left: 0,
  						width: _WindowProperties.innerWidth,
  						height: _WindowProperties.innerHeight
  					};
  				}
  			}, {
  				key: 'focus',
  				value: function focus() {}
  			}, {
  				key: 'clientWidth',
  				get: function get() {
  					var ret = parseInt(this.style.fontSize, 10) * this.innerHTML.length;
  	
  					return Number.isNaN(ret) ? 0 : ret;
  				}
  			}, {
  				key: 'clientHeight',
  				get: function get() {
  					var ret = parseInt(this.style.fontSize, 10);
  	
  					return Number.isNaN(ret) ? 0 : ret;
  				}
  			}]);
  	
  			return HTMLElement;
  		}(_Element3.default);
  	
  		exports.default = HTMLElement;
  	
  	/***/ }),
  	/* 6 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _Node2 = __webpack_require__(7);
  	
  		var _Node3 = _interopRequireDefault(_Node2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var ELement = function (_Node) {
  			_inherits(ELement, _Node);
  	
  			function ELement() {
  				_classCallCheck(this, ELement);
  	
  				var _this = _possibleConstructorReturn(this, (ELement.__proto__ || Object.getPrototypeOf(ELement)).call(this));
  	
  				_this.className = '';
  				_this.children = [];
  				return _this;
  			}
  	
  			return ELement;
  		}(_Node3.default);
  	
  		exports.default = ELement;
  	
  	/***/ }),
  	/* 7 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		var _EventTarget2 = __webpack_require__(8);
  	
  		var _EventTarget3 = _interopRequireDefault(_EventTarget2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var Node = function (_EventTarget) {
  			_inherits(Node, _EventTarget);
  	
  			function Node() {
  				_classCallCheck(this, Node);
  	
  				var _this = _possibleConstructorReturn(this, (Node.__proto__ || Object.getPrototypeOf(Node)).call(this));
  	
  				_this.childNodes = [];
  				return _this;
  			}
  	
  			_createClass(Node, [{
  				key: 'appendChild',
  				value: function appendChild(node) {
  					if (node instanceof Node) {
  						this.childNodes.push(node);
  					} else {
  						throw new TypeError('Failed to executed \'appendChild\' on \'Node\': parameter 1 is not of type \'Node\'.');
  					}
  				}
  			}, {
  				key: 'cloneNode',
  				value: function cloneNode() {
  					var copyNode = Object.create(this);
  	
  					Object.assign(copyNode, this);
  					return copyNode;
  				}
  			}, {
  				key: 'removeChild',
  				value: function removeChild(node) {
  					var index = this.childNodes.findIndex(function (child) {
  						return child === node;
  					});
  	
  					if (index > -1) {
  						return this.childNodes.splice(index, 1);
  					}
  					return null;
  				}
  			}]);
  	
  			return Node;
  		}(_EventTarget3.default);
  	
  		exports.default = Node;
  	
  	/***/ }),
  	/* 8 */
  	/***/ (function(module, exports) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		var _events = new WeakMap();
  	
  		var EventTarget = function () {
  			function EventTarget() {
  				_classCallCheck(this, EventTarget);
  	
  				_events.set(this, {});
  			}
  	
  			_createClass(EventTarget, [{
  				key: 'addEventListener',
  				value: function addEventListener(type, listener) {
  					var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  	
  					var events = _events.get(this);
  	
  					if (!events) {
  						events = {};
  						_events.set(this, events);
  					}
  					if (!events[type]) {
  						events[type] = [];
  					}
  					events[type].push(listener);
  	
  					if (options.capture) {
  						console.warn('EventTarget.addEventListener: options.capture is not implemented.');
  					}
  					if (options.once) {
  						console.warn('EventTarget.addEventListener: options.once is not implemented.');
  					}
  					if (options.passive) {
  						console.warn('EventTarget.addEventListener: options.passive is not implemented.');
  					}
  				}
  			}, {
  				key: 'removeEventListener',
  				value: function removeEventListener(type, listener) {
  					var listeners = _events.get(this)[type];
  	
  					if (listeners && listeners.length > 0) {
  						for (var i = listeners.length; i--; i > 0) {
  							if (listeners[i] === listener) {
  								listeners.splice(i, 1);
  								break;
  							}
  						}
  					}
  				}
  			}, {
  				key: 'dispatchEvent',
  				value: function dispatchEvent() {
  					var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  	
  					var listeners = _events.get(this)[event.type];
  	
  					if (listeners) {
  						for (var i = 0; i < listeners.length; i++) {
  							listeners[i](event);
  						}
  					}
  				}
  			}]);
  	
  			return EventTarget;
  		}();
  	
  		exports.default = EventTarget;
  	
  	/***/ }),
  	/* 9 */
  	/***/ (function(module, exports) {
  	
  		"use strict";
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.noop = noop;
  		function noop() {}
  	
  	/***/ }),
  	/* 10 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.default = Canvas;
  	
  		var _constructor = __webpack_require__(4);
  	
  		var _HTMLElement = __webpack_require__(5);
  	
  		var _HTMLElement2 = _interopRequireDefault(_HTMLElement);
  	
  		var _document = __webpack_require__(11);
  	
  		var _document2 = _interopRequireDefault(_document);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		var hasModifiedCanvasPrototype = false;
  		var hasInit2DContextConstructor = false;
  		var hasInitWebGLContextConstructor = false;
  	
  		function Canvas() {
  			var canvas = wx.createCanvas();
  	
  			canvas.type = 'canvas';
  	
  			canvas.__proto__.__proto__ = new _HTMLElement2.default('canvas');
  	
  			var _getContext = canvas.getContext;
  	
  			canvas.getBoundingClientRect = function () {
  				var ret = {
  					top: 0,
  					left: 0,
  					width: window.innerWidth,
  					height: window.innerHeight
  				};
  				return ret;
  			};
  	
  			return canvas;
  		}
  	
  	/***/ }),
  	/* 11 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _window = __webpack_require__(1);
  	
  		var window = _interopRequireWildcard(_window);
  	
  		var _HTMLElement = __webpack_require__(5);
  	
  		var _HTMLElement2 = _interopRequireDefault(_HTMLElement);
  	
  		var _Image = __webpack_require__(12);
  	
  		var _Image2 = _interopRequireDefault(_Image);
  	
  		var _Audio = __webpack_require__(13);
  	
  		var _Audio2 = _interopRequireDefault(_Audio);
  	
  		var _Canvas = __webpack_require__(10);
  	
  		var _Canvas2 = _interopRequireDefault(_Canvas);
  	
  		__webpack_require__(16);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  	
  		var events = {};
  	
  		var document = {
  			readyState: 'complete',
  			visibilityState: 'visible',
  			documentElement: window,
  			hidden: false,
  			style: {},
  			location: window.location,
  			ontouchstart: null,
  			ontouchmove: null,
  			ontouchend: null,
  	
  			head: new _HTMLElement2.default('head'),
  			body: new _HTMLElement2.default('body'),
  	
  			createElementNS: function createElementNS(nameSpace, tagName) {
  				return this.createElement(tagName);
  			},
  			createElement: function createElement(tagName) {
  				if (tagName === 'canvas') {
  					return new _Canvas2.default();
  				} else if (tagName === 'audio') {
  					return new _Audio2.default();
  				} else if (tagName === 'img') {
  					return new _Image2.default();
  				}
  	
  				return new _HTMLElement2.default(tagName);
  			},
  			getElementById: function getElementById(id) {
  				if (id === window.canvas.id) {
  					return window.canvas;
  				}
  				return null;
  			},
  			getElementsByTagName: function getElementsByTagName(tagName) {
  				if (tagName === 'head') {
  					return [document.head];
  				} else if (tagName === 'body') {
  					return [document.body];
  				} else if (tagName === 'canvas') {
  					return [window.canvas];
  				}
  				return [];
  			},
  			getElementsByName: function getElementsByName(tagName) {
  				if (tagName === 'head') {
  					return [document.head];
  				} else if (tagName === 'body') {
  					return [document.body];
  				} else if (tagName === 'canvas') {
  					return [window.canvas];
  				}
  				return [];
  			},
  			querySelector: function querySelector(query) {
  				if (query === 'head') {
  					return document.head;
  				} else if (query === 'body') {
  					return document.body;
  				} else if (query === 'canvas') {
  					return window.canvas;
  				} else if (query === '#' + window.canvas.id) {
  					return window.canvas;
  				}
  				return null;
  			},
  			querySelectorAll: function querySelectorAll(query) {
  				if (query === 'head') {
  					return [document.head];
  				} else if (query === 'body') {
  					return [document.body];
  				} else if (query === 'canvas') {
  					return [window.canvas];
  				}
  				return [];
  			},
  			addEventListener: function addEventListener(type, listener) {
  				if (!events[type]) {
  					events[type] = [];
  				}
  				events[type].push(listener);
  			},
  			removeEventListener: function removeEventListener(type, listener) {
  				var listeners = events[type];
  	
  				if (listeners && listeners.length > 0) {
  					for (var i = listeners.length; i--; i > 0) {
  						if (listeners[i] === listener) {
  							listeners.splice(i, 1);
  							break;
  						}
  					}
  				}
  			},
  			dispatchEvent: function dispatchEvent(event) {
  				var listeners = events[event.type];
  	
  				if (listeners) {
  					for (var i = 0; i < listeners.length; i++) {
  						listeners[i](event);
  					}
  				}
  			}
  		};
  	
  		exports.default = document;
  	
  	/***/ }),
  	/* 12 */
  	/***/ (function(module, exports) {
  	
  		"use strict";
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.default = Image;
  		function Image() {
  			var image = wx.createImage();
  	
  			return image;
  		}
  	
  	/***/ }),
  	/* 13 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		var _HTMLAudioElement2 = __webpack_require__(14);
  	
  		var _HTMLAudioElement3 = _interopRequireDefault(_HTMLAudioElement2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var HAVE_NOTHING = 0;
  		var HAVE_METADATA = 1;
  		var HAVE_CURRENT_DATA = 2;
  		var HAVE_FUTURE_DATA = 3;
  		var HAVE_ENOUGH_DATA = 4;
  	
  		var _innerAudioContext = new WeakMap();
  		var _src = new WeakMap();
  		var _loop = new WeakMap();
  		var _autoplay = new WeakMap();
  	
  		var Audio = function (_HTMLAudioElement) {
  			_inherits(Audio, _HTMLAudioElement);
  	
  			function Audio(url) {
  				_classCallCheck(this, Audio);
  	
  				var _this = _possibleConstructorReturn(this, (Audio.__proto__ || Object.getPrototypeOf(Audio)).call(this));
  	
  				_this.HAVE_NOTHING = HAVE_NOTHING;
  				_this.HAVE_METADATA = HAVE_METADATA;
  				_this.HAVE_CURRENT_DATA = HAVE_CURRENT_DATA;
  				_this.HAVE_FUTURE_DATA = HAVE_FUTURE_DATA;
  				_this.HAVE_ENOUGH_DATA = HAVE_ENOUGH_DATA;
  				_this.readyState = HAVE_NOTHING;
  	
  	
  				_src.set(_this, '');
  	
  				var innerAudioContext = wx.createInnerAudioContext();
  	
  				_innerAudioContext.set(_this, innerAudioContext);
  	
  				innerAudioContext.onCanplay(function () {
  					_this.dispatchEvent({ type: 'load' });
  					_this.dispatchEvent({ type: 'loadend' });
  					_this.dispatchEvent({ type: 'canplay' });
  					_this.dispatchEvent({ type: 'canplaythrough' });
  					_this.dispatchEvent({ type: 'loadedmetadata' });
  					_this.readyState = HAVE_CURRENT_DATA;
  				});
  				innerAudioContext.onPlay(function () {
  					_this.dispatchEvent({ type: 'play' });
  				});
  				innerAudioContext.onPause(function () {
  					_this.dispatchEvent({ type: 'pause' });
  				});
  				innerAudioContext.onEnded(function () {
  					_this.dispatchEvent({ type: 'ended' });
  					_this.readyState = HAVE_ENOUGH_DATA;
  				});
  				innerAudioContext.onError(function () {
  					_this.dispatchEvent({ type: 'error' });
  				});
  	
  				if (url) {
  					_innerAudioContext.get(_this).src = url;
  				}
  				return _this;
  			}
  	
  			_createClass(Audio, [{
  				key: 'load',
  				value: function load() {
  					console.warn('HTMLAudioElement.load() is not implemented.');
  				}
  			}, {
  				key: 'play',
  				value: function play() {
  					_innerAudioContext.get(this).play();
  				}
  			}, {
  				key: 'pause',
  				value: function pause() {
  					_innerAudioContext.get(this).pause();
  				}
  			}, {
  				key: 'canPlayType',
  				value: function canPlayType() {
  					var mediaType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  	
  					if (typeof mediaType !== 'string') {
  						return '';
  					}
  	
  					if (mediaType.indexOf('audio/mpeg') > -1 || mediaType.indexOf('audio/mp4')) {
  						return 'probably';
  					}
  					return '';
  				}
  			}, {
  				key: 'cloneNode',
  				value: function cloneNode() {
  					var newAudio = new Audio();
  					newAudio.loop = _innerAudioContext.get(this).loop;
  					newAudio.autoplay = _innerAudioContext.get(this).autoplay;
  					newAudio.src = this.src;
  					return newAudio;
  				}
  			}, {
  				key: 'currentTime',
  				get: function get() {
  					return _innerAudioContext.get(this).currentTime;
  				},
  				set: function set(value) {
  					_innerAudioContext.get(this).seek(value);
  				}
  			}, {
  				key: 'src',
  				get: function get() {
  					return _src.get(this);
  				},
  				set: function set(value) {
  					_src.set(this, value);
  					_innerAudioContext.get(this).src = value;
  				}
  			}, {
  				key: 'loop',
  				get: function get() {
  					return _innerAudioContext.get(this).loop;
  				},
  				set: function set(value) {
  					_innerAudioContext.get(this).loop = value;
  				}
  			}, {
  				key: 'autoplay',
  				get: function get() {
  					return _innerAudioContext.get(this).autoplay;
  				},
  				set: function set(value) {
  					_innerAudioContext.get(this).autoplay = value;
  				}
  			}, {
  				key: 'paused',
  				get: function get() {
  					return _innerAudioContext.get(this).paused;
  				}
  			}]);
  	
  			return Audio;
  		}(_HTMLAudioElement3.default);
  	
  		exports.default = Audio;
  	
  	/***/ }),
  	/* 14 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _HTMLMediaElement2 = __webpack_require__(15);
  	
  		var _HTMLMediaElement3 = _interopRequireDefault(_HTMLMediaElement2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var HTMLAudioElement = function (_HTMLMediaElement) {
  			_inherits(HTMLAudioElement, _HTMLMediaElement);
  	
  			function HTMLAudioElement() {
  				_classCallCheck(this, HTMLAudioElement);
  	
  				return _possibleConstructorReturn(this, (HTMLAudioElement.__proto__ || Object.getPrototypeOf(HTMLAudioElement)).call(this, 'audio'));
  			}
  	
  			return HTMLAudioElement;
  		}(_HTMLMediaElement3.default);
  	
  		exports.default = HTMLAudioElement;
  	
  	/***/ }),
  	/* 15 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		var _HTMLElement2 = __webpack_require__(5);
  	
  		var _HTMLElement3 = _interopRequireDefault(_HTMLElement2);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		function _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; }
  	
  		function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  	
  		var HTMLMediaElement = function (_HTMLElement) {
  			_inherits(HTMLMediaElement, _HTMLElement);
  	
  			function HTMLMediaElement(type) {
  				_classCallCheck(this, HTMLMediaElement);
  	
  				return _possibleConstructorReturn(this, (HTMLMediaElement.__proto__ || Object.getPrototypeOf(HTMLMediaElement)).call(this, type));
  			}
  	
  			_createClass(HTMLMediaElement, [{
  				key: 'addTextTrack',
  				value: function addTextTrack() {}
  			}, {
  				key: 'captureStream',
  				value: function captureStream() {}
  			}, {
  				key: 'fastSeek',
  				value: function fastSeek() {}
  			}, {
  				key: 'load',
  				value: function load() {}
  			}, {
  				key: 'pause',
  				value: function pause() {}
  			}, {
  				key: 'play',
  				value: function play() {}
  			}]);
  	
  			return HTMLMediaElement;
  		}(_HTMLElement3.default);
  	
  		exports.default = HTMLMediaElement;
  	
  	/***/ }),
  	/* 16 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		__webpack_require__(17);
  	
  	/***/ }),
  	/* 17 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		var _window = __webpack_require__(1);
  	
  		var window = _interopRequireWildcard(_window);
  	
  		var _document = __webpack_require__(11);
  	
  		var _document2 = _interopRequireDefault(_document);
  	
  		var _util = __webpack_require__(9);
  	
  		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  	
  		function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		var TouchEvent = function TouchEvent(type) {
  			_classCallCheck(this, TouchEvent);
  	
  			this.target = window.canvas;
  			this.currentTarget = window.canvas;
  			this.touches = [];
  			this.targetTouches = [];
  			this.changedTouches = [];
  			this.preventDefault = _util.noop;
  			this.stopPropagation = _util.noop;
  	
  			this.type = type;
  		};
  	
  		function touchEventHandlerFactory(type) {
  			return function (event) {
  				var touchEvent = new TouchEvent(type);
  	
  				touchEvent.touches = event.touches;
  				touchEvent.targetTouches = Array.prototype.slice.call(event.touches);
  				touchEvent.changedTouches = event.changedTouches;
  				touchEvent.timeStamp = event.timeStamp;
  				_document2.default.dispatchEvent(touchEvent);
  			};
  		}
  	
  		wx.onTouchStart(touchEventHandlerFactory('touchstart'));
  		wx.onTouchMove(touchEventHandlerFactory('touchmove'));
  		wx.onTouchEnd(touchEventHandlerFactory('touchend'));
  		wx.onTouchCancel(touchEventHandlerFactory('touchcancel'));
  	
  	/***/ }),
  	/* 18 */
  	/***/ (function(module, exports, __webpack_require__) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _util = __webpack_require__(9);
  	
  		// TODO 需要 wx.getSystemInfo 获取更详细信息
  		var _wx$getSystemInfoSync = wx.getSystemInfoSync(),
  				platform = _wx$getSystemInfoSync.platform;
  	
  		var navigator = {
  			platform: platform,
  			language: 'zh-cn',
  			appVersion: '5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
  			userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E8301 MicroMessenger/6.6.0 MiniGame NetType/WIFI Language/zh_CN',
  			onLine: true, // TODO 用 wx.getNetworkStateChange 和 wx.onNetworkStateChange 来返回真实的状态
  	
  			// TODO 用 wx.getLocation 来封装 geolocation
  			geolocation: {
  				getCurrentPosition: _util.noop,
  				watchPosition: _util.noop,
  				clearWatch: _util.noop
  			}
  		};
  	
  		exports.default = navigator;
  	
  	/***/ }),
  	/* 19 */
  	/***/ (function(module, exports) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		var _url = new WeakMap();
  		var _method = new WeakMap();
  		var _requestHeader = new WeakMap();
  		var _responseHeader = new WeakMap();
  		var _requestTask = new WeakMap();
  	
  		function _triggerEvent(type) {
  			if (typeof this['on' + type] === 'function') {
  				for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  					args[_key - 1] = arguments[_key];
  				}
  	
  				this['on' + type].apply(this, args);
  			}
  		}
  	
  		function _changeReadyState(readyState) {
  			this.readyState = readyState;
  			_triggerEvent.call(this, 'readystatechange');
  		}
  	
  		var XMLHttpRequest = function () {
  			// TODO 没法模拟 HEADERS_RECEIVED 和 LOADING 两个状态
  			function XMLHttpRequest() {
  				_classCallCheck(this, XMLHttpRequest);
  	
  				this.onabort = null;
  				this.onerror = null;
  				this.onload = null;
  				this.onloadstart = null;
  				this.onprogress = null;
  				this.ontimeout = null;
  				this.onloadend = null;
  				this.onreadystatechange = null;
  				this.readyState = 0;
  				this.response = null;
  				this.responseText = null;
  				this.responseType = '';
  				this.responseXML = null;
  				this.status = 0;
  				this.statusText = '';
  				this.upload = {};
  				this.withCredentials = false;
  	
  				_requestHeader.set(this, {
  					'content-type': 'application/x-www-form-urlencoded'
  				});
  				_responseHeader.set(this, {});
  			}
  	
  			/*
  			 * TODO 这一批事件应该是在 XMLHttpRequestEventTarget.prototype 上面的
  			 */
  	
  	
  			_createClass(XMLHttpRequest, [{
  				key: 'abort',
  				value: function abort() {
  					var myRequestTask = _requestTask.get(this);
  	
  					if (myRequestTask) {
  						myRequestTask.abort();
  					}
  				}
  			}, {
  				key: 'getAllResponseHeaders',
  				value: function getAllResponseHeaders() {
  					var responseHeader = _responseHeader.get(this);
  	
  					return Object.keys(responseHeader).map(function (header) {
  						return header + ': ' + responseHeader[header];
  					}).join('\n');
  				}
  			}, {
  				key: 'getResponseHeader',
  				value: function getResponseHeader(header) {
  					return _responseHeader.get(this)[header];
  				}
  			}, {
  				key: 'open',
  				value: function open(method, url /* async, user, password 这几个参数在小程序内不支持*/) {
  					_method.set(this, method);
  					_url.set(this, url);
  					_changeReadyState.call(this, XMLHttpRequest.OPENED);
  				}
  			}, {
  				key: 'overrideMimeType',
  				value: function overrideMimeType() {}
  			}, {
  				key: 'send',
  				value: function send() {
  					var _this = this;
  	
  					var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  	
  					if (this.readyState !== XMLHttpRequest.OPENED) {
  						throw new Error("Failed to execute 'send' on 'XMLHttpRequest': The object's state must be OPENED.");
  					} else {
  						wx.request({
  							data: data,
  							url: _url.get(this),
  							method: _method.get(this),
  							header: _requestHeader.get(this),
  							responseType: this.responseType,
  							success: function success(_ref) {
  								var data = _ref.data,
  										statusCode = _ref.statusCode,
  										header = _ref.header;
  	
  								if (typeof data !== 'string' && !(data instanceof ArrayBuffer)) {
  									try {
  										data = JSON.stringify(data);
  									} catch (e) {
  										data = data;
  									}
  								}
  	
  								_this.status = statusCode;
  								_responseHeader.set(_this, header);
  								_triggerEvent.call(_this, 'loadstart');
  								_changeReadyState.call(_this, XMLHttpRequest.HEADERS_RECEIVED);
  								_changeReadyState.call(_this, XMLHttpRequest.LOADING);
  	
  								_this.response = data;
  	
  								if (data instanceof ArrayBuffer) {
  									_this.responseText = '';
  									var bytes = new Uint8Array(data);
  									var len = bytes.byteLength;
  	
  									for (var i = 0; i < len; i++) {
  										_this.responseText += String.fromCharCode(bytes[i]);
  									}
  								} else {
  									_this.responseText = data;
  								}
  								_changeReadyState.call(_this, XMLHttpRequest.DONE);
  								_triggerEvent.call(_this, 'load');
  								_triggerEvent.call(_this, 'loadend');
  							},
  							fail: function fail(_ref2) {
  								var errMsg = _ref2.errMsg;
  	
  								// TODO 规范错误
  								if (errMsg.indexOf('abort') !== -1) {
  									_triggerEvent.call(_this, 'abort');
  								} else {
  									_triggerEvent.call(_this, 'error', errMsg);
  								}
  								_triggerEvent.call(_this, 'loadend');
  							}
  						});
  					}
  				}
  			}, {
  				key: 'setRequestHeader',
  				value: function setRequestHeader(header, value) {
  					var myHeader = _requestHeader.get(this);
  	
  					myHeader[header] = value;
  					_requestHeader.set(this, myHeader);
  				}
  			}]);
  	
  			return XMLHttpRequest;
  		}();
  	
  		XMLHttpRequest.UNSEND = 0;
  		XMLHttpRequest.OPENED = 1;
  		XMLHttpRequest.HEADERS_RECEIVED = 2;
  		XMLHttpRequest.LOADING = 3;
  		XMLHttpRequest.DONE = 4;
  		exports.default = XMLHttpRequest;
  	
  	/***/ }),
  	/* 20 */
  	/***/ (function(module, exports) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		var _socketTask = new WeakMap();
  	
  		var WebSocket = function () {
  			// TODO 更新 binaryType
  			// The connection is in the process of closing.
  			// The connection is not yet open.
  			function WebSocket(url) {
  				var _this = this;
  	
  				var protocols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  	
  				_classCallCheck(this, WebSocket);
  	
  				this.binaryType = '';
  				this.bufferedAmount = 0;
  				this.extensions = '';
  				this.onclose = null;
  				this.onerror = null;
  				this.onmessage = null;
  				this.onopen = null;
  				this.protocol = '';
  				this.readyState = 3;
  	
  				if (typeof url !== 'string' || !/(^ws:\/\/)|(^wss:\/\/)/.test(url)) {
  					throw new TypeError('Failed to construct \'WebSocket\': The URL \'' + url + '\' is invalid');
  				}
  	
  				this.url = url;
  				this.readyState = WebSocket.CONNECTING;
  	
  				var socketTask = wx.connectSocket({
  					url: url,
  					protocols: Array.isArray(protocols) ? protocols : [protocols]
  				});
  	
  				_socketTask.set(this, socketTask);
  	
  				socketTask.onClose(function (res) {
  					_this.readyState = WebSocket.CLOSED;
  					if (typeof _this.onclose === 'function') {
  						_this.onclose(res);
  					}
  				});
  	
  				socketTask.onMessage(function (res) {
  					if (typeof _this.onmessage === 'function') {
  						_this.onmessage(res);
  					}
  				});
  	
  				socketTask.onOpen(function () {
  					_this.readyState = WebSocket.OPEN;
  					if (typeof _this.onopen === 'function') {
  						_this.onopen();
  					}
  				});
  	
  				socketTask.onError(function (res) {
  					if (typeof _this.onerror === 'function') {
  						_this.onerror(new Error(res.errMsg));
  					}
  				});
  	
  				return this;
  			} // TODO 小程序内目前获取不到，实际上需要根据服务器选择的 sub-protocol 返回
  			// TODO 更新 bufferedAmount
  			// The connection is closed or couldn't be opened.
  	
  			// The connection is open and ready to communicate.
  	
  	
  			_createClass(WebSocket, [{
  				key: 'close',
  				value: function close(code, reason) {
  					this.readyState = WebSocket.CLOSING;
  					var socketTask = _socketTask.get(this);
  	
  					socketTask.close({
  						code: code,
  						reason: reason
  					});
  				}
  			}, {
  				key: 'send',
  				value: function send(data) {
  					if (typeof data !== 'string' && !(data instanceof ArrayBuffer)) {
  						throw new TypeError('Failed to send message: The data ' + data + ' is invalid');
  					}
  	
  					var socketTask = _socketTask.get(this);
  	
  					socketTask.send({
  						data: data
  					});
  				}
  			}]);
  	
  			return WebSocket;
  		}();
  	
  		WebSocket.CONNECTING = 0;
  		WebSocket.OPEN = 1;
  		WebSocket.CLOSING = 2;
  		WebSocket.CLOSED = 3;
  		exports.default = WebSocket;
  	
  	/***/ }),
  	/* 21 */
  	/***/ (function(module, exports) {
  	
  		"use strict";
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		exports.default = ImageBitmap;
  		function ImageBitmap() {
  			return {};
  		}
  	
  	/***/ }),
  	/* 22 */
  	/***/ (function(module, exports) {
  	
  		"use strict";
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  	
  		var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  	
  		function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  	
  		/*
  		 * TODO 使用 wx.readFile 来封装 FileReader
  		 */
  		var FileReader = function () {
  			function FileReader() {
  				_classCallCheck(this, FileReader);
  			}
  	
  			_createClass(FileReader, [{
  				key: "construct",
  				value: function construct() {}
  			}]);
  	
  			return FileReader;
  		}();
  	
  		exports.default = FileReader;
  	
  	/***/ }),
  	/* 23 */
  	/***/ (function(module, exports) {
  	
  		"use strict";
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		var localStorage = {
  			get length() {
  				var _wx$getStorageInfoSyn = wx.getStorageInfoSync(),
  						keys = _wx$getStorageInfoSyn.keys;
  	
  				return keys.length;
  			},
  	
  			key: function key(n) {
  				var _wx$getStorageInfoSyn2 = wx.getStorageInfoSync(),
  						keys = _wx$getStorageInfoSyn2.keys;
  	
  				return keys[n];
  			},
  			getItem: function getItem(key) {
  				return wx.getStorageSync(key);
  			},
  			setItem: function setItem(key, value) {
  				return wx.setStorageSync(key, value);
  			},
  			removeItem: function removeItem(key) {
  				wx.removeStorageSync(key);
  			},
  			clear: function clear() {
  				wx.clearStorageSync();
  			}
  		};
  	
  		exports.default = localStorage;
  	
  	/***/ }),
  	/* 24 */
  	/***/ (function(module, exports) {
  	
  		'use strict';
  	
  		Object.defineProperty(exports, "__esModule", {
  			value: true
  		});
  		var location = {
  			href: 'game.js',
  			reload: function reload() {}
  		};
  	
  		exports.default = location;
  	
  	/***/ })
  	/******/ ]);