text: (my["webpackJsonp"] = my["webpackJsonp"] || []).push([["common/vendor"],{
  
  /***/ 1:
  /*!************************************************************!*\
    !*** ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js ***!
    \************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });exports.createApp = createApp;exports.createComponent = createComponent;exports.createPage = createPage;exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _slicedToArray(arr, i) {return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"] != null) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}function _arrayWithHoles(arr) {if (Array.isArray(arr)) return arr;}function _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;}function _toConsumableArray(arr) {return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();}function _nonIterableSpread() {throw new TypeError("Invalid attempt to spread non-iterable instance");}function _iterableToArray(iter) {if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);}function _arrayWithoutHoles(arr) {if (Array.isArray(arr)) {for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {arr2[i] = arr[i];}return arr2;}}
  
  var _toString = Object.prototype.toString;
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  
  function isFn(fn) {
    return typeof fn === 'function';
  }
  
  function isStr(str) {
    return typeof str === 'string';
  }
  
  function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
  }
  
  function hasOwn(obj, key) {
    return hasOwnProperty.call(obj, key);
  }
  
  function noop() {}
  
  /**
                      * Create a cached version of a pure function.
                      */
  function cached(fn) {
    var cache = Object.create(null);
    return function cachedFn(str) {
      var hit = cache[str];
      return hit || (cache[str] = fn(str));
    };
  }
  
  /**
     * Camelize a hyphen-delimited string.
     */
  var camelizeRE = /-(\w)/g;
  var camelize = cached(function (str) {
    return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : '';});
  });
  
  var HOOKS = [
  'invoke',
  'success',
  'fail',
  'complete',
  'returnValue'];
  
  
  var globalInterceptors = {};
  var scopedInterceptors = {};
  
  function mergeHook(parentVal, childVal) {
    var res = childVal ?
    parentVal ?
    parentVal.concat(childVal) :
    Array.isArray(childVal) ?
    childVal : [childVal] :
    parentVal;
    return res ?
    dedupeHooks(res) :
    res;
  }
  
  function dedupeHooks(hooks) {
    var res = [];
    for (var i = 0; i < hooks.length; i++) {
      if (res.indexOf(hooks[i]) === -1) {
        res.push(hooks[i]);
      }
    }
    return res;
  }
  
  function removeHook(hooks, hook) {
    var index = hooks.indexOf(hook);
    if (index !== -1) {
      hooks.splice(index, 1);
    }
  }
  
  function mergeInterceptorHook(interceptor, option) {
    Object.keys(option).forEach(function (hook) {
      if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
        interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
      }
    });
  }
  
  function removeInterceptorHook(interceptor, option) {
    if (!interceptor || !option) {
      return;
    }
    Object.keys(option).forEach(function (hook) {
      if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
        removeHook(interceptor[hook], option[hook]);
      }
    });
  }
  
  function addInterceptor(method, option) {
    if (typeof method === 'string' && isPlainObject(option)) {
      mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
    } else if (isPlainObject(method)) {
      mergeInterceptorHook(globalInterceptors, method);
    }
  }
  
  function removeInterceptor(method, option) {
    if (typeof method === 'string') {
      if (isPlainObject(option)) {
        removeInterceptorHook(scopedInterceptors[method], option);
      } else {
        delete scopedInterceptors[method];
      }
    } else if (isPlainObject(method)) {
      removeInterceptorHook(globalInterceptors, method);
    }
  }
  
  function wrapperHook(hook) {
    return function (data) {
      return hook(data) || data;
    };
  }
  
  function isPromise(obj) {
    return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
  }
  
  function queue(hooks, data) {
    var promise = false;
    for (var i = 0; i < hooks.length; i++) {
      var hook = hooks[i];
      if (promise) {
        promise = Promise.then(wrapperHook(hook));
      } else {
        var res = hook(data);
        if (isPromise(res)) {
          promise = Promise.resolve(res);
        }
        if (res === false) {
          return {
            then: function then() {} };
  
        }
      }
    }
    return promise || {
      then: function then(callback) {
        return callback(data);
      } };
  
  }
  
  function wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    ['success', 'fail', 'complete'].forEach(function (name) {
      if (Array.isArray(interceptor[name])) {
        var oldCallback = options[name];
        options[name] = function callbackInterceptor(res) {
          queue(interceptor[name], res).then(function (res) {
            /* eslint-disable no-mixed-operators */
            return isFn(oldCallback) && oldCallback(res) || res;
          });
        };
      }
    });
    return options;
  }
  
  function wrapperReturnValue(method, returnValue) {
    var returnValueHooks = [];
    if (Array.isArray(globalInterceptors.returnValue)) {
      returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));
    }
    var interceptor = scopedInterceptors[method];
    if (interceptor && Array.isArray(interceptor.returnValue)) {
      returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));
    }
    returnValueHooks.forEach(function (hook) {
      returnValue = hook(returnValue) || returnValue;
    });
    return returnValue;
  }
  
  function getApiInterceptorHooks(method) {
    var interceptor = Object.create(null);
    Object.keys(globalInterceptors).forEach(function (hook) {
      if (hook !== 'returnValue') {
        interceptor[hook] = globalInterceptors[hook].slice();
      }
    });
    var scopedInterceptor = scopedInterceptors[method];
    if (scopedInterceptor) {
      Object.keys(scopedInterceptor).forEach(function (hook) {
        if (hook !== 'returnValue') {
          interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
        }
      });
    }
    return interceptor;
  }
  
  function invokeApi(method, api, options) {for (var _len = arguments.length, params = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {params[_key - 3] = arguments[_key];}
    var interceptor = getApiInterceptorHooks(method);
    if (interceptor && Object.keys(interceptor).length) {
      if (Array.isArray(interceptor.invoke)) {
        var res = queue(interceptor.invoke, options);
        return res.then(function (options) {
          return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
        });
      } else {
        return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
      }
    }
    return api.apply(void 0, [options].concat(params));
  }
  
  var promiseInterceptor = {
    returnValue: function returnValue(res) {
      if (!isPromise(res)) {
        return res;
      }
      return res.then(function (res) {
        return res[1];
      }).catch(function (res) {
        return res[0];
      });
    } };
  
  
  var SYNC_API_RE =
  /^\$|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
  
  var CONTEXT_API_RE = /^create|Manager$/;
  
  var CALLBACK_API_RE = /^on/;
  
  function isContextApi(name) {
    return CONTEXT_API_RE.test(name);
  }
  function isSyncApi(name) {
    return SYNC_API_RE.test(name);
  }
  
  function isCallbackApi(name) {
    return CALLBACK_API_RE.test(name);
  }
  
  function handlePromise(promise) {
    return promise.then(function (data) {
      return [null, data];
    }).
    catch(function (err) {return [err];});
  }
  
  function shouldPromise(name) {
    if (
    isContextApi(name) ||
    isSyncApi(name) ||
    isCallbackApi(name))
    {
      return false;
    }
    return true;
  }
  
  function promisify(name, api) {
    if (!shouldPromise(name)) {
      return api;
    }
    return function promiseApi() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {params[_key2 - 1] = arguments[_key2];}
      if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
        return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));
      }
      return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {
        invokeApi.apply(void 0, [name, api, Object.assign({}, options, {
          success: resolve,
          fail: reject })].concat(
        params));
        /* eslint-disable no-extend-native */
        if (!Promise.prototype.finally) {
          Promise.prototype.finally = function (callback) {
            var promise = this.constructor;
            return this.then(
            function (value) {return promise.resolve(callback()).then(function () {return value;});},
            function (reason) {return promise.resolve(callback()).then(function () {
                throw reason;
              });});
  
          };
        }
      })));
    };
  }
  
  var EPS = 1e-4;
  var BASE_DEVICE_WIDTH = 750;
  var isIOS = false;
  var deviceWidth = 0;
  var deviceDPR = 0;
  
  function checkDeviceWidth() {var _my$getSystemInfoSync =
  
  
  
  
    my.getSystemInfoSync(),platform = _my$getSystemInfoSync.platform,pixelRatio = _my$getSystemInfoSync.pixelRatio,windowWidth = _my$getSystemInfoSync.windowWidth; // uni=>my runtime 编译目标是 uni 对象，内部不允许直接使用 uni
  
    deviceWidth = windowWidth;
    deviceDPR = pixelRatio;
    isIOS = platform === 'ios';
  }
  
  function upx2px(number, newDeviceWidth) {
    if (deviceWidth === 0) {
      checkDeviceWidth();
    }
  
    number = Number(number);
    if (number === 0) {
      return 0;
    }
    var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);
    if (result < 0) {
      result = -result;
    }
    result = Math.floor(result + EPS);
    if (result === 0) {
      if (deviceDPR === 1 || !isIOS) {
        return 1;
      } else {
        return 0.5;
      }
    }
    return number < 0 ? -result : result;
  }
  
  var interceptors = {
    promiseInterceptor: promiseInterceptor };
  
  
  
  
  var baseApi = /*#__PURE__*/Object.freeze({
    upx2px: upx2px,
    interceptors: interceptors,
    addInterceptor: addInterceptor,
    removeInterceptor: removeInterceptor });
  
  
  // 不支持的 API 列表
  var todos = [
  'saveImageToPhotosAlbum',
  'getRecorderManager',
  'getBackgroundAudioManager',
  'createInnerAudioContext',
  'createVideoContext',
  'createCameraContext',
  'createLivePlayerContext',
  'openDocument',
  'onMemoryWarning',
  'startAccelerometer',
  'startCompass',
  'addPhoneContact',
  'authorize',
  'chooseAddress',
  'chooseInvoiceTitle',
  'addTemplate',
  'deleteTemplate',
  'getTemplateLibraryById',
  'getTemplateLibraryList',
  'getTemplateList',
  'sendTemplateMessage',
  'setEnableDebug',
  'getExtConfig',
  'getExtConfigSync',
  'onWindowResize',
  'offWindowResize',
  'saveVideoToPhotosAlbum'];
  
  
  // 存在兼容性的 API 列表
  var canIUses = [
  'startPullDownRefresh',
  'setTabBarItem',
  'setTabBarStyle',
  'hideTabBar',
  'showTabBar',
  'setTabBarBadge',
  'removeTabBarBadge',
  'showTabBarRedDot',
  'hideTabBarRedDot',
  'openSetting',
  'getSetting',
  'createIntersectionObserver',
  'getUpdateManager',
  'setBackgroundColor',
  'setBackgroundTextStyle'];
  
  
  function _handleNetworkInfo(result) {
    switch (result.networkType) {
      case 'NOTREACHABLE':
        result.networkType = 'none';
        break;
      case 'WWAN':
        // TODO ?
        result.networkType = '3g';
        break;
      default:
        result.networkType = result.networkType.toLowerCase();
        break;}
  
    return {};
  }
  
  function _handleSystemInfo(result) {
    var platform = result.platform ? result.platform.toLowerCase() : 'devtools';
    if (!~['android', 'ios'].indexOf(platform)) {
      platform = 'devtools';
    }
    result.platform = platform;
  }
  
  var protocols = { // 需要做转换的 API 列表
    returnValue: function returnValue(methodName) {var res = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; // 通用 returnValue 解析
      if (res.error || res.errorMessage) {
        res.errMsg = "".concat(methodName, ":fail ").concat(res.errorMessage || res.error);
        delete res.error;
        delete res.errorMessage;
      } else {
        res.errMsg = "".concat(methodName, ":ok");
      }
      return res;
    },
    request: {
      name: my.canIUse('request') ? 'request' : 'httpRequest',
      args: function args(fromArgs) {
        if (!fromArgs.header) {// 默认增加 header 参数，方便格式化 content-type
          fromArgs.header = {};
        }
        return {
          header: function header() {var _header = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};var toArgs = arguments.length > 1 ? arguments[1] : undefined;
            var headers = {
              'content-type': 'application/json' };
  
            Object.keys(_header).forEach(function (key) {
              headers[key.toLocaleLowerCase()] = _header[key];
            });
            return {
              name: 'headers',
              value: headers };
  
          },
          method: 'method', // TODO 支付宝小程序仅支持 get,post
          responseType: false };
  
      },
      returnValue: {
        status: 'statusCode',
        headers: 'header' } },
  
  
    setNavigationBarColor: {
      name: 'setNavigationBar',
      args: {
        frontColor: false,
        animation: false } },
  
  
    setNavigationBarTitle: {
      name: 'setNavigationBar' },
  
    showModal: function showModal()
  
    {var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},_ref$showCancel = _ref.showCancel,showCancel = _ref$showCancel === void 0 ? true : _ref$showCancel;
      if (showCancel) {
        return {
          name: 'confirm',
          args: {
            cancelColor: false,
            confirmColor: false,
            cancelText: 'cancelButtonText',
            confirmText: 'confirmButtonText' },
  
          returnValue: function returnValue(fromRes, toRes) {
            toRes.confirm = fromRes.confirm;
            toRes.cancel = !fromRes.confirm;
          } };
  
      }
      return {
        name: 'alert',
        args: {
          confirmColor: false,
          confirmText: 'buttonText' },
  
        returnValue: function returnValue(fromRes, toRes) {
          toRes.confirm = true;
          toRes.cancel = false;
        } };
  
    },
    showToast: function showToast()
  
    {var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},_ref2$icon = _ref2.icon,icon = _ref2$icon === void 0 ? 'success' : _ref2$icon;
      var args = {
        title: 'content',
        icon: 'type',
        duration: false,
        image: false,
        mask: false };
  
      if (icon === 'loading') {
        return {
          name: 'showLoading',
          args: args };
  
      }
      return {
        name: 'showToast',
        args: args };
  
    },
    showActionSheet: {
      name: 'showActionSheet',
      args: {
        itemList: 'items',
        itemColor: false },
  
      returnValue: {
        index: 'tapIndex' } },
  
  
    showLoading: {
      args: {
        title: 'content',
        mask: false } },
  
  
    uploadFile: {
      args: {
        name: 'fileName'
  
        // 从测试结果看，是有返回对象的，文档上没有说明。
      } },
    downloadFile: {
      returnValue: {
        apFilePath: 'tempFilePath' } },
  
  
    chooseVideo: {
      // 支付宝小程序文档中未找到（仅在getSetting处提及），但实际可用
      returnValue: {
        apFilePath: 'tempFilePath' } },
  
  
    connectSocket: {
      args: {
        method: false,
        protocols: false
  
        // TODO 有没有返回值还需要测试下
      } },
    chooseImage: {
      returnValue: {
        apFilePaths: 'tempFilePaths' } },
  
  
    previewImage: {
      args: function args(fromArgs) {
        // 支付宝小程序的 current 是索引值，而非图片地址。
        var currentIndex = Number(fromArgs.current);
        if (isNaN(currentIndex)) {
          if (fromArgs.current && Array.isArray(fromArgs.urls)) {
            var index = fromArgs.urls.indexOf(fromArgs.current);
            fromArgs.current = ~index ? index : 0;
          }
        } else {
          fromArgs.current = currentIndex;
        }
        return {
          indicator: false,
          loop: false };
  
      } },
  
    saveFile: {
      args: {
        tempFilePath: 'apFilePath' },
  
      returnValue: {
        apFilePath: 'savedFilePath' } },
  
  
    getSavedFileInfo: {
      args: {
        filePath: 'apFilePath' },
  
      returnValue: function returnValue(result) {
        if (result.fileList && result.fileList.length) {
          result.fileList.forEach(function (file) {
            file.filePath = file.apFilePath;
            delete file.apFilePath;
          });
        }
        return {};
      } },
  
    removeSavedFile: {
      args: {
        filePath: 'apFilePath' } },
  
  
    getLocation: {
      args: {
        type: false,
        altitude: false } },
  
  
    openLocation: {
      args: {
        // TODO address 参数在阿里上是必传的
      } },
  
    getNetworkType: {
      returnValue: _handleNetworkInfo },
  
    onNetworkStatusChange: {
      returnValue: _handleNetworkInfo },
  
    stopAccelerometer: {
      name: 'offAccelerometerChange' },
  
    stopCompass: {
      name: 'offCompassChange' },
  
    scanCode: {
      name: 'scan',
      args: function args(fromArgs) {
        if (fromArgs.scanType === 'qrCode') {
          fromArgs.type = 'qr';
          return {
            onlyFromCamera: 'hideAlbum' };
  
        } else if (fromArgs.scanType === 'barCode') {
          fromArgs.type = 'bar';
          return {
            onlyFromCamera: 'hideAlbum' };
  
        } else {
          return {
            scanType: false,
            onlyFromCamera: 'hideAlbum' };
  
        }
      },
      returnValue: {
        code: 'result' } },
  
  
    setClipboardData: {
      name: 'setClipboard',
      args: {
        data: 'text' } },
  
  
    getClipboardData: {
      name: 'getClipboard',
      returnValue: {
        text: 'data' } },
  
  
    pageScrollTo: {
      args: {
        duration: false } },
  
  
    login: {
      name: 'getAuthCode',
      returnValue: function returnValue(result) {
        result.code = result.authCode;
      } },
  
    getUserInfo: {
      name: 'getAuthUserInfo',
      returnValue: function returnValue(result) {
        result.userInfo = {
          nickName: result.nickName,
          avatarUrl: result.avatar };
  
      } },
  
    requestPayment: {
      name: 'tradePay',
      args: {
        orderInfo: 'tradeNO' } },
  
  
    getBLEDeviceServices: {
      returnValue: function returnValue(result) {
        result.services.forEach(function (item) {
          item.uuid = item.serviceId;
        });
      } },
  
    createBLEConnection: {
      name: 'connectBLEDevice',
      args: {
        timeout: false } },
  
  
    closeBLEConnection: {
      name: 'disconnectBLEDevice' },
  
    onBLEConnectionStateChange: {
      name: 'onBLEConnectionStateChanged' },
  
    makePhoneCall: {
      args: {
        phoneNumber: 'number' } },
  
  
    stopGyroscope: {
      name: 'offGyroscopeChange' },
  
    getSystemInfo: {
      returnValue: _handleSystemInfo },
  
    getSystemInfoSync: {
      returnValue: _handleSystemInfo },
  
    // 文档没提到，但是实测可用。
    canvasToTempFilePath: {
      returnValue: function returnValue(result) {
        // 真机的情况下会有 tempFilePath 这个值，因此需要主动修改。
        result.tempFilePath = result.apFilePath;
      } },
  
    setScreenBrightness: {
      args: {
        value: 'brightness' } },
  
  
    getScreenBrightness: {
      returnValue: {
        brightness: 'value' } },
  
  
    showShareMenu: {
      name: 'showSharePanel' } };
  
  
  
  var CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
  
  function processCallback(methodName, method, returnValue) {
    return function (res) {
      return method(processReturnValue(methodName, res, returnValue));
    };
  }
  
  function processArgs(methodName, fromArgs) {var argsOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};var returnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};var keepFromArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
    if (isPlainObject(fromArgs)) {// 一般 api 的参数解析
      var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时，说明是格式化返回值，直接在返回值对象上修改赋值
      if (isFn(argsOption)) {
        argsOption = argsOption(fromArgs, toArgs) || {};
      }
      for (var key in fromArgs) {
        if (hasOwn(argsOption, key)) {
          var keyOption = argsOption[key];
          if (isFn(keyOption)) {
            keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
          }
          if (!keyOption) {// 不支持的参数
            console.warn("\u652F\u4ED8\u5B9D\u5C0F\u7A0B\u5E8F ".concat(methodName, "\u6682\u4E0D\u652F\u6301").concat(key));
          } else if (isStr(keyOption)) {// 重写参数 key
            toArgs[keyOption] = fromArgs[key];
          } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value
            toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
          }
        } else if (CALLBACKS.indexOf(key) !== -1) {
          toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);
        } else {
          if (!keepFromArgs) {
            toArgs[key] = fromArgs[key];
          }
        }
      }
      return toArgs;
    } else if (isFn(fromArgs)) {
      fromArgs = processCallback(methodName, fromArgs, returnValue);
    }
    return fromArgs;
  }
  
  function processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
    if (isFn(protocols.returnValue)) {// 处理通用 returnValue
      res = protocols.returnValue(methodName, res);
    }
    return processArgs(methodName, res, returnValue, {}, keepReturnValue);
  }
  
  function wrapper(methodName, method) {
    if (hasOwn(protocols, methodName)) {
      var protocol = protocols[methodName];
      if (!protocol) {// 暂不支持的 api
        return function () {
          console.error("\u652F\u4ED8\u5B9D\u5C0F\u7A0B\u5E8F \u6682\u4E0D\u652F\u6301".concat(methodName));
        };
      }
      return function (arg1, arg2) {// 目前 api 最多两个参数
        var options = protocol;
        if (isFn(protocol)) {
          options = protocol(arg1);
        }
  
        arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
  
        var args = [arg1];
        if (typeof arg2 !== 'undefined') {
          args.push(arg2);
        }
        var returnValue = my[options.name || methodName].apply(my, args);
        if (isSyncApi(methodName)) {// 同步 api
          return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
        }
        return returnValue;
      };
    }
    return method;
  }
  
  var todoApis = Object.create(null);
  
  var TODOS = [
  'subscribePush',
  'unsubscribePush',
  'onPush',
  'offPush',
  'share'];
  
  
  function createTodoApi(name) {
    return function todoApi(_ref3)
  
  
    {var fail = _ref3.fail,complete = _ref3.complete;
      var res = {
        errMsg: "".concat(name, ":fail:\u6682\u4E0D\u652F\u6301 ").concat(name, " \u65B9\u6CD5") };
  
      isFn(fail) && fail(res);
      isFn(complete) && complete(res);
    };
  }
  
  TODOS.forEach(function (name) {
    todoApis[name] = createTodoApi(name);
  });
  
  var providers = {
    oauth: ['alipay'],
    share: ['alipay'],
    payment: ['alipay'],
    push: ['alipay'] };
  
  
  function getProvider(_ref4)
  
  
  
  
  {var service = _ref4.service,success = _ref4.success,fail = _ref4.fail,complete = _ref4.complete;
    var res = false;
    if (providers[service]) {
      res = {
        errMsg: 'getProvider:ok',
        service: service,
        provider: providers[service] };
  
      isFn(success) && success(res);
    } else {
      res = {
        errMsg: 'getProvider:fail:服务[' + service + ']不存在' };
  
      isFn(fail) && fail(res);
    }
    isFn(complete) && complete(res);
  }
  
  var extraApi = /*#__PURE__*/Object.freeze({
    getProvider: getProvider });
  
  
  var getEmitter = function () {
    if (typeof getUniEmitter === 'function') {
      /* eslint-disable no-undef */
      return getUniEmitter;
    }
    var Emitter;
    return function getUniEmitter() {
      if (!Emitter) {
        Emitter = new _vue.default();
      }
      return Emitter;
    };
  }();
  
  function apply(ctx, method, args) {
    return ctx[method].apply(ctx, args);
  }
  
  function $on() {
    return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));
  }
  function $off() {
    return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));
  }
  function $once() {
    return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));
  }
  function $emit() {
    return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));
  }
  
  var eventApi = /*#__PURE__*/Object.freeze({
    $on: $on,
    $off: $off,
    $once: $once,
    $emit: $emit });
  
  
  function setStorageSync(key, data) {
    return my.setStorageSync({
      key: key,
      data: data });
  
  }
  function getStorageSync(key) {
    var result = my.getStorageSync({
      key: key });
  
    // 支付宝平台会返回一个 success 值，但是目前测试的结果这个始终是 true。当没有存储数据的时候，其它平台会返回空字符串。
    return result.data !== null ? result.data : '';
  }
  function removeStorageSync(key) {
    return my.removeStorageSync({
      key: key });
  
  }
  
  function startGyroscope(params) {
    if (hasOwn(params, 'interval')) {
      console.warn('支付宝小程序 startGyroscope暂不支持interval');
    }
    params.success && params.success({
      errMsg: 'startGyroscope:ok' });
  
    params.complete && params.complete({
      errMsg: 'startGyroscope:ok' });
  
  }
  
  function createExecCallback(execCallback) {
    return function wrapperExecCallback(res) {
      this.actions.forEach(function (action, index) {
        (action._$callbacks || []).forEach(function (callback) {
          callback(res[index]);
        });
      });
      if (isFn(execCallback)) {
        execCallback(res);
      }
    };
  }
  
  function addCallback(callback) {
    if (isFn(callback)) {
      var action = this.actions[this.actions.length - 1];
      if (action) {
        (action._$callbacks || (action._$callbacks = [])).push(callback);
      }
    }
  }
  
  function createSelectorQuery() {
    var query = my.createSelectorQuery();
  
    var oldExec = query.exec;
    var oldScrollOffset = query.scrollOffset;
    var oldBoundingClientRect = query.boundingClientRect;
    query.exec = function exec(callback) {
      return oldExec.call(this, createExecCallback(callback).bind(this));
    };
    query.scrollOffset = function scrollOffset(callback) {
      var ret = oldScrollOffset.call(this);
      addCallback.call(this, callback);
      return ret;
    };
    query.boundingClientRect = function boundingClientRect(callback) {
      var ret = oldBoundingClientRect.call(this);
      addCallback.call(this, callback);
      return ret;
    };
  
    if (!query.fields) {
      query.fields = function () {var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},rect = _ref5.rect,size = _ref5.size,scrollOffset = _ref5.scrollOffset;var callback = arguments.length > 1 ? arguments[1] : undefined;
        if (rect || size) {
          this.boundingClientRect();
        }
        if (scrollOffset) {
          this.scrollOffset();
        }
        addCallback.call(this, callback);
        return this;
      };
    }
    return query;
  }
  
  var api = /*#__PURE__*/Object.freeze({
    setStorageSync: setStorageSync,
    getStorageSync: getStorageSync,
    removeStorageSync: removeStorageSync,
    startGyroscope: startGyroscope,
    createSelectorQuery: createSelectorQuery });
  
  
  var PAGE_EVENT_HOOKS = [
  'onPullDownRefresh',
  'onReachBottom',
  'onShareAppMessage',
  'onPageScroll',
  'onResize',
  'onTabItemTap'];
  
  
  function initMocks(vm, mocks) {
    var mpInstance = vm.$mp[vm.mpType];
    mocks.forEach(function (mock) {
      if (hasOwn(mpInstance, mock)) {
        vm[mock] = mpInstance[mock];
      }
    });
  }
  
  function hasHook(hook, vueOptions) {
    if (!vueOptions) {
      return true;
    }
  
    if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {
      return true;
    }
  
    vueOptions = vueOptions.default || vueOptions;
  
    if (isFn(vueOptions)) {
      if (isFn(vueOptions.extendOptions[hook])) {
        return true;
      }
      if (vueOptions.super &&
      vueOptions.super.options &&
      Array.isArray(vueOptions.super.options[hook])) {
        return true;
      }
      return false;
    }
  
    if (isFn(vueOptions[hook])) {
      return true;
    }
    var mixins = vueOptions.mixins;
    if (Array.isArray(mixins)) {
      return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});
    }
  }
  
  function initHooks(mpOptions, hooks, vueOptions) {
    hooks.forEach(function (hook) {
      if (hasHook(hook, vueOptions)) {
        mpOptions[hook] = function (args) {
          return this.$vm && this.$vm.__call_hook(hook, args);
        };
      }
    });
  }
  
  function initVueComponent(Vue, vueOptions) {
    vueOptions = vueOptions.default || vueOptions;
    var VueComponent;
    if (isFn(vueOptions)) {
      VueComponent = vueOptions;
      vueOptions = VueComponent.extendOptions;
    } else {
      VueComponent = Vue.extend(vueOptions);
    }
    return [VueComponent, vueOptions];
  }
  
  function initVueIds(vueIds, mpInstance) {
    vueIds = (vueIds || '').split(',');
    var len = vueIds.length;
  
    if (len === 1) {
      mpInstance._$vueId = vueIds[0];
    } else if (len === 2) {
      mpInstance._$vueId = vueIds[0];
      mpInstance._$vuePid = vueIds[1];
    }
  }
  
  function initData(vueOptions, context) {
    var data = vueOptions.data || {};
    var methods = vueOptions.methods || {};
  
    if (typeof data === 'function') {
      try {
        data = data.call(context); // 支持 Vue.prototype 上挂的数据
      } catch (e) {
        if (Object({"VUE_APP_PLATFORM":"mp-alipay","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
          console.warn('根据 Vue 的 data 函数初始化小程序 data 失败，请尽量确保 data 函数中不访问 vm 对象，否则可能影响首次数据渲染速度。', data);
        }
      }
    } else {
      try {
        // 对 data 格式化
        data = JSON.parse(JSON.stringify(data));
      } catch (e) {}
    }
  
    if (!isPlainObject(data)) {
      data = {};
    }
  
    Object.keys(methods).forEach(function (methodName) {
      if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {
        data[methodName] = methods[methodName];
      }
    });
  
    return data;
  }
  
  var PROP_TYPES = [String, Number, Boolean, Object, Array, null];
  
  function createObserver(name) {
    return function observer(newVal, oldVal) {
      if (this.$vm) {
        this.$vm[name] = newVal; // 为了触发其他非 render watcher
      }
    };
  }
  
  function initBehaviors(vueOptions, initBehavior) {
    var vueBehaviors = vueOptions['behaviors'];
    var vueExtends = vueOptions['extends'];
    var vueMixins = vueOptions['mixins'];
  
    var vueProps = vueOptions['props'];
  
    if (!vueProps) {
      vueOptions['props'] = vueProps = [];
    }
  
    var behaviors = [];
    if (Array.isArray(vueBehaviors)) {
      vueBehaviors.forEach(function (behavior) {
        behaviors.push(behavior.replace('uni://', "my".concat("://")));
        if (behavior === 'uni://form-field') {
          if (Array.isArray(vueProps)) {
            vueProps.push('name');
            vueProps.push('value');
          } else {
            vueProps['name'] = {
              type: String,
              default: '' };
  
            vueProps['value'] = {
              type: [String, Number, Boolean, Array, Object, Date],
              default: '' };
  
          }
        }
      });
    }
    if (isPlainObject(vueExtends) && vueExtends.props) {
      behaviors.push(
      initBehavior({
        properties: initProperties(vueExtends.props, true) }));
  
  
    }
    if (Array.isArray(vueMixins)) {
      vueMixins.forEach(function (vueMixin) {
        if (isPlainObject(vueMixin) && vueMixin.props) {
          behaviors.push(
          initBehavior({
            properties: initProperties(vueMixin.props, true) }));
  
  
        }
      });
    }
    return behaviors;
  }
  
  function parsePropType(key, type, defaultValue, file) {
    // [String]=>String
    if (Array.isArray(type) && type.length === 1) {
      return type[0];
    }
    return type;
  }
  
  function initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
    var properties = {};
    if (!isBehavior) {
      properties.vueId = {
        type: String,
        value: '' };
  
      properties.vueSlots = { // 小程序不能直接定义 $slots 的 props，所以通过 vueSlots 转换到 $slots
        type: null,
        value: [],
        observer: function observer(newVal, oldVal) {
          var $slots = Object.create(null);
          newVal.forEach(function (slotName) {
            $slots[slotName] = true;
          });
          this.setData({
            $slots: $slots });
  
        } };
  
    }
    if (Array.isArray(props)) {// ['title']
      props.forEach(function (key) {
        properties[key] = {
          type: null,
          observer: createObserver(key) };
  
      });
    } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}
      Object.keys(props).forEach(function (key) {
        var opts = props[key];
        if (isPlainObject(opts)) {// title:{type:String,default:''}
          var value = opts['default'];
          if (isFn(value)) {
            value = value();
          }
  
          opts.type = parsePropType(key, opts.type);
  
          properties[key] = {
            type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,
            value: value,
            observer: createObserver(key) };
  
        } else {// content:String
          var type = parsePropType(key, opts);
          properties[key] = {
            type: PROP_TYPES.indexOf(type) !== -1 ? type : null,
            observer: createObserver(key) };
  
        }
      });
    }
    return properties;
  }
  
  function wrapper$1(event) {
    // TODO 又得兼容 mpvue 的 mp 对象
    try {
      event.mp = JSON.parse(JSON.stringify(event));
    } catch (e) {}
  
    event.stopPropagation = noop;
    event.preventDefault = noop;
  
    event.target = event.target || {};
  
    if (!hasOwn(event, 'detail')) {
      event.detail = {};
    }
  
    if (isPlainObject(event.detail)) {
      event.target = Object.assign({}, event.target, event.detail);
    }
  
    return event;
  }
  
  function getExtraValue(vm, dataPathsArray) {
    var context = vm;
    dataPathsArray.forEach(function (dataPathArray) {
      var dataPath = dataPathArray[0];
      var value = dataPathArray[2];
      if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']
        var propPath = dataPathArray[1];
        var valuePath = dataPathArray[3];
  
        var vFor = dataPath ? vm.__get_value(dataPath, context) : context;
  
        if (Number.isInteger(vFor)) {
          context = value;
        } else if (!propPath) {
          context = vFor[value];
        } else {
          if (Array.isArray(vFor)) {
            context = vFor.find(function (vForItem) {
              return vm.__get_value(propPath, vForItem) === value;
            });
          } else if (isPlainObject(vFor)) {
            context = Object.keys(vFor).find(function (vForKey) {
              return vm.__get_value(propPath, vFor[vForKey]) === value;
            });
          } else {
            console.error('v-for 暂不支持循环数据：', vFor);
          }
        }
  
        if (valuePath) {
          context = vm.__get_value(valuePath, context);
        }
      }
    });
    return context;
  }
  
  function processEventExtra(vm, extra, event) {
    var extraObj = {};
  
    if (Array.isArray(extra) && extra.length) {
      /**
                                                *[
                                                *    ['data.items', 'data.id', item.data.id],
                                                *    ['metas', 'id', meta.id]
                                                *],
                                                *[
                                                *    ['data.items', 'data.id', item.data.id],
                                                *    ['metas', 'id', meta.id]
                                                *],
                                                *'test'
                                                */
      extra.forEach(function (dataPath, index) {
        if (typeof dataPath === 'string') {
          if (!dataPath) {// model,prop.sync
            extraObj['$' + index] = vm;
          } else {
            if (dataPath === '$event') {// $event
              extraObj['$' + index] = event;
            } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value
              extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);
            } else {
              extraObj['$' + index] = vm.__get_value(dataPath);
            }
          }
        } else {
          extraObj['$' + index] = getExtraValue(vm, dataPath);
        }
      });
    }
  
    return extraObj;
  }
  
  function getObjByArray(arr) {
    var obj = {};
    for (var i = 1; i < arr.length; i++) {
      var element = arr[i];
      obj[element[0]] = element[1];
    }
    return obj;
  }
  
  function processEventArgs(vm, event) {var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];var extra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];var isCustom = arguments.length > 4 ? arguments[4] : undefined;var methodName = arguments.length > 5 ? arguments[5] : undefined;
    var isCustomMPEvent = false; // wxcomponent 组件，传递原始 event 对象
    if (isCustom) {// 自定义事件
      isCustomMPEvent = event.currentTarget &&
      event.currentTarget.dataset &&
      event.currentTarget.dataset.comType === 'wx';
      if (!args.length) {// 无参数，直接传入 event 或 detail 数组
        if (isCustomMPEvent) {
          return [event];
        }
        return event.detail.__args__ || event.detail;
      }
    }
  
    var extraObj = processEventExtra(vm, extra, event);
  
    var ret = [];
    args.forEach(function (arg) {
      if (arg === '$event') {
        if (methodName === '__set_model' && !isCustom) {// input v-model value
          ret.push(event.target.value);
        } else {
          if (isCustom && !isCustomMPEvent) {
            ret.push(event.detail.__args__[0]);
          } else {// wxcomponent 组件或内置组件
            ret.push(event);
          }
        }
      } else {
        if (Array.isArray(arg) && arg[0] === 'o') {
          ret.push(getObjByArray(arg));
        } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {
          ret.push(extraObj[arg]);
        } else {
          ret.push(arg);
        }
      }
    });
  
    return ret;
  }
  
  var ONCE = '~';
  var CUSTOM = '^';
  
  function isMatchEventType(eventType, optType) {
    return eventType === optType ||
  
    optType === 'regionchange' && (
  
    eventType === 'begin' ||
    eventType === 'end');
  
  
  }
  
  function handleEvent(event) {var _this = this;
    event = wrapper$1(event);
  
    // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]
    var dataset = (event.currentTarget || event.target).dataset;
    if (!dataset) {
      return console.warn("\u4E8B\u4EF6\u4FE1\u606F\u4E0D\u5B58\u5728");
    }
    var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰
    if (!eventOpts) {
      return console.warn("\u4E8B\u4EF6\u4FE1\u606F\u4E0D\u5B58\u5728");
    }
  
    // [['handle',[1,2,a]],['handle1',[1,2,a]]]
    var eventType = event.type;
  
    var ret = [];
  
    eventOpts.forEach(function (eventOpt) {
      var type = eventOpt[0];
      var eventsArray = eventOpt[1];
  
      var isCustom = type.charAt(0) === CUSTOM;
      type = isCustom ? type.slice(1) : type;
      var isOnce = type.charAt(0) === ONCE;
      type = isOnce ? type.slice(1) : type;
  
      if (eventsArray && isMatchEventType(eventType, type)) {
        eventsArray.forEach(function (eventArray) {
          var methodName = eventArray[0];
          if (methodName) {
            var handlerCtx = _this.$vm;
            if (
            handlerCtx.$options.generic &&
            handlerCtx.$parent &&
            handlerCtx.$parent.$parent)
            {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots
              handlerCtx = handlerCtx.$parent.$parent;
            }
            var handler = handlerCtx[methodName];
            if (!isFn(handler)) {
              throw new Error(" _vm.".concat(methodName, " is not a function"));
            }
            if (isOnce) {
              if (handler.once) {
                return;
              }
              handler.once = true;
            }
            ret.push(handler.apply(handlerCtx, processEventArgs(
            _this.$vm,
            event,
            eventArray[1],
            eventArray[2],
            isCustom,
            methodName)));
  
          }
        });
      }
    });
  
    if (
    eventType === 'input' &&
    ret.length === 1 &&
    typeof ret[0] !== 'undefined')
    {
      return ret[0];
    }
  }
  
  var hooks = [
  'onShow',
  'onHide',
  'onError',
  'onPageNotFound'];
  
  
  function parseBaseApp(vm, _ref6)
  
  
  {var mocks = _ref6.mocks,initRefs = _ref6.initRefs;
    if (vm.$options.store) {
      _vue.default.prototype.$store = vm.$options.store;
    }
  
    _vue.default.prototype.mpHost = "mp-alipay";
  
    _vue.default.mixin({
      beforeCreate: function beforeCreate() {
        if (!this.$options.mpType) {
          return;
        }
  
        this.mpType = this.$options.mpType;
  
        this.$mp = _defineProperty({
          data: {} },
        this.mpType, this.$options.mpInstance);
  
  
        this.$scope = this.$options.mpInstance;
  
        delete this.$options.mpType;
        delete this.$options.mpInstance;
  
        if (this.mpType !== 'app') {
          initRefs(this);
          initMocks(this, mocks);
        }
      } });
  
  
    var appOptions = {
      onLaunch: function onLaunch(args) {
        if (this.$vm) {// 已经初始化过了，主要是为了百度，百度 onShow 在 onLaunch 之前
          return;
        }
  
        this.$vm = vm;
  
        this.$vm.$mp = {
          app: this };
  
  
        this.$vm.$scope = this;
  
        this.$vm._isMounted = true;
        this.$vm.__call_hook('mounted', args);
  
        this.$vm.__call_hook('onLaunch', args);
      } };
  
  
    // 兼容旧版本 globalData
    appOptions.globalData = vm.$options.globalData || {};
  
    initHooks(appOptions, hooks);
  
    return appOptions;
  }
  
  function findVmByVueId(vm, vuePid) {
    var $children = vm.$children;
    // 优先查找直属
    var parentVm = $children.find(function (childVm) {return childVm.$scope._$vueId === vuePid;});
    if (parentVm) {
      return parentVm;
    }
    // 反向递归查找
    for (var i = $children.length - 1; i >= 0; i--) {
      parentVm = findVmByVueId($children[i], vuePid);
      if (parentVm) {
        return parentVm;
      }
    }
  }
  
  function handleLink(event) {var _ref7 =
  
  
  
    event.detail || event.value,vuePid = _ref7.vuePid,vueOptions = _ref7.vueOptions; // detail 是微信,value 是百度(dipatch)
  
    var parentVm;
  
    if (vuePid) {
      parentVm = findVmByVueId(this.$vm, vuePid);
    }
  
    if (!parentVm) {
      parentVm = this.$vm;
    }
  
    vueOptions.parent = parentVm;
  }
  
  var isArray = Array.isArray;
  var keyList = Object.keys;
  
  function equal(a, b) {
    if (a === b) return true;
  
    if (a && b && typeof a === 'object' && typeof b === 'object') {
      var arrA = isArray(a);
      var arrB = isArray(b);
      var i, length, key;
      if (arrA && arrB) {
        length = a.length;
        if (length !== b.length) return false;
        for (i = length; i-- !== 0;) {
          if (!equal(a[i], b[i])) return false;
        }
        return true;
      }
      if (arrA !== arrB) return false;
  
      var dateA = a instanceof Date;
      var dateB = b instanceof Date;
      if (dateA !== dateB) return false;
      if (dateA && dateB) return a.getTime() === b.getTime();
  
      var regexpA = a instanceof RegExp;
      var regexpB = b instanceof RegExp;
      if (regexpA !== regexpB) return false;
      if (regexpA && regexpB) return a.toString() === b.toString();
  
      var keys = keyList(a);
      length = keys.length;
      if (length !== keyList(b).length) {
        return false;
      }
      for (i = length; i-- !== 0;) {
        if (!hasOwn.call(b, keys[i])) return false;
      }
      for (i = length; i-- !== 0;) {
        key = keys[i];
        if (!equal(a[key], b[key])) return false;
      }
  
      return true;
    }
  
    return false;
  }
  
  var customizeRE = /:/g;
  
  var customize = cached(function (str) {
    return camelize(str.replace(customizeRE, '-'));
  });
  
  var isComponent2 = my.canIUse('component2');
  
  var mocks = ['$id'];
  
  function initRefs() {
  
  }
  
  function initBehavior(_ref8)
  
  {var properties = _ref8.properties;
    var props = {};
  
    Object.keys(properties).forEach(function (key) {
      props[key] = properties[key].value;
    });
  
    return {
      props: props };
  
  }
  
  function initRelation(detail) {
    this.props.onVueInit(detail);
  }
  
  function initSpecialMethods(mpInstance) {
    if (!mpInstance.$vm) {
      return;
    }
    var path = mpInstance.is || mpInstance.route;
    if (!path) {
      return;
    }
    if (path.indexOf('/') === 0) {
      path = path.substr(1);
    }
    var specialMethods = my.specialMethods && my.specialMethods[path];
    if (specialMethods) {
      specialMethods.forEach(function (method) {
        if (isFn(mpInstance.$vm[method])) {
          mpInstance[method] = function (event) {
            // TODO normalizeEvent
            mpInstance.$vm[method](event);
          };
        }
      });
    }
  }
  
  function initChildVues(mpInstance) {
    // 此时需保证当前 mpInstance 已经存在 $vm
    if (!mpInstance.$vm) {
      return;
    }
    mpInstance._$childVues && mpInstance._$childVues.forEach(function (_ref9)
  
  
  
  
    {var vuePid = _ref9.vuePid,vueOptions = _ref9.vueOptions,VueComponent = _ref9.VueComponent,childMPInstance = _ref9.mpInstance;
      // 父子关系
      handleLink.call(mpInstance, {
        detail: {
          vuePid: vuePid,
          vueOptions: vueOptions } });
  
  
  
      childMPInstance.$vm = new VueComponent(vueOptions);
  
      initSpecialMethods(childMPInstance);
  
      handleRef.call(vueOptions.parent.$scope, childMPInstance);
  
      childMPInstance.$vm.$mount();
  
      initChildVues(childMPInstance);
  
      childMPInstance.$vm._isMounted = true;
      childMPInstance.$vm.__call_hook('mounted');
      childMPInstance.$vm.__call_hook('onReady');
    });
  
    delete mpInstance._$childVues;
  }
  
  function handleRef(ref) {
    if (!ref) {
      return;
    }
    var refName = ref.props['data-ref'];
    var refInForName = ref.props['data-ref-in-for'];
    if (refName) {
      this.$vm.$refs[refName] = ref.$vm || ref;
    } else if (refInForName) {
      this.$vm.$refs[refInForName] = [ref.$vm || ref];
    }
  }
  
  function triggerEvent(type, detail, options) {
    var handler = this.props[customize('on-' + type)];
    if (!handler) {
      return;
    }
  
    var eventOpts = this.props['data-event-opts'];
  
    var target = {
      dataset: {
        eventOpts: eventOpts } };
  
  
  
    handler({
      type: customize(type),
      target: target,
      currentTarget: target,
      detail: detail });
  
  }
  
  var IGNORES = ['$slots', '$scopedSlots'];
  
  function createObserver$1(isDidUpdate) {
    return function observe(props) {var _this2 = this;
      var prevProps = isDidUpdate ? props : this.props;
      var nextProps = isDidUpdate ? this.props : props;
      if (equal(prevProps, nextProps)) {
        return;
      }
      Object.keys(prevProps).forEach(function (name) {
        if (IGNORES.indexOf(name) === -1) {
          var prevValue = prevProps[name];
          var nextValue = nextProps[name];
          if (!isFn(prevValue) && !isFn(nextValue) && !equal(prevValue, nextValue)) {
            _this2.$vm[name] = nextProps[name];
          }
        }
      });
    };
  }
  
  var handleLink$1 = function () {
    if (isComponent2) {
      return function handleLink$1(detail) {
        return handleLink.call(this, {
          detail: detail });
  
      };
    }
    return function handleLink$1(detail) {
      if (this.$vm && this.$vm._isMounted) {// 父已初始化
        return handleLink.call(this, {
          detail: {
            vuePid: detail.vuePid,
            vueOptions: detail.vueOptions } });
  
  
      }
      // 支付宝通过 didMount 来实现，先子后父，故等父 ready 之后，统一初始化
      (this._$childVues || (this._$childVues = [])).unshift(detail);
    };
  }();
  
  function parseApp(vm) {
    Object.defineProperty(_vue.default.prototype, '$slots', {
      get: function get() {
        return this.$scope && this.$scope.props.$slots;
      },
      set: function set() {
  
      } });
  
    Object.defineProperty(_vue.default.prototype, '$scopedSlots', {
      get: function get() {
        return this.$scope && this.$scope.props.$scopedSlots;
      },
      set: function set() {
  
      } });
  
  
    _vue.default.prototype.$onAliGetAuthorize = function onAliGetAuthorize(method, $event) {var _this3 = this;
      my.getPhoneNumber({
        success: function success(res) {
          $event.type = 'getphonenumber';
          var response = JSON.parse(res.response).response;
          if (response.code === '10000') {// success
            $event.detail.errMsg = 'getPhoneNumber:ok';
            $event.detail.encryptedData = res.response;
          } else {
            $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + res.response;
          }
          _this3[method]($event);
        },
        fail: function fail(res) {
          $event.type = 'getphonenumber';
          $event.detail.errMsg = 'getPhoneNumber:fail';
          _this3[method]($event);
        } });
  
    };
  
    _vue.default.prototype.$onAliAuthError = function $onAliAuthError(method, $event) {
      $event.type = 'getphonenumber';
      $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + $event.detail.errorMessage;
      this[method]($event);
    };
  
    return parseBaseApp(vm, {
      mocks: mocks,
      initRefs: initRefs });
  
  }
  
  function createApp(vm) {
    App(parseApp(vm));
    return vm;
  }
  
  var hooks$1 = [
  'onShow',
  'onHide',
  // mp-alipay 特有
  'onTitleClick',
  'onOptionMenuClick',
  'onPopMenuClick',
  'onPullIntercept'];
  
  
  hooks$1.push.apply(hooks$1, PAGE_EVENT_HOOKS);
  
  function parsePage(vuePageOptions) {var _initVueComponent =
    initVueComponent(_vue.default, vuePageOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];
  
    var pageOptions = {
      mixins: initBehaviors(vueOptions, initBehavior),
      data: initData(vueOptions, _vue.default.prototype),
      onLoad: function onLoad(args) {
        var properties = this.props;
  
        var options = {
          mpType: 'page',
          mpInstance: this,
          propsData: properties };
  
  
        // 初始化 vue 实例
        this.$vm = new VueComponent(options);
  
        initSpecialMethods(this);
  
        // 触发首次 setData
        this.$vm.$mount();
  
        this.$vm.$mp.query = args; // 兼容 mpvue
        this.$vm.__call_hook('onLoad', args);
      },
      onReady: function onReady() {
        initChildVues(this);
        this.$vm._isMounted = true;
        this.$vm.__call_hook('mounted');
        this.$vm.__call_hook('onReady');
      },
      onUnload: function onUnload() {
        this.$vm.__call_hook('onUnload');
        this.$vm.$destroy();
      },
      __r: handleRef,
      __e: handleEvent,
      __l: handleLink$1 };
  
  
    initHooks(pageOptions, hooks$1, vuePageOptions);
  
    return pageOptions;
  }
  
  function createPage(vuePageOptions) {
    {
      return Page(parsePage(vuePageOptions));
    }
  }
  
  function initVm(VueComponent) {
    if (this.$vm) {
      return;
    }
    var properties = this.props;
  
    var options = {
      mpType: 'component',
      mpInstance: this,
      propsData: properties };
  
  
    initVueIds(properties.vueId, this);
  
    if (isComponent2) {
      // 处理父子关系
      initRelation.call(this, {
        vuePid: this._$vuePid,
        vueOptions: options });
  
  
      // 初始化 vue 实例
      this.$vm = new VueComponent(options);
  
      // 触发首次 setData
      this.$vm.$mount();
    } else {
      // 处理父子关系
      initRelation.call(this, {
        vuePid: this._$vuePid,
        vueOptions: options,
        VueComponent: VueComponent,
        mpInstance: this });
  
  
      if (options.parent) {// 父组件已经初始化，直接初始化子，否则放到父组件的 didMount 中处理
        // 初始化 vue 实例
        this.$vm = new VueComponent(options);
        handleRef.call(options.parent.$scope, this);
        // 触发首次 setData
        this.$vm.$mount();
  
        initChildVues(this);
  
        this.$vm._isMounted = true;
        this.$vm.__call_hook('mounted');
        this.$vm.__call_hook('onReady');
      }
    }
  }
  
  function parseComponent(vueComponentOptions) {var _initVueComponent3 =
    initVueComponent(_vue.default, vueComponentOptions),_initVueComponent4 = _slicedToArray(_initVueComponent3, 2),VueComponent = _initVueComponent4[0],vueOptions = _initVueComponent4[1];
  
    var properties = initProperties(vueOptions.props, false, vueOptions.__file);
  
    var props = {
      onVueInit: function onVueInit() {} };
  
  
    Object.keys(properties).forEach(function (key) {
      if (key !== 'vueSlots') {
        props[key] = properties[key].value;
      }
    });
  
    var componentOptions = {
      mixins: initBehaviors(vueOptions, initBehavior),
      data: initData(vueOptions, _vue.default.prototype),
      props: props,
      didMount: function didMount() {
        initVm.call(this, VueComponent);
  
        initSpecialMethods(this);
  
        if (isComponent2) {
          this.$vm._isMounted = true;
          this.$vm.__call_hook('mounted');
          this.$vm.__call_hook('onReady');
        }
      },
      didUnmount: function didUnmount() {
        this.$vm.$destroy();
      },
      methods: {
        __r: handleRef,
        __e: handleEvent,
        __l: handleLink$1,
        triggerEvent: triggerEvent } };
  
  
  
    if (isComponent2) {
      componentOptions.onInit = function onInit() {
        initVm.call(this, VueComponent);
      };
      componentOptions.deriveDataFromProps = createObserver$1();
    } else {
      componentOptions.didUpdate = createObserver$1(true);
    }
  
    return componentOptions;
  }
  
  function createComponent(vueOptions) {
    {
      return my.defineComponent(parseComponent(vueOptions));
    }
  }
  
  todos.forEach(function (todoApi) {
    protocols[todoApi] = false;
  });
  
  canIUses.forEach(function (canIUseApi) {
    var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :
    canIUseApi;
    if (!my.canIUse(apiName)) {
      protocols[canIUseApi] = false;
    }
  });
  
  var uni = {};
  
  if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') {
    uni = new Proxy({}, {
      get: function get(target, name) {
        if (target[name]) {
          return target[name];
        }
        if (baseApi[name]) {
          return baseApi[name];
        }
        if (api[name]) {
          return promisify(name, api[name]);
        }
        {
          if (extraApi[name]) {
            return promisify(name, extraApi[name]);
          }
          if (todoApis[name]) {
            return promisify(name, todoApis[name]);
          }
        }
        if (eventApi[name]) {
          return eventApi[name];
        }
        if (!hasOwn(my, name) && !hasOwn(protocols, name)) {
          return;
        }
        return promisify(name, wrapper(name, my[name]));
      },
      set: function set(target, name, value) {
        target[name] = value;
        return true;
      } });
  
  } else {
    Object.keys(baseApi).forEach(function (name) {
      uni[name] = baseApi[name];
    });
  
    {
      Object.keys(todoApis).forEach(function (name) {
        uni[name] = promisify(name, todoApis[name]);
      });
      Object.keys(extraApi).forEach(function (name) {
        uni[name] = promisify(name, todoApis[name]);
      });
    }
  
    Object.keys(eventApi).forEach(function (name) {
      uni[name] = eventApi[name];
    });
  
    Object.keys(api).forEach(function (name) {
      uni[name] = promisify(name, api[name]);
    });
  
    Object.keys(my).forEach(function (name) {
      if (hasOwn(my, name) || hasOwn(protocols, name)) {
        uni[name] = promisify(name, wrapper(name, my[name]));
      }
    });
  }
  
  my.createApp = createApp;
  my.createPage = createPage;
  my.createComponent = createComponent;
  
  var uni$1 = uni;var _default =
  
  uni$1;exports.default = _default;
  
  /***/ }),
  
  /***/ 14:
  /*!********************************************************************!*\
    !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
    \********************************************************************/
  /*! exports provided: default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
  /* globals __VUE_SSR_CONTEXT__ */
  
  // IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
  // This module is a runtime utility for cleaner component module output and will
  // be included in the final webpack user bundle.
  
  function normalizeComponent (
    scriptExports,
    render,
    staticRenderFns,
    functionalTemplate,
    injectStyles,
    scopeId,
    moduleIdentifier, /* server only */
    shadowMode /* vue-cli only */
  ) {
    // Vue.extend constructor export interop
    var options = typeof scriptExports === 'function'
      ? scriptExports.options
      : scriptExports
  
    // render functions
    if (render) {
      options.render = render
      options.staticRenderFns = staticRenderFns
      options._compiled = true
    }
  
    // functional template
    if (functionalTemplate) {
      options.functional = true
    }
  
    // scopedId
    if (scopeId) {
      options._scopeId = 'data-v-' + scopeId
    }
  
    var hook
    if (moduleIdentifier) { // server build
      hook = function (context) {
        // 2.3 injection
        context =
          context || // cached call
          (this.$vnode && this.$vnode.ssrContext) || // stateful
          (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
        // 2.2 with runInNewContext: true
        if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
          context = __VUE_SSR_CONTEXT__
        }
        // inject component styles
        if (injectStyles) {
          injectStyles.call(this, context)
        }
        // register component module identifier for async chunk inferrence
        if (context && context._registeredComponents) {
          context._registeredComponents.add(moduleIdentifier)
        }
      }
      // used by ssr in case component is cached and beforeCreate
      // never gets called
      options._ssrRegister = hook
    } else if (injectStyles) {
      hook = shadowMode
        ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
        : injectStyles
    }
  
    if (hook) {
      if (options.functional) {
        // for template-only hot-reload because in that case the render fn doesn't
        // go through the normalizer
        options._injectStyles = hook
        // register for functioal component in vue file
        var originalRender = options.render
        options.render = function renderWithStyleInjection (h, context) {
          hook.call(context)
          return originalRender(h, context)
        }
      } else {
        // inject component registration as beforeCreate hook
        var existing = options.beforeCreate
        options.beforeCreate = existing
          ? [].concat(existing, hook)
          : [hook]
      }
    }
  
    return {
      exports: scriptExports,
      options: options
    }
  }
  
  
  /***/ }),
  
  /***/ 15:
  /*!********************************************!*\
    !*** D:/work/uniapp/ThorUI/store/index.js ***!
    \********************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(__webpack_require__(/*! ./node_modules/@babel/runtime/regenerator */ 16));var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));
  var _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 19));
  var _request = _interopRequireDefault(__webpack_require__(/*! ../common/request.js */ 20));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);}_next(undefined);});};}
  
  _vue.default.use(_vuex.default);
  
  var store = new _vuex.default.Store({
    state: {
      version: "1.4.0",
      isLogin: uni.getStorageSync("thorui_mobile") ? true : false,
      mobile: uni.getStorageSync("thorui_mobile") || "echo.",
      memberId: uni.getStorageSync("memberId") || 0,
      openid: "",
      userInfo: { // 用户信息
        longitude: null, // 经度
        latitude: null, // 纬度
        locationCity: '' // 定位城市
      },
      appInfo: { // APP整体数据
        commonDataVersion: '0', // 公共数据的大版本号
        adVersion: '0', // 广告数据版本号	
        serviceVersion: '0' // 服务数据版本号
      },
      adData: {
        homePageAdverts: [],
        carPageAdverts: [],
        servicePageAdverts: [] },
  
      modulesData: { // 首页服务模块、产品模块和服务页服务模块数据
        serviceModules: [],
        productModules: [],
        serviceFuncVOList: [] } },
  
  
    mutations: {
      login: function login(state, payload) {
        if (payload) {
          state.mobile = payload.mobile;
          state.memberId = payload.memberId;
        }
        state.isLogin = true;
      },
      logout: function logout(state) {
        state.mobile = "";
        state.memberId = 0;
        state.isLogin = false;
      },
      setOpenid: function setOpenid(state, openid) {
        state.openid = openid;
      },
      // 设置用户信息
      setUserInfo: function setUserInfo(state, payload) {
        for (var i in payload) {
          for (var j in state.userInfo) {
            if (i === j) {
              state.userInfo[j] = payload[i];
            }
          }
        }
      },
      // 设置APP信息
      setAppInfo: function setAppInfo(state, payload) {
        for (var i in payload) {
          for (var j in state.appInfo) {
            if (i === j) {
              state.appInfo[j] = payload[i];
            }
          }
        }
      },
      // 更新APP整体广告数据
      updateAdData: function updateAdData(state, payload) {
        uni.setStorageSync("carPageAdverts", JSON.stringify(payload.adData.carPageAdverts));
        state.adData = payload.adData;
      },
      // 更新APP整体服务数据
      updateModulesData: function updateModulesData(state, payload) {
        state.modulesData = payload.modulesData;
      } },
  
    actions: {
      // 查看公共数据版本是否更新
      // 返回有data数据时代表有更新，未返回data数据代表不需要更新
      // 返回9010错误时代表还未生成公共数据版本，需要先调用对应接口生成数据版本号
      checkModuleUpdate: function () {var _checkModuleUpdate = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {var commit, state;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:
                  commit = _ref.commit,
                  state = _ref.state;return _context.abrupt("return",
  
                  new Promise(function (resolve, reject) {
                    _request.default.request('config/queryHasUpdates', {
                      version: state.appInfo.commonDataVersion },
                    'POST').then(function (res) {
                      //console.log('各个模块数据数据' + JSON.stringify(res))
                      if (res.code === 200) {
                        if (!res.data) return;
                        var data = res.data.versionData;
                        var obj = {
                          updateAd: false,
                          updateService: false };
  
                        commit('setAppInfo', {
                          commonDataVersion: res.data.version });
  
                        if (data.advertVersion !== state.appInfo.adVersion) {
                          obj.updateAd = true;
                        }
                        if (data.serviceVersion !== state.appInfo.serviceVersion) {
                          obj.updateService = true;
                        }
                        resolve(obj);
                      } else {
                        _request.default.toast(res.message);
                      }
                    }).catch(function (e) {});
                  }));case 2:case "end":return _context.stop();}}}, _callee, this);}));function checkModuleUpdate(_x) {return _checkModuleUpdate.apply(this, arguments);}return checkModuleUpdate;}(),
  
      // 查询广告（首页、车圈、服务）
      getAds: function getAds(_ref2)
  
  
  
      {var dispatch = _ref2.dispatch,commit = _ref2.commit,state = _ref2.state;
        _request.default.request('config/queryAdverts', {
          clientDictKey: 1,
          version: state.appInfo.adVersion },
        'POST').then(function (res) {
          if (res.code === 200) {
            commit('updateAdData', {
              adData: res.data });
  
            commit('setAppInfo', {
              adVersion: res.data.version });
  
          } else {
            _request.default.toast(res.message);
          }
        }).catch(function (e) {});
      },
      // 获取首页服务模块、产品模块和服务页服务模块数据
      getServices: function getServices(_ref3)
  
  
      {var commit = _ref3.commit,state = _ref3.state;
        _request.default.request('serviceFunc/searchServiceFunc', {
          version: state.appInfo.serviceVersion },
        'POST').then(function (res) {
          // console.log('首页服务模块、产品模块和服务页服务模块数据' + JSON.stringify(res.data))
          if (res.code === 200) {
            commit('updateModulesData', {
              modulesData: res.data.data });
  
            commit('setAppInfo', {
              serviceVersion: res.data.version });
  
          } else {
            _request.default.toast(res.message);
          }
        }).catch(function (e) {});
      } } });var _default =
  
  
  
  store;exports.default = _default;
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 16:
  /*!**********************************************************!*\
    !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
    \**********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = __webpack_require__(/*! regenerator-runtime */ 17);
  
  
  /***/ }),
  
  /***/ 17:
  /*!************************************************************!*\
    !*** ./node_modules/regenerator-runtime/runtime-module.js ***!
    \************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  /**
   * Copyright (c) 2014-present, Facebook, Inc.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */
  
  // This method of obtaining a reference to the global object needs to be
  // kept identical to the way it is obtained in runtime.js
  var g = (function() {
    return this || (typeof self === "object" && self);
  })() || Function("return this")();
  
  // Use `getOwnPropertyNames` because not all browsers support calling
  // `hasOwnProperty` on the global `self` object in a worker. See #183.
  var hadRuntime = g.regeneratorRuntime &&
    Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
  
  // Save the old regeneratorRuntime in case it needs to be restored later.
  var oldRuntime = hadRuntime && g.regeneratorRuntime;
  
  // Force reevalutation of runtime.js.
  g.regeneratorRuntime = undefined;
  
  module.exports = __webpack_require__(/*! ./runtime */ 18);
  
  if (hadRuntime) {
    // Restore the original runtime.
    g.regeneratorRuntime = oldRuntime;
  } else {
    // Remove the global property added by runtime.js.
    try {
      delete g.regeneratorRuntime;
    } catch(e) {
      g.regeneratorRuntime = undefined;
    }
  }
  
  
  /***/ }),
  
  /***/ 179:
  /*!*************************************************!*\
    !*** D:/work/uniapp/ThorUI/utils/index.list.js ***!
    \*************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  module.exports = {
    list: [{
      "letter": "A",
      "data": [{
        "name": "阿拉斯加",
        "mobile": "13588889999",
        "keyword": "阿拉斯加ABA13588889999" },
  
      {
        "name": "阿克苏",
        "mobile": "0551-4386721",
        "keyword": "阿克苏AKESU0551-4386721" },
  
      {
        "name": "阿拉善",
        "mobile": "4008009100",
        "keyword": "阿拉善ALASHAN4008009100" },
  
      {
        "name": "阿勒泰",
        "mobile": "13588889999",
        "keyword": "阿勒泰ALETAI13588889999" },
  
      {
        "name": "阿里",
        "mobile": "13588889999",
        "keyword": "阿里ALI13588889999" },
  
      {
        "name": "安阳",
        "mobile": "13588889999",
        "keyword": "13588889999安阳ANYANG" }] },
  
  
  
    {
      "letter": "B",
      "data": [{
        "name": "白城",
        "mobile": "该主子没有留电话~",
        "keyword": "白城BAICHENG" },
  
      {
        "name": "白山",
        "mobile": "13588889999",
        "keyword": "白山BAISHAN13588889999" },
  
      {
        "name": "白银",
        "mobile": "13588889999",
        "keyword": "白银BAIYIN13588889999" },
  
      {
        "name": "保定",
        "mobile": "13588889999",
        "keyword": "保定BAODING13588889999" }] },
  
  
  
    {
      "letter": "C",
      "data": [{
        "name": "沧州",
        "mobile": "13588889999",
        "keyword": "沧州CANGZHOU13588889999" },
  
      {
        "name": "长春",
        "mobile": "13588889999",
        "keyword": "长春CHANGCHUN13588889999" }] },
  
  
  
    {
      "letter": "D",
      "data": [{
        "name": "大理",
        "mobile": "13588889999",
        "keyword": "大理DALI13588889999" },
  
      {
        "name": "大连",
        "mobile": "13588889999",
        "keyword": "大连DALIAN13588889999" }] },
  
  
  
    {
      "letter": "E",
      "data": [{
        "name": "鄂尔多斯",
        "mobile": "13588889999",
        "keyword": "鄂尔多斯EERDUOSI13588889999" },
  
      {
        "name": "恩施",
        "mobile": "13588889999",
        "keyword": "恩施ENSHI13588889999" },
  
      {
        "name": "鄂州",
        "mobile": "13588889999",
        "keyword": "鄂州EZHOU13588889999" }] },
  
  
  
    {
      "letter": "F",
      "data": [{
        "name": "防城港",
        "mobile": "该主子没有留电话~",
        "keyword": "防城港FANGCHENGGANG" },
  
      {
        "name": "抚顺",
        "mobile": "13588889999",
        "keyword": "抚顺FUSHUN13588889999" },
  
      {
        "name": "阜新",
        "mobile": "13588889999",
        "keyword": "阜新FUXIN13588889999" },
  
      {
        "name": "阜阳",
        "mobile": "13588889999",
        "keyword": "阜阳FUYANG13588889999" },
  
      {
        "name": "抚州",
        "mobile": "13588889999",
        "keyword": "抚州FUZHOU13588889999" },
  
      {
        "name": "福州",
        "mobile": "13588889999",
        "keyword": "福州FUZHOU13588889999" }] },
  
  
  
    {
      "letter": "G",
      "data": [{
        "name": "甘南",
        "mobile": "13588889999",
        "keyword": "甘南GANNAN13588889999" },
  
      {
        "name": "赣州",
        "mobile": "13588889999",
        "keyword": "赣州GANZHOU13588889999" },
  
      {
        "name": "甘孜",
        "mobile": "13588889999",
        "keyword": "甘孜GANZI13588889999" }] },
  
  
  
    {
      "letter": "H",
      "data": [{
        "name": "哈尔滨",
        "mobile": "13588889999",
        "keyword": "哈尔滨HAERBIN13588889999" },
  
      {
        "name": "海北",
        "mobile": "13588889999",
        "keyword": "海北HAIBEI13588889999" },
  
      {
        "name": "海东",
        "mobile": "13588889999",
        "keyword": "海东HAIDONG13588889999" },
  
      {
        "name": "海口",
        "mobile": "13588889999",
        "keyword": "海口HAIKOU13588889999" }] },
  
  
  
    {
      "letter": "I",
      "data": [] },
  
  
  
    {
      "letter": "J",
      "data": [{
        "name": "佳木斯",
        "mobile": "13588889999",
        "keyword": "佳木斯JIAMUSI13588889999" },
  
      {
        "name": "吉安",
        "mobile": "13588889999",
        "keyword": "吉安JIAN13588889999" },
  
      {
        "name": "江门",
        "mobile": "13588889999",
        "keyword": "江门JIANGMEN13588889999" }] },
  
  
  
    {
      "letter": "K",
      "data": [{
        "name": "开封",
        "mobile": "13588889999",
        "keyword": "开封KAIFENG13588889999" },
  
      {
        "name": "喀什",
        "mobile": "13588889999",
        "keyword": "喀什KASHI13588889999" },
  
      {
        "name": "克拉玛依",
        "mobile": "13588889999",
        "keyword": "克拉玛依KELAMAYI13588889999" }] },
  
  
  
    {
      "letter": "L",
      "data": [{
        "name": "来宾",
        "mobile": "13588889999",
        "keyword": "来宾LAIBIN13588889999" },
  
      {
        "name": "兰州",
        "mobile": "13588889999",
        "keyword": "兰州LANZHOU13588889999" },
  
      {
        "name": "拉萨",
        "mobile": "13588889999",
        "keyword": "拉萨LASA13588889999" },
  
      {
        "name": "乐山",
        "mobile": "13588889999",
        "keyword": "乐山LESHAN13588889999" },
  
      {
        "name": "凉山",
        "mobile": "13588889999",
        "keyword": "凉山LIANGSHAN13588889999" },
  
      {
        "name": "连云港",
        "mobile": "13588889999",
        "keyword": "连云港LIANYUNGANG13588889999" },
  
      {
        "name": "聊城",
        "mobile": "18322223333",
        "keyword": "聊城LIAOCHENG18322223333" },
  
      {
        "name": "辽阳",
        "mobile": "18322223333",
        "keyword": "辽阳LIAOYANG18322223333" },
  
      {
        "name": "辽源",
        "mobile": "18322223333",
        "keyword": "辽源LIAOYUAN18322223333" },
  
      {
        "name": "丽江",
        "mobile": "18322223333",
        "keyword": "丽江LIJIANG18322223333" },
  
      {
        "name": "临沧",
        "mobile": "18322223333",
        "keyword": "临沧LINCANG18322223333" },
  
      {
        "name": "临汾",
        "mobile": "18322223333",
        "keyword": "临汾LINFEN18322223333" },
  
      {
        "name": "临夏",
        "mobile": "18322223333",
        "keyword": "临夏LINXIA18322223333" },
  
      {
        "name": "临沂",
        "mobile": "18322223333",
        "keyword": "临沂LINYI18322223333" },
  
      {
        "name": "林芝",
        "mobile": "18322223333",
        "keyword": "林芝LINZHI18322223333" },
  
      {
        "name": "丽水",
        "mobile": "18322223333",
        "keyword": "丽水LISHUI18322223333" }] },
  
  
  
    {
      "letter": "M",
      "data": [{
        "name": "眉山",
        "mobile": "15544448888",
        "keyword": "眉山MEISHAN15544448888" },
  
      {
        "name": "梅州",
        "mobile": "15544448888",
        "keyword": "梅州MEIZHOU15544448888" },
  
      {
        "name": "绵阳",
        "mobile": "15544448888",
        "keyword": "绵阳MIANYANG15544448888" },
  
      {
        "name": "牡丹江",
        "mobile": "15544448888",
        "keyword": "牡丹江MUDANJIANG15544448888" }] },
  
  
  
    {
      "letter": "N",
      "data": [{
        "name": "南昌",
        "mobile": "15544448888",
        "keyword": "南昌NANCHANG15544448888" },
  
      {
        "name": "南充",
        "mobile": "15544448888",
        "keyword": "南充NANCHONG15544448888" },
  
      {
        "name": "南京",
        "mobile": "15544448888",
        "keyword": "南京NANJING15544448888" },
  
      {
        "name": "南宁",
        "mobile": "15544448888",
        "keyword": "南宁NANNING15544448888" },
  
      {
        "name": "南平",
        "mobile": "15544448888",
        "keyword": "南平NANPING15544448888" }] },
  
  
  
    {
      "letter": "O",
      "data": [{
        "name": "欧阳",
        "mobile": "15544448888",
        "keyword": "欧阳ouyang15544448888" }] },
  
  
    {
      "letter": "P",
      "data": [{
        "name": "盘锦",
        "mobile": "15544448888",
        "keyword": "盘锦PANJIN15544448888" },
  
      {
        "name": "攀枝花",
        "mobile": "15544448888",
        "keyword": "攀枝花PANZHIHUA15544448888" },
  
      {
        "name": "平顶山",
        "mobile": "15544448888",
        "keyword": "平顶山PINGDINGSHAN15544448888" },
  
      {
        "name": "平凉",
        "mobile": "15544448888",
        "keyword": "平凉PINGLIANG15544448888" },
  
      {
        "name": "萍乡",
        "mobile": "15544448888",
        "keyword": "萍乡PINGXIANG15544448888" },
  
      {
        "name": "普洱",
        "mobile": "15544448888",
        "keyword": "普洱PUER15544448888" },
  
      {
        "name": "莆田",
        "mobile": "15544448888",
        "keyword": "莆田PUTIAN15544448888" },
  
      {
        "name": "濮阳",
        "mobile": "15544448888",
        "keyword": "濮阳PUYANG15544448888" }] },
  
  
  
    {
      "letter": "Q",
      "data": [{
        "name": "黔东南",
        "mobile": "15544448888",
        "keyword": "黔东南QIANDONGNAN15544448888" },
  
      {
        "name": "黔南",
        "mobile": "15544448888",
        "keyword": "黔南QIANNAN15544448888" },
  
      {
        "name": "黔西南",
        "mobile": "15544448888",
        "keyword": "黔西南QIANXINAN15544448888" }] },
  
  
  
    {
      "letter": "R",
      "data": [{
        "name": "日喀则",
        "mobile": "15544448888",
        "keyword": "日喀则RIKAZE15544448888" },
  
      {
        "name": "日照",
        "mobile": "15544448888",
        "keyword": "日照RIZHAO15544448888" }] },
  
  
  
    {
      "letter": "S",
      "data": [{
        "name": "三门峡",
        "mobile": "15544448888",
        "keyword": "三门峡SANMENXIA15544448888" },
  
      {
        "name": "三明",
        "mobile": "15544448888",
        "keyword": "三明SANMING15544448888" },
  
      {
        "name": "三沙",
        "mobile": "15544448888",
        "keyword": "三沙SANSHA15544448888" }] },
  
  
  
    {
      "letter": "T",
      "data": [{
        "name": "塔城",
        "mobile": "15544448888",
        "keyword": "塔城TACHENG15544448888" },
  
      {
        "name": "漯河",
        "mobile": "15544448888",
        "keyword": "漯河TAHE15544448888" },
  
      {
        "name": "泰安",
        "mobile": "15544448888",
        "keyword": "泰安TAIAN15544448888" }] },
  
  
  
    {
      "letter": "W",
      "data": [{
        "name": "潍坊",
        "mobile": "15544448888",
        "keyword": "潍坊WEIFANG15544448888" },
  
      {
        "name": "威海",
        "mobile": "15544448888",
        "keyword": "威海WEIHAI15544448888" },
  
      {
        "name": "渭南",
        "mobile": "15544448888",
        "keyword": "渭南WEINAN15544448888" },
  
      {
        "name": "文山",
        "mobile": "15544448888",
        "keyword": "文山WENSHAN15544448888" }] },
  
  
  
    {
      "letter": "X",
      "data": [{
        "name": "厦门",
        "mobile": "15544448888",
        "keyword": "厦门XIAMEN15544448888" },
  
      {
        "name": "西安",
        "mobile": "15544448888",
        "keyword": "西安XIAN15544448888" },
  
      {
        "name": "湘潭",
        "mobile": "15544448888",
        "keyword": "湘潭XIANGTAN15544448888" }] },
  
  
  
    {
      "letter": "Y",
      "data": [{
        "name": "雅安",
        "mobile": "15544448888",
        "keyword": "雅安YAAN15544448888" },
  
      {
        "name": "延安",
        "mobile": "15544448888",
        "keyword": "延安YANAN15544448888" },
  
      {
        "name": "延边",
        "mobile": "15544448888",
        "keyword": "延边YANBIAN15544448888" },
  
      {
        "name": "盐城",
        "mobile": "15544448888",
        "keyword": "盐城YANCHENG15544448888" }] },
  
  
  
    {
      "letter": "Z",
      "data": [{
        "name": "枣庄",
        "mobile": "15544448888",
        "keyword": "枣庄ZAOZHUANG15544448888" },
  
      {
        "name": "张家界",
        "mobile": "15544448888",
        "keyword": "张家界ZHANGJIAJIE15544448888" },
  
      {
        "name": "张家口",
        "mobile": "15544448888",
        "keyword": "张家口ZHANGJIAKOU15544448888" }] },
  
  
  
    {
      "letter": "well",
      "data": [{
        "name": "☆echo.",
        "mobile": "16666666666",
        "keyword": "echo16666666666" }] }] };
  
  /***/ }),
  
  /***/ 18:
  /*!*****************************************************!*\
    !*** ./node_modules/regenerator-runtime/runtime.js ***!
    \*****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
   * Copyright (c) 2014-present, Facebook, Inc.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */
  
  !(function(global) {
    "use strict";
  
    var Op = Object.prototype;
    var hasOwn = Op.hasOwnProperty;
    var undefined; // More compressible than void 0.
    var $Symbol = typeof Symbol === "function" ? Symbol : {};
    var iteratorSymbol = $Symbol.iterator || "@@iterator";
    var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
    var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  
    var inModule = typeof module === "object";
    var runtime = global.regeneratorRuntime;
    if (runtime) {
      if (inModule) {
        // If regeneratorRuntime is defined globally and we're in a module,
        // make the exports object identical to regeneratorRuntime.
        module.exports = runtime;
      }
      // Don't bother evaluating the rest of this file if the runtime was
      // already defined globally.
      return;
    }
  
    // Define the runtime globally (as expected by generated code) as either
    // module.exports (if we're in a module) or a new, empty object.
    runtime = global.regeneratorRuntime = inModule ? module.exports : {};
  
    function wrap(innerFn, outerFn, self, tryLocsList) {
      // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
      var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
      var generator = Object.create(protoGenerator.prototype);
      var context = new Context(tryLocsList || []);
  
      // The ._invoke method unifies the implementations of the .next,
      // .throw, and .return methods.
      generator._invoke = makeInvokeMethod(innerFn, self, context);
  
      return generator;
    }
    runtime.wrap = wrap;
  
    // Try/catch helper to minimize deoptimizations. Returns a completion
    // record like context.tryEntries[i].completion. This interface could
    // have been (and was previously) designed to take a closure to be
    // invoked without arguments, but in all the cases we care about we
    // already have an existing method we want to call, so there's no need
    // to create a new function object. We can even get away with assuming
    // the method takes exactly one argument, since that happens to be true
    // in every case, so we don't have to touch the arguments object. The
    // only additional allocation required is the completion record, which
    // has a stable shape and so hopefully should be cheap to allocate.
    function tryCatch(fn, obj, arg) {
      try {
        return { type: "normal", arg: fn.call(obj, arg) };
      } catch (err) {
        return { type: "throw", arg: err };
      }
    }
  
    var GenStateSuspendedStart = "suspendedStart";
    var GenStateSuspendedYield = "suspendedYield";
    var GenStateExecuting = "executing";
    var GenStateCompleted = "completed";
  
    // Returning this object from the innerFn has the same effect as
    // breaking out of the dispatch switch statement.
    var ContinueSentinel = {};
  
    // Dummy constructor functions that we use as the .constructor and
    // .constructor.prototype properties for functions that return Generator
    // objects. For full spec compliance, you may wish to configure your
    // minifier not to mangle the names of these two functions.
    function Generator() {}
    function GeneratorFunction() {}
    function GeneratorFunctionPrototype() {}
  
    // This is a polyfill for %IteratorPrototype% for environments that
    // don't natively support it.
    var IteratorPrototype = {};
    IteratorPrototype[iteratorSymbol] = function () {
      return this;
    };
  
    var getProto = Object.getPrototypeOf;
    var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
    if (NativeIteratorPrototype &&
        NativeIteratorPrototype !== Op &&
        hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
      // This environment has a native %IteratorPrototype%; use it instead
      // of the polyfill.
      IteratorPrototype = NativeIteratorPrototype;
    }
  
    var Gp = GeneratorFunctionPrototype.prototype =
      Generator.prototype = Object.create(IteratorPrototype);
    GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
    GeneratorFunctionPrototype.constructor = GeneratorFunction;
    GeneratorFunctionPrototype[toStringTagSymbol] =
      GeneratorFunction.displayName = "GeneratorFunction";
  
    // Helper for defining the .next, .throw, and .return methods of the
    // Iterator interface in terms of a single ._invoke method.
    function defineIteratorMethods(prototype) {
      ["next", "throw", "return"].forEach(function(method) {
        prototype[method] = function(arg) {
          return this._invoke(method, arg);
        };
      });
    }
  
    runtime.isGeneratorFunction = function(genFun) {
      var ctor = typeof genFun === "function" && genFun.constructor;
      return ctor
        ? ctor === GeneratorFunction ||
          // For the native GeneratorFunction constructor, the best we can
          // do is to check its .name property.
          (ctor.displayName || ctor.name) === "GeneratorFunction"
        : false;
    };
  
    runtime.mark = function(genFun) {
      if (Object.setPrototypeOf) {
        Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
      } else {
        genFun.__proto__ = GeneratorFunctionPrototype;
        if (!(toStringTagSymbol in genFun)) {
          genFun[toStringTagSymbol] = "GeneratorFunction";
        }
      }
      genFun.prototype = Object.create(Gp);
      return genFun;
    };
  
    // Within the body of any async function, `await x` is transformed to
    // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
    // `hasOwn.call(value, "__await")` to determine if the yielded value is
    // meant to be awaited.
    runtime.awrap = function(arg) {
      return { __await: arg };
    };
  
    function AsyncIterator(generator) {
      function invoke(method, arg, resolve, reject) {
        var record = tryCatch(generator[method], generator, arg);
        if (record.type === "throw") {
          reject(record.arg);
        } else {
          var result = record.arg;
          var value = result.value;
          if (value &&
              typeof value === "object" &&
              hasOwn.call(value, "__await")) {
            return Promise.resolve(value.__await).then(function(value) {
              invoke("next", value, resolve, reject);
            }, function(err) {
              invoke("throw", err, resolve, reject);
            });
          }
  
          return Promise.resolve(value).then(function(unwrapped) {
            // When a yielded Promise is resolved, its final value becomes
            // the .value of the Promise<{value,done}> result for the
            // current iteration.
            result.value = unwrapped;
            resolve(result);
          }, function(error) {
            // If a rejected Promise was yielded, throw the rejection back
            // into the async generator function so it can be handled there.
            return invoke("throw", error, resolve, reject);
          });
        }
      }
  
      var previousPromise;
  
      function enqueue(method, arg) {
        function callInvokeWithMethodAndArg() {
          return new Promise(function(resolve, reject) {
            invoke(method, arg, resolve, reject);
          });
        }
  
        return previousPromise =
          // If enqueue has been called before, then we want to wait until
          // all previous Promises have been resolved before calling invoke,
          // so that results are always delivered in the correct order. If
          // enqueue has not been called before, then it is important to
          // call invoke immediately, without waiting on a callback to fire,
          // so that the async generator function has the opportunity to do
          // any necessary setup in a predictable way. This predictability
          // is why the Promise constructor synchronously invokes its
          // executor callback, and why async functions synchronously
          // execute code before the first await. Since we implement simple
          // async functions in terms of async generators, it is especially
          // important to get this right, even though it requires care.
          previousPromise ? previousPromise.then(
            callInvokeWithMethodAndArg,
            // Avoid propagating failures to Promises returned by later
            // invocations of the iterator.
            callInvokeWithMethodAndArg
          ) : callInvokeWithMethodAndArg();
      }
  
      // Define the unified helper method that is used to implement .next,
      // .throw, and .return (see defineIteratorMethods).
      this._invoke = enqueue;
    }
  
    defineIteratorMethods(AsyncIterator.prototype);
    AsyncIterator.prototype[asyncIteratorSymbol] = function () {
      return this;
    };
    runtime.AsyncIterator = AsyncIterator;
  
    // Note that simple async functions are implemented on top of
    // AsyncIterator objects; they just return a Promise for the value of
    // the final result produced by the iterator.
    runtime.async = function(innerFn, outerFn, self, tryLocsList) {
      var iter = new AsyncIterator(
        wrap(innerFn, outerFn, self, tryLocsList)
      );
  
      return runtime.isGeneratorFunction(outerFn)
        ? iter // If outerFn is a generator, return the full iterator.
        : iter.next().then(function(result) {
            return result.done ? result.value : iter.next();
          });
    };
  
    function makeInvokeMethod(innerFn, self, context) {
      var state = GenStateSuspendedStart;
  
      return function invoke(method, arg) {
        if (state === GenStateExecuting) {
          throw new Error("Generator is already running");
        }
  
        if (state === GenStateCompleted) {
          if (method === "throw") {
            throw arg;
          }
  
          // Be forgiving, per 25.3.3.3.3 of the spec:
          // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
          return doneResult();
        }
  
        context.method = method;
        context.arg = arg;
  
        while (true) {
          var delegate = context.delegate;
          if (delegate) {
            var delegateResult = maybeInvokeDelegate(delegate, context);
            if (delegateResult) {
              if (delegateResult === ContinueSentinel) continue;
              return delegateResult;
            }
          }
  
          if (context.method === "next") {
            // Setting context._sent for legacy support of Babel's
            // function.sent implementation.
            context.sent = context._sent = context.arg;
  
          } else if (context.method === "throw") {
            if (state === GenStateSuspendedStart) {
              state = GenStateCompleted;
              throw context.arg;
            }
  
            context.dispatchException(context.arg);
  
          } else if (context.method === "return") {
            context.abrupt("return", context.arg);
          }
  
          state = GenStateExecuting;
  
          var record = tryCatch(innerFn, self, context);
          if (record.type === "normal") {
            // If an exception is thrown from innerFn, we leave state ===
            // GenStateExecuting and loop back for another invocation.
            state = context.done
              ? GenStateCompleted
              : GenStateSuspendedYield;
  
            if (record.arg === ContinueSentinel) {
              continue;
            }
  
            return {
              value: record.arg,
              done: context.done
            };
  
          } else if (record.type === "throw") {
            state = GenStateCompleted;
            // Dispatch the exception by looping back around to the
            // context.dispatchException(context.arg) call above.
            context.method = "throw";
            context.arg = record.arg;
          }
        }
      };
    }
  
    // Call delegate.iterator[context.method](context.arg) and handle the
    // result, either by returning a { value, done } result from the
    // delegate iterator, or by modifying context.method and context.arg,
    // setting context.delegate to null, and returning the ContinueSentinel.
    function maybeInvokeDelegate(delegate, context) {
      var method = delegate.iterator[context.method];
      if (method === undefined) {
        // A .throw or .return when the delegate iterator has no .throw
        // method always terminates the yield* loop.
        context.delegate = null;
  
        if (context.method === "throw") {
          if (delegate.iterator.return) {
            // If the delegate iterator has a return method, give it a
            // chance to clean up.
            context.method = "return";
            context.arg = undefined;
            maybeInvokeDelegate(delegate, context);
  
            if (context.method === "throw") {
              // If maybeInvokeDelegate(context) changed context.method from
              // "return" to "throw", let that override the TypeError below.
              return ContinueSentinel;
            }
          }
  
          context.method = "throw";
          context.arg = new TypeError(
            "The iterator does not provide a 'throw' method");
        }
  
        return ContinueSentinel;
      }
  
      var record = tryCatch(method, delegate.iterator, context.arg);
  
      if (record.type === "throw") {
        context.method = "throw";
        context.arg = record.arg;
        context.delegate = null;
        return ContinueSentinel;
      }
  
      var info = record.arg;
  
      if (! info) {
        context.method = "throw";
        context.arg = new TypeError("iterator result is not an object");
        context.delegate = null;
        return ContinueSentinel;
      }
  
      if (info.done) {
        // Assign the result of the finished delegate to the temporary
        // variable specified by delegate.resultName (see delegateYield).
        context[delegate.resultName] = info.value;
  
        // Resume execution at the desired location (see delegateYield).
        context.next = delegate.nextLoc;
  
        // If context.method was "throw" but the delegate handled the
        // exception, let the outer generator proceed normally. If
        // context.method was "next", forget context.arg since it has been
        // "consumed" by the delegate iterator. If context.method was
        // "return", allow the original .return call to continue in the
        // outer generator.
        if (context.method !== "return") {
          context.method = "next";
          context.arg = undefined;
        }
  
      } else {
        // Re-yield the result returned by the delegate method.
        return info;
      }
  
      // The delegate iterator is finished, so forget it and continue with
      // the outer generator.
      context.delegate = null;
      return ContinueSentinel;
    }
  
    // Define Generator.prototype.{next,throw,return} in terms of the
    // unified ._invoke helper method.
    defineIteratorMethods(Gp);
  
    Gp[toStringTagSymbol] = "Generator";
  
    // A Generator should always return itself as the iterator object when the
    // @@iterator function is called on it. Some browsers' implementations of the
    // iterator prototype chain incorrectly implement this, causing the Generator
    // object to not be returned from this call. This ensures that doesn't happen.
    // See https://github.com/facebook/regenerator/issues/274 for more details.
    Gp[iteratorSymbol] = function() {
      return this;
    };
  
    Gp.toString = function() {
      return "[object Generator]";
    };
  
    function pushTryEntry(locs) {
      var entry = { tryLoc: locs[0] };
  
      if (1 in locs) {
        entry.catchLoc = locs[1];
      }
  
      if (2 in locs) {
        entry.finallyLoc = locs[2];
        entry.afterLoc = locs[3];
      }
  
      this.tryEntries.push(entry);
    }
  
    function resetTryEntry(entry) {
      var record = entry.completion || {};
      record.type = "normal";
      delete record.arg;
      entry.completion = record;
    }
  
    function Context(tryLocsList) {
      // The root entry object (effectively a try statement without a catch
      // or a finally block) gives us a place to store values thrown from
      // locations where there is no enclosing try statement.
      this.tryEntries = [{ tryLoc: "root" }];
      tryLocsList.forEach(pushTryEntry, this);
      this.reset(true);
    }
  
    runtime.keys = function(object) {
      var keys = [];
      for (var key in object) {
        keys.push(key);
      }
      keys.reverse();
  
      // Rather than returning an object with a next method, we keep
      // things simple and return the next function itself.
      return function next() {
        while (keys.length) {
          var key = keys.pop();
          if (key in object) {
            next.value = key;
            next.done = false;
            return next;
          }
        }
  
        // To avoid creating an additional object, we just hang the .value
        // and .done properties off the next function object itself. This
        // also ensures that the minifier will not anonymize the function.
        next.done = true;
        return next;
      };
    };
  
    function values(iterable) {
      if (iterable) {
        var iteratorMethod = iterable[iteratorSymbol];
        if (iteratorMethod) {
          return iteratorMethod.call(iterable);
        }
  
        if (typeof iterable.next === "function") {
          return iterable;
        }
  
        if (!isNaN(iterable.length)) {
          var i = -1, next = function next() {
            while (++i < iterable.length) {
              if (hasOwn.call(iterable, i)) {
                next.value = iterable[i];
                next.done = false;
                return next;
              }
            }
  
            next.value = undefined;
            next.done = true;
  
            return next;
          };
  
          return next.next = next;
        }
      }
  
      // Return an iterator with no values.
      return { next: doneResult };
    }
    runtime.values = values;
  
    function doneResult() {
      return { value: undefined, done: true };
    }
  
    Context.prototype = {
      constructor: Context,
  
      reset: function(skipTempReset) {
        this.prev = 0;
        this.next = 0;
        // Resetting context._sent for legacy support of Babel's
        // function.sent implementation.
        this.sent = this._sent = undefined;
        this.done = false;
        this.delegate = null;
  
        this.method = "next";
        this.arg = undefined;
  
        this.tryEntries.forEach(resetTryEntry);
  
        if (!skipTempReset) {
          for (var name in this) {
            // Not sure about the optimal order of these conditions:
            if (name.charAt(0) === "t" &&
                hasOwn.call(this, name) &&
                !isNaN(+name.slice(1))) {
              this[name] = undefined;
            }
          }
        }
      },
  
      stop: function() {
        this.done = true;
  
        var rootEntry = this.tryEntries[0];
        var rootRecord = rootEntry.completion;
        if (rootRecord.type === "throw") {
          throw rootRecord.arg;
        }
  
        return this.rval;
      },
  
      dispatchException: function(exception) {
        if (this.done) {
          throw exception;
        }
  
        var context = this;
        function handle(loc, caught) {
          record.type = "throw";
          record.arg = exception;
          context.next = loc;
  
          if (caught) {
            // If the dispatched exception was caught by a catch block,
            // then let that catch block handle the exception normally.
            context.method = "next";
            context.arg = undefined;
          }
  
          return !! caught;
        }
  
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          var record = entry.completion;
  
          if (entry.tryLoc === "root") {
            // Exception thrown outside of any try block that could handle
            // it, so set the completion value of the entire function to
            // throw the exception.
            return handle("end");
          }
  
          if (entry.tryLoc <= this.prev) {
            var hasCatch = hasOwn.call(entry, "catchLoc");
            var hasFinally = hasOwn.call(entry, "finallyLoc");
  
            if (hasCatch && hasFinally) {
              if (this.prev < entry.catchLoc) {
                return handle(entry.catchLoc, true);
              } else if (this.prev < entry.finallyLoc) {
                return handle(entry.finallyLoc);
              }
  
            } else if (hasCatch) {
              if (this.prev < entry.catchLoc) {
                return handle(entry.catchLoc, true);
              }
  
            } else if (hasFinally) {
              if (this.prev < entry.finallyLoc) {
                return handle(entry.finallyLoc);
              }
  
            } else {
              throw new Error("try statement without catch or finally");
            }
          }
        }
      },
  
      abrupt: function(type, arg) {
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          if (entry.tryLoc <= this.prev &&
              hasOwn.call(entry, "finallyLoc") &&
              this.prev < entry.finallyLoc) {
            var finallyEntry = entry;
            break;
          }
        }
  
        if (finallyEntry &&
            (type === "break" ||
             type === "continue") &&
            finallyEntry.tryLoc <= arg &&
            arg <= finallyEntry.finallyLoc) {
          // Ignore the finally entry if control is not jumping to a
          // location outside the try/catch block.
          finallyEntry = null;
        }
  
        var record = finallyEntry ? finallyEntry.completion : {};
        record.type = type;
        record.arg = arg;
  
        if (finallyEntry) {
          this.method = "next";
          this.next = finallyEntry.finallyLoc;
          return ContinueSentinel;
        }
  
        return this.complete(record);
      },
  
      complete: function(record, afterLoc) {
        if (record.type === "throw") {
          throw record.arg;
        }
  
        if (record.type === "break" ||
            record.type === "continue") {
          this.next = record.arg;
        } else if (record.type === "return") {
          this.rval = this.arg = record.arg;
          this.method = "return";
          this.next = "end";
        } else if (record.type === "normal" && afterLoc) {
          this.next = afterLoc;
        }
  
        return ContinueSentinel;
      },
  
      finish: function(finallyLoc) {
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          if (entry.finallyLoc === finallyLoc) {
            this.complete(entry.completion, entry.afterLoc);
            resetTryEntry(entry);
            return ContinueSentinel;
          }
        }
      },
  
      "catch": function(tryLoc) {
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          if (entry.tryLoc === tryLoc) {
            var record = entry.completion;
            if (record.type === "throw") {
              var thrown = record.arg;
              resetTryEntry(entry);
            }
            return thrown;
          }
        }
  
        // The context.catch method must only be called with a location
        // argument that corresponds to a known catch block.
        throw new Error("illegal catch attempt");
      },
  
      delegateYield: function(iterable, resultName, nextLoc) {
        this.delegate = {
          iterator: values(iterable),
          resultName: resultName,
          nextLoc: nextLoc
        };
  
        if (this.method === "next") {
          // Deliberately forget the last sent value so that we don't
          // accidentally pass it on to the delegate.
          this.arg = undefined;
        }
  
        return ContinueSentinel;
      }
    };
  })(
    // In sloppy mode, unbound `this` refers to the global object, fallback to
    // Function constructor if we're in global strict mode. That is sadly a form
    // of indirect eval which violates Content Security Policy.
    (function() {
      return this || (typeof self === "object" && self);
    })() || Function("return this")()
  );
  
  
  /***/ }),
  
  /***/ 19:
  /*!********************************************!*\
    !*** ./node_modules/vuex/dist/vuex.esm.js ***!
    \********************************************/
  /*! exports provided: Store, install, mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapState", function() { return mapState; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapMutations", function() { return mapMutations; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapGetters", function() { return mapGetters; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapActions", function() { return mapActions; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createNamespacedHelpers", function() { return createNamespacedHelpers; });
  /**
   * vuex v3.0.1
   * (c) 2017 Evan You
   * @license MIT
   */
  var applyMixin = function (Vue) {
    var version = Number(Vue.version.split('.')[0]);
  
    if (version >= 2) {
      Vue.mixin({ beforeCreate: vuexInit });
    } else {
      // override init and inject vuex init procedure
      // for 1.x backwards compatibility.
      var _init = Vue.prototype._init;
      Vue.prototype._init = function (options) {
        if ( options === void 0 ) options = {};
  
        options.init = options.init
          ? [vuexInit].concat(options.init)
          : vuexInit;
        _init.call(this, options);
      };
    }
  
    /**
     * Vuex init hook, injected into each instances init hooks list.
     */
  
    function vuexInit () {
      var options = this.$options;
      // store injection
      if (options.store) {
        this.$store = typeof options.store === 'function'
          ? options.store()
          : options.store;
      } else if (options.parent && options.parent.$store) {
        this.$store = options.parent.$store;
      }
    }
  };
  
  var devtoolHook =
    typeof window !== 'undefined' &&
    window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  
  function devtoolPlugin (store) {
    if (!devtoolHook) { return }
  
    store._devtoolHook = devtoolHook;
  
    devtoolHook.emit('vuex:init', store);
  
    devtoolHook.on('vuex:travel-to-state', function (targetState) {
      store.replaceState(targetState);
    });
  
    store.subscribe(function (mutation, state) {
      devtoolHook.emit('vuex:mutation', mutation, state);
    });
  }
  
  /**
   * Get the first item that pass the test
   * by second argument function
   *
   * @param {Array} list
   * @param {Function} f
   * @return {*}
   */
  /**
   * Deep copy the given object considering circular structure.
   * This function caches all nested objects and its copies.
   * If it detects circular structure, use cached copy to avoid infinite loop.
   *
   * @param {*} obj
   * @param {Array<Object>} cache
   * @return {*}
   */
  
  
  /**
   * forEach for object
   */
  function forEachValue (obj, fn) {
    Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
  }
  
  function isObject (obj) {
    return obj !== null && typeof obj === 'object'
  }
  
  function isPromise (val) {
    return val && typeof val.then === 'function'
  }
  
  function assert (condition, msg) {
    if (!condition) { throw new Error(("[vuex] " + msg)) }
  }
  
  var Module = function Module (rawModule, runtime) {
    this.runtime = runtime;
    this._children = Object.create(null);
    this._rawModule = rawModule;
    var rawState = rawModule.state;
    this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
  };
  
  var prototypeAccessors$1 = { namespaced: { configurable: true } };
  
  prototypeAccessors$1.namespaced.get = function () {
    return !!this._rawModule.namespaced
  };
  
  Module.prototype.addChild = function addChild (key, module) {
    this._children[key] = module;
  };
  
  Module.prototype.removeChild = function removeChild (key) {
    delete this._children[key];
  };
  
  Module.prototype.getChild = function getChild (key) {
    return this._children[key]
  };
  
  Module.prototype.update = function update (rawModule) {
    this._rawModule.namespaced = rawModule.namespaced;
    if (rawModule.actions) {
      this._rawModule.actions = rawModule.actions;
    }
    if (rawModule.mutations) {
      this._rawModule.mutations = rawModule.mutations;
    }
    if (rawModule.getters) {
      this._rawModule.getters = rawModule.getters;
    }
  };
  
  Module.prototype.forEachChild = function forEachChild (fn) {
    forEachValue(this._children, fn);
  };
  
  Module.prototype.forEachGetter = function forEachGetter (fn) {
    if (this._rawModule.getters) {
      forEachValue(this._rawModule.getters, fn);
    }
  };
  
  Module.prototype.forEachAction = function forEachAction (fn) {
    if (this._rawModule.actions) {
      forEachValue(this._rawModule.actions, fn);
    }
  };
  
  Module.prototype.forEachMutation = function forEachMutation (fn) {
    if (this._rawModule.mutations) {
      forEachValue(this._rawModule.mutations, fn);
    }
  };
  
  Object.defineProperties( Module.prototype, prototypeAccessors$1 );
  
  var ModuleCollection = function ModuleCollection (rawRootModule) {
    // register root module (Vuex.Store options)
    this.register([], rawRootModule, false);
  };
  
  ModuleCollection.prototype.get = function get (path) {
    return path.reduce(function (module, key) {
      return module.getChild(key)
    }, this.root)
  };
  
  ModuleCollection.prototype.getNamespace = function getNamespace (path) {
    var module = this.root;
    return path.reduce(function (namespace, key) {
      module = module.getChild(key);
      return namespace + (module.namespaced ? key + '/' : '')
    }, '')
  };
  
  ModuleCollection.prototype.update = function update$1 (rawRootModule) {
    update([], this.root, rawRootModule);
  };
  
  ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
      var this$1 = this;
      if ( runtime === void 0 ) runtime = true;
  
    if (true) {
      assertRawModule(path, rawModule);
    }
  
    var newModule = new Module(rawModule, runtime);
    if (path.length === 0) {
      this.root = newModule;
    } else {
      var parent = this.get(path.slice(0, -1));
      parent.addChild(path[path.length - 1], newModule);
    }
  
    // register nested modules
    if (rawModule.modules) {
      forEachValue(rawModule.modules, function (rawChildModule, key) {
        this$1.register(path.concat(key), rawChildModule, runtime);
      });
    }
  };
  
  ModuleCollection.prototype.unregister = function unregister (path) {
    var parent = this.get(path.slice(0, -1));
    var key = path[path.length - 1];
    if (!parent.getChild(key).runtime) { return }
  
    parent.removeChild(key);
  };
  
  function update (path, targetModule, newModule) {
    if (true) {
      assertRawModule(path, newModule);
    }
  
    // update target module
    targetModule.update(newModule);
  
    // update nested modules
    if (newModule.modules) {
      for (var key in newModule.modules) {
        if (!targetModule.getChild(key)) {
          if (true) {
            console.warn(
              "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
              'manual reload is needed'
            );
          }
          return
        }
        update(
          path.concat(key),
          targetModule.getChild(key),
          newModule.modules[key]
        );
      }
    }
  }
  
  var functionAssert = {
    assert: function (value) { return typeof value === 'function'; },
    expected: 'function'
  };
  
  var objectAssert = {
    assert: function (value) { return typeof value === 'function' ||
      (typeof value === 'object' && typeof value.handler === 'function'); },
    expected: 'function or object with "handler" function'
  };
  
  var assertTypes = {
    getters: functionAssert,
    mutations: functionAssert,
    actions: objectAssert
  };
  
  function assertRawModule (path, rawModule) {
    Object.keys(assertTypes).forEach(function (key) {
      if (!rawModule[key]) { return }
  
      var assertOptions = assertTypes[key];
  
      forEachValue(rawModule[key], function (value, type) {
        assert(
          assertOptions.assert(value),
          makeAssertionMessage(path, key, type, value, assertOptions.expected)
        );
      });
    });
  }
  
  function makeAssertionMessage (path, key, type, value, expected) {
    var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
    if (path.length > 0) {
      buf += " in module \"" + (path.join('.')) + "\"";
    }
    buf += " is " + (JSON.stringify(value)) + ".";
    return buf
  }
  
  var Vue; // bind on install
  
  var Store = function Store (options) {
    var this$1 = this;
    if ( options === void 0 ) options = {};
  
    // Auto install if it is not done yet and `window` has `Vue`.
    // To allow users to avoid auto-installation in some cases,
    // this code should be placed here. See #731
    if (!Vue && typeof window !== 'undefined' && window.Vue) {
      install(window.Vue);
    }
  
    if (true) {
      assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
      assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
      assert(this instanceof Store, "Store must be called with the new operator.");
    }
  
    var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
    var strict = options.strict; if ( strict === void 0 ) strict = false;
  
    var state = options.state; if ( state === void 0 ) state = {};
    if (typeof state === 'function') {
      state = state() || {};
    }
  
    // store internal state
    this._committing = false;
    this._actions = Object.create(null);
    this._actionSubscribers = [];
    this._mutations = Object.create(null);
    this._wrappedGetters = Object.create(null);
    this._modules = new ModuleCollection(options);
    this._modulesNamespaceMap = Object.create(null);
    this._subscribers = [];
    this._watcherVM = new Vue();
  
    // bind commit and dispatch to self
    var store = this;
    var ref = this;
    var dispatch = ref.dispatch;
    var commit = ref.commit;
    this.dispatch = function boundDispatch (type, payload) {
      return dispatch.call(store, type, payload)
    };
    this.commit = function boundCommit (type, payload, options) {
      return commit.call(store, type, payload, options)
    };
  
    // strict mode
    this.strict = strict;
  
    // init root module.
    // this also recursively registers all sub-modules
    // and collects all module getters inside this._wrappedGetters
    installModule(this, state, [], this._modules.root);
  
    // initialize the store vm, which is responsible for the reactivity
    // (also registers _wrappedGetters as computed properties)
    resetStoreVM(this, state);
  
    // apply plugins
    plugins.forEach(function (plugin) { return plugin(this$1); });
  
    if (Vue.config.devtools) {
      devtoolPlugin(this);
    }
  };
  
  var prototypeAccessors = { state: { configurable: true } };
  
  prototypeAccessors.state.get = function () {
    return this._vm._data.$$state
  };
  
  prototypeAccessors.state.set = function (v) {
    if (true) {
      assert(false, "Use store.replaceState() to explicit replace store state.");
    }
  };
  
  Store.prototype.commit = function commit (_type, _payload, _options) {
      var this$1 = this;
  
    // check object-style commit
    var ref = unifyObjectStyle(_type, _payload, _options);
      var type = ref.type;
      var payload = ref.payload;
      var options = ref.options;
  
    var mutation = { type: type, payload: payload };
    var entry = this._mutations[type];
    if (!entry) {
      if (true) {
        console.error(("[vuex] unknown mutation type: " + type));
      }
      return
    }
    this._withCommit(function () {
      entry.forEach(function commitIterator (handler) {
        handler(payload);
      });
    });
    this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });
  
    if (
       true &&
      options && options.silent
    ) {
      console.warn(
        "[vuex] mutation type: " + type + ". Silent option has been removed. " +
        'Use the filter functionality in the vue-devtools'
      );
    }
  };
  
  Store.prototype.dispatch = function dispatch (_type, _payload) {
      var this$1 = this;
  
    // check object-style dispatch
    var ref = unifyObjectStyle(_type, _payload);
      var type = ref.type;
      var payload = ref.payload;
  
    var action = { type: type, payload: payload };
    var entry = this._actions[type];
    if (!entry) {
      if (true) {
        console.error(("[vuex] unknown action type: " + type));
      }
      return
    }
  
    this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); });
  
    return entry.length > 1
      ? Promise.all(entry.map(function (handler) { return handler(payload); }))
      : entry[0](payload)
  };
  
  Store.prototype.subscribe = function subscribe (fn) {
    return genericSubscribe(fn, this._subscribers)
  };
  
  Store.prototype.subscribeAction = function subscribeAction (fn) {
    return genericSubscribe(fn, this._actionSubscribers)
  };
  
  Store.prototype.watch = function watch (getter, cb, options) {
      var this$1 = this;
  
    if (true) {
      assert(typeof getter === 'function', "store.watch only accepts a function.");
    }
    return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
  };
  
  Store.prototype.replaceState = function replaceState (state) {
      var this$1 = this;
  
    this._withCommit(function () {
      this$1._vm._data.$$state = state;
    });
  };
  
  Store.prototype.registerModule = function registerModule (path, rawModule, options) {
      if ( options === void 0 ) options = {};
  
    if (typeof path === 'string') { path = [path]; }
  
    if (true) {
      assert(Array.isArray(path), "module path must be a string or an Array.");
      assert(path.length > 0, 'cannot register the root module by using registerModule.');
    }
  
    this._modules.register(path, rawModule);
    installModule(this, this.state, path, this._modules.get(path), options.preserveState);
    // reset store to update getters...
    resetStoreVM(this, this.state);
  };
  
  Store.prototype.unregisterModule = function unregisterModule (path) {
      var this$1 = this;
  
    if (typeof path === 'string') { path = [path]; }
  
    if (true) {
      assert(Array.isArray(path), "module path must be a string or an Array.");
    }
  
    this._modules.unregister(path);
    this._withCommit(function () {
      var parentState = getNestedState(this$1.state, path.slice(0, -1));
      Vue.delete(parentState, path[path.length - 1]);
    });
    resetStore(this);
  };
  
  Store.prototype.hotUpdate = function hotUpdate (newOptions) {
    this._modules.update(newOptions);
    resetStore(this, true);
  };
  
  Store.prototype._withCommit = function _withCommit (fn) {
    var committing = this._committing;
    this._committing = true;
    fn();
    this._committing = committing;
  };
  
  Object.defineProperties( Store.prototype, prototypeAccessors );
  
  function genericSubscribe (fn, subs) {
    if (subs.indexOf(fn) < 0) {
      subs.push(fn);
    }
    return function () {
      var i = subs.indexOf(fn);
      if (i > -1) {
        subs.splice(i, 1);
      }
    }
  }
  
  function resetStore (store, hot) {
    store._actions = Object.create(null);
    store._mutations = Object.create(null);
    store._wrappedGetters = Object.create(null);
    store._modulesNamespaceMap = Object.create(null);
    var state = store.state;
    // init all modules
    installModule(store, state, [], store._modules.root, true);
    // reset vm
    resetStoreVM(store, state, hot);
  }
  
  function resetStoreVM (store, state, hot) {
    var oldVm = store._vm;
  
    // bind store public getters
    store.getters = {};
    var wrappedGetters = store._wrappedGetters;
    var computed = {};
    forEachValue(wrappedGetters, function (fn, key) {
      // use computed to leverage its lazy-caching mechanism
      computed[key] = function () { return fn(store); };
      Object.defineProperty(store.getters, key, {
        get: function () { return store._vm[key]; },
        enumerable: true // for local getters
      });
    });
  
    // use a Vue instance to store the state tree
    // suppress warnings just in case the user has added
    // some funky global mixins
    var silent = Vue.config.silent;
    Vue.config.silent = true;
    store._vm = new Vue({
      data: {
        $$state: state
      },
      computed: computed
    });
    Vue.config.silent = silent;
  
    // enable strict mode for new vm
    if (store.strict) {
      enableStrictMode(store);
    }
  
    if (oldVm) {
      if (hot) {
        // dispatch changes in all subscribed watchers
        // to force getter re-evaluation for hot reloading.
        store._withCommit(function () {
          oldVm._data.$$state = null;
        });
      }
      Vue.nextTick(function () { return oldVm.$destroy(); });
    }
  }
  
  function installModule (store, rootState, path, module, hot) {
    var isRoot = !path.length;
    var namespace = store._modules.getNamespace(path);
  
    // register in namespace map
    if (module.namespaced) {
      store._modulesNamespaceMap[namespace] = module;
    }
  
    // set state
    if (!isRoot && !hot) {
      var parentState = getNestedState(rootState, path.slice(0, -1));
      var moduleName = path[path.length - 1];
      store._withCommit(function () {
        Vue.set(parentState, moduleName, module.state);
      });
    }
  
    var local = module.context = makeLocalContext(store, namespace, path);
  
    module.forEachMutation(function (mutation, key) {
      var namespacedType = namespace + key;
      registerMutation(store, namespacedType, mutation, local);
    });
  
    module.forEachAction(function (action, key) {
      var type = action.root ? key : namespace + key;
      var handler = action.handler || action;
      registerAction(store, type, handler, local);
    });
  
    module.forEachGetter(function (getter, key) {
      var namespacedType = namespace + key;
      registerGetter(store, namespacedType, getter, local);
    });
  
    module.forEachChild(function (child, key) {
      installModule(store, rootState, path.concat(key), child, hot);
    });
  }
  
  /**
   * make localized dispatch, commit, getters and state
   * if there is no namespace, just use root ones
   */
  function makeLocalContext (store, namespace, path) {
    var noNamespace = namespace === '';
  
    var local = {
      dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
        var args = unifyObjectStyle(_type, _payload, _options);
        var payload = args.payload;
        var options = args.options;
        var type = args.type;
  
        if (!options || !options.root) {
          type = namespace + type;
          if ( true && !store._actions[type]) {
            console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
            return
          }
        }
  
        return store.dispatch(type, payload)
      },
  
      commit: noNamespace ? store.commit : function (_type, _payload, _options) {
        var args = unifyObjectStyle(_type, _payload, _options);
        var payload = args.payload;
        var options = args.options;
        var type = args.type;
  
        if (!options || !options.root) {
          type = namespace + type;
          if ( true && !store._mutations[type]) {
            console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
            return
          }
        }
  
        store.commit(type, payload, options);
      }
    };
  
    // getters and state object must be gotten lazily
    // because they will be changed by vm update
    Object.defineProperties(local, {
      getters: {
        get: noNamespace
          ? function () { return store.getters; }
          : function () { return makeLocalGetters(store, namespace); }
      },
      state: {
        get: function () { return getNestedState(store.state, path); }
      }
    });
  
    return local
  }
  
  function makeLocalGetters (store, namespace) {
    var gettersProxy = {};
  
    var splitPos = namespace.length;
    Object.keys(store.getters).forEach(function (type) {
      // skip if the target getter is not match this namespace
      if (type.slice(0, splitPos) !== namespace) { return }
  
      // extract local getter type
      var localType = type.slice(splitPos);
  
      // Add a port to the getters proxy.
      // Define as getter property because
      // we do not want to evaluate the getters in this time.
      Object.defineProperty(gettersProxy, localType, {
        get: function () { return store.getters[type]; },
        enumerable: true
      });
    });
  
    return gettersProxy
  }
  
  function registerMutation (store, type, handler, local) {
    var entry = store._mutations[type] || (store._mutations[type] = []);
    entry.push(function wrappedMutationHandler (payload) {
      handler.call(store, local.state, payload);
    });
  }
  
  function registerAction (store, type, handler, local) {
    var entry = store._actions[type] || (store._actions[type] = []);
    entry.push(function wrappedActionHandler (payload, cb) {
      var res = handler.call(store, {
        dispatch: local.dispatch,
        commit: local.commit,
        getters: local.getters,
        state: local.state,
        rootGetters: store.getters,
        rootState: store.state
      }, payload, cb);
      if (!isPromise(res)) {
        res = Promise.resolve(res);
      }
      if (store._devtoolHook) {
        return res.catch(function (err) {
          store._devtoolHook.emit('vuex:error', err);
          throw err
        })
      } else {
        return res
      }
    });
  }
  
  function registerGetter (store, type, rawGetter, local) {
    if (store._wrappedGetters[type]) {
      if (true) {
        console.error(("[vuex] duplicate getter key: " + type));
      }
      return
    }
    store._wrappedGetters[type] = function wrappedGetter (store) {
      return rawGetter(
        local.state, // local state
        local.getters, // local getters
        store.state, // root state
        store.getters // root getters
      )
    };
  }
  
  function enableStrictMode (store) {
    store._vm.$watch(function () { return this._data.$$state }, function () {
      if (true) {
        assert(store._committing, "Do not mutate vuex store state outside mutation handlers.");
      }
    }, { deep: true, sync: true });
  }
  
  function getNestedState (state, path) {
    return path.length
      ? path.reduce(function (state, key) { return state[key]; }, state)
      : state
  }
  
  function unifyObjectStyle (type, payload, options) {
    if (isObject(type) && type.type) {
      options = payload;
      payload = type;
      type = type.type;
    }
  
    if (true) {
      assert(typeof type === 'string', ("Expects string as the type, but found " + (typeof type) + "."));
    }
  
    return { type: type, payload: payload, options: options }
  }
  
  function install (_Vue) {
    if (Vue && _Vue === Vue) {
      if (true) {
        console.error(
          '[vuex] already installed. Vue.use(Vuex) should be called only once.'
        );
      }
      return
    }
    Vue = _Vue;
    applyMixin(Vue);
  }
  
  var mapState = normalizeNamespace(function (namespace, states) {
    var res = {};
    normalizeMap(states).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;
  
      res[key] = function mappedState () {
        var state = this.$store.state;
        var getters = this.$store.getters;
        if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapState', namespace);
          if (!module) {
            return
          }
          state = module.context.state;
          getters = module.context.getters;
        }
        return typeof val === 'function'
          ? val.call(this, state, getters)
          : state[val]
      };
      // mark vuex getter for devtools
      res[key].vuex = true;
    });
    return res
  });
  
  var mapMutations = normalizeNamespace(function (namespace, mutations) {
    var res = {};
    normalizeMap(mutations).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;
  
      res[key] = function mappedMutation () {
        var args = [], len = arguments.length;
        while ( len-- ) args[ len ] = arguments[ len ];
  
        var commit = this.$store.commit;
        if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
          if (!module) {
            return
          }
          commit = module.context.commit;
        }
        return typeof val === 'function'
          ? val.apply(this, [commit].concat(args))
          : commit.apply(this.$store, [val].concat(args))
      };
    });
    return res
  });
  
  var mapGetters = normalizeNamespace(function (namespace, getters) {
    var res = {};
    normalizeMap(getters).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;
  
      val = namespace + val;
      res[key] = function mappedGetter () {
        if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
          return
        }
        if ( true && !(val in this.$store.getters)) {
          console.error(("[vuex] unknown getter: " + val));
          return
        }
        return this.$store.getters[val]
      };
      // mark vuex getter for devtools
      res[key].vuex = true;
    });
    return res
  });
  
  var mapActions = normalizeNamespace(function (namespace, actions) {
    var res = {};
    normalizeMap(actions).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;
  
      res[key] = function mappedAction () {
        var args = [], len = arguments.length;
        while ( len-- ) args[ len ] = arguments[ len ];
  
        var dispatch = this.$store.dispatch;
        if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
          if (!module) {
            return
          }
          dispatch = module.context.dispatch;
        }
        return typeof val === 'function'
          ? val.apply(this, [dispatch].concat(args))
          : dispatch.apply(this.$store, [val].concat(args))
      };
    });
    return res
  });
  
  var createNamespacedHelpers = function (namespace) { return ({
    mapState: mapState.bind(null, namespace),
    mapGetters: mapGetters.bind(null, namespace),
    mapMutations: mapMutations.bind(null, namespace),
    mapActions: mapActions.bind(null, namespace)
  }); };
  
  function normalizeMap (map) {
    return Array.isArray(map)
      ? map.map(function (key) { return ({ key: key, val: key }); })
      : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
  }
  
  function normalizeNamespace (fn) {
    return function (namespace, map) {
      if (typeof namespace !== 'string') {
        map = namespace;
        namespace = '';
      } else if (namespace.charAt(namespace.length - 1) !== '/') {
        namespace += '/';
      }
      return fn(namespace, map)
    }
  }
  
  function getModuleByNamespace (store, helper, namespace) {
    var module = store._modulesNamespaceMap[namespace];
    if ( true && !module) {
      console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
    }
    return module
  }
  
  var index_esm = {
    Store: Store,
    install: install,
    version: '3.0.1',
    mapState: mapState,
    mapMutations: mapMutations,
    mapGetters: mapGetters,
    mapActions: mapActions,
    createNamespacedHelpers: createNamespacedHelpers
  };
  
  
  /* harmony default export */ __webpack_exports__["default"] = (index_esm);
  
  
  /***/ }),
  
  /***/ 2:
  /*!******************************************************************************************!*\
    !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***!
    \******************************************************************************************/
  /*! exports provided: default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* WEBPACK VAR INJECTION */(function(global) {/*!
   * Vue.js v2.6.10
   * (c) 2014-2019 Evan You
   * Released under the MIT License.
   */
  /*  */
  
  var emptyObject = Object.freeze({});
  
  // These helpers produce better VM code in JS engines due to their
  // explicitness and function inlining.
  function isUndef (v) {
    return v === undefined || v === null
  }
  
  function isDef (v) {
    return v !== undefined && v !== null
  }
  
  function isTrue (v) {
    return v === true
  }
  
  function isFalse (v) {
    return v === false
  }
  
  /**
   * Check if value is primitive.
   */
  function isPrimitive (value) {
    return (
      typeof value === 'string' ||
      typeof value === 'number' ||
      // $flow-disable-line
      typeof value === 'symbol' ||
      typeof value === 'boolean'
    )
  }
  
  /**
   * Quick object check - this is primarily used to tell
   * Objects from primitive values when we know the value
   * is a JSON-compliant type.
   */
  function isObject (obj) {
    return obj !== null && typeof obj === 'object'
  }
  
  /**
   * Get the raw type string of a value, e.g., [object Object].
   */
  var _toString = Object.prototype.toString;
  
  function toRawType (value) {
    return _toString.call(value).slice(8, -1)
  }
  
  /**
   * Strict object type check. Only returns true
   * for plain JavaScript objects.
   */
  function isPlainObject (obj) {
    return _toString.call(obj) === '[object Object]'
  }
  
  function isRegExp (v) {
    return _toString.call(v) === '[object RegExp]'
  }
  
  /**
   * Check if val is a valid array index.
   */
  function isValidArrayIndex (val) {
    var n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val)
  }
  
  function isPromise (val) {
    return (
      isDef(val) &&
      typeof val.then === 'function' &&
      typeof val.catch === 'function'
    )
  }
  
  /**
   * Convert a value to a string that is actually rendered.
   */
  function toString (val) {
    return val == null
      ? ''
      : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
        ? JSON.stringify(val, null, 2)
        : String(val)
  }
  
  /**
   * Convert an input value to a number for persistence.
   * If the conversion fails, return original string.
   */
  function toNumber (val) {
    var n = parseFloat(val);
    return isNaN(n) ? val : n
  }
  
  /**
   * Make a map and return a function for checking if a key
   * is in that map.
   */
  function makeMap (
    str,
    expectsLowerCase
  ) {
    var map = Object.create(null);
    var list = str.split(',');
    for (var i = 0; i < list.length; i++) {
      map[list[i]] = true;
    }
    return expectsLowerCase
      ? function (val) { return map[val.toLowerCase()]; }
      : function (val) { return map[val]; }
  }
  
  /**
   * Check if a tag is a built-in tag.
   */
  var isBuiltInTag = makeMap('slot,component', true);
  
  /**
   * Check if an attribute is a reserved attribute.
   */
  var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
  
  /**
   * Remove an item from an array.
   */
  function remove (arr, item) {
    if (arr.length) {
      var index = arr.indexOf(item);
      if (index > -1) {
        return arr.splice(index, 1)
      }
    }
  }
  
  /**
   * Check whether an object has the property.
   */
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  function hasOwn (obj, key) {
    return hasOwnProperty.call(obj, key)
  }
  
  /**
   * Create a cached version of a pure function.
   */
  function cached (fn) {
    var cache = Object.create(null);
    return (function cachedFn (str) {
      var hit = cache[str];
      return hit || (cache[str] = fn(str))
    })
  }
  
  /**
   * Camelize a hyphen-delimited string.
   */
  var camelizeRE = /-(\w)/g;
  var camelize = cached(function (str) {
    return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
  });
  
  /**
   * Capitalize a string.
   */
  var capitalize = cached(function (str) {
    return str.charAt(0).toUpperCase() + str.slice(1)
  });
  
  /**
   * Hyphenate a camelCase string.
   */
  var hyphenateRE = /\B([A-Z])/g;
  var hyphenate = cached(function (str) {
    return str.replace(hyphenateRE, '-$1').toLowerCase()
  });
  
  /**
   * Simple bind polyfill for environments that do not support it,
   * e.g., PhantomJS 1.x. Technically, we don't need this anymore
   * since native bind is now performant enough in most browsers.
   * But removing it would mean breaking code that was able to run in
   * PhantomJS 1.x, so this must be kept for backward compatibility.
   */
  
  /* istanbul ignore next */
  function polyfillBind (fn, ctx) {
    function boundFn (a) {
      var l = arguments.length;
      return l
        ? l > 1
          ? fn.apply(ctx, arguments)
          : fn.call(ctx, a)
        : fn.call(ctx)
    }
  
    boundFn._length = fn.length;
    return boundFn
  }
  
  function nativeBind (fn, ctx) {
    return fn.bind(ctx)
  }
  
  var bind = Function.prototype.bind
    ? nativeBind
    : polyfillBind;
  
  /**
   * Convert an Array-like object to a real Array.
   */
  function toArray (list, start) {
    start = start || 0;
    var i = list.length - start;
    var ret = new Array(i);
    while (i--) {
      ret[i] = list[i + start];
    }
    return ret
  }
  
  /**
   * Mix properties into target object.
   */
  function extend (to, _from) {
    for (var key in _from) {
      to[key] = _from[key];
    }
    return to
  }
  
  /**
   * Merge an Array of Objects into a single Object.
   */
  function toObject (arr) {
    var res = {};
    for (var i = 0; i < arr.length; i++) {
      if (arr[i]) {
        extend(res, arr[i]);
      }
    }
    return res
  }
  
  /* eslint-disable no-unused-vars */
  
  /**
   * Perform no operation.
   * Stubbing args to make Flow happy without leaving useless transpiled code
   * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
   */
  function noop (a, b, c) {}
  
  /**
   * Always return false.
   */
  var no = function (a, b, c) { return false; };
  
  /* eslint-enable no-unused-vars */
  
  /**
   * Return the same value.
   */
  var identity = function (_) { return _; };
  
  /**
   * Check if two values are loosely equal - that is,
   * if they are plain objects, do they have the same shape?
   */
  function looseEqual (a, b) {
    if (a === b) { return true }
    var isObjectA = isObject(a);
    var isObjectB = isObject(b);
    if (isObjectA && isObjectB) {
      try {
        var isArrayA = Array.isArray(a);
        var isArrayB = Array.isArray(b);
        if (isArrayA && isArrayB) {
          return a.length === b.length && a.every(function (e, i) {
            return looseEqual(e, b[i])
          })
        } else if (a instanceof Date && b instanceof Date) {
          return a.getTime() === b.getTime()
        } else if (!isArrayA && !isArrayB) {
          var keysA = Object.keys(a);
          var keysB = Object.keys(b);
          return keysA.length === keysB.length && keysA.every(function (key) {
            return looseEqual(a[key], b[key])
          })
        } else {
          /* istanbul ignore next */
          return false
        }
      } catch (e) {
        /* istanbul ignore next */
        return false
      }
    } else if (!isObjectA && !isObjectB) {
      return String(a) === String(b)
    } else {
      return false
    }
  }
  
  /**
   * Return the first index at which a loosely equal value can be
   * found in the array (if value is a plain object, the array must
   * contain an object of the same shape), or -1 if it is not present.
   */
  function looseIndexOf (arr, val) {
    for (var i = 0; i < arr.length; i++) {
      if (looseEqual(arr[i], val)) { return i }
    }
    return -1
  }
  
  /**
   * Ensure a function is called only once.
   */
  function once (fn) {
    var called = false;
    return function () {
      if (!called) {
        called = true;
        fn.apply(this, arguments);
      }
    }
  }
  
  var ASSET_TYPES = [
    'component',
    'directive',
    'filter'
  ];
  
  var LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch'
  ];
  
  /*  */
  
  
  
  var config = ({
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
  
    /**
     * Whether to suppress warnings.
     */
    silent: false,
  
    /**
     * Show production mode tip message on boot?
     */
    productionTip: "development" !== 'production',
  
    /**
     * Whether to enable devtools
     */
    devtools: "development" !== 'production',
  
    /**
     * Whether to record perf
     */
    performance: false,
  
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
  
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
  
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
  
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
  
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
  
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
  
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
  
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
  
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
  
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
  
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
  
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
  });
  
  /*  */
  
  /**
   * unicode letters used for parsing html tags, component names and property paths.
   * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
   * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
   */
  var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
  
  /**
   * Check if a string starts with $ or _
   */
  function isReserved (str) {
    var c = (str + '').charCodeAt(0);
    return c === 0x24 || c === 0x5F
  }
  
  /**
   * Define a property.
   */
  function def (obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
      value: val,
      enumerable: !!enumerable,
      writable: true,
      configurable: true
    });
  }
  
  /**
   * Parse simple path.
   */
  var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]"));
  function parsePath (path) {
    if (bailRE.test(path)) {
      return
    }
    var segments = path.split('.');
    return function (obj) {
      for (var i = 0; i < segments.length; i++) {
        if (!obj) { return }
        obj = obj[segments[i]];
      }
      return obj
    }
  }
  
  /*  */
  
  // can we use __proto__?
  var hasProto = '__proto__' in {};
  
  // Browser environment sniffing
  var inBrowser = typeof window !== 'undefined';
  var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
  var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
  var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  var isIE = UA && /msie|trident/.test(UA);
  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  var isEdge = UA && UA.indexOf('edge/') > 0;
  var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
  var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
  var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
  var isPhantomJS = UA && /phantomjs/.test(UA);
  var isFF = UA && UA.match(/firefox\/(\d+)/);
  
  // Firefox has a "watch" function on Object.prototype...
  var nativeWatch = ({}).watch;
  if (inBrowser) {
    try {
      var opts = {};
      Object.defineProperty(opts, 'passive', ({
        get: function get () {
        }
      })); // https://github.com/facebook/flow/issues/285
      window.addEventListener('test-passive', null, opts);
    } catch (e) {}
  }
  
  // this needs to be lazy-evaled because vue may be required before
  // vue-server-renderer can set VUE_ENV
  var _isServer;
  var isServerRendering = function () {
    if (_isServer === undefined) {
      /* istanbul ignore if */
      if (!inBrowser && !inWeex && typeof global !== 'undefined') {
        // detect presence of vue-server-renderer and avoid
        // Webpack shimming the process
        _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';
      } else {
        _isServer = false;
      }
    }
    return _isServer
  };
  
  // detect devtools
  var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  
  /* istanbul ignore next */
  function isNative (Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
  }
  
  var hasSymbol =
    typeof Symbol !== 'undefined' && isNative(Symbol) &&
    typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
  
  var _Set;
  /* istanbul ignore if */ // $flow-disable-line
  if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
  } else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = /*@__PURE__*/(function () {
      function Set () {
        this.set = Object.create(null);
      }
      Set.prototype.has = function has (key) {
        return this.set[key] === true
      };
      Set.prototype.add = function add (key) {
        this.set[key] = true;
      };
      Set.prototype.clear = function clear () {
        this.set = Object.create(null);
      };
  
      return Set;
    }());
  }
  
  /*  */
  
  var warn = noop;
  var tip = noop;
  var generateComponentTrace = (noop); // work around flow check
  var formatComponentName = (noop);
  
  if (true) {
    var hasConsole = typeof console !== 'undefined';
    var classifyRE = /(?:^|[-_])(\w)/g;
    var classify = function (str) { return str
      .replace(classifyRE, function (c) { return c.toUpperCase(); })
      .replace(/[-_]/g, ''); };
  
    warn = function (msg, vm) {
      var trace = vm ? generateComponentTrace(vm) : '';
  
      if (config.warnHandler) {
        config.warnHandler.call(null, msg, vm, trace);
      } else if (hasConsole && (!config.silent)) {
        console.error(("[Vue warn]: " + msg + trace));
      }
    };
  
    tip = function (msg, vm) {
      if (hasConsole && (!config.silent)) {
        console.warn("[Vue tip]: " + msg + (
          vm ? generateComponentTrace(vm) : ''
        ));
      }
    };
  
    formatComponentName = function (vm, includeFile) {
      {
        if(vm.$scope && vm.$scope.is){
          return vm.$scope.is
        }
      }
      if (vm.$root === vm) {
        return '<Root>'
      }
      var options = typeof vm === 'function' && vm.cid != null
        ? vm.options
        : vm._isVue
          ? vm.$options || vm.constructor.options
          : vm;
      var name = options.name || options._componentTag;
      var file = options.__file;
      if (!name && file) {
        var match = file.match(/([^/\\]+)\.vue$/);
        name = match && match[1];
      }
  
      return (
        (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
        (file && includeFile !== false ? (" at " + file) : '')
      )
    };
  
    var repeat = function (str, n) {
      var res = '';
      while (n) {
        if (n % 2 === 1) { res += str; }
        if (n > 1) { str += str; }
        n >>= 1;
      }
      return res
    };
  
    generateComponentTrace = function (vm) {
      if (vm._isVue && vm.$parent) {
        var tree = [];
        var currentRecursiveSequence = 0;
        while (vm) {
          if (tree.length > 0) {
            var last = tree[tree.length - 1];
            if (last.constructor === vm.constructor) {
              currentRecursiveSequence++;
              vm = vm.$parent;
              continue
            } else if (currentRecursiveSequence > 0) {
              tree[tree.length - 1] = [last, currentRecursiveSequence];
              currentRecursiveSequence = 0;
            }
          }
          tree.push(vm);
          vm = vm.$parent;
        }
        return '\n\nfound in\n\n' + tree
          .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
              ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
              : formatComponentName(vm))); })
          .join('\n')
      } else {
        return ("\n\n(found in " + (formatComponentName(vm)) + ")")
      }
    };
  }
  
  /*  */
  
  var uid = 0;
  
  /**
   * A dep is an observable that can have multiple
   * directives subscribing to it.
   */
  var Dep = function Dep () {
    this.id = uid++;
    this.subs = [];
  };
  
  Dep.prototype.addSub = function addSub (sub) {
    this.subs.push(sub);
  };
  
  Dep.prototype.removeSub = function removeSub (sub) {
    remove(this.subs, sub);
  };
  
  Dep.prototype.depend = function depend () {
    if (Dep.SharedObject.target) {
      Dep.SharedObject.target.addDep(this);
    }
  };
  
  Dep.prototype.notify = function notify () {
    // stabilize the subscriber list first
    var subs = this.subs.slice();
    if ( true && !config.async) {
      // subs aren't sorted in scheduler if not running async
      // we need to sort them now to make sure they fire in correct
      // order
      subs.sort(function (a, b) { return a.id - b.id; });
    }
    for (var i = 0, l = subs.length; i < l; i++) {
      subs[i].update();
    }
  };
  
  // The current target watcher being evaluated.
  // This is globally unique because only one watcher
  // can be evaluated at a time.
  // fixed by xxxxxx (nvue shared vuex)
  /* eslint-disable no-undef */
  Dep.SharedObject = typeof SharedObject !== 'undefined' ? SharedObject : {};
  Dep.SharedObject.target = null;
  Dep.SharedObject.targetStack = [];
  
  function pushTarget (target) {
    Dep.SharedObject.targetStack.push(target);
    Dep.SharedObject.target = target;
  }
  
  function popTarget () {
    Dep.SharedObject.targetStack.pop();
    Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];
  }
  
  /*  */
  
  var VNode = function VNode (
    tag,
    data,
    children,
    text,
    elm,
    context,
    componentOptions,
    asyncFactory
  ) {
    this.tag = tag;
    this.data = data;
    this.children = children;
    this.text = text;
    this.elm = elm;
    this.ns = undefined;
    this.context = context;
    this.fnContext = undefined;
    this.fnOptions = undefined;
    this.fnScopeId = undefined;
    this.key = data && data.key;
    this.componentOptions = componentOptions;
    this.componentInstance = undefined;
    this.parent = undefined;
    this.raw = false;
    this.isStatic = false;
    this.isRootInsert = true;
    this.isComment = false;
    this.isCloned = false;
    this.isOnce = false;
    this.asyncFactory = asyncFactory;
    this.asyncMeta = undefined;
    this.isAsyncPlaceholder = false;
  };
  
  var prototypeAccessors = { child: { configurable: true } };
  
  // DEPRECATED: alias for componentInstance for backwards compat.
  /* istanbul ignore next */
  prototypeAccessors.child.get = function () {
    return this.componentInstance
  };
  
  Object.defineProperties( VNode.prototype, prototypeAccessors );
  
  var createEmptyVNode = function (text) {
    if ( text === void 0 ) text = '';
  
    var node = new VNode();
    node.text = text;
    node.isComment = true;
    return node
  };
  
  function createTextVNode (val) {
    return new VNode(undefined, undefined, undefined, String(val))
  }
  
  // optimized shallow clone
  // used for static nodes and slot nodes because they may be reused across
  // multiple renders, cloning them avoids errors when DOM manipulations rely
  // on their elm reference.
  function cloneVNode (vnode) {
    var cloned = new VNode(
      vnode.tag,
      vnode.data,
      // #7975
      // clone children array to avoid mutating original in case of cloning
      // a child.
      vnode.children && vnode.children.slice(),
      vnode.text,
      vnode.elm,
      vnode.context,
      vnode.componentOptions,
      vnode.asyncFactory
    );
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned
  }
  
  /*
   * not type checking this file because flow doesn't play well with
   * dynamically accessing methods on Array prototype
   */
  
  var arrayProto = Array.prototype;
  var arrayMethods = Object.create(arrayProto);
  
  var methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
  ];
  
  /**
   * Intercept mutating methods and emit events
   */
  methodsToPatch.forEach(function (method) {
    // cache original method
    var original = arrayProto[method];
    def(arrayMethods, method, function mutator () {
      var args = [], len = arguments.length;
      while ( len-- ) args[ len ] = arguments[ len ];
  
      var result = original.apply(this, args);
      var ob = this.__ob__;
      var inserted;
      switch (method) {
        case 'push':
        case 'unshift':
          inserted = args;
          break
        case 'splice':
          inserted = args.slice(2);
          break
      }
      if (inserted) { ob.observeArray(inserted); }
      // notify change
      ob.dep.notify();
      return result
    });
  });
  
  /*  */
  
  var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
  
  /**
   * In some cases we may want to disable observation inside a component's
   * update computation.
   */
  var shouldObserve = true;
  
  function toggleObserving (value) {
    shouldObserve = value;
  }
  
  /**
   * Observer class that is attached to each observed
   * object. Once attached, the observer converts the target
   * object's property keys into getter/setters that
   * collect dependencies and dispatch updates.
   */
  var Observer = function Observer (value) {
    this.value = value;
    this.dep = new Dep();
    this.vmCount = 0;
    def(value, '__ob__', this);
    if (Array.isArray(value)) {
      if (hasProto) {
        {// fixed by xxxxxx 微信小程序使用 plugins 之后，数组方法被直接挂载到了数组对象上，需要执行 copyAugment 逻辑
          if(value.push !== value.__proto__.push){
            copyAugment(value, arrayMethods, arrayKeys);
          } else {
            protoAugment(value, arrayMethods);
          }
        }
      } else {
        copyAugment(value, arrayMethods, arrayKeys);
      }
      this.observeArray(value);
    } else {
      this.walk(value);
    }
  };
  
  /**
   * Walk through all properties and convert them into
   * getter/setters. This method should only be called when
   * value type is Object.
   */
  Observer.prototype.walk = function walk (obj) {
    var keys = Object.keys(obj);
    for (var i = 0; i < keys.length; i++) {
      defineReactive$$1(obj, keys[i]);
    }
  };
  
  /**
   * Observe a list of Array items.
   */
  Observer.prototype.observeArray = function observeArray (items) {
    for (var i = 0, l = items.length; i < l; i++) {
      observe(items[i]);
    }
  };
  
  // helpers
  
  /**
   * Augment a target Object or Array by intercepting
   * the prototype chain using __proto__
   */
  function protoAugment (target, src) {
    /* eslint-disable no-proto */
    target.__proto__ = src;
    /* eslint-enable no-proto */
  }
  
  /**
   * Augment a target Object or Array by defining
   * hidden properties.
   */
  /* istanbul ignore next */
  function copyAugment (target, src, keys) {
    for (var i = 0, l = keys.length; i < l; i++) {
      var key = keys[i];
      def(target, key, src[key]);
    }
  }
  
  /**
   * Attempt to create an observer instance for a value,
   * returns the new observer if successfully observed,
   * or the existing observer if the value already has one.
   */
  function observe (value, asRootData) {
    if (!isObject(value) || value instanceof VNode) {
      return
    }
    var ob;
    if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
      ob = value.__ob__;
    } else if (
      shouldObserve &&
      !isServerRendering() &&
      (Array.isArray(value) || isPlainObject(value)) &&
      Object.isExtensible(value) &&
      !value._isVue
    ) {
      ob = new Observer(value);
    }
    if (asRootData && ob) {
      ob.vmCount++;
    }
    return ob
  }
  
  /**
   * Define a reactive property on an Object.
   */
  function defineReactive$$1 (
    obj,
    key,
    val,
    customSetter,
    shallow
  ) {
    var dep = new Dep();
  
    var property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
      return
    }
  
    // cater for pre-defined getter/setters
    var getter = property && property.get;
    var setter = property && property.set;
    if ((!getter || setter) && arguments.length === 2) {
      val = obj[key];
    }
  
    var childOb = !shallow && observe(val);
    Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactiveGetter () {
        var value = getter ? getter.call(obj) : val;
        if (Dep.SharedObject.target) { // fixed by xxxxxx
          dep.depend();
          if (childOb) {
            childOb.dep.depend();
            if (Array.isArray(value)) {
              dependArray(value);
            }
          }
        }
        return value
      },
      set: function reactiveSetter (newVal) {
        var value = getter ? getter.call(obj) : val;
        /* eslint-disable no-self-compare */
        if (newVal === value || (newVal !== newVal && value !== value)) {
          return
        }
        /* eslint-enable no-self-compare */
        if ( true && customSetter) {
          customSetter();
        }
        // #7981: for accessor properties without setter
        if (getter && !setter) { return }
        if (setter) {
          setter.call(obj, newVal);
        } else {
          val = newVal;
        }
        childOb = !shallow && observe(newVal);
        dep.notify();
      }
    });
  }
  
  /**
   * Set a property on an object. Adds the new property and
   * triggers change notification if the property doesn't
   * already exist.
   */
  function set (target, key, val) {
    if ( true &&
      (isUndef(target) || isPrimitive(target))
    ) {
      warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
    }
    if (Array.isArray(target) && isValidArrayIndex(key)) {
      target.length = Math.max(target.length, key);
      target.splice(key, 1, val);
      return val
    }
    if (key in target && !(key in Object.prototype)) {
      target[key] = val;
      return val
    }
    var ob = (target).__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
       true && warn(
        'Avoid adding reactive properties to a Vue instance or its root $data ' +
        'at runtime - declare it upfront in the data option.'
      );
      return val
    }
    if (!ob) {
      target[key] = val;
      return val
    }
    defineReactive$$1(ob.value, key, val);
    ob.dep.notify();
    return val
  }
  
  /**
   * Delete a property and trigger change if necessary.
   */
  function del (target, key) {
    if ( true &&
      (isUndef(target) || isPrimitive(target))
    ) {
      warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
    }
    if (Array.isArray(target) && isValidArrayIndex(key)) {
      target.splice(key, 1);
      return
    }
    var ob = (target).__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
       true && warn(
        'Avoid deleting properties on a Vue instance or its root $data ' +
        '- just set it to null.'
      );
      return
    }
    if (!hasOwn(target, key)) {
      return
    }
    delete target[key];
    if (!ob) {
      return
    }
    ob.dep.notify();
  }
  
  /**
   * Collect dependencies on array elements when the array is touched, since
   * we cannot intercept array element access like property getters.
   */
  function dependArray (value) {
    for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
      e = value[i];
      e && e.__ob__ && e.__ob__.dep.depend();
      if (Array.isArray(e)) {
        dependArray(e);
      }
    }
  }
  
  /*  */
  
  /**
   * Option overwriting strategies are functions that handle
   * how to merge a parent option value and a child option
   * value into the final value.
   */
  var strats = config.optionMergeStrategies;
  
  /**
   * Options with restrictions
   */
  if (true) {
    strats.el = strats.propsData = function (parent, child, vm, key) {
      if (!vm) {
        warn(
          "option \"" + key + "\" can only be used during instance " +
          'creation with the `new` keyword.'
        );
      }
      return defaultStrat(parent, child)
    };
  }
  
  /**
   * Helper that recursively merges two data objects together.
   */
  function mergeData (to, from) {
    if (!from) { return to }
    var key, toVal, fromVal;
  
    var keys = hasSymbol
      ? Reflect.ownKeys(from)
      : Object.keys(from);
  
    for (var i = 0; i < keys.length; i++) {
      key = keys[i];
      // in case the object is already observed...
      if (key === '__ob__') { continue }
      toVal = to[key];
      fromVal = from[key];
      if (!hasOwn(to, key)) {
        set(to, key, fromVal);
      } else if (
        toVal !== fromVal &&
        isPlainObject(toVal) &&
        isPlainObject(fromVal)
      ) {
        mergeData(toVal, fromVal);
      }
    }
    return to
  }
  
  /**
   * Data
   */
  function mergeDataOrFn (
    parentVal,
    childVal,
    vm
  ) {
    if (!vm) {
      // in a Vue.extend merge, both should be functions
      if (!childVal) {
        return parentVal
      }
      if (!parentVal) {
        return childVal
      }
      // when parentVal & childVal are both present,
      // we need to return a function that returns the
      // merged result of both functions... no need to
      // check if parentVal is a function here because
      // it has to be a function to pass previous merges.
      return function mergedDataFn () {
        return mergeData(
          typeof childVal === 'function' ? childVal.call(this, this) : childVal,
          typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
        )
      }
    } else {
      return function mergedInstanceDataFn () {
        // instance merge
        var instanceData = typeof childVal === 'function'
          ? childVal.call(vm, vm)
          : childVal;
        var defaultData = typeof parentVal === 'function'
          ? parentVal.call(vm, vm)
          : parentVal;
        if (instanceData) {
          return mergeData(instanceData, defaultData)
        } else {
          return defaultData
        }
      }
    }
  }
  
  strats.data = function (
    parentVal,
    childVal,
    vm
  ) {
    if (!vm) {
      if (childVal && typeof childVal !== 'function') {
         true && warn(
          'The "data" option should be a function ' +
          'that returns a per-instance value in component ' +
          'definitions.',
          vm
        );
  
        return parentVal
      }
      return mergeDataOrFn(parentVal, childVal)
    }
  
    return mergeDataOrFn(parentVal, childVal, vm)
  };
  
  /**
   * Hooks and props are merged as arrays.
   */
  function mergeHook (
    parentVal,
    childVal
  ) {
    var res = childVal
      ? parentVal
        ? parentVal.concat(childVal)
        : Array.isArray(childVal)
          ? childVal
          : [childVal]
      : parentVal;
    return res
      ? dedupeHooks(res)
      : res
  }
  
  function dedupeHooks (hooks) {
    var res = [];
    for (var i = 0; i < hooks.length; i++) {
      if (res.indexOf(hooks[i]) === -1) {
        res.push(hooks[i]);
      }
    }
    return res
  }
  
  LIFECYCLE_HOOKS.forEach(function (hook) {
    strats[hook] = mergeHook;
  });
  
  /**
   * Assets
   *
   * When a vm is present (instance creation), we need to do
   * a three-way merge between constructor options, instance
   * options and parent options.
   */
  function mergeAssets (
    parentVal,
    childVal,
    vm,
    key
  ) {
    var res = Object.create(parentVal || null);
    if (childVal) {
       true && assertObjectType(key, childVal, vm);
      return extend(res, childVal)
    } else {
      return res
    }
  }
  
  ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
  });
  
  /**
   * Watchers.
   *
   * Watchers hashes should not overwrite one
   * another, so we merge them as arrays.
   */
  strats.watch = function (
    parentVal,
    childVal,
    vm,
    key
  ) {
    // work around Firefox's Object.prototype.watch...
    if (parentVal === nativeWatch) { parentVal = undefined; }
    if (childVal === nativeWatch) { childVal = undefined; }
    /* istanbul ignore if */
    if (!childVal) { return Object.create(parentVal || null) }
    if (true) {
      assertObjectType(key, childVal, vm);
    }
    if (!parentVal) { return childVal }
    var ret = {};
    extend(ret, parentVal);
    for (var key$1 in childVal) {
      var parent = ret[key$1];
      var child = childVal[key$1];
      if (parent && !Array.isArray(parent)) {
        parent = [parent];
      }
      ret[key$1] = parent
        ? parent.concat(child)
        : Array.isArray(child) ? child : [child];
    }
    return ret
  };
  
  /**
   * Other object hashes.
   */
  strats.props =
  strats.methods =
  strats.inject =
  strats.computed = function (
    parentVal,
    childVal,
    vm,
    key
  ) {
    if (childVal && "development" !== 'production') {
      assertObjectType(key, childVal, vm);
    }
    if (!parentVal) { return childVal }
    var ret = Object.create(null);
    extend(ret, parentVal);
    if (childVal) { extend(ret, childVal); }
    return ret
  };
  strats.provide = mergeDataOrFn;
  
  /**
   * Default strategy.
   */
  var defaultStrat = function (parentVal, childVal) {
    return childVal === undefined
      ? parentVal
      : childVal
  };
  
  /**
   * Validate component names
   */
  function checkComponents (options) {
    for (var key in options.components) {
      validateComponentName(key);
    }
  }
  
  function validateComponentName (name) {
    if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) {
      warn(
        'Invalid component name: "' + name + '". Component names ' +
        'should conform to valid custom element name in html5 specification.'
      );
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
      warn(
        'Do not use built-in or reserved HTML elements as component ' +
        'id: ' + name
      );
    }
  }
  
  /**
   * Ensure all props option syntax are normalized into the
   * Object-based format.
   */
  function normalizeProps (options, vm) {
    var props = options.props;
    if (!props) { return }
    var res = {};
    var i, val, name;
    if (Array.isArray(props)) {
      i = props.length;
      while (i--) {
        val = props[i];
        if (typeof val === 'string') {
          name = camelize(val);
          res[name] = { type: null };
        } else if (true) {
          warn('props must be strings when using array syntax.');
        }
      }
    } else if (isPlainObject(props)) {
      for (var key in props) {
        val = props[key];
        name = camelize(key);
        res[name] = isPlainObject(val)
          ? val
          : { type: val };
      }
    } else if (true) {
      warn(
        "Invalid value for option \"props\": expected an Array or an Object, " +
        "but got " + (toRawType(props)) + ".",
        vm
      );
    }
    options.props = res;
  }
  
  /**
   * Normalize all injections into Object-based format
   */
  function normalizeInject (options, vm) {
    var inject = options.inject;
    if (!inject) { return }
    var normalized = options.inject = {};
    if (Array.isArray(inject)) {
      for (var i = 0; i < inject.length; i++) {
        normalized[inject[i]] = { from: inject[i] };
      }
    } else if (isPlainObject(inject)) {
      for (var key in inject) {
        var val = inject[key];
        normalized[key] = isPlainObject(val)
          ? extend({ from: key }, val)
          : { from: val };
      }
    } else if (true) {
      warn(
        "Invalid value for option \"inject\": expected an Array or an Object, " +
        "but got " + (toRawType(inject)) + ".",
        vm
      );
    }
  }
  
  /**
   * Normalize raw function directives into object format.
   */
  function normalizeDirectives (options) {
    var dirs = options.directives;
    if (dirs) {
      for (var key in dirs) {
        var def$$1 = dirs[key];
        if (typeof def$$1 === 'function') {
          dirs[key] = { bind: def$$1, update: def$$1 };
        }
      }
    }
  }
  
  function assertObjectType (name, value, vm) {
    if (!isPlainObject(value)) {
      warn(
        "Invalid value for option \"" + name + "\": expected an Object, " +
        "but got " + (toRawType(value)) + ".",
        vm
      );
    }
  }
  
  /**
   * Merge two option objects into a new one.
   * Core utility used in both instantiation and inheritance.
   */
  function mergeOptions (
    parent,
    child,
    vm
  ) {
    if (true) {
      checkComponents(child);
    }
  
    if (typeof child === 'function') {
      child = child.options;
    }
  
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives(child);
  
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
      if (child.extends) {
        parent = mergeOptions(parent, child.extends, vm);
      }
      if (child.mixins) {
        for (var i = 0, l = child.mixins.length; i < l; i++) {
          parent = mergeOptions(parent, child.mixins[i], vm);
        }
      }
    }
  
    var options = {};
    var key;
    for (key in parent) {
      mergeField(key);
    }
    for (key in child) {
      if (!hasOwn(parent, key)) {
        mergeField(key);
      }
    }
    function mergeField (key) {
      var strat = strats[key] || defaultStrat;
      options[key] = strat(parent[key], child[key], vm, key);
    }
    return options
  }
  
  /**
   * Resolve an asset.
   * This function is used because child instances need access
   * to assets defined in its ancestor chain.
   */
  function resolveAsset (
    options,
    type,
    id,
    warnMissing
  ) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
      return
    }
    var assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id)) { return assets[id] }
    var camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
    var PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
    // fallback to prototype chain
    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if ( true && warnMissing && !res) {
      warn(
        'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
        options
      );
    }
    return res
  }
  
  /*  */
  
  
  
  function validateProp (
    key,
    propOptions,
    propsData,
    vm
  ) {
    var prop = propOptions[key];
    var absent = !hasOwn(propsData, key);
    var value = propsData[key];
    // boolean casting
    var booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
      if (absent && !hasOwn(prop, 'default')) {
        value = false;
      } else if (value === '' || value === hyphenate(key)) {
        // only cast empty string / same name to boolean if
        // boolean has higher priority
        var stringIndex = getTypeIndex(String, prop.type);
        if (stringIndex < 0 || booleanIndex < stringIndex) {
          value = true;
        }
      }
    }
    // check default value
    if (value === undefined) {
      value = getPropDefaultValue(vm, prop, key);
      // since the default value is a fresh copy,
      // make sure to observe it.
      var prevShouldObserve = shouldObserve;
      toggleObserving(true);
      observe(value);
      toggleObserving(prevShouldObserve);
    }
    if (
      true
    ) {
      assertProp(prop, key, value, vm, absent);
    }
    return value
  }
  
  /**
   * Get the default value of a prop.
   */
  function getPropDefaultValue (vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
      return undefined
    }
    var def = prop.default;
    // warn against non-factory defaults for Object & Array
    if ( true && isObject(def)) {
      warn(
        'Invalid default value for prop "' + key + '": ' +
        'Props with type Object/Array must use a factory function ' +
        'to return the default value.',
        vm
      );
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm && vm.$options.propsData &&
      vm.$options.propsData[key] === undefined &&
      vm._props[key] !== undefined
    ) {
      return vm._props[key]
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return typeof def === 'function' && getType(prop.type) !== 'Function'
      ? def.call(vm)
      : def
  }
  
  /**
   * Assert whether a prop is valid.
   */
  function assertProp (
    prop,
    name,
    value,
    vm,
    absent
  ) {
    if (prop.required && absent) {
      warn(
        'Missing required prop: "' + name + '"',
        vm
      );
      return
    }
    if (value == null && !prop.required) {
      return
    }
    var type = prop.type;
    var valid = !type || type === true;
    var expectedTypes = [];
    if (type) {
      if (!Array.isArray(type)) {
        type = [type];
      }
      for (var i = 0; i < type.length && !valid; i++) {
        var assertedType = assertType(value, type[i]);
        expectedTypes.push(assertedType.expectedType || '');
        valid = assertedType.valid;
      }
    }
  
    if (!valid) {
      warn(
        getInvalidTypeMessage(name, value, expectedTypes),
        vm
      );
      return
    }
    var validator = prop.validator;
    if (validator) {
      if (!validator(value)) {
        warn(
          'Invalid prop: custom validator check failed for prop "' + name + '".',
          vm
        );
      }
    }
  }
  
  var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
  
  function assertType (value, type) {
    var valid;
    var expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
      var t = typeof value;
      valid = t === expectedType.toLowerCase();
      // for primitive wrapper objects
      if (!valid && t === 'object') {
        valid = value instanceof type;
      }
    } else if (expectedType === 'Object') {
      valid = isPlainObject(value);
    } else if (expectedType === 'Array') {
      valid = Array.isArray(value);
    } else {
      valid = value instanceof type;
    }
    return {
      valid: valid,
      expectedType: expectedType
    }
  }
  
  /**
   * Use function string name to check built-in types,
   * because a simple equality check will fail when running
   * across different vms / iframes.
   */
  function getType (fn) {
    var match = fn && fn.toString().match(/^\s*function (\w+)/);
    return match ? match[1] : ''
  }
  
  function isSameType (a, b) {
    return getType(a) === getType(b)
  }
  
  function getTypeIndex (type, expectedTypes) {
    if (!Array.isArray(expectedTypes)) {
      return isSameType(expectedTypes, type) ? 0 : -1
    }
    for (var i = 0, len = expectedTypes.length; i < len; i++) {
      if (isSameType(expectedTypes[i], type)) {
        return i
      }
    }
    return -1
  }
  
  function getInvalidTypeMessage (name, value, expectedTypes) {
    var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
      " Expected " + (expectedTypes.map(capitalize).join(', '));
    var expectedType = expectedTypes[0];
    var receivedType = toRawType(value);
    var expectedValue = styleValue(value, expectedType);
    var receivedValue = styleValue(value, receivedType);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        !isBoolean(expectedType, receivedType)) {
      message += " with value " + expectedValue;
    }
    message += ", got " + receivedType + " ";
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
      message += "with value " + receivedValue + ".";
    }
    return message
  }
  
  function styleValue (value, type) {
    if (type === 'String') {
      return ("\"" + value + "\"")
    } else if (type === 'Number') {
      return ("" + (Number(value)))
    } else {
      return ("" + value)
    }
  }
  
  function isExplicable (value) {
    var explicitTypes = ['string', 'number', 'boolean'];
    return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })
  }
  
  function isBoolean () {
    var args = [], len = arguments.length;
    while ( len-- ) args[ len ] = arguments[ len ];
  
    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
  }
  
  /*  */
  
  function handleError (err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
      if (vm) {
        var cur = vm;
        while ((cur = cur.$parent)) {
          var hooks = cur.$options.errorCaptured;
          if (hooks) {
            for (var i = 0; i < hooks.length; i++) {
              try {
                var capture = hooks[i].call(cur, err, vm, info) === false;
                if (capture) { return }
              } catch (e) {
                globalHandleError(e, cur, 'errorCaptured hook');
              }
            }
          }
        }
      }
      globalHandleError(err, vm, info);
    } finally {
      popTarget();
    }
  }
  
  function invokeWithErrorHandling (
    handler,
    context,
    args,
    vm,
    info
  ) {
    var res;
    try {
      res = args ? handler.apply(context, args) : handler.call(context);
      if (res && !res._isVue && isPromise(res) && !res._handled) {
        res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
        // issue #9511
        // avoid catch triggering multiple times when nested calls
        res._handled = true;
      }
    } catch (e) {
      handleError(e, vm, info);
    }
    return res
  }
  
  function globalHandleError (err, vm, info) {
    if (config.errorHandler) {
      try {
        return config.errorHandler.call(null, err, vm, info)
      } catch (e) {
        // if the user intentionally throws the original error in the handler,
        // do not log it twice
        if (e !== err) {
          logError(e, null, 'config.errorHandler');
        }
      }
    }
    logError(err, vm, info);
  }
  
  function logError (err, vm, info) {
    if (true) {
      warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
    }
    /* istanbul ignore else */
    if ((inBrowser || inWeex) && typeof console !== 'undefined') {
      console.error(err);
    } else {
      throw err
    }
  }
  
  /*  */
  
  var callbacks = [];
  var pending = false;
  
  function flushCallbacks () {
    pending = false;
    var copies = callbacks.slice(0);
    callbacks.length = 0;
    for (var i = 0; i < copies.length; i++) {
      copies[i]();
    }
  }
  
  // Here we have async deferring wrappers using microtasks.
  // In 2.5 we used (macro) tasks (in combination with microtasks).
  // However, it has subtle problems when state is changed right before repaint
  // (e.g. #6813, out-in transitions).
  // Also, using (macro) tasks in event handler would cause some weird behaviors
  // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
  // So we now use microtasks everywhere, again.
  // A major drawback of this tradeoff is that there are some scenarios
  // where microtasks have too high a priority and fire in between supposedly
  // sequential events (e.g. #4521, #6690, which have workarounds)
  // or even between bubbling of the same event (#6566).
  var timerFunc;
  
  // The nextTick behavior leverages the microtask queue, which can be accessed
  // via either native Promise.then or MutationObserver.
  // MutationObserver has wider support, however it is seriously bugged in
  // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  // completely stops working after triggering a few times... so, if native
  // Promise is available, we will use it:
  /* istanbul ignore next, $flow-disable-line */
  if (typeof Promise !== 'undefined' && isNative(Promise)) {
    var p = Promise.resolve();
    timerFunc = function () {
      p.then(flushCallbacks);
      // In problematic UIWebViews, Promise.then doesn't completely break, but
      // it can get stuck in a weird state where callbacks are pushed into the
      // microtask queue but the queue isn't being flushed, until the browser
      // needs to do some other work, e.g. handle a timer. Therefore we can
      // "force" the microtask queue to be flushed by adding an empty timer.
      if (isIOS) { setTimeout(noop); }
    };
  } else if (!isIE && typeof MutationObserver !== 'undefined' && (
    isNative(MutationObserver) ||
    // PhantomJS and iOS 7.x
    MutationObserver.toString() === '[object MutationObserverConstructor]'
  )) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    var counter = 1;
    var observer = new MutationObserver(flushCallbacks);
    var textNode = document.createTextNode(String(counter));
    observer.observe(textNode, {
      characterData: true
    });
    timerFunc = function () {
      counter = (counter + 1) % 2;
      textNode.data = String(counter);
    };
  } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
    // Fallback to setImmediate.
    // Techinically it leverages the (macro) task queue,
    // but it is still a better choice than setTimeout.
    timerFunc = function () {
      setImmediate(flushCallbacks);
    };
  } else {
    // Fallback to setTimeout.
    timerFunc = function () {
      setTimeout(flushCallbacks, 0);
    };
  }
  
  function nextTick (cb, ctx) {
    var _resolve;
    callbacks.push(function () {
      if (cb) {
        try {
          cb.call(ctx);
        } catch (e) {
          handleError(e, ctx, 'nextTick');
        }
      } else if (_resolve) {
        _resolve(ctx);
      }
    });
    if (!pending) {
      pending = true;
      timerFunc();
    }
    // $flow-disable-line
    if (!cb && typeof Promise !== 'undefined') {
      return new Promise(function (resolve) {
        _resolve = resolve;
      })
    }
  }
  
  /*  */
  
  /* not type checking this file because flow doesn't play well with Proxy */
  
  var initProxy;
  
  if (true) {
    var allowedGlobals = makeMap(
      'Infinity,undefined,NaN,isFinite,isNaN,' +
      'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
      'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
      'require' // for Webpack/Browserify
    );
  
    var warnNonPresent = function (target, key) {
      warn(
        "Property or method \"" + key + "\" is not defined on the instance but " +
        'referenced during render. Make sure that this property is reactive, ' +
        'either in the data option, or for class-based components, by ' +
        'initializing the property. ' +
        'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
        target
      );
    };
  
    var warnReservedPrefix = function (target, key) {
      warn(
        "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
        'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
        'prevent conflicts with Vue internals' +
        'See: https://vuejs.org/v2/api/#data',
        target
      );
    };
  
    var hasProxy =
      typeof Proxy !== 'undefined' && isNative(Proxy);
  
    if (hasProxy) {
      var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
      config.keyCodes = new Proxy(config.keyCodes, {
        set: function set (target, key, value) {
          if (isBuiltInModifier(key)) {
            warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
            return false
          } else {
            target[key] = value;
            return true
          }
        }
      });
    }
  
    var hasHandler = {
      has: function has (target, key) {
        var has = key in target;
        var isAllowed = allowedGlobals(key) ||
          (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
        if (!has && !isAllowed) {
          if (key in target.$data) { warnReservedPrefix(target, key); }
          else { warnNonPresent(target, key); }
        }
        return has || !isAllowed
      }
    };
  
    var getHandler = {
      get: function get (target, key) {
        if (typeof key === 'string' && !(key in target)) {
          if (key in target.$data) { warnReservedPrefix(target, key); }
          else { warnNonPresent(target, key); }
        }
        return target[key]
      }
    };
  
    initProxy = function initProxy (vm) {
      if (hasProxy) {
        // determine which proxy handler to use
        var options = vm.$options;
        var handlers = options.render && options.render._withStripped
          ? getHandler
          : hasHandler;
        vm._renderProxy = new Proxy(vm, handlers);
      } else {
        vm._renderProxy = vm;
      }
    };
  }
  
  /*  */
  
  var seenObjects = new _Set();
  
  /**
   * Recursively traverse an object to evoke all converted
   * getters, so that every nested property inside the object
   * is collected as a "deep" dependency.
   */
  function traverse (val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
  }
  
  function _traverse (val, seen) {
    var i, keys;
    var isA = Array.isArray(val);
    if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
      return
    }
    if (val.__ob__) {
      var depId = val.__ob__.dep.id;
      if (seen.has(depId)) {
        return
      }
      seen.add(depId);
    }
    if (isA) {
      i = val.length;
      while (i--) { _traverse(val[i], seen); }
    } else {
      keys = Object.keys(val);
      i = keys.length;
      while (i--) { _traverse(val[keys[i]], seen); }
    }
  }
  
  var mark;
  var measure;
  
  if (true) {
    var perf = inBrowser && window.performance;
    /* istanbul ignore if */
    if (
      perf &&
      perf.mark &&
      perf.measure &&
      perf.clearMarks &&
      perf.clearMeasures
    ) {
      mark = function (tag) { return perf.mark(tag); };
      measure = function (name, startTag, endTag) {
        perf.measure(name, startTag, endTag);
        perf.clearMarks(startTag);
        perf.clearMarks(endTag);
        // perf.clearMeasures(name)
      };
    }
  }
  
  /*  */
  
  var normalizeEvent = cached(function (name) {
    var passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once$$1 ? name.slice(1) : name;
    var capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
      name: name,
      once: once$$1,
      capture: capture,
      passive: passive
    }
  });
  
  function createFnInvoker (fns, vm) {
    function invoker () {
      var arguments$1 = arguments;
  
      var fns = invoker.fns;
      if (Array.isArray(fns)) {
        var cloned = fns.slice();
        for (var i = 0; i < cloned.length; i++) {
          invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
        }
      } else {
        // return handler return value for single handlers
        return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
      }
    }
    invoker.fns = fns;
    return invoker
  }
  
  function updateListeners (
    on,
    oldOn,
    add,
    remove$$1,
    createOnceHandler,
    vm
  ) {
    var name, def$$1, cur, old, event;
    for (name in on) {
      def$$1 = cur = on[name];
      old = oldOn[name];
      event = normalizeEvent(name);
      if (isUndef(cur)) {
         true && warn(
          "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
          vm
        );
      } else if (isUndef(old)) {
        if (isUndef(cur.fns)) {
          cur = on[name] = createFnInvoker(cur, vm);
        }
        if (isTrue(event.once)) {
          cur = on[name] = createOnceHandler(event.name, cur, event.capture);
        }
        add(event.name, cur, event.capture, event.passive, event.params);
      } else if (cur !== old) {
        old.fns = cur;
        on[name] = old;
      }
    }
    for (name in oldOn) {
      if (isUndef(on[name])) {
        event = normalizeEvent(name);
        remove$$1(event.name, oldOn[name], event.capture);
      }
    }
  }
  
  /*  */
  
  /*  */
  
  function extractPropsFromVNodeData (
    data,
    Ctor,
    tag
  ) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    var propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
      return
    }
    var res = {};
    var attrs = data.attrs;
    var props = data.props;
    if (isDef(attrs) || isDef(props)) {
      for (var key in propOptions) {
        var altKey = hyphenate(key);
        if (true) {
          var keyInLowerCase = key.toLowerCase();
          if (
            key !== keyInLowerCase &&
            attrs && hasOwn(attrs, keyInLowerCase)
          ) {
            tip(
              "Prop \"" + keyInLowerCase + "\" is passed to component " +
              (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
              " \"" + key + "\". " +
              "Note that HTML attributes are case-insensitive and camelCased " +
              "props need to use their kebab-case equivalents when using in-DOM " +
              "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
            );
          }
        }
        checkProp(res, props, key, altKey, true) ||
        checkProp(res, attrs, key, altKey, false);
      }
    }
    return res
  }
  
  function checkProp (
    res,
    hash,
    key,
    altKey,
    preserve
  ) {
    if (isDef(hash)) {
      if (hasOwn(hash, key)) {
        res[key] = hash[key];
        if (!preserve) {
          delete hash[key];
        }
        return true
      } else if (hasOwn(hash, altKey)) {
        res[key] = hash[altKey];
        if (!preserve) {
          delete hash[altKey];
        }
        return true
      }
    }
    return false
  }
  
  /*  */
  
  // The template compiler attempts to minimize the need for normalization by
  // statically analyzing the template at compile time.
  //
  // For plain HTML markup, normalization can be completely skipped because the
  // generated render function is guaranteed to return Array<VNode>. There are
  // two cases where extra normalization is needed:
  
  // 1. When the children contains components - because a functional component
  // may return an Array instead of a single root. In this case, just a simple
  // normalization is needed - if any child is an Array, we flatten the whole
  // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
  // because functional components already normalize their own children.
  function simpleNormalizeChildren (children) {
    for (var i = 0; i < children.length; i++) {
      if (Array.isArray(children[i])) {
        return Array.prototype.concat.apply([], children)
      }
    }
    return children
  }
  
  // 2. When the children contains constructs that always generated nested Arrays,
  // e.g. <template>, <slot>, v-for, or when the children is provided by user
  // with hand-written render functions / JSX. In such cases a full normalization
  // is needed to cater to all possible types of children values.
  function normalizeChildren (children) {
    return isPrimitive(children)
      ? [createTextVNode(children)]
      : Array.isArray(children)
        ? normalizeArrayChildren(children)
        : undefined
  }
  
  function isTextNode (node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment)
  }
  
  function normalizeArrayChildren (children, nestedIndex) {
    var res = [];
    var i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
      c = children[i];
      if (isUndef(c) || typeof c === 'boolean') { continue }
      lastIndex = res.length - 1;
      last = res[lastIndex];
      //  nested
      if (Array.isArray(c)) {
        if (c.length > 0) {
          c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
          // merge adjacent text nodes
          if (isTextNode(c[0]) && isTextNode(last)) {
            res[lastIndex] = createTextVNode(last.text + (c[0]).text);
            c.shift();
          }
          res.push.apply(res, c);
        }
      } else if (isPrimitive(c)) {
        if (isTextNode(last)) {
          // merge adjacent text nodes
          // this is necessary for SSR hydration because text nodes are
          // essentially merged when rendered to HTML strings
          res[lastIndex] = createTextVNode(last.text + c);
        } else if (c !== '') {
          // convert primitive to vnode
          res.push(createTextVNode(c));
        }
      } else {
        if (isTextNode(c) && isTextNode(last)) {
          // merge adjacent text nodes
          res[lastIndex] = createTextVNode(last.text + c.text);
        } else {
          // default key for nested array children (likely generated by v-for)
          if (isTrue(children._isVList) &&
            isDef(c.tag) &&
            isUndef(c.key) &&
            isDef(nestedIndex)) {
            c.key = "__vlist" + nestedIndex + "_" + i + "__";
          }
          res.push(c);
        }
      }
    }
    return res
  }
  
  /*  */
  
  function initProvide (vm) {
    var provide = vm.$options.provide;
    if (provide) {
      vm._provided = typeof provide === 'function'
        ? provide.call(vm)
        : provide;
    }
  }
  
  function initInjections (vm) {
    var result = resolveInject(vm.$options.inject, vm);
    if (result) {
      toggleObserving(false);
      Object.keys(result).forEach(function (key) {
        /* istanbul ignore else */
        if (true) {
          defineReactive$$1(vm, key, result[key], function () {
            warn(
              "Avoid mutating an injected value directly since the changes will be " +
              "overwritten whenever the provided component re-renders. " +
              "injection being mutated: \"" + key + "\"",
              vm
            );
          });
        } else {}
      });
      toggleObserving(true);
    }
  }
  
  function resolveInject (inject, vm) {
    if (inject) {
      // inject is :any because flow is not smart enough to figure out cached
      var result = Object.create(null);
      var keys = hasSymbol
        ? Reflect.ownKeys(inject)
        : Object.keys(inject);
  
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        // #6574 in case the inject object is observed...
        if (key === '__ob__') { continue }
        var provideKey = inject[key].from;
        var source = vm;
        while (source) {
          if (source._provided && hasOwn(source._provided, provideKey)) {
            result[key] = source._provided[provideKey];
            break
          }
          source = source.$parent;
        }
        if (!source) {
          if ('default' in inject[key]) {
            var provideDefault = inject[key].default;
            result[key] = typeof provideDefault === 'function'
              ? provideDefault.call(vm)
              : provideDefault;
          } else if (true) {
            warn(("Injection \"" + key + "\" not found"), vm);
          }
        }
      }
      return result
    }
  }
  
  /*  */
  
  
  
  /**
   * Runtime helper for resolving raw children VNodes into a slot object.
   */
  function resolveSlots (
    children,
    context
  ) {
    if (!children || !children.length) {
      return {}
    }
    var slots = {};
    for (var i = 0, l = children.length; i < l; i++) {
      var child = children[i];
      var data = child.data;
      // remove slot attribute if the node is resolved as a Vue slot node
      if (data && data.attrs && data.attrs.slot) {
        delete data.attrs.slot;
      }
      // named slots should only be respected if the vnode was rendered in the
      // same context.
      if ((child.context === context || child.fnContext === context) &&
        data && data.slot != null
      ) {
        var name = data.slot;
        var slot = (slots[name] || (slots[name] = []));
        if (child.tag === 'template') {
          slot.push.apply(slot, child.children || []);
        } else {
          slot.push(child);
        }
      } else {
        // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page
        if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){
          (slots['page'] || (slots['page'] = [])).push(child);
        }else{
          (slots.default || (slots.default = [])).push(child);
        }
      }
    }
    // ignore slots that contains only whitespace
    for (var name$1 in slots) {
      if (slots[name$1].every(isWhitespace)) {
        delete slots[name$1];
      }
    }
    return slots
  }
  
  function isWhitespace (node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' '
  }
  
  /*  */
  
  function normalizeScopedSlots (
    slots,
    normalSlots,
    prevSlots
  ) {
    var res;
    var hasNormalSlots = Object.keys(normalSlots).length > 0;
    var isStable = slots ? !!slots.$stable : !hasNormalSlots;
    var key = slots && slots.$key;
    if (!slots) {
      res = {};
    } else if (slots._normalized) {
      // fast path 1: child component re-render only, parent did not change
      return slots._normalized
    } else if (
      isStable &&
      prevSlots &&
      prevSlots !== emptyObject &&
      key === prevSlots.$key &&
      !hasNormalSlots &&
      !prevSlots.$hasNormal
    ) {
      // fast path 2: stable scoped slots w/ no normal slots to proxy,
      // only need to normalize once
      return prevSlots
    } else {
      res = {};
      for (var key$1 in slots) {
        if (slots[key$1] && key$1[0] !== '$') {
          res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);
        }
      }
    }
    // expose normal slots on scopedSlots
    for (var key$2 in normalSlots) {
      if (!(key$2 in res)) {
        res[key$2] = proxyNormalSlot(normalSlots, key$2);
      }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (slots && Object.isExtensible(slots)) {
      (slots)._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res
  }
  
  function normalizeScopedSlot(normalSlots, key, fn) {
    var normalized = function () {
      var res = arguments.length ? fn.apply(null, arguments) : fn({});
      res = res && typeof res === 'object' && !Array.isArray(res)
        ? [res] // single vnode
        : normalizeChildren(res);
      return res && (
        res.length === 0 ||
        (res.length === 1 && res[0].isComment) // #9658
      ) ? undefined
        : res
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
      Object.defineProperty(normalSlots, key, {
        get: normalized,
        enumerable: true,
        configurable: true
      });
    }
    return normalized
  }
  
  function proxyNormalSlot(slots, key) {
    return function () { return slots[key]; }
  }
  
  /*  */
  
  /**
   * Runtime helper for rendering v-for lists.
   */
  function renderList (
    val,
    render
  ) {
    var ret, i, l, keys, key;
    if (Array.isArray(val) || typeof val === 'string') {
      ret = new Array(val.length);
      for (i = 0, l = val.length; i < l; i++) {
        ret[i] = render(val[i], i);
      }
    } else if (typeof val === 'number') {
      ret = new Array(val);
      for (i = 0; i < val; i++) {
        ret[i] = render(i + 1, i);
      }
    } else if (isObject(val)) {
      if (hasSymbol && val[Symbol.iterator]) {
        ret = [];
        var iterator = val[Symbol.iterator]();
        var result = iterator.next();
        while (!result.done) {
          ret.push(render(result.value, ret.length));
          result = iterator.next();
        }
      } else {
        keys = Object.keys(val);
        ret = new Array(keys.length);
        for (i = 0, l = keys.length; i < l; i++) {
          key = keys[i];
          ret[i] = render(val[key], key, i);
        }
      }
    }
    if (!isDef(ret)) {
      ret = [];
    }
    (ret)._isVList = true;
    return ret
  }
  
  /*  */
  
  /**
   * Runtime helper for rendering <slot>
   */
  function renderSlot (
    name,
    fallback,
    props,
    bindObject
  ) {
    var scopedSlotFn = this.$scopedSlots[name];
    var nodes;
    if (scopedSlotFn) { // scoped slot
      props = props || {};
      if (bindObject) {
        if ( true && !isObject(bindObject)) {
          warn(
            'slot v-bind without argument expects an Object',
            this
          );
        }
        props = extend(extend({}, bindObject), props);
      }
      nodes = scopedSlotFn(props) || fallback;
    } else {
      nodes = this.$slots[name] || fallback;
    }
  
    var target = props && props.slot;
    if (target) {
      return this.$createElement('template', { slot: target }, nodes)
    } else {
      return nodes
    }
  }
  
  /*  */
  
  /**
   * Runtime helper for resolving filters
   */
  function resolveFilter (id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity
  }
  
  /*  */
  
  function isKeyNotMatch (expect, actual) {
    if (Array.isArray(expect)) {
      return expect.indexOf(actual) === -1
    } else {
      return expect !== actual
    }
  }
  
  /**
   * Runtime helper for checking keyCodes from config.
   * exposed as Vue.prototype._k
   * passing in eventKeyName as last argument separately for backwards compat
   */
  function checkKeyCodes (
    eventKeyCode,
    key,
    builtInKeyCode,
    eventKeyName,
    builtInKeyName
  ) {
    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
      return isKeyNotMatch(builtInKeyName, eventKeyName)
    } else if (mappedKeyCode) {
      return isKeyNotMatch(mappedKeyCode, eventKeyCode)
    } else if (eventKeyName) {
      return hyphenate(eventKeyName) !== key
    }
  }
  
  /*  */
  
  /**
   * Runtime helper for merging v-bind="object" into a VNode's data.
   */
  function bindObjectProps (
    data,
    tag,
    value,
    asProp,
    isSync
  ) {
    if (value) {
      if (!isObject(value)) {
         true && warn(
          'v-bind without argument expects an Object or Array value',
          this
        );
      } else {
        if (Array.isArray(value)) {
          value = toObject(value);
        }
        var hash;
        var loop = function ( key ) {
          if (
            key === 'class' ||
            key === 'style' ||
            isReservedAttribute(key)
          ) {
            hash = data;
          } else {
            var type = data.attrs && data.attrs.type;
            hash = asProp || config.mustUseProp(tag, type, key)
              ? data.domProps || (data.domProps = {})
              : data.attrs || (data.attrs = {});
          }
          var camelizedKey = camelize(key);
          var hyphenatedKey = hyphenate(key);
          if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
            hash[key] = value[key];
  
            if (isSync) {
              var on = data.on || (data.on = {});
              on[("update:" + key)] = function ($event) {
                value[key] = $event;
              };
            }
          }
        };
  
        for (var key in value) loop( key );
      }
    }
    return data
  }
  
  /*  */
  
  /**
   * Runtime helper for rendering static trees.
   */
  function renderStatic (
    index,
    isInFor
  ) {
    var cached = this._staticTrees || (this._staticTrees = []);
    var tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
      return tree
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(
      this._renderProxy,
      null,
      this // for render fns generated for functional component templates
    );
    markStatic(tree, ("__static__" + index), false);
    return tree
  }
  
  /**
   * Runtime helper for v-once.
   * Effectively it means marking the node as static with a unique key.
   */
  function markOnce (
    tree,
    index,
    key
  ) {
    markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
    return tree
  }
  
  function markStatic (
    tree,
    key,
    isOnce
  ) {
    if (Array.isArray(tree)) {
      for (var i = 0; i < tree.length; i++) {
        if (tree[i] && typeof tree[i] !== 'string') {
          markStaticNode(tree[i], (key + "_" + i), isOnce);
        }
      }
    } else {
      markStaticNode(tree, key, isOnce);
    }
  }
  
  function markStaticNode (node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
  }
  
  /*  */
  
  function bindObjectListeners (data, value) {
    if (value) {
      if (!isPlainObject(value)) {
         true && warn(
          'v-on without argument expects an Object value',
          this
        );
      } else {
        var on = data.on = data.on ? extend({}, data.on) : {};
        for (var key in value) {
          var existing = on[key];
          var ours = value[key];
          on[key] = existing ? [].concat(existing, ours) : ours;
        }
      }
    }
    return data
  }
  
  /*  */
  
  function resolveScopedSlots (
    fns, // see flow/vnode
    res,
    // the following are added in 2.6
    hasDynamicKeys,
    contentHashKey
  ) {
    res = res || { $stable: !hasDynamicKeys };
    for (var i = 0; i < fns.length; i++) {
      var slot = fns[i];
      if (Array.isArray(slot)) {
        resolveScopedSlots(slot, res, hasDynamicKeys);
      } else if (slot) {
        // marker for reverse proxying v-slot without scope on this.$slots
        if (slot.proxy) {
          slot.fn.proxy = true;
        }
        res[slot.key] = slot.fn;
      }
    }
    if (contentHashKey) {
      (res).$key = contentHashKey;
    }
    return res
  }
  
  /*  */
  
  function bindDynamicKeys (baseObj, values) {
    for (var i = 0; i < values.length; i += 2) {
      var key = values[i];
      if (typeof key === 'string' && key) {
        baseObj[values[i]] = values[i + 1];
      } else if ( true && key !== '' && key !== null) {
        // null is a speical value for explicitly removing a binding
        warn(
          ("Invalid value for dynamic directive argument (expected string or null): " + key),
          this
        );
      }
    }
    return baseObj
  }
  
  // helper to dynamically append modifier runtime markers to event names.
  // ensure only append when value is already string, otherwise it will be cast
  // to string and cause the type check to miss.
  function prependModifier (value, symbol) {
    return typeof value === 'string' ? symbol + value : value
  }
  
  /*  */
  
  function installRenderHelpers (target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
  }
  
  /*  */
  
  function FunctionalRenderContext (
    data,
    props,
    children,
    parent,
    Ctor
  ) {
    var this$1 = this;
  
    var options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    var contextVm;
    if (hasOwn(parent, '_uid')) {
      contextVm = Object.create(parent);
      // $flow-disable-line
      contextVm._original = parent;
    } else {
      // the context vm passed in is a functional context as well.
      // in this case we want to make sure we are able to get a hold to the
      // real context instance.
      contextVm = parent;
      // $flow-disable-line
      parent = parent._original;
    }
    var isCompiled = isTrue(options._compiled);
    var needNormalization = !isCompiled;
  
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = function () {
      if (!this$1.$slots) {
        normalizeScopedSlots(
          data.scopedSlots,
          this$1.$slots = resolveSlots(children, parent)
        );
      }
      return this$1.$slots
    };
  
    Object.defineProperty(this, 'scopedSlots', ({
      enumerable: true,
      get: function get () {
        return normalizeScopedSlots(data.scopedSlots, this.slots())
      }
    }));
  
    // support for compiled functional template
    if (isCompiled) {
      // exposing $options for renderStatic()
      this.$options = options;
      // pre-resolve slots for renderSlot()
      this.$slots = this.slots();
      this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
    }
  
    if (options._scopeId) {
      this._c = function (a, b, c, d) {
        var vnode = createElement(contextVm, a, b, c, d, needNormalization);
        if (vnode && !Array.isArray(vnode)) {
          vnode.fnScopeId = options._scopeId;
          vnode.fnContext = parent;
        }
        return vnode
      };
    } else {
      this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
    }
  }
  
  installRenderHelpers(FunctionalRenderContext.prototype);
  
  function createFunctionalComponent (
    Ctor,
    propsData,
    data,
    contextVm,
    children
  ) {
    var options = Ctor.options;
    var props = {};
    var propOptions = options.props;
    if (isDef(propOptions)) {
      for (var key in propOptions) {
        props[key] = validateProp(key, propOptions, propsData || emptyObject);
      }
    } else {
      if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
      if (isDef(data.props)) { mergeProps(props, data.props); }
    }
  
    var renderContext = new FunctionalRenderContext(
      data,
      props,
      children,
      contextVm,
      Ctor
    );
  
    var vnode = options.render.call(null, renderContext._c, renderContext);
  
    if (vnode instanceof VNode) {
      return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
    } else if (Array.isArray(vnode)) {
      var vnodes = normalizeChildren(vnode) || [];
      var res = new Array(vnodes.length);
      for (var i = 0; i < vnodes.length; i++) {
        res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
      }
      return res
    }
  }
  
  function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    var clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    if (true) {
      (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
    }
    if (data.slot) {
      (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone
  }
  
  function mergeProps (to, from) {
    for (var key in from) {
      to[camelize(key)] = from[key];
    }
  }
  
  /*  */
  
  /*  */
  
  /*  */
  
  /*  */
  
  // inline hooks to be invoked on component VNodes during patch
  var componentVNodeHooks = {
    init: function init (vnode, hydrating) {
      if (
        vnode.componentInstance &&
        !vnode.componentInstance._isDestroyed &&
        vnode.data.keepAlive
      ) {
        // kept-alive components, treat as a patch
        var mountedNode = vnode; // work around flow
        componentVNodeHooks.prepatch(mountedNode, mountedNode);
      } else {
        var child = vnode.componentInstance = createComponentInstanceForVnode(
          vnode,
          activeInstance
        );
        child.$mount(hydrating ? vnode.elm : undefined, hydrating);
      }
    },
  
    prepatch: function prepatch (oldVnode, vnode) {
      var options = vnode.componentOptions;
      var child = vnode.componentInstance = oldVnode.componentInstance;
      updateChildComponent(
        child,
        options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
      );
    },
  
    insert: function insert (vnode) {
      var context = vnode.context;
      var componentInstance = vnode.componentInstance;
      if (!componentInstance._isMounted) {
        componentInstance._isMounted = true;
        callHook(componentInstance, 'mounted');
      }
      if (vnode.data.keepAlive) {
        if (context._isMounted) {
          // vue-router#1212
          // During updates, a kept-alive component's child components may
          // change, so directly walking the tree here may call activated hooks
          // on incorrect children. Instead we push them into a queue which will
          // be processed after the whole patch process ended.
          queueActivatedComponent(componentInstance);
        } else {
          activateChildComponent(componentInstance, true /* direct */);
        }
      }
    },
  
    destroy: function destroy (vnode) {
      var componentInstance = vnode.componentInstance;
      if (!componentInstance._isDestroyed) {
        if (!vnode.data.keepAlive) {
          componentInstance.$destroy();
        } else {
          deactivateChildComponent(componentInstance, true /* direct */);
        }
      }
    }
  };
  
  var hooksToMerge = Object.keys(componentVNodeHooks);
  
  function createComponent (
    Ctor,
    data,
    context,
    children,
    tag
  ) {
    if (isUndef(Ctor)) {
      return
    }
  
    var baseCtor = context.$options._base;
  
    // plain options object: turn it into a constructor
    if (isObject(Ctor)) {
      Ctor = baseCtor.extend(Ctor);
    }
  
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
      if (true) {
        warn(("Invalid Component definition: " + (String(Ctor))), context);
      }
      return
    }
  
    // async component
    var asyncFactory;
    if (isUndef(Ctor.cid)) {
      asyncFactory = Ctor;
      Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
      if (Ctor === undefined) {
        // return a placeholder node for async component, which is rendered
        // as a comment node but preserves all the raw information for the node.
        // the information will be used for async server-rendering and hydration.
        return createAsyncPlaceholder(
          asyncFactory,
          data,
          context,
          children,
          tag
        )
      }
    }
  
    data = data || {};
  
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
  
    // transform component v-model data into props & events
    if (isDef(data.model)) {
      transformModel(Ctor.options, data);
    }
  
    // extract props
    var propsData = extractPropsFromVNodeData(data, Ctor, tag);
  
    // functional component
    if (isTrue(Ctor.options.functional)) {
      return createFunctionalComponent(Ctor, propsData, data, context, children)
    }
  
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    var listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
  
    if (isTrue(Ctor.options.abstract)) {
      // abstract components do not keep anything
      // other than props & listeners & slot
  
      // work around flow
      var slot = data.slot;
      data = {};
      if (slot) {
        data.slot = slot;
      }
    }
  
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
  
    // return a placeholder vnode
    var name = Ctor.options.name || tag;
    var vnode = new VNode(
      ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
      data, undefined, undefined, undefined, context,
      { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
      asyncFactory
    );
  
    return vnode
  }
  
  function createComponentInstanceForVnode (
    vnode, // we know it's MountedComponentVNode but flow doesn't
    parent // activeInstance in lifecycle state
  ) {
    var options = {
      _isComponent: true,
      _parentVnode: vnode,
      parent: parent
    };
    // check inline-template render functions
    var inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
      options.render = inlineTemplate.render;
      options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options)
  }
  
  function installComponentHooks (data) {
    var hooks = data.hook || (data.hook = {});
    for (var i = 0; i < hooksToMerge.length; i++) {
      var key = hooksToMerge[i];
      var existing = hooks[key];
      var toMerge = componentVNodeHooks[key];
      if (existing !== toMerge && !(existing && existing._merged)) {
        hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
      }
    }
  }
  
  function mergeHook$1 (f1, f2) {
    var merged = function (a, b) {
      // flow complains about extra args which is why we use any
      f1(a, b);
      f2(a, b);
    };
    merged._merged = true;
    return merged
  }
  
  // transform component v-model info (value and callback) into
  // prop and event handler respectively.
  function transformModel (options, data) {
    var prop = (options.model && options.model.prop) || 'value';
    var event = (options.model && options.model.event) || 'input'
    ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
    var on = data.on || (data.on = {});
    var existing = on[event];
    var callback = data.model.callback;
    if (isDef(existing)) {
      if (
        Array.isArray(existing)
          ? existing.indexOf(callback) === -1
          : existing !== callback
      ) {
        on[event] = [callback].concat(existing);
      }
    } else {
      on[event] = callback;
    }
  }
  
  /*  */
  
  var SIMPLE_NORMALIZE = 1;
  var ALWAYS_NORMALIZE = 2;
  
  // wrapper function for providing a more flexible interface
  // without getting yelled at by flow
  function createElement (
    context,
    tag,
    data,
    children,
    normalizationType,
    alwaysNormalize
  ) {
    if (Array.isArray(data) || isPrimitive(data)) {
      normalizationType = children;
      children = data;
      data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
      normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType)
  }
  
  function _createElement (
    context,
    tag,
    data,
    children,
    normalizationType
  ) {
    if (isDef(data) && isDef((data).__ob__)) {
       true && warn(
        "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
        'Always create fresh vnode data objects in each render!',
        context
      );
      return createEmptyVNode()
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
      tag = data.is;
    }
    if (!tag) {
      // in case of component :is set to falsy value
      return createEmptyVNode()
    }
    // warn against non-primitive key
    if ( true &&
      isDef(data) && isDef(data.key) && !isPrimitive(data.key)
    ) {
      {
        warn(
          'Avoid using non-primitive value as key, ' +
          'use string/number value instead.',
          context
        );
      }
    }
    // support single function children as default scoped slot
    if (Array.isArray(children) &&
      typeof children[0] === 'function'
    ) {
      data = data || {};
      data.scopedSlots = { default: children[0] };
      children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
      children = normalizeChildren(children);
    } else if (normalizationType === SIMPLE_NORMALIZE) {
      children = simpleNormalizeChildren(children);
    }
    var vnode, ns;
    if (typeof tag === 'string') {
      var Ctor;
      ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
      if (config.isReservedTag(tag)) {
        // platform built-in elements
        vnode = new VNode(
          config.parsePlatformTagName(tag), data, children,
          undefined, undefined, context
        );
      } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
        // component
        vnode = createComponent(Ctor, data, context, children, tag);
      } else {
        // unknown or unlisted namespaced elements
        // check at runtime because it may get assigned a namespace when its
        // parent normalizes children
        vnode = new VNode(
          tag, data, children,
          undefined, undefined, context
        );
      }
    } else {
      // direct component options / constructor
      vnode = createComponent(tag, data, context, children);
    }
    if (Array.isArray(vnode)) {
      return vnode
    } else if (isDef(vnode)) {
      if (isDef(ns)) { applyNS(vnode, ns); }
      if (isDef(data)) { registerDeepBindings(data); }
      return vnode
    } else {
      return createEmptyVNode()
    }
  }
  
  function applyNS (vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
      // use default namespace inside foreignObject
      ns = undefined;
      force = true;
    }
    if (isDef(vnode.children)) {
      for (var i = 0, l = vnode.children.length; i < l; i++) {
        var child = vnode.children[i];
        if (isDef(child.tag) && (
          isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
          applyNS(child, ns, force);
        }
      }
    }
  }
  
  // ref #5318
  // necessary to ensure parent re-render when deep bindings like :style and
  // :class are used on slot nodes
  function registerDeepBindings (data) {
    if (isObject(data.style)) {
      traverse(data.style);
    }
    if (isObject(data.class)) {
      traverse(data.class);
    }
  }
  
  /*  */
  
  function initRender (vm) {
    vm._vnode = null; // the root of the child tree
    vm._staticTrees = null; // v-once cached trees
    var options = vm.$options;
    var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
    var renderContext = parentVnode && parentVnode.context;
    vm.$slots = resolveSlots(options._renderChildren, renderContext);
    vm.$scopedSlots = emptyObject;
    // bind the createElement fn to this instance
    // so that we get proper render context inside it.
    // args order: tag, data, children, normalizationType, alwaysNormalize
    // internal version is used by render functions compiled from templates
    vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
    // normalization is always applied for the public version, used in
    // user-written render functions.
    vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
  
    // $attrs & $listeners are exposed for easier HOC creation.
    // they need to be reactive so that HOCs using them are always updated
    var parentData = parentVnode && parentVnode.data;
  
    /* istanbul ignore else */
    if (true) {
      defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
        !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
      }, true);
      defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
        !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
      }, true);
    } else {}
  }
  
  var currentRenderingInstance = null;
  
  function renderMixin (Vue) {
    // install runtime convenience helpers
    installRenderHelpers(Vue.prototype);
  
    Vue.prototype.$nextTick = function (fn) {
      return nextTick(fn, this)
    };
  
    Vue.prototype._render = function () {
      var vm = this;
      var ref = vm.$options;
      var render = ref.render;
      var _parentVnode = ref._parentVnode;
  
      if (_parentVnode) {
        vm.$scopedSlots = normalizeScopedSlots(
          _parentVnode.data.scopedSlots,
          vm.$slots,
          vm.$scopedSlots
        );
      }
  
      // set parent vnode. this allows render functions to have access
      // to the data on the placeholder node.
      vm.$vnode = _parentVnode;
      // render self
      var vnode;
      try {
        // There's no need to maintain a stack becaues all render fns are called
        // separately from one another. Nested component's render fns are called
        // when parent component is patched.
        currentRenderingInstance = vm;
        vnode = render.call(vm._renderProxy, vm.$createElement);
      } catch (e) {
        handleError(e, vm, "render");
        // return error render result,
        // or previous vnode to prevent render error causing blank component
        /* istanbul ignore else */
        if ( true && vm.$options.renderError) {
          try {
            vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
          } catch (e) {
            handleError(e, vm, "renderError");
            vnode = vm._vnode;
          }
        } else {
          vnode = vm._vnode;
        }
      } finally {
        currentRenderingInstance = null;
      }
      // if the returned array contains only a single node, allow it
      if (Array.isArray(vnode) && vnode.length === 1) {
        vnode = vnode[0];
      }
      // return empty vnode in case the render function errored out
      if (!(vnode instanceof VNode)) {
        if ( true && Array.isArray(vnode)) {
          warn(
            'Multiple root nodes returned from render function. Render function ' +
            'should return a single root node.',
            vm
          );
        }
        vnode = createEmptyVNode();
      }
      // set parent
      vnode.parent = _parentVnode;
      return vnode
    };
  }
  
  /*  */
  
  function ensureCtor (comp, base) {
    if (
      comp.__esModule ||
      (hasSymbol && comp[Symbol.toStringTag] === 'Module')
    ) {
      comp = comp.default;
    }
    return isObject(comp)
      ? base.extend(comp)
      : comp
  }
  
  function createAsyncPlaceholder (
    factory,
    data,
    context,
    children,
    tag
  ) {
    var node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data: data, context: context, children: children, tag: tag };
    return node
  }
  
  function resolveAsyncComponent (
    factory,
    baseCtor
  ) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
      return factory.errorComp
    }
  
    if (isDef(factory.resolved)) {
      return factory.resolved
    }
  
    var owner = currentRenderingInstance;
    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
      // already pending
      factory.owners.push(owner);
    }
  
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
      return factory.loadingComp
    }
  
    if (owner && !isDef(factory.owners)) {
      var owners = factory.owners = [owner];
      var sync = true;
      var timerLoading = null;
      var timerTimeout = null
  
      ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });
  
      var forceRender = function (renderCompleted) {
        for (var i = 0, l = owners.length; i < l; i++) {
          (owners[i]).$forceUpdate();
        }
  
        if (renderCompleted) {
          owners.length = 0;
          if (timerLoading !== null) {
            clearTimeout(timerLoading);
            timerLoading = null;
          }
          if (timerTimeout !== null) {
            clearTimeout(timerTimeout);
            timerTimeout = null;
          }
        }
      };
  
      var resolve = once(function (res) {
        // cache resolved
        factory.resolved = ensureCtor(res, baseCtor);
        // invoke callbacks only if this is not a synchronous resolve
        // (async resolves are shimmed as synchronous during SSR)
        if (!sync) {
          forceRender(true);
        } else {
          owners.length = 0;
        }
      });
  
      var reject = once(function (reason) {
         true && warn(
          "Failed to resolve async component: " + (String(factory)) +
          (reason ? ("\nReason: " + reason) : '')
        );
        if (isDef(factory.errorComp)) {
          factory.error = true;
          forceRender(true);
        }
      });
  
      var res = factory(resolve, reject);
  
      if (isObject(res)) {
        if (isPromise(res)) {
          // () => Promise
          if (isUndef(factory.resolved)) {
            res.then(resolve, reject);
          }
        } else if (isPromise(res.component)) {
          res.component.then(resolve, reject);
  
          if (isDef(res.error)) {
            factory.errorComp = ensureCtor(res.error, baseCtor);
          }
  
          if (isDef(res.loading)) {
            factory.loadingComp = ensureCtor(res.loading, baseCtor);
            if (res.delay === 0) {
              factory.loading = true;
            } else {
              timerLoading = setTimeout(function () {
                timerLoading = null;
                if (isUndef(factory.resolved) && isUndef(factory.error)) {
                  factory.loading = true;
                  forceRender(false);
                }
              }, res.delay || 200);
            }
          }
  
          if (isDef(res.timeout)) {
            timerTimeout = setTimeout(function () {
              timerTimeout = null;
              if (isUndef(factory.resolved)) {
                reject(
                   true
                    ? ("timeout (" + (res.timeout) + "ms)")
                    : undefined
                );
              }
            }, res.timeout);
          }
        }
      }
  
      sync = false;
      // return in case resolved synchronously
      return factory.loading
        ? factory.loadingComp
        : factory.resolved
    }
  }
  
  /*  */
  
  function isAsyncPlaceholder (node) {
    return node.isComment && node.asyncFactory
  }
  
  /*  */
  
  function getFirstComponentChild (children) {
    if (Array.isArray(children)) {
      for (var i = 0; i < children.length; i++) {
        var c = children[i];
        if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
          return c
        }
      }
    }
  }
  
  /*  */
  
  /*  */
  
  function initEvents (vm) {
    vm._events = Object.create(null);
    vm._hasHookEvent = false;
    // init parent attached events
    var listeners = vm.$options._parentListeners;
    if (listeners) {
      updateComponentListeners(vm, listeners);
    }
  }
  
  var target;
  
  function add (event, fn) {
    target.$on(event, fn);
  }
  
  function remove$1 (event, fn) {
    target.$off(event, fn);
  }
  
  function createOnceHandler (event, fn) {
    var _target = target;
    return function onceHandler () {
      var res = fn.apply(null, arguments);
      if (res !== null) {
        _target.$off(event, onceHandler);
      }
    }
  }
  
  function updateComponentListeners (
    vm,
    listeners,
    oldListeners
  ) {
    target = vm;
    updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
    target = undefined;
  }
  
  function eventsMixin (Vue) {
    var hookRE = /^hook:/;
    Vue.prototype.$on = function (event, fn) {
      var vm = this;
      if (Array.isArray(event)) {
        for (var i = 0, l = event.length; i < l; i++) {
          vm.$on(event[i], fn);
        }
      } else {
        (vm._events[event] || (vm._events[event] = [])).push(fn);
        // optimize hook:event cost by using a boolean flag marked at registration
        // instead of a hash lookup
        if (hookRE.test(event)) {
          vm._hasHookEvent = true;
        }
      }
      return vm
    };
  
    Vue.prototype.$once = function (event, fn) {
      var vm = this;
      function on () {
        vm.$off(event, on);
        fn.apply(vm, arguments);
      }
      on.fn = fn;
      vm.$on(event, on);
      return vm
    };
  
    Vue.prototype.$off = function (event, fn) {
      var vm = this;
      // all
      if (!arguments.length) {
        vm._events = Object.create(null);
        return vm
      }
      // array of events
      if (Array.isArray(event)) {
        for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
          vm.$off(event[i$1], fn);
        }
        return vm
      }
      // specific event
      var cbs = vm._events[event];
      if (!cbs) {
        return vm
      }
      if (!fn) {
        vm._events[event] = null;
        return vm
      }
      // specific handler
      var cb;
      var i = cbs.length;
      while (i--) {
        cb = cbs[i];
        if (cb === fn || cb.fn === fn) {
          cbs.splice(i, 1);
          break
        }
      }
      return vm
    };
  
    Vue.prototype.$emit = function (event) {
      var vm = this;
      if (true) {
        var lowerCaseEvent = event.toLowerCase();
        if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
          tip(
            "Event \"" + lowerCaseEvent + "\" is emitted in component " +
            (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
            "Note that HTML attributes are case-insensitive and you cannot use " +
            "v-on to listen to camelCase events when using in-DOM templates. " +
            "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
          );
        }
      }
      var cbs = vm._events[event];
      if (cbs) {
        cbs = cbs.length > 1 ? toArray(cbs) : cbs;
        var args = toArray(arguments, 1);
        var info = "event handler for \"" + event + "\"";
        for (var i = 0, l = cbs.length; i < l; i++) {
          invokeWithErrorHandling(cbs[i], vm, args, vm, info);
        }
      }
      return vm
    };
  }
  
  /*  */
  
  var activeInstance = null;
  var isUpdatingChildComponent = false;
  
  function setActiveInstance(vm) {
    var prevActiveInstance = activeInstance;
    activeInstance = vm;
    return function () {
      activeInstance = prevActiveInstance;
    }
  }
  
  function initLifecycle (vm) {
    var options = vm.$options;
  
    // locate first non-abstract parent
    var parent = options.parent;
    if (parent && !options.abstract) {
      while (parent.$options.abstract && parent.$parent) {
        parent = parent.$parent;
      }
      parent.$children.push(vm);
    }
  
    vm.$parent = parent;
    vm.$root = parent ? parent.$root : vm;
  
    vm.$children = [];
    vm.$refs = {};
  
    vm._watcher = null;
    vm._inactive = null;
    vm._directInactive = false;
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
  }
  
  function lifecycleMixin (Vue) {
    Vue.prototype._update = function (vnode, hydrating) {
      var vm = this;
      var prevEl = vm.$el;
      var prevVnode = vm._vnode;
      var restoreActiveInstance = setActiveInstance(vm);
      vm._vnode = vnode;
      // Vue.prototype.__patch__ is injected in entry points
      // based on the rendering backend used.
      if (!prevVnode) {
        // initial render
        vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
      } else {
        // updates
        vm.$el = vm.__patch__(prevVnode, vnode);
      }
      restoreActiveInstance();
      // update __vue__ reference
      if (prevEl) {
        prevEl.__vue__ = null;
      }
      if (vm.$el) {
        vm.$el.__vue__ = vm;
      }
      // if parent is an HOC, update its $el as well
      if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
        vm.$parent.$el = vm.$el;
      }
      // updated hook is called by the scheduler to ensure that children are
      // updated in a parent's updated hook.
    };
  
    Vue.prototype.$forceUpdate = function () {
      var vm = this;
      if (vm._watcher) {
        vm._watcher.update();
      }
    };
  
    Vue.prototype.$destroy = function () {
      var vm = this;
      if (vm._isBeingDestroyed) {
        return
      }
      callHook(vm, 'beforeDestroy');
      vm._isBeingDestroyed = true;
      // remove self from parent
      var parent = vm.$parent;
      if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
        remove(parent.$children, vm);
      }
      // teardown watchers
      if (vm._watcher) {
        vm._watcher.teardown();
      }
      var i = vm._watchers.length;
      while (i--) {
        vm._watchers[i].teardown();
      }
      // remove reference from data ob
      // frozen object may not have observer.
      if (vm._data.__ob__) {
        vm._data.__ob__.vmCount--;
      }
      // call the last hook...
      vm._isDestroyed = true;
      // invoke destroy hooks on current rendered tree
      vm.__patch__(vm._vnode, null);
      // fire destroyed hook
      callHook(vm, 'destroyed');
      // turn off all instance listeners.
      vm.$off();
      // remove __vue__ reference
      if (vm.$el) {
        vm.$el.__vue__ = null;
      }
      // release circular reference (#6759)
      if (vm.$vnode) {
        vm.$vnode.parent = null;
      }
    };
  }
  
  function updateChildComponent (
    vm,
    propsData,
    listeners,
    parentVnode,
    renderChildren
  ) {
    if (true) {
      isUpdatingChildComponent = true;
    }
  
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
  
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    var newScopedSlots = parentVnode.data.scopedSlots;
    var oldScopedSlots = vm.$scopedSlots;
    var hasDynamicScopedSlot = !!(
      (newScopedSlots && !newScopedSlots.$stable) ||
      (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
      (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)
    );
  
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    var needsForceUpdate = !!(
      renderChildren ||               // has new static slots
      vm.$options._renderChildren ||  // has old static slots
      hasDynamicScopedSlot
    );
  
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
  
    if (vm._vnode) { // update child tree's parent
      vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
  
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    vm.$attrs = parentVnode.data.attrs || emptyObject;
    vm.$listeners = listeners || emptyObject;
  
    // update props
    if (propsData && vm.$options.props) {
      toggleObserving(false);
      var props = vm._props;
      var propKeys = vm.$options._propKeys || [];
      for (var i = 0; i < propKeys.length; i++) {
        var key = propKeys[i];
        var propOptions = vm.$options.props; // wtf flow?
        props[key] = validateProp(key, propOptions, propsData, vm);
      }
      toggleObserving(true);
      // keep a copy of raw propsData
      vm.$options.propsData = propsData;
    }
  
    // update listeners
    listeners = listeners || emptyObject;
    var oldListeners = vm.$options._parentListeners;
    vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, oldListeners);
  
    // resolve slots + force update if has children
    if (needsForceUpdate) {
      vm.$slots = resolveSlots(renderChildren, parentVnode.context);
      vm.$forceUpdate();
    }
  
    if (true) {
      isUpdatingChildComponent = false;
    }
  }
  
  function isInInactiveTree (vm) {
    while (vm && (vm = vm.$parent)) {
      if (vm._inactive) { return true }
    }
    return false
  }
  
  function activateChildComponent (vm, direct) {
    if (direct) {
      vm._directInactive = false;
      if (isInInactiveTree(vm)) {
        return
      }
    } else if (vm._directInactive) {
      return
    }
    if (vm._inactive || vm._inactive === null) {
      vm._inactive = false;
      for (var i = 0; i < vm.$children.length; i++) {
        activateChildComponent(vm.$children[i]);
      }
      callHook(vm, 'activated');
    }
  }
  
  function deactivateChildComponent (vm, direct) {
    if (direct) {
      vm._directInactive = true;
      if (isInInactiveTree(vm)) {
        return
      }
    }
    if (!vm._inactive) {
      vm._inactive = true;
      for (var i = 0; i < vm.$children.length; i++) {
        deactivateChildComponent(vm.$children[i]);
      }
      callHook(vm, 'deactivated');
    }
  }
  
  function callHook (vm, hook) {
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    var handlers = vm.$options[hook];
    var info = hook + " hook";
    if (handlers) {
      for (var i = 0, j = handlers.length; i < j; i++) {
        invokeWithErrorHandling(handlers[i], vm, null, vm, info);
      }
    }
    if (vm._hasHookEvent) {
      vm.$emit('hook:' + hook);
    }
    popTarget();
  }
  
  /*  */
  
  var MAX_UPDATE_COUNT = 100;
  
  var queue = [];
  var activatedChildren = [];
  var has = {};
  var circular = {};
  var waiting = false;
  var flushing = false;
  var index = 0;
  
  /**
   * Reset the scheduler's state.
   */
  function resetSchedulerState () {
    index = queue.length = activatedChildren.length = 0;
    has = {};
    if (true) {
      circular = {};
    }
    waiting = flushing = false;
  }
  
  // Async edge case #6566 requires saving the timestamp when event listeners are
  // attached. However, calling performance.now() has a perf overhead especially
  // if the page has thousands of event listeners. Instead, we take a timestamp
  // every time the scheduler flushes and use that for all event listeners
  // attached during that flush.
  var currentFlushTimestamp = 0;
  
  // Async edge case fix requires storing an event listener's attach timestamp.
  var getNow = Date.now;
  
  // Determine what event timestamp the browser is using. Annoyingly, the
  // timestamp can either be hi-res (relative to page load) or low-res
  // (relative to UNIX epoch), so in order to compare time we have to use the
  // same timestamp type when saving the flush timestamp.
  // All IE versions use low-res event timestamps, and have problematic clock
  // implementations (#9632)
  if (inBrowser && !isIE) {
    var performance = window.performance;
    if (
      performance &&
      typeof performance.now === 'function' &&
      getNow() > document.createEvent('Event').timeStamp
    ) {
      // if the event timestamp, although evaluated AFTER the Date.now(), is
      // smaller than it, it means the event is using a hi-res timestamp,
      // and we need to use the hi-res version for event listener timestamps as
      // well.
      getNow = function () { return performance.now(); };
    }
  }
  
  /**
   * Flush both queues and run the watchers.
   */
  function flushSchedulerQueue () {
    currentFlushTimestamp = getNow();
    flushing = true;
    var watcher, id;
  
    // Sort queue before flush.
    // This ensures that:
    // 1. Components are updated from parent to child. (because parent is always
    //    created before the child)
    // 2. A component's user watchers are run before its render watcher (because
    //    user watchers are created before the render watcher)
    // 3. If a component is destroyed during a parent component's watcher run,
    //    its watchers can be skipped.
    queue.sort(function (a, b) { return a.id - b.id; });
  
    // do not cache length because more watchers might be pushed
    // as we run existing watchers
    for (index = 0; index < queue.length; index++) {
      watcher = queue[index];
      if (watcher.before) {
        watcher.before();
      }
      id = watcher.id;
      has[id] = null;
      watcher.run();
      // in dev build, check and stop circular updates.
      if ( true && has[id] != null) {
        circular[id] = (circular[id] || 0) + 1;
        if (circular[id] > MAX_UPDATE_COUNT) {
          warn(
            'You may have an infinite update loop ' + (
              watcher.user
                ? ("in watcher with expression \"" + (watcher.expression) + "\"")
                : "in a component render function."
            ),
            watcher.vm
          );
          break
        }
      }
    }
  
    // keep copies of post queues before resetting state
    var activatedQueue = activatedChildren.slice();
    var updatedQueue = queue.slice();
  
    resetSchedulerState();
  
    // call component updated and activated hooks
    callActivatedHooks(activatedQueue);
    callUpdatedHooks(updatedQueue);
  
    // devtool hook
    /* istanbul ignore if */
    if (devtools && config.devtools) {
      devtools.emit('flush');
    }
  }
  
  function callUpdatedHooks (queue) {
    var i = queue.length;
    while (i--) {
      var watcher = queue[i];
      var vm = watcher.vm;
      if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
        callHook(vm, 'updated');
      }
    }
  }
  
  /**
   * Queue a kept-alive component that was activated during patch.
   * The queue will be processed after the entire tree has been patched.
   */
  function queueActivatedComponent (vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
    activatedChildren.push(vm);
  }
  
  function callActivatedHooks (queue) {
    for (var i = 0; i < queue.length; i++) {
      queue[i]._inactive = true;
      activateChildComponent(queue[i], true /* true */);
    }
  }
  
  /**
   * Push a watcher into the watcher queue.
   * Jobs with duplicate IDs will be skipped unless it's
   * pushed when the queue is being flushed.
   */
  function queueWatcher (watcher) {
    var id = watcher.id;
    if (has[id] == null) {
      has[id] = true;
      if (!flushing) {
        queue.push(watcher);
      } else {
        // if already flushing, splice the watcher based on its id
        // if already past its id, it will be run next immediately.
        var i = queue.length - 1;
        while (i > index && queue[i].id > watcher.id) {
          i--;
        }
        queue.splice(i + 1, 0, watcher);
      }
      // queue the flush
      if (!waiting) {
        waiting = true;
  
        if ( true && !config.async) {
          flushSchedulerQueue();
          return
        }
        nextTick(flushSchedulerQueue);
      }
    }
  }
  
  /*  */
  
  
  
  var uid$2 = 0;
  
  /**
   * A watcher parses an expression, collects dependencies,
   * and fires callback when the expression value changes.
   * This is used for both the $watch() api and directives.
   */
  var Watcher = function Watcher (
    vm,
    expOrFn,
    cb,
    options,
    isRenderWatcher
  ) {
    this.vm = vm;
    if (isRenderWatcher) {
      vm._watcher = this;
    }
    vm._watchers.push(this);
    // options
    if (options) {
      this.deep = !!options.deep;
      this.user = !!options.user;
      this.lazy = !!options.lazy;
      this.sync = !!options.sync;
      this.before = options.before;
    } else {
      this.deep = this.user = this.lazy = this.sync = false;
    }
    this.cb = cb;
    this.id = ++uid$2; // uid for batching
    this.active = true;
    this.dirty = this.lazy; // for lazy watchers
    this.deps = [];
    this.newDeps = [];
    this.depIds = new _Set();
    this.newDepIds = new _Set();
    this.expression =  true
      ? expOrFn.toString()
      : undefined;
    // parse expression for getter
    if (typeof expOrFn === 'function') {
      this.getter = expOrFn;
    } else {
      this.getter = parsePath(expOrFn);
      if (!this.getter) {
        this.getter = noop;
         true && warn(
          "Failed watching path: \"" + expOrFn + "\" " +
          'Watcher only accepts simple dot-delimited paths. ' +
          'For full control, use a function instead.',
          vm
        );
      }
    }
    this.value = this.lazy
      ? undefined
      : this.get();
  };
  
  /**
   * Evaluate the getter, and re-collect dependencies.
   */
  Watcher.prototype.get = function get () {
    pushTarget(this);
    var value;
    var vm = this.vm;
    try {
      value = this.getter.call(vm, vm);
    } catch (e) {
      if (this.user) {
        handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
      } else {
        throw e
      }
    } finally {
      // "touch" every property so they are all tracked as
      // dependencies for deep watching
      if (this.deep) {
        traverse(value);
      }
      popTarget();
      this.cleanupDeps();
    }
    return value
  };
  
  /**
   * Add a dependency to this directive.
   */
  Watcher.prototype.addDep = function addDep (dep) {
    var id = dep.id;
    if (!this.newDepIds.has(id)) {
      this.newDepIds.add(id);
      this.newDeps.push(dep);
      if (!this.depIds.has(id)) {
        dep.addSub(this);
      }
    }
  };
  
  /**
   * Clean up for dependency collection.
   */
  Watcher.prototype.cleanupDeps = function cleanupDeps () {
    var i = this.deps.length;
    while (i--) {
      var dep = this.deps[i];
      if (!this.newDepIds.has(dep.id)) {
        dep.removeSub(this);
      }
    }
    var tmp = this.depIds;
    this.depIds = this.newDepIds;
    this.newDepIds = tmp;
    this.newDepIds.clear();
    tmp = this.deps;
    this.deps = this.newDeps;
    this.newDeps = tmp;
    this.newDeps.length = 0;
  };
  
  /**
   * Subscriber interface.
   * Will be called when a dependency changes.
   */
  Watcher.prototype.update = function update () {
    /* istanbul ignore else */
    if (this.lazy) {
      this.dirty = true;
    } else if (this.sync) {
      this.run();
    } else {
      queueWatcher(this);
    }
  };
  
  /**
   * Scheduler job interface.
   * Will be called by the scheduler.
   */
  Watcher.prototype.run = function run () {
    if (this.active) {
      var value = this.get();
      if (
        value !== this.value ||
        // Deep watchers and watchers on Object/Arrays should fire even
        // when the value is the same, because the value may
        // have mutated.
        isObject(value) ||
        this.deep
      ) {
        // set new value
        var oldValue = this.value;
        this.value = value;
        if (this.user) {
          try {
            this.cb.call(this.vm, value, oldValue);
          } catch (e) {
            handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
          }
        } else {
          this.cb.call(this.vm, value, oldValue);
        }
      }
    }
  };
  
  /**
   * Evaluate the value of the watcher.
   * This only gets called for lazy watchers.
   */
  Watcher.prototype.evaluate = function evaluate () {
    this.value = this.get();
    this.dirty = false;
  };
  
  /**
   * Depend on all deps collected by this watcher.
   */
  Watcher.prototype.depend = function depend () {
    var i = this.deps.length;
    while (i--) {
      this.deps[i].depend();
    }
  };
  
  /**
   * Remove self from all dependencies' subscriber list.
   */
  Watcher.prototype.teardown = function teardown () {
    if (this.active) {
      // remove self from vm's watcher list
      // this is a somewhat expensive operation so we skip it
      // if the vm is being destroyed.
      if (!this.vm._isBeingDestroyed) {
        remove(this.vm._watchers, this);
      }
      var i = this.deps.length;
      while (i--) {
        this.deps[i].removeSub(this);
      }
      this.active = false;
    }
  };
  
  /*  */
  
  var sharedPropertyDefinition = {
    enumerable: true,
    configurable: true,
    get: noop,
    set: noop
  };
  
  function proxy (target, sourceKey, key) {
    sharedPropertyDefinition.get = function proxyGetter () {
      return this[sourceKey][key]
    };
    sharedPropertyDefinition.set = function proxySetter (val) {
      this[sourceKey][key] = val;
    };
    Object.defineProperty(target, key, sharedPropertyDefinition);
  }
  
  function initState (vm) {
    vm._watchers = [];
    var opts = vm.$options;
    if (opts.props) { initProps(vm, opts.props); }
    if (opts.methods) { initMethods(vm, opts.methods); }
    if (opts.data) {
      initData(vm);
    } else {
      observe(vm._data = {}, true /* asRootData */);
    }
    if (opts.computed) { initComputed(vm, opts.computed); }
    if (opts.watch && opts.watch !== nativeWatch) {
      initWatch(vm, opts.watch);
    }
  }
  
  function initProps (vm, propsOptions) {
    var propsData = vm.$options.propsData || {};
    var props = vm._props = {};
    // cache prop keys so that future props updates can iterate using Array
    // instead of dynamic object key enumeration.
    var keys = vm.$options._propKeys = [];
    var isRoot = !vm.$parent;
    // root instance props should be converted
    if (!isRoot) {
      toggleObserving(false);
    }
    var loop = function ( key ) {
      keys.push(key);
      var value = validateProp(key, propsOptions, propsData, vm);
      /* istanbul ignore else */
      if (true) {
        var hyphenatedKey = hyphenate(key);
        if (isReservedAttribute(hyphenatedKey) ||
            config.isReservedAttr(hyphenatedKey)) {
          warn(
            ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
            vm
          );
        }
        defineReactive$$1(props, key, value, function () {
          if (!isRoot && !isUpdatingChildComponent) {
            {
              if(vm.mpHost === 'mp-baidu'){//百度 observer 在 setData callback 之后触发，直接忽略该 warn
                  return
              }
              //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警
              if(
                  key === 'value' && 
                  Array.isArray(vm.$options.behaviors) &&
                  vm.$options.behaviors.indexOf('uni://form-field') !== -1
                ){
                return
              }
              if(vm._getFormData){
                return
              }
              var $parent = vm.$parent;
              while($parent){
                if($parent.__next_tick_pending){
                  return  
                }
                $parent = $parent.$parent;
              }
            }
            warn(
              "Avoid mutating a prop directly since the value will be " +
              "overwritten whenever the parent component re-renders. " +
              "Instead, use a data or computed property based on the prop's " +
              "value. Prop being mutated: \"" + key + "\"",
              vm
            );
          }
        });
      } else {}
      // static props are already proxied on the component's prototype
      // during Vue.extend(). We only need to proxy props defined at
      // instantiation here.
      if (!(key in vm)) {
        proxy(vm, "_props", key);
      }
    };
  
    for (var key in propsOptions) loop( key );
    toggleObserving(true);
  }
  
  function initData (vm) {
    var data = vm.$options.data;
    data = vm._data = typeof data === 'function'
      ? getData(data, vm)
      : data || {};
    if (!isPlainObject(data)) {
      data = {};
       true && warn(
        'data functions should return an object:\n' +
        'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
        vm
      );
    }
    // proxy data on instance
    var keys = Object.keys(data);
    var props = vm.$options.props;
    var methods = vm.$options.methods;
    var i = keys.length;
    while (i--) {
      var key = keys[i];
      if (true) {
        if (methods && hasOwn(methods, key)) {
          warn(
            ("Method \"" + key + "\" has already been defined as a data property."),
            vm
          );
        }
      }
      if (props && hasOwn(props, key)) {
         true && warn(
          "The data property \"" + key + "\" is already declared as a prop. " +
          "Use prop default value instead.",
          vm
        );
      } else if (!isReserved(key)) {
        proxy(vm, "_data", key);
      }
    }
    // observe data
    observe(data, true /* asRootData */);
  }
  
  function getData (data, vm) {
    // #7573 disable dep collection when invoking data getters
    pushTarget();
    try {
      return data.call(vm, vm)
    } catch (e) {
      handleError(e, vm, "data()");
      return {}
    } finally {
      popTarget();
    }
  }
  
  var computedWatcherOptions = { lazy: true };
  
  function initComputed (vm, computed) {
    // $flow-disable-line
    var watchers = vm._computedWatchers = Object.create(null);
    // computed properties are just getters during SSR
    var isSSR = isServerRendering();
  
    for (var key in computed) {
      var userDef = computed[key];
      var getter = typeof userDef === 'function' ? userDef : userDef.get;
      if ( true && getter == null) {
        warn(
          ("Getter is missing for computed property \"" + key + "\"."),
          vm
        );
      }
  
      if (!isSSR) {
        // create internal watcher for the computed property.
        watchers[key] = new Watcher(
          vm,
          getter || noop,
          noop,
          computedWatcherOptions
        );
      }
  
      // component-defined computed properties are already defined on the
      // component prototype. We only need to define computed properties defined
      // at instantiation here.
      if (!(key in vm)) {
        defineComputed(vm, key, userDef);
      } else if (true) {
        if (key in vm.$data) {
          warn(("The computed property \"" + key + "\" is already defined in data."), vm);
        } else if (vm.$options.props && key in vm.$options.props) {
          warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
        }
      }
    }
  }
  
  function defineComputed (
    target,
    key,
    userDef
  ) {
    var shouldCache = !isServerRendering();
    if (typeof userDef === 'function') {
      sharedPropertyDefinition.get = shouldCache
        ? createComputedGetter(key)
        : createGetterInvoker(userDef);
      sharedPropertyDefinition.set = noop;
    } else {
      sharedPropertyDefinition.get = userDef.get
        ? shouldCache && userDef.cache !== false
          ? createComputedGetter(key)
          : createGetterInvoker(userDef.get)
        : noop;
      sharedPropertyDefinition.set = userDef.set || noop;
    }
    if ( true &&
        sharedPropertyDefinition.set === noop) {
      sharedPropertyDefinition.set = function () {
        warn(
          ("Computed property \"" + key + "\" was assigned to but it has no setter."),
          this
        );
      };
    }
    Object.defineProperty(target, key, sharedPropertyDefinition);
  }
  
  function createComputedGetter (key) {
    return function computedGetter () {
      var watcher = this._computedWatchers && this._computedWatchers[key];
      if (watcher) {
        if (watcher.dirty) {
          watcher.evaluate();
        }
        if (Dep.SharedObject.target) {// fixed by xxxxxx
          watcher.depend();
        }
        return watcher.value
      }
    }
  }
  
  function createGetterInvoker(fn) {
    return function computedGetter () {
      return fn.call(this, this)
    }
  }
  
  function initMethods (vm, methods) {
    var props = vm.$options.props;
    for (var key in methods) {
      if (true) {
        if (typeof methods[key] !== 'function') {
          warn(
            "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
            "Did you reference the function correctly?",
            vm
          );
        }
        if (props && hasOwn(props, key)) {
          warn(
            ("Method \"" + key + "\" has already been defined as a prop."),
            vm
          );
        }
        if ((key in vm) && isReserved(key)) {
          warn(
            "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
            "Avoid defining component methods that start with _ or $."
          );
        }
      }
      vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
    }
  }
  
  function initWatch (vm, watch) {
    for (var key in watch) {
      var handler = watch[key];
      if (Array.isArray(handler)) {
        for (var i = 0; i < handler.length; i++) {
          createWatcher(vm, key, handler[i]);
        }
      } else {
        createWatcher(vm, key, handler);
      }
    }
  }
  
  function createWatcher (
    vm,
    expOrFn,
    handler,
    options
  ) {
    if (isPlainObject(handler)) {
      options = handler;
      handler = handler.handler;
    }
    if (typeof handler === 'string') {
      handler = vm[handler];
    }
    return vm.$watch(expOrFn, handler, options)
  }
  
  function stateMixin (Vue) {
    // flow somehow has problems with directly declared definition object
    // when using Object.defineProperty, so we have to procedurally build up
    // the object here.
    var dataDef = {};
    dataDef.get = function () { return this._data };
    var propsDef = {};
    propsDef.get = function () { return this._props };
    if (true) {
      dataDef.set = function () {
        warn(
          'Avoid replacing instance root $data. ' +
          'Use nested data properties instead.',
          this
        );
      };
      propsDef.set = function () {
        warn("$props is readonly.", this);
      };
    }
    Object.defineProperty(Vue.prototype, '$data', dataDef);
    Object.defineProperty(Vue.prototype, '$props', propsDef);
  
    Vue.prototype.$set = set;
    Vue.prototype.$delete = del;
  
    Vue.prototype.$watch = function (
      expOrFn,
      cb,
      options
    ) {
      var vm = this;
      if (isPlainObject(cb)) {
        return createWatcher(vm, expOrFn, cb, options)
      }
      options = options || {};
      options.user = true;
      var watcher = new Watcher(vm, expOrFn, cb, options);
      if (options.immediate) {
        try {
          cb.call(vm, watcher.value);
        } catch (error) {
          handleError(error, vm, ("callback for immediate watcher \"" + (watcher.expression) + "\""));
        }
      }
      return function unwatchFn () {
        watcher.teardown();
      }
    };
  }
  
  /*  */
  
  var uid$3 = 0;
  
  function initMixin (Vue) {
    Vue.prototype._init = function (options) {
      var vm = this;
      // a uid
      vm._uid = uid$3++;
  
      var startTag, endTag;
      /* istanbul ignore if */
      if ( true && config.performance && mark) {
        startTag = "vue-perf-start:" + (vm._uid);
        endTag = "vue-perf-end:" + (vm._uid);
        mark(startTag);
      }
  
      // a flag to avoid this being observed
      vm._isVue = true;
      // merge options
      if (options && options._isComponent) {
        // optimize internal component instantiation
        // since dynamic options merging is pretty slow, and none of the
        // internal component options needs special treatment.
        initInternalComponent(vm, options);
      } else {
        vm.$options = mergeOptions(
          resolveConstructorOptions(vm.constructor),
          options || {},
          vm
        );
      }
      /* istanbul ignore else */
      if (true) {
        initProxy(vm);
      } else {}
      // expose real self
      vm._self = vm;
      initLifecycle(vm);
      initEvents(vm);
      initRender(vm);
      callHook(vm, 'beforeCreate');
      vm.mpHost !== 'mp-toutiao' && initInjections(vm); // resolve injections before data/props  
      initState(vm);
      vm.mpHost !== 'mp-toutiao' && initProvide(vm); // resolve provide after data/props
      vm.mpHost !== 'mp-toutiao' && callHook(vm, 'created');      
  
      /* istanbul ignore if */
      if ( true && config.performance && mark) {
        vm._name = formatComponentName(vm, false);
        mark(endTag);
        measure(("vue " + (vm._name) + " init"), startTag, endTag);
      }
  
      if (vm.$options.el) {
        vm.$mount(vm.$options.el);
      }
    };
  }
  
  function initInternalComponent (vm, options) {
    var opts = vm.$options = Object.create(vm.constructor.options);
    // doing this because it's faster than dynamic enumeration.
    var parentVnode = options._parentVnode;
    opts.parent = options.parent;
    opts._parentVnode = parentVnode;
  
    var vnodeComponentOptions = parentVnode.componentOptions;
    opts.propsData = vnodeComponentOptions.propsData;
    opts._parentListeners = vnodeComponentOptions.listeners;
    opts._renderChildren = vnodeComponentOptions.children;
    opts._componentTag = vnodeComponentOptions.tag;
  
    if (options.render) {
      opts.render = options.render;
      opts.staticRenderFns = options.staticRenderFns;
    }
  }
  
  function resolveConstructorOptions (Ctor) {
    var options = Ctor.options;
    if (Ctor.super) {
      var superOptions = resolveConstructorOptions(Ctor.super);
      var cachedSuperOptions = Ctor.superOptions;
      if (superOptions !== cachedSuperOptions) {
        // super option changed,
        // need to resolve new options.
        Ctor.superOptions = superOptions;
        // check if there are any late-modified/attached options (#4976)
        var modifiedOptions = resolveModifiedOptions(Ctor);
        // update base extend options
        if (modifiedOptions) {
          extend(Ctor.extendOptions, modifiedOptions);
        }
        options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
        if (options.name) {
          options.components[options.name] = Ctor;
        }
      }
    }
    return options
  }
  
  function resolveModifiedOptions (Ctor) {
    var modified;
    var latest = Ctor.options;
    var sealed = Ctor.sealedOptions;
    for (var key in latest) {
      if (latest[key] !== sealed[key]) {
        if (!modified) { modified = {}; }
        modified[key] = latest[key];
      }
    }
    return modified
  }
  
  function Vue (options) {
    if ( true &&
      !(this instanceof Vue)
    ) {
      warn('Vue is a constructor and should be called with the `new` keyword');
    }
    this._init(options);
  }
  
  initMixin(Vue);
  stateMixin(Vue);
  eventsMixin(Vue);
  lifecycleMixin(Vue);
  renderMixin(Vue);
  
  /*  */
  
  function initUse (Vue) {
    Vue.use = function (plugin) {
      var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
      if (installedPlugins.indexOf(plugin) > -1) {
        return this
      }
  
      // additional parameters
      var args = toArray(arguments, 1);
      args.unshift(this);
      if (typeof plugin.install === 'function') {
        plugin.install.apply(plugin, args);
      } else if (typeof plugin === 'function') {
        plugin.apply(null, args);
      }
      installedPlugins.push(plugin);
      return this
    };
  }
  
  /*  */
  
  function initMixin$1 (Vue) {
    Vue.mixin = function (mixin) {
      this.options = mergeOptions(this.options, mixin);
      return this
    };
  }
  
  /*  */
  
  function initExtend (Vue) {
    /**
     * Each instance constructor, including Vue, has a unique
     * cid. This enables us to create wrapped "child
     * constructors" for prototypal inheritance and cache them.
     */
    Vue.cid = 0;
    var cid = 1;
  
    /**
     * Class inheritance
     */
    Vue.extend = function (extendOptions) {
      extendOptions = extendOptions || {};
      var Super = this;
      var SuperId = Super.cid;
      var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
      if (cachedCtors[SuperId]) {
        return cachedCtors[SuperId]
      }
  
      var name = extendOptions.name || Super.options.name;
      if ( true && name) {
        validateComponentName(name);
      }
  
      var Sub = function VueComponent (options) {
        this._init(options);
      };
      Sub.prototype = Object.create(Super.prototype);
      Sub.prototype.constructor = Sub;
      Sub.cid = cid++;
      Sub.options = mergeOptions(
        Super.options,
        extendOptions
      );
      Sub['super'] = Super;
  
      // For props and computed properties, we define the proxy getters on
      // the Vue instances at extension time, on the extended prototype. This
      // avoids Object.defineProperty calls for each instance created.
      if (Sub.options.props) {
        initProps$1(Sub);
      }
      if (Sub.options.computed) {
        initComputed$1(Sub);
      }
  
      // allow further extension/mixin/plugin usage
      Sub.extend = Super.extend;
      Sub.mixin = Super.mixin;
      Sub.use = Super.use;
  
      // create asset registers, so extended classes
      // can have their private assets too.
      ASSET_TYPES.forEach(function (type) {
        Sub[type] = Super[type];
      });
      // enable recursive self-lookup
      if (name) {
        Sub.options.components[name] = Sub;
      }
  
      // keep a reference to the super options at extension time.
      // later at instantiation we can check if Super's options have
      // been updated.
      Sub.superOptions = Super.options;
      Sub.extendOptions = extendOptions;
      Sub.sealedOptions = extend({}, Sub.options);
  
      // cache constructor
      cachedCtors[SuperId] = Sub;
      return Sub
    };
  }
  
  function initProps$1 (Comp) {
    var props = Comp.options.props;
    for (var key in props) {
      proxy(Comp.prototype, "_props", key);
    }
  }
  
  function initComputed$1 (Comp) {
    var computed = Comp.options.computed;
    for (var key in computed) {
      defineComputed(Comp.prototype, key, computed[key]);
    }
  }
  
  /*  */
  
  function initAssetRegisters (Vue) {
    /**
     * Create asset registration methods.
     */
    ASSET_TYPES.forEach(function (type) {
      Vue[type] = function (
        id,
        definition
      ) {
        if (!definition) {
          return this.options[type + 's'][id]
        } else {
          /* istanbul ignore if */
          if ( true && type === 'component') {
            validateComponentName(id);
          }
          if (type === 'component' && isPlainObject(definition)) {
            definition.name = definition.name || id;
            definition = this.options._base.extend(definition);
          }
          if (type === 'directive' && typeof definition === 'function') {
            definition = { bind: definition, update: definition };
          }
          this.options[type + 's'][id] = definition;
          return definition
        }
      };
    });
  }
  
  /*  */
  
  
  
  function getComponentName (opts) {
    return opts && (opts.Ctor.options.name || opts.tag)
  }
  
  function matches (pattern, name) {
    if (Array.isArray(pattern)) {
      return pattern.indexOf(name) > -1
    } else if (typeof pattern === 'string') {
      return pattern.split(',').indexOf(name) > -1
    } else if (isRegExp(pattern)) {
      return pattern.test(name)
    }
    /* istanbul ignore next */
    return false
  }
  
  function pruneCache (keepAliveInstance, filter) {
    var cache = keepAliveInstance.cache;
    var keys = keepAliveInstance.keys;
    var _vnode = keepAliveInstance._vnode;
    for (var key in cache) {
      var cachedNode = cache[key];
      if (cachedNode) {
        var name = getComponentName(cachedNode.componentOptions);
        if (name && !filter(name)) {
          pruneCacheEntry(cache, key, keys, _vnode);
        }
      }
    }
  }
  
  function pruneCacheEntry (
    cache,
    key,
    keys,
    current
  ) {
    var cached$$1 = cache[key];
    if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
      cached$$1.componentInstance.$destroy();
    }
    cache[key] = null;
    remove(keys, key);
  }
  
  var patternTypes = [String, RegExp, Array];
  
  var KeepAlive = {
    name: 'keep-alive',
    abstract: true,
  
    props: {
      include: patternTypes,
      exclude: patternTypes,
      max: [String, Number]
    },
  
    created: function created () {
      this.cache = Object.create(null);
      this.keys = [];
    },
  
    destroyed: function destroyed () {
      for (var key in this.cache) {
        pruneCacheEntry(this.cache, key, this.keys);
      }
    },
  
    mounted: function mounted () {
      var this$1 = this;
  
      this.$watch('include', function (val) {
        pruneCache(this$1, function (name) { return matches(val, name); });
      });
      this.$watch('exclude', function (val) {
        pruneCache(this$1, function (name) { return !matches(val, name); });
      });
    },
  
    render: function render () {
      var slot = this.$slots.default;
      var vnode = getFirstComponentChild(slot);
      var componentOptions = vnode && vnode.componentOptions;
      if (componentOptions) {
        // check pattern
        var name = getComponentName(componentOptions);
        var ref = this;
        var include = ref.include;
        var exclude = ref.exclude;
        if (
          // not included
          (include && (!name || !matches(include, name))) ||
          // excluded
          (exclude && name && matches(exclude, name))
        ) {
          return vnode
        }
  
        var ref$1 = this;
        var cache = ref$1.cache;
        var keys = ref$1.keys;
        var key = vnode.key == null
          // same constructor may get registered as different local components
          // so cid alone is not enough (#3269)
          ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
          : vnode.key;
        if (cache[key]) {
          vnode.componentInstance = cache[key].componentInstance;
          // make current key freshest
          remove(keys, key);
          keys.push(key);
        } else {
          cache[key] = vnode;
          keys.push(key);
          // prune oldest entry
          if (this.max && keys.length > parseInt(this.max)) {
            pruneCacheEntry(cache, keys[0], keys, this._vnode);
          }
        }
  
        vnode.data.keepAlive = true;
      }
      return vnode || (slot && slot[0])
    }
  };
  
  var builtInComponents = {
    KeepAlive: KeepAlive
  };
  
  /*  */
  
  function initGlobalAPI (Vue) {
    // config
    var configDef = {};
    configDef.get = function () { return config; };
    if (true) {
      configDef.set = function () {
        warn(
          'Do not replace the Vue.config object, set individual fields instead.'
        );
      };
    }
    Object.defineProperty(Vue, 'config', configDef);
  
    // exposed util methods.
    // NOTE: these are not considered part of the public API - avoid relying on
    // them unless you are aware of the risk.
    Vue.util = {
      warn: warn,
      extend: extend,
      mergeOptions: mergeOptions,
      defineReactive: defineReactive$$1
    };
  
    Vue.set = set;
    Vue.delete = del;
    Vue.nextTick = nextTick;
  
    // 2.6 explicit observable API
    Vue.observable = function (obj) {
      observe(obj);
      return obj
    };
  
    Vue.options = Object.create(null);
    ASSET_TYPES.forEach(function (type) {
      Vue.options[type + 's'] = Object.create(null);
    });
  
    // this is used to identify the "base" constructor to extend all plain-object
    // components with in Weex's multi-instance scenarios.
    Vue.options._base = Vue;
  
    extend(Vue.options.components, builtInComponents);
  
    initUse(Vue);
    initMixin$1(Vue);
    initExtend(Vue);
    initAssetRegisters(Vue);
  }
  
  initGlobalAPI(Vue);
  
  Object.defineProperty(Vue.prototype, '$isServer', {
    get: isServerRendering
  });
  
  Object.defineProperty(Vue.prototype, '$ssrContext', {
    get: function get () {
      /* istanbul ignore next */
      return this.$vnode && this.$vnode.ssrContext
    }
  });
  
  // expose FunctionalRenderContext for ssr runtime helper installation
  Object.defineProperty(Vue, 'FunctionalRenderContext', {
    value: FunctionalRenderContext
  });
  
  Vue.version = '2.6.10';
  
  /**
   * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js
   */
  var ARRAYTYPE = '[object Array]';
  var OBJECTTYPE = '[object Object]';
  // const FUNCTIONTYPE = '[object Function]'
  
  function diff(current, pre) {
      var result = {};
      syncKeys(current, pre);
      _diff(current, pre, '', result);
      return result
  }
  
  function syncKeys(current, pre) {
      if (current === pre) { return }
      var rootCurrentType = type(current);
      var rootPreType = type(pre);
      if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
          if(Object.keys(current).length >= Object.keys(pre).length){
              for (var key in pre) {
                  var currentValue = current[key];
                  if (currentValue === undefined) {
                      current[key] = null;
                  } else {
                      syncKeys(currentValue, pre[key]);
                  }
              }
          }
      } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
          if (current.length >= pre.length) {
              pre.forEach(function (item, index) {
                  syncKeys(current[index], item);
              });
          }
      }
  }
  
  function _diff(current, pre, path, result) {
      if (current === pre) { return }
      var rootCurrentType = type(current);
      var rootPreType = type(pre);
      if (rootCurrentType == OBJECTTYPE) {
          if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
              setResult(result, path, current);
          } else {
              var loop = function ( key ) {
                  var currentValue = current[key];
                  var preValue = pre[key];
                  var currentType = type(currentValue);
                  var preType = type(preValue);
                  if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
                      if (currentValue != pre[key]) {
                          setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
                      }
                  } else if (currentType == ARRAYTYPE) {
                      if (preType != ARRAYTYPE) {
                          setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
                      } else {
                          if (currentValue.length < preValue.length) {
                              setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
                          } else {
                              currentValue.forEach(function (item, index) {
                                  _diff(item, preValue[index], (path == '' ? '' : path + ".") + key + '[' + index + ']', result);
                              });
                          }
                      }
                  } else if (currentType == OBJECTTYPE) {
                      if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
                          setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
                      } else {
                          for (var subKey in currentValue) {
                              _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + ".") + key + '.' + subKey, result);
                          }
                      }
                  }
              };
  
              for (var key in current) loop( key );
          }
      } else if (rootCurrentType == ARRAYTYPE) {
          if (rootPreType != ARRAYTYPE) {
              setResult(result, path, current);
          } else {
              if (current.length < pre.length) {
                  setResult(result, path, current);
              } else {
                  current.forEach(function (item, index) {
                      _diff(item, pre[index], path + '[' + index + ']', result);
                  });
              }
          }
      } else {
          setResult(result, path, current);
      }
  }
  
  function setResult(result, k, v) {
      // if (type(v) != FUNCTIONTYPE) {
          result[k] = v;
      // }
  }
  
  function type(obj) {
      return Object.prototype.toString.call(obj)
  }
  
  /*  */
  
  function flushCallbacks$1(vm) {
      if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {
          if (Object({"VUE_APP_PLATFORM":"mp-alipay","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
              var mpInstance = vm.$scope;
              console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
                  ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');
          }
          var copies = vm.__next_tick_callbacks.slice(0);
          vm.__next_tick_callbacks.length = 0;
          for (var i = 0; i < copies.length; i++) {
              copies[i]();
          }
      }
  }
  
  function hasRenderWatcher(vm) {
      return queue.find(function (watcher) { return vm._watcher === watcher; })
  }
  
  function nextTick$1(vm, cb) {
      //1.nextTick 之前 已 setData 且 setData 还未回调完成
      //2.nextTick 之前存在 render watcher
      if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {
          if(Object({"VUE_APP_PLATFORM":"mp-alipay","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG){
              var mpInstance = vm.$scope;
              console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
                  ']:nextVueTick');
          }
          return nextTick(cb, vm)
      }else{
          if(Object({"VUE_APP_PLATFORM":"mp-alipay","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG){
              var mpInstance$1 = vm.$scope;
              console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +
                  ']:nextMPTick');
          }
      }
      var _resolve;
      if (!vm.__next_tick_callbacks) {
          vm.__next_tick_callbacks = [];
      }
      vm.__next_tick_callbacks.push(function () {
          if (cb) {
              try {
                  cb.call(vm);
              } catch (e) {
                  handleError(e, vm, 'nextTick');
              }
          } else if (_resolve) {
              _resolve(vm);
          }
      });
      // $flow-disable-line
      if (!cb && typeof Promise !== 'undefined') {
          return new Promise(function (resolve) {
              _resolve = resolve;
          })
      }
  }
  
  /*  */
  
  function cloneWithData(vm) {
    // 确保当前 vm 所有数据被同步
    var ret = Object.create(null);
    var dataKeys = [].concat(
      Object.keys(vm._data || {}),
      Object.keys(vm._computedWatchers || {}));
  
    dataKeys.reduce(function(ret, key) {
      ret[key] = vm[key];
      return ret
    }, ret);
    //TODO 需要把无用数据处理掉，比如 list=>l0 则 list 需要移除，否则多传输一份数据
    Object.assign(ret, vm.$mp.data || {});
    if (
      Array.isArray(vm.$options.behaviors) &&
      vm.$options.behaviors.indexOf('uni://form-field') !== -1
    ) { //form-field
      ret['name'] = vm.name;
      ret['value'] = vm.value;
    }
  
    return JSON.parse(JSON.stringify(ret))
  }
  
  var patch = function(oldVnode, vnode) {
    var this$1 = this;
  
    if (vnode === null) { //destroy
      return
    }
    if (this.mpType === 'page' || this.mpType === 'component') {
      var mpInstance = this.$scope;
      var data = Object.create(null);
      try {
        data = cloneWithData(this);
      } catch (err) {
        console.error(err);
      }
      data.__webviewId__ = mpInstance.data.__webviewId__;
      var mpData = Object.create(null);
      Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据
        mpData[key] = mpInstance.data[key];
      });
      var diffData = diff(data, mpData);
      if (Object.keys(diffData).length) {
        if (Object({"VUE_APP_PLATFORM":"mp-alipay","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
          console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +
            ']差量更新',
            JSON.stringify(diffData));
        }
        this.__next_tick_pending = true;
        mpInstance.setData(diffData, function () {
          this$1.__next_tick_pending = false;
          flushCallbacks$1(this$1);
        });
      } else {
        flushCallbacks$1(this);
      }
    }
  };
  
  /*  */
  
  function createEmptyRender() {
  
  }
  
  function mountComponent$1(
    vm,
    el,
    hydrating
  ) {
    if (!vm.mpType) {//main.js 中的 new Vue
      return vm
    }
    if (vm.mpType === 'app') {
      vm.$options.render = createEmptyRender;
    }
    if (!vm.$options.render) {
      vm.$options.render = createEmptyRender;
      if (true) {
        /* istanbul ignore if */
        if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
          vm.$options.el || el) {
          warn(
            'You are using the runtime-only build of Vue where the template ' +
            'compiler is not available. Either pre-compile the templates into ' +
            'render functions, or use the compiler-included build.',
            vm
          );
        } else {
          warn(
            'Failed to mount component: template or render function not defined.',
            vm
          );
        }
      }
    }
    
    vm.mpHost !== 'mp-toutiao' && callHook(vm, 'beforeMount');
  
    var updateComponent = function () {
      vm._update(vm._render(), hydrating);
    };
  
    // we set this to vm._watcher inside the watcher's constructor
    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
    // component's mounted hook), which relies on vm._watcher being already defined
    new Watcher(vm, updateComponent, noop, {
      before: function before() {
        if (vm._isMounted && !vm._isDestroyed) {
          callHook(vm, 'beforeUpdate');
        }
      }
    }, true /* isRenderWatcher */);
    hydrating = false;
    return vm
  }
  
  /*  */
  
  function renderClass (
    staticClass,
    dynamicClass
  ) {
    if (isDef(staticClass) || isDef(dynamicClass)) {
      return concat(staticClass, stringifyClass(dynamicClass))
    }
    /* istanbul ignore next */
    return ''
  }
  
  function concat (a, b) {
    return a ? b ? (a + ' ' + b) : a : (b || '')
  }
  
  function stringifyClass (value) {
    if (Array.isArray(value)) {
      return stringifyArray(value)
    }
    if (isObject(value)) {
      return stringifyObject(value)
    }
    if (typeof value === 'string') {
      return value
    }
    /* istanbul ignore next */
    return ''
  }
  
  function stringifyArray (value) {
    var res = '';
    var stringified;
    for (var i = 0, l = value.length; i < l; i++) {
      if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
        if (res) { res += ' '; }
        res += stringified;
      }
    }
    return res
  }
  
  function stringifyObject (value) {
    var res = '';
    for (var key in value) {
      if (value[key]) {
        if (res) { res += ' '; }
        res += key;
      }
    }
    return res
  }
  
  /*  */
  
  var parseStyleText = cached(function (cssText) {
    var res = {};
    var listDelimiter = /;(?![^(]*\))/g;
    var propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
      if (item) {
        var tmp = item.split(propertyDelimiter);
        tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
      }
    });
    return res
  });
  
  // normalize possible array / string values into Object
  function normalizeStyleBinding (bindingStyle) {
    if (Array.isArray(bindingStyle)) {
      return toObject(bindingStyle)
    }
    if (typeof bindingStyle === 'string') {
      return parseStyleText(bindingStyle)
    }
    return bindingStyle
  }
  
  /*  */
  
  var MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];
  
  function getTarget(obj, path) {
    var parts = path.split('.');
    var key = parts[0];
    if (key.indexOf('__$n') === 0) { //number index
      key = parseInt(key.replace('__$n', ''));
    }
    if (parts.length === 1) {
      return obj[key]
    }
    return getTarget(obj[key], parts.slice(1).join('.'))
  }
  
  function internalMixin(Vue) {
  
    Vue.config.errorHandler = function(err) {
      console.error(err);
    };
  
    var oldEmit = Vue.prototype.$emit;
  
    Vue.prototype.$emit = function(event) {
      if (this.$scope && event) {
        this.$scope['triggerEvent'](event, {
          __args__: toArray(arguments, 1)
        });
      }
      return oldEmit.apply(this, arguments)
    };
  
    Vue.prototype.$nextTick = function(fn) {
      return nextTick$1(this, fn)
    };
  
    MP_METHODS.forEach(function (method) {
      Vue.prototype[method] = function(args) {
        if (this.$scope) {
          return this.$scope[method](args)
        }
      };
    });
  
    Vue.prototype.__init_provide = initProvide;
  
    Vue.prototype.__init_injections = initInjections;
  
    Vue.prototype.__call_hook = function(hook, args) {
      var vm = this;
      // #7573 disable dep collection when invoking lifecycle hooks
      pushTarget();
      var handlers = vm.$options[hook];
      var info = hook + " hook";
      var ret;
      if (handlers) {
        for (var i = 0, j = handlers.length; i < j; i++) {
          ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);
        }
      }
      if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
      }
      popTarget();
      return ret
    };
  
    Vue.prototype.__set_model = function(target, key, value, modifiers) {
      if (Array.isArray(modifiers)) {
        if (modifiers.indexOf('trim') !== -1) {
          value = value.trim();
        }
        if (modifiers.indexOf('number') !== -1) {
          value = this._n(value);
        }
      }
      if (!target) {
        target = this;
      }
      target[key] = value;
    };
  
    Vue.prototype.__set_sync = function(target, key, value) {
      if (!target) {
        target = this;
      }
      target[key] = value;
    };
  
    Vue.prototype.__get_orig = function(item) {
      if (isPlainObject(item)) {
        return item['$orig'] || item
      }
      return item
    };
  
    Vue.prototype.__get_value = function(dataPath, target) {
      return getTarget(target || this, dataPath)
    };
  
  
    Vue.prototype.__get_class = function(dynamicClass, staticClass) {
      return renderClass(staticClass, dynamicClass)
    };
  
    Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {
      if (!dynamicStyle && !staticStyle) {
        return ''
      }
      var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);
      var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;
      return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + ":" + (styleObj[name])); }).join(';')
    };
  
    Vue.prototype.__map = function(val, iteratee) {
      //TODO 暂不考虑 string,number
      var ret, i, l, keys, key;
      if (Array.isArray(val)) {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
          ret[i] = iteratee(val[i], i);
        }
        return ret
      } else if (isObject(val)) {
        keys = Object.keys(val);
        ret = Object.create(null);
        for (i = 0, l = keys.length; i < l; i++) {
          key = keys[i];
          ret[key] = iteratee(val[key], key, i);
        }
        return ret
      }
      return []
    };
  
  }
  
  /*  */
  
  var LIFECYCLE_HOOKS$1 = [
      //App
      'onLaunch',
      'onShow',
      'onHide',
      'onUniNViewMessage',
      'onError',
      //Page
      'onLoad',
      // 'onShow',
      'onReady',
      // 'onHide',
      'onUnload',
      'onPullDownRefresh',
      'onReachBottom',
      'onTabItemTap',
      'onShareAppMessage',
      'onResize',
      'onPageScroll',
      'onNavigationBarButtonTap',
      'onBackPress',
      'onNavigationBarSearchInputChanged',
      'onNavigationBarSearchInputConfirmed',
      'onNavigationBarSearchInputClicked',
      //Component
      // 'onReady', // 兼容旧版本，应该移除该事件
      'onPageShow',
      'onPageHide',
      'onPageResize'
  ];
  function lifecycleMixin$1(Vue) {
  
      //fixed vue-class-component
      var oldExtend = Vue.extend;
      Vue.extend = function(extendOptions) {
          extendOptions = extendOptions || {};
  
          var methods = extendOptions.methods;
          if (methods) {
              Object.keys(methods).forEach(function (methodName) {
                  if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {
                      extendOptions[methodName] = methods[methodName];
                      delete methods[methodName];
                  }
              });
          }
  
          return oldExtend.call(this, extendOptions)
      };
  
      var strategies = Vue.config.optionMergeStrategies;
      var mergeHook = strategies.created;
      LIFECYCLE_HOOKS$1.forEach(function (hook) {
          strategies[hook] = mergeHook;
      });
  
      Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;
  }
  
  /*  */
  
  // install platform patch function
  Vue.prototype.__patch__ = patch;
  
  // public mount method
  Vue.prototype.$mount = function(
      el ,
      hydrating 
  ) {
      return mountComponent$1(this, el, hydrating)
  };
  
  lifecycleMixin$1(Vue);
  internalMixin(Vue);
  
  /*  */
  
  /* harmony default export */ __webpack_exports__["default"] = (Vue);
  
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ 3)))
  
  /***/ }),
  
  /***/ 20:
  /*!***********************************************!*\
    !*** D:/work/uniapp/ThorUI/common/request.js ***!
    \***********************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(uni) { //公共js,以及基本方法封装 nvue里使用
  var fetch = {
    interfaceUrl: function interfaceUrl() {
      //接口地址
      return "http://39.108.124.252:12000/";
    },
    toast: function toast(tips) {
      uni.showToast({
        title: tips || "出错啦~",
        icon: 'none',
        duration: 2000 });
  
    },
    request: function request(url, postData, method, type, showLoading) {
      //接口请求
      if (showLoading) {
        uni.showLoading({
          mask: true,
          title: '请稍候...' });
  
      }
      var token = postData.token || "";
      delete postData["token"];
      var params = {
        data: method === "POST" ? postData : JSON.stringify(postData) };
  
      return new Promise(function (resolve, reject) {
        uni.request({
          url: fetch.interfaceUrl() + url,
          data: method === "POST" ? JSON.stringify(params) : params,
          header: {
            'content-type': type ? 'application/x-www-form-urlencoded' : 'application/json',
            'authorization': token,
            'security': "1" },
  
          method: method, //'GET','POST'
          dataType: 'json',
          success: function success(res) {
            showLoading && uni.hideLoading();
            resolve(res.data);
          },
          fail: function fail(res) {
            fetch.toast("网络不给力，请稍后再试~");
            reject(res);
          } });
  
      });
    } };
  
  
  module.exports = {
    request: fetch.request,
    toast: fetch.toast };
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 3:
  /*!***********************************!*\
    !*** (webpack)/buildin/global.js ***!
    \***********************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  var g;
  
  // This works in non-strict mode
  g = (function() {
  	return this;
  })();
  
  try {
  	// This works if eval is allowed (see CSP)
  	g = g || new Function("return this")();
  } catch (e) {
  	// This works if the window reference is available
  	if (typeof window === "object") g = window;
  }
  
  // g can still be undefined, but nothing to do about it...
  // We return undefined, instead of nothing here, so it's
  // easier to handle this case. if(!global) { ...}
  
  module.exports = g;
  
  
  /***/ }),
  
  /***/ 372:
  /*!********************************************************!*\
    !*** D:/work/uniapp/ThorUI/libs/qqmap-wx-jssdk.min.js ***!
    \********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(wx) {function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a 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);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}var ERROR_CONF = { KEY_ERR: 311, KEY_ERR_MSG: 'key格式错误', PARAM_ERR: 310, PARAM_ERR_MSG: '请求参数信息有误', SYSTEM_ERR: 600, SYSTEM_ERR_MSG: '系统错误', WX_ERR_CODE: 1000, WX_OK_CODE: 200 };var BASE_URL = 'https://apis.map.qq.com/ws/';var URL_SEARCH = BASE_URL + 'place/v1/search';var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';var URL_CITY_LIST = BASE_URL + 'district/v1/list';var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';var URL_DISTANCE = BASE_URL + 'distance/v1/';var EARTH_RADIUS = 6378136.49;var Utils = { location2query: function location2query(data) {if (typeof data == 'string') {return data;}var query = '';for (var i = 0; i < data.length; i++) {var d = data[i];if (!!query) {query += ';';}if (d.location) {query = query + d.location.lat + ',' + d.location.lng;}if (d.latitude && d.longitude) {query = query + d.latitude + ',' + d.longitude;}}return query;}, rad: function rad(d) {return d * Math.PI / 180.0;}, getEndLocation: function getEndLocation(location) {var to = location.split(';');var endLocation = [];for (var i = 0; i < to.length; i++) {endLocation.push({ lat: parseFloat(to[i].split(',')[0]), lng: parseFloat(to[i].split(',')[1]) });}return endLocation;}, getDistance: function getDistance(latFrom, lngFrom, latTo, lngTo) {var radLatFrom = this.rad(latFrom);var radLatTo = this.rad(latTo);var a = radLatFrom - radLatTo;var b = this.rad(lngFrom) - this.rad(lngTo);var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));distance = distance * EARTH_RADIUS;distance = Math.round(distance * 10000) / 10000;return parseFloat(distance.toFixed(0));}, getWXLocation: function getWXLocation(success, fail, complete) {wx.getLocation({ type: 'gcj02', success: success, fail: fail, complete: complete });}, getLocationParam: function getLocationParam(location) {if (typeof location == 'string') {var locationArr = location.split(',');if (locationArr.length === 2) {location = { latitude: location.split(',')[0], longitude: location.split(',')[1] };} else {location = {};}}return location;}, polyfillParam: function polyfillParam(param) {param.success = param.success || function () {};param.fail = param.fail || function () {};param.complete = param.complete || function () {};}, checkParamKeyEmpty: function checkParamKeyEmpty(param, key) {if (!param[key]) {var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key + '参数格式有误');param.fail(errconf);param.complete(errconf);return true;}return false;}, checkKeyword: function checkKeyword(param) {return !this.checkParamKeyEmpty(param, 'keyword');}, checkLocation: function checkLocation(param) {var location = this.getLocationParam(param.location);if (!location || !location.latitude || !location.longitude) {var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');param.fail(errconf);param.complete(errconf);return false;}return true;}, buildErrorConfig: function buildErrorConfig(errCode, errMsg) {return { status: errCode, message: errMsg };}, handleData: function handleData(param, data, feature) {if (feature === 'search') {var searchResult = data.data;var searchSimplify = [];for (var i = 0; i < searchResult.length; i++) {searchSimplify.push({ id: searchResult[i].id || null, title: searchResult[i].title || null, latitude: searchResult[i].location && searchResult[i].location.lat || null, longitude: searchResult[i].location && searchResult[i].location.lng || null, address: searchResult[i].address || null, category: searchResult[i].category || null, tel: searchResult[i].tel || null, adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null, city: searchResult[i].ad_info && searchResult[i].ad_info.city || null, district: searchResult[i].ad_info && searchResult[i].ad_info.district || null, province: searchResult[i].ad_info && searchResult[i].ad_info.province || null });}param.success(data, { searchResult: searchResult, searchSimplify: searchSimplify });} else if (feature === 'suggest') {var suggestResult = data.data;var suggestSimplify = [];for (var i = 0; i < suggestResult.length; i++) {suggestSimplify.push({ adcode: suggestResult[i].adcode || null, address: suggestResult[i].address || null, category: suggestResult[i].category || null, city: suggestResult[i].city || null, district: suggestResult[i].district || null, id: suggestResult[i].id || null, latitude: suggestResult[i].location && suggestResult[i].location.lat || null, longitude: suggestResult[i].location && suggestResult[i].location.lng || null, province: suggestResult[i].province || null, title: suggestResult[i].title || null, type: suggestResult[i].type || null });}param.success(data, { suggestResult: suggestResult, suggestSimplify: suggestSimplify });} else if (feature === 'reverseGeocoder') {var reverseGeocoderResult = data.result;var reverseGeocoderSimplify = { address: reverseGeocoderResult.address || null, latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null, longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null, adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null, city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null, district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null, nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null, province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null, street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null, street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null, recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null, rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null };if (reverseGeocoderResult.pois) {var pois = reverseGeocoderResult.pois;var poisSimplify = [];for (var i = 0; i < pois.length; i++) {poisSimplify.push({ id: pois[i].id || null, title: pois[i].title || null, latitude: pois[i].location && pois[i].location.lat || null, longitude: pois[i].location && pois[i].location.lng || null, address: pois[i].address || null, category: pois[i].category || null, adcode: pois[i].ad_info && pois[i].ad_info.adcode || null, city: pois[i].ad_info && pois[i].ad_info.city || null, district: pois[i].ad_info && pois[i].ad_info.district || null, province: pois[i].ad_info && pois[i].ad_info.province || null });}param.success(data, { reverseGeocoderResult: reverseGeocoderResult, reverseGeocoderSimplify: reverseGeocoderSimplify, pois: pois, poisSimplify: poisSimplify });} else {param.success(data, { reverseGeocoderResult: reverseGeocoderResult, reverseGeocoderSimplify: reverseGeocoderSimplify });}} else if (feature === 'geocoder') {var geocoderResult = data.result;var geocoderSimplify = { title: geocoderResult.title || null, latitude: geocoderResult.location && geocoderResult.location.lat || null, longitude: geocoderResult.location && geocoderResult.location.lng || null, adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null, province: geocoderResult.address_components && geocoderResult.address_components.province || null, city: geocoderResult.address_components && geocoderResult.address_components.city || null, district: geocoderResult.address_components && geocoderResult.address_components.district || null, street: geocoderResult.address_components && geocoderResult.address_components.street || null, street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null, level: geocoderResult.level || null };
        param.success(data, { geocoderResult: geocoderResult, geocoderSimplify: geocoderSimplify });} else if (feature === 'getCityList') {var provinceResult = data.result[0];var cityResult = data.result[1];var districtResult = data.result[2];param.success(data, { provinceResult: provinceResult, cityResult: cityResult, districtResult: districtResult });} else if (feature === 'getDistrictByCityId') {var districtByCity = data.result[0];param.success(data, districtByCity);} else if (feature === 'calculateDistance') {var calculateDistanceResult = data.result.elements;var distance = [];for (var i = 0; i < calculateDistanceResult.length; i++) {distance.push(calculateDistanceResult[i].distance);}param.success(data, { calculateDistanceResult: calculateDistanceResult, distance: distance });} else {param.success(data);}}, buildWxRequestConfig: function buildWxRequestConfig(param, options, feature) {var that = this;options.header = { "content-type": "application/json" };options.method = 'GET';options.success = function (res) {var data = res.data;if (data.status === 0) {that.handleData(param, data, feature);} else {param.fail(data);}};options.fail = function (res) {res.statusCode = ERROR_CONF.WX_ERR_CODE;param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));};options.complete = function (res) {var statusCode = +res.statusCode;switch (statusCode) {case ERROR_CONF.WX_ERR_CODE:{param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));break;}case ERROR_CONF.WX_OK_CODE:{var data = res.data;if (data.status === 0) {param.complete(data);} else {param.complete(that.buildErrorConfig(data.status, data.message));}break;}default:{param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));}}};
      return options;}, locationProcess: function locationProcess(param, locationsuccess, locationfail, locationcomplete) {var that = this;locationfail = locationfail || function (res) {res.statusCode = ERROR_CONF.WX_ERR_CODE;param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));};locationcomplete = locationcomplete || function (res) {if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));}};if (!param.location) {that.getWXLocation(locationsuccess, locationfail, locationcomplete);} else if (that.checkLocation(param)) {var location = Utils.getLocationParam(param.location);locationsuccess(location);}} };var QQMapWX = /*#__PURE__*/function () {function QQMapWX(options) {_classCallCheck(this, QQMapWX);if (!options.key) {throw Error('key值不能为空');}this.key = options.key;}_createClass(QQMapWX, [{ key: "search", value: function search(options) {var that = this;options = options || {};Utils.polyfillParam(options);if (!Utils.checkKeyword(options)) {return;}var requestParam = { keyword: options.keyword, orderby: options.orderby || '_distance', page_size: options.page_size || 10, page_index: options.page_index || 1, output: 'json', key: that.key };if (options.address_format) {requestParam.address_format = options.address_format;}if (options.filter) {requestParam.filter = options.filter;}var distance = options.distance || "1000";var auto_extend = options.auto_extend || 1;var region = null;var rectangle = null;if (options.region) {region = options.region;}if (options.rectangle) {rectangle = options.rectangle;}var locationsuccess = function locationsuccess(result) {if (region && !rectangle) {requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";} else if (rectangle && !region) {requestParam.boundary = "rectangle(" + rectangle + ")";} else {requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";}wx.request(Utils.buildWxRequestConfig(options, { url: URL_SEARCH, data: requestParam }, 'search'));};Utils.locationProcess(options, locationsuccess);} }, { key: "getSuggestion", value: function getSuggestion(options) {var that = this;options = options || {};Utils.polyfillParam(options);if (!Utils.checkKeyword(options)) {return;}var requestParam = { keyword: options.keyword, region: options.region || '全国', region_fix: options.region_fix || 0, policy: options.policy || 0, page_size: options.page_size || 10, page_index: options.page_index || 1, get_subpois: options.get_subpois || 0, output: 'json', key: that.key };if (options.address_format) {requestParam.address_format = options.address_format;}if (options.filter) {requestParam.filter = options.filter;}if (options.location) {var locationsuccess = function locationsuccess(result) {requestParam.location = result.latitude + ',' + result.longitude;wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest"));};Utils.locationProcess(options, locationsuccess);} else {wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest"));}} }, { key: "reverseGeocoder", value: function reverseGeocoder(options) {var that = this;options = options || {};Utils.polyfillParam(options);var requestParam = { coord_type: options.coord_type || 5, get_poi: options.get_poi || 0, output: 'json', key: that.key };if (options.poi_options) {requestParam.poi_options = options.poi_options;}var locationsuccess = function locationsuccess(result) {requestParam.location = result.latitude + ',' + result.longitude;wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'reverseGeocoder'));};Utils.locationProcess(options, locationsuccess);} }, { key: "geocoder", value: function geocoder(options) {var that = this;options = options || {};Utils.polyfillParam(options);if (Utils.checkParamKeyEmpty(options, 'address')) {return;}var requestParam = { address: options.address, output: 'json', key: that.key };if (options.region) {requestParam.region = options.region;}wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'geocoder'));} }, { key: "getCityList", value: function getCityList(options) {var that = this;options = options || {};Utils.polyfillParam(options);var requestParam = { output: 'json', key: that.key };wx.request(Utils.buildWxRequestConfig(options, { url: URL_CITY_LIST, data: requestParam }, 'getCityList'));} }, { key: "getDistrictByCityId", value: function getDistrictByCityId(options) {var that = this;options = options || {};Utils.polyfillParam(options);if (Utils.checkParamKeyEmpty(options, 'id')) {return;}var requestParam = { id: options.id || '', output: 'json', key: that.key };wx.request(Utils.buildWxRequestConfig(options, { url: URL_AREA_LIST, data: requestParam }, 'getDistrictByCityId'));} }, { key: "calculateDistance", value: function calculateDistance(options) {var that = this;options = options || {};Utils.polyfillParam(options);if (Utils.checkParamKeyEmpty(options, 'to')) {return;}var requestParam = { mode: options.mode || 'walking', to: Utils.location2query(options.to), output: 'json', key: that.key };if (options.from) {options.location = options.from;}if (requestParam.mode == 'straight') {var locationsuccess = function locationsuccess(result) {var locationTo = Utils.getEndLocation(requestParam.to);var data = { message: "query ok", result: { elements: [] }, status: 0 };for (var i = 0; i < locationTo.length; i++) {data.result.elements.push({ distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng), duration: 0, from: { lat: result.latitude, lng: result.longitude }, to: { lat: locationTo[i].lat, lng: locationTo[i].lng } });}var calculateResult = data.result.elements;var distanceResult = [];for (var i = 0; i < calculateResult.length; i++) {distanceResult.push(calculateResult[i].distance);}return options.success(data, { calculateResult: calculateResult, distanceResult: distanceResult });};Utils.locationProcess(options, locationsuccess);} else {var locationsuccess = function locationsuccess(result) {requestParam.from = result.latitude + ',' + result.longitude;wx.request(Utils.buildWxRequestConfig(options, { url: URL_DISTANCE, data: requestParam }, 'calculateDistance'));};Utils.locationProcess(options, locationsuccess);}} }]);return QQMapWX;}();;module.exports = QQMapWX;
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 389:
  /*!*******************************************!*\
    !*** D:/work/uniapp/ThorUI/utils/util.js ***!
    \*******************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
   //公共js，主要做表单验证，以及基本方法封装
  var utils = {
    isNullOrEmpty: function isNullOrEmpty(value) {
      //是否为空
      return value === null || value === '' || value === undefined ? true : false;
    },
    trim: function trim(value) {
      //去空格
      return value.replace(/(^\s*)|(\s*$)/g, "");
    },
    isMobile: function isMobile(value) {
      //是否为手机号
      return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(value);
    },
    isFloat: function isFloat(value) {
      //金额，只允许保留两位小数
      return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(value);
    },
    isNum: function isNum(value) {
      //是否全为数字
      return /^[0-9]+$/.test(value);
    },
    checkPwd: function checkPwd(value) {
      //密码为8~20位数字和字母组合
      return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(value);
    },
    formatNum: function formatNum(num) {
      //格式化手机号码
      if (utils.isMobile(num)) {
        num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2');
      }
      return num;
    },
    rmoney: function rmoney(money) {
      //金额格式化
      return parseFloat(money).toFixed(2).toString().split('').reverse().join('').replace(/(\d{3})/g, '$1,').replace(
      /\,$/, '').split('').reverse().join('');
    },
    formatDate: function formatDate(formatStr, fdate) {
      //日期格式化
      if (fdate) {
        if (~fdate.indexOf('.')) {
          fdate = fdate.substring(0, fdate.indexOf('.'));
        }
        fdate = fdate.toString().replace('T', ' ').replace(/\-/g, '/');
        var fTime,fStr = 'ymdhis';
        if (!formatStr)
        formatStr = "y-m-d h:i:s";
        if (fdate)
        fTime = new Date(fdate);else
  
        fTime = new Date();
        var month = fTime.getMonth() + 1;
        var day = fTime.getDate();
        var hours = fTime.getHours();
        var minu = fTime.getMinutes();
        var second = fTime.getSeconds();
        month = month < 10 ? '0' + month : month;
        day = day < 10 ? '0' + day : day;
        hours = hours < 10 ? '0' + hours : hours;
        minu = minu < 10 ? '0' + minu : minu;
        second = second < 10 ? '0' + second : second;
        var formatArr = [
        fTime.getFullYear().toString(),
        month.toString(),
        day.toString(),
        hours.toString(),
        minu.toString(),
        second.toString()];
  
        for (var i = 0; i < formatArr.length; i++) {
          formatStr = formatStr.replace(fStr.charAt(i), formatArr[i]);
        }
        return formatStr;
      } else {
        return "";
      }
    } };
  
  
  module.exports = {
    isNullOrEmpty: utils.isNullOrEmpty,
    trim: utils.trim,
    isMobile: utils.isMobile,
    isFloat: utils.isFloat,
    isNum: utils.isNum,
    checkPwd: utils.checkPwd,
    formatNum: utils.formatNum,
    rmoney: utils.rmoney,
    formatDate: utils.formatDate };
  
  /***/ }),
  
  /***/ 4:
  /*!****************************************!*\
    !*** D:/work/uniapp/ThorUI/pages.json ***!
    \****************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  /***/ }),
  
  /***/ 406:
  /*!*********************************************!*\
    !*** D:/work/uniapp/ThorUI/libs/amap-wx.js ***!
    \*********************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(wx) {function AMapWX(a) {this.key = a.key, this.requestConfig = { key: a.key, s: "rsx", platform: "WXJS", appname: a.key, sdkversion: "1.2.0", logversion: "2.0" };}AMapWX.prototype.getWxLocation = function (a, b) {wx.getLocation({ type: "gcj02", success: function success(a) {var c = a.longitude + "," + a.latitude;wx.setStorage({ key: "userLocation", data: c }), b(c);}, fail: function fail(c) {wx.getStorage({ key: "userLocation", success: function success(a) {a.data && b(a.data);} }), a.fail({ errCode: "0", errMsg: c.errMsg || "" });} });}, AMapWX.prototype.getRegeo = function (a) {function c(c) {var d = b.requestConfig;wx.request({ url: "https://restapi.amap.com/v3/geocode/regeo", data: { key: b.key, location: c, extensions: "all", s: d.s, platform: d.platform, appname: b.key, sdkversion: d.sdkversion, logversion: d.logversion }, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {var d, e, f, g, h, i, j, k, l;b.data.status && "1" == b.data.status ? (d = b.data.regeocode, e = d.addressComponent, f = [], g = "", d && d.roads[0] && d.roads[0].name && (g = d.roads[0].name + "附近"), h = c.split(",")[0], i = c.split(",")[1], d.pois && d.pois[0] && (g = d.pois[0].name + "附近", j = d.pois[0].location, j && (h = parseFloat(j.split(",")[0]), i = parseFloat(j.split(",")[1]))), e.provice && f.push(e.provice), e.city && f.push(e.city), e.district && f.push(e.district), e.streetNumber && e.streetNumber.street && e.streetNumber.number ? (f.push(e.streetNumber.street), f.push(e.streetNumber.number)) : (k = "", d && d.roads[0] && d.roads[0].name && (k = d.roads[0].name), f.push(k)), f = f.join(""), l = [{ iconPath: a.iconPath, width: a.iconWidth, height: a.iconHeight, name: f, desc: g, longitude: h, latitude: i, id: 0, regeocodeData: d }], a.success(l)) : a.fail({ errCode: b.data.infocode, errMsg: b.data.info });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}var b = this;a.location ? c(a.location) : b.getWxLocation(a, function (a) {c(a);});}, AMapWX.prototype.getWeather = function (a) {function d(d) {var e = "base";a.type && "forecast" == a.type && (e = "all"), wx.request({ url: "https://restapi.amap.com/v3/weather/weatherInfo", data: { key: b.key, city: d, extensions: e, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion }, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {function c(a) {var b = { city: { text: "城市", data: a.city }, weather: { text: "天气", data: a.weather }, temperature: { text: "温度", data: a.temperature }, winddirection: { text: "风向", data: a.winddirection + "风" }, windpower: { text: "风力", data: a.windpower + "级" }, humidity: { text: "湿度", data: a.humidity + "%" } };return b;}var d, e;b.data.status && "1" == b.data.status ? b.data.lives ? (d = b.data.lives, d && d.length > 0 && (d = d[0], e = c(d), e["liveData"] = d, a.success(e))) : b.data.forecasts && b.data.forecasts[0] && a.success({ forecast: b.data.forecasts[0] }) : a.fail({ errCode: b.data.infocode, errMsg: b.data.info });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}function e(e) {wx.request({ url: "https://restapi.amap.com/v3/geocode/regeo", data: { key: b.key, location: e, extensions: "all", s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion }, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {var c, e;b.data.status && "1" == b.data.status ? (e = b.data.regeocode, e.addressComponent ? c = e.addressComponent.adcode : e.aois && e.aois.length > 0 && (c = e.aois[0].adcode), d(c)) : a.fail({ errCode: b.data.infocode, errMsg: b.data.info });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}var b = this,c = b.requestConfig;a.city ? d(a.city) : b.getWxLocation(a, function (a) {e(a);});}, AMapWX.prototype.getPoiAround = function (a) {function d(d) {var e = { key: b.key, location: d, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion };a.querytypes && (e["types"] = a.querytypes), a.querykeywords && (e["keywords"] = a.querykeywords), wx.request({ url: "https://restapi.amap.com/v3/place/around", data: e, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {var c, d, e, f;if (b.data.status && "1" == b.data.status) {if (b = b.data, b && b.pois) {for (c = [], d = 0; d < b.pois.length; d++) {e = 0 == d ? a.iconPathSelected : a.iconPath, c.push({ latitude: parseFloat(b.pois[d].location.split(",")[1]), longitude: parseFloat(b.pois[d].location.split(",")[0]), iconPath: e, width: 22, height: 32, id: d, name: b.pois[d].name, address: b.pois[d].address });}f = { markers: c, poisData: b.pois }, a.success(f);}} else a.fail({ errCode: b.data.infocode, errMsg: b.data.info });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}var b = this,c = b.requestConfig;a.location ? d(a.location) : b.getWxLocation(a, function (a) {d(a);});}, AMapWX.prototype.getStaticmap = function (a) {function f(b) {c.push("location=" + b), a.zoom && c.push("zoom=" + a.zoom), a.size && c.push("size=" + a.size), a.scale && c.push("scale=" + a.scale), a.markers && c.push("markers=" + a.markers), a.labels && c.push("labels=" + a.labels), a.paths && c.push("paths=" + a.paths), a.traffic && c.push("traffic=" + a.traffic);var e = d + c.join("&");a.success({ url: e });}var e,b = this,c = [],d = "https://restapi.amap.com/v3/staticmap?";c.push("key=" + b.key), e = b.requestConfig, c.push("s=" + e.s), c.push("platform=" + e.platform), c.push("appname=" + e.appname), c.push("sdkversion=" + e.sdkversion), c.push("logversion=" + e.logversion), a.location ? f(a.location) : b.getWxLocation(a, function (a) {f(a);});}, AMapWX.prototype.getInputtips = function (a) {var b = this,c = b.requestConfig,d = { key: b.key, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion };a.location && (d["location"] = a.location), a.keywords && (d["keywords"] = a.keywords), a.type && (d["type"] = a.type), a.city && (d["city"] = a.city), a.citylimit && (d["citylimit"] = a.citylimit), wx.request({ url: "https://restapi.amap.com/v3/assistant/inputtips", data: d, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {b && b.data && b.data.tips && a.success({ tips: b.data.tips });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}, AMapWX.prototype.getDrivingRoute = function (a) {var b = this,c = b.requestConfig,d = { key: b.key, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion };a.origin && (d["origin"] = a.origin), a.destination && (d["destination"] = a.destination), a.strategy && (d["strategy"] = a.strategy), a.waypoints && (d["waypoints"] = a.waypoints), a.avoidpolygons && (d["avoidpolygons"] = a.avoidpolygons), a.avoidroad && (d["avoidroad"] = a.avoidroad), wx.request({ url: "https://restapi.amap.com/v3/direction/driving", data: d, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {b && b.data && b.data.route && a.success({ paths: b.data.route.paths, taxi_cost: b.data.route.taxi_cost || "" });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}, AMapWX.prototype.getWalkingRoute = function (a) {var b = this,c = b.requestConfig,d = { key: b.key, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion };a.origin && (d["origin"] = a.origin), a.destination && (d["destination"] = a.destination), wx.request({ url: "https://restapi.amap.com/v3/direction/walking", data: d, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {b && b.data && b.data.route && a.success({ paths: b.data.route.paths });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}, AMapWX.prototype.getTransitRoute = function (a) {var b = this,c = b.requestConfig,d = { key: b.key, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion };a.origin && (d["origin"] = a.origin), a.destination && (d["destination"] = a.destination), a.strategy && (d["strategy"] = a.strategy), a.city && (d["city"] = a.city), a.cityd && (d["cityd"] = a.cityd), wx.request({ url: "https://restapi.amap.com/v3/direction/transit/integrated", data: d, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {if (b && b.data && b.data.route) {var c = b.data.route;a.success({ distance: c.distance || "", taxi_cost: c.taxi_cost || "", transits: c.transits });}}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}, AMapWX.prototype.getRidingRoute = function (a) {var b = this,c = b.requestConfig,d = { key: b.key, s: c.s, platform: c.platform, appname: b.key, sdkversion: c.sdkversion, logversion: c.logversion };a.origin && (d["origin"] = a.origin), a.destination && (d["destination"] = a.destination), wx.request({ url: "https://restapi.amap.com/v4/direction/bicycling", data: d, method: "GET", header: { "content-type": "application/json" }, success: function success(b) {b && b.data && b.data.data && a.success({ paths: b.data.data.paths });}, fail: function fail(b) {a.fail({ errCode: "0", errMsg: b.errMsg || "" });} });}, module.exports.AMapWX = AMapWX;
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 447:
  /*!**************************************************!*\
    !*** D:/work/uniapp/ThorUI/utils/picker.city.js ***!
    \**************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
   //测试数据，数据并非完整，只验证功能
  module.exports = [{
    "name": "北京市",
    "id": "110000",
    "children": [{
      "name": "北京市市辖区",
      "id": "110100",
      "children": [{
        "name": "东城区",
        "id": "110101" },
      {
        "name": "西城区",
        "id": "110102" },
      {
        "name": "朝阳区",
        "id": "110105" }] }] },
  
  
  
  {
    "name": "安徽省",
    "id": "340000",
    "children": [{
      "name": "合肥市",
      "id": "340100",
      "children": [{
        "name": "瑶海区",
        "id": "340102" },
      {
        "name": "庐阳区",
        "id": "340103" },
      {
        "name": "蜀山区",
        "id": "340104" },
      {
        "name": "包河区",
        "id": "340111" },
      {
        "name": "长丰县",
        "id": "340121" },
      {
        "name": "肥东县",
        "id": "340122" },
      {
        "name": "肥西县",
        "id": "340123" },
      {
        "name": "庐江县",
        "id": "340124" },
      {
        "name": "巢湖市",
        "id": "340181" }] },
  
    {
      "name": "芜湖市",
      "id": "340200",
      "children": [{
        "name": "镜湖区",
        "id": "340202" },
      {
        "name": "弋江区",
        "id": "340203" },
      {
        "name": "鸠江区",
        "id": "340207" },
      {
        "name": "三山区",
        "id": "340208" },
      {
        "name": "芜湖县",
        "id": "340221" },
      {
        "name": "繁昌县",
        "id": "340222" },
      {
        "name": "南陵县",
        "id": "340223" },
      {
        "name": "无为县",
        "id": "340225" }] },
  
    {
      "name": "蚌埠市",
      "id": "340300",
      "children": [{
        "name": "龙子湖区",
        "id": "340302" },
      {
        "name": "蚌山区",
        "id": "340303" },
      {
        "name": "禹会区",
        "id": "340304" },
      {
        "name": "淮上区",
        "id": "340311" },
      {
        "name": "怀远县",
        "id": "340321" },
      {
        "name": "五河县",
        "id": "340322" },
      {
        "name": "固镇县",
        "id": "340323" }] },
  
    {
      "name": "淮南市",
      "id": "340400",
      "children": [{
        "name": "大通区",
        "id": "340402" },
      {
        "name": "田家庵区",
        "id": "340403" },
      {
        "name": "谢家集区",
        "id": "340404" },
      {
        "name": "八公山区",
        "id": "340405" },
      {
        "name": "潘集区",
        "id": "340406" },
      {
        "name": "凤台县",
        "id": "340421" },
      {
        "name": "寿县",
        "id": "340422" }] },
  
    {
      "name": "马鞍山市",
      "id": "340500",
      "children": [{
        "name": "花山区",
        "id": "340503" },
      {
        "name": "雨山区",
        "id": "340504" },
      {
        "name": "博望区",
        "id": "340506" },
      {
        "name": "当涂县",
        "id": "340521" },
      {
        "name": "含山县",
        "id": "340522" },
      {
        "name": "和县",
        "id": "340523" }] },
  
    {
      "name": "淮北市",
      "id": "340600",
      "children": [{
        "name": "杜集区",
        "id": "340602" },
      {
        "name": "相山区",
        "id": "340603" },
      {
        "name": "烈山区",
        "id": "340604" },
      {
        "name": "濉溪县",
        "id": "340621" }] },
  
    {
      "name": "铜陵市",
      "id": "340700",
      "children": [{
        "name": "铜官区",
        "id": "340705" },
      {
        "name": "义安区",
        "id": "340706" },
      {
        "name": "郊区",
        "id": "340711" },
      {
        "name": "枞阳县",
        "id": "340722" }] },
  
    {
      "name": "安庆市",
      "id": "340800",
      "children": [{
        "name": "迎江区",
        "id": "340802" },
      {
        "name": "大观区",
        "id": "340803" },
      {
        "name": "宜秀区",
        "id": "340811" },
      {
        "name": "怀宁县",
        "id": "340822" },
      {
        "name": "潜山县",
        "id": "340824" },
      {
        "name": "太湖县",
        "id": "340825" },
      {
        "name": "宿松县",
        "id": "340826" },
      {
        "name": "望江县",
        "id": "340827" },
      {
        "name": "岳西县",
        "id": "340828" },
      {
        "name": "桐城市",
        "id": "340881" }] },
  
    {
      "name": "黄山市",
      "id": "341000",
      "children": [{
        "name": "屯溪区",
        "id": "341002" },
      {
        "name": "黄山区",
        "id": "341003" },
      {
        "name": "徽州区",
        "id": "341004" },
      {
        "name": "歙县",
        "id": "341021" },
      {
        "name": "休宁县",
        "id": "341022" },
      {
        "name": "黟县",
        "id": "341023" },
      {
        "name": "祁门县",
        "id": "341024" }] },
  
    {
      "name": "滁州市",
      "id": "341100",
      "children": [{
        "name": "琅琊区",
        "id": "341102" },
      {
        "name": "南谯区",
        "id": "341103" },
      {
        "name": "来安县",
        "id": "341122" },
      {
        "name": "全椒县",
        "id": "341124" },
      {
        "name": "定远县",
        "id": "341125" },
      {
        "name": "凤阳县",
        "id": "341126" },
      {
        "name": "天长市",
        "id": "341181" },
      {
        "name": "明光市",
        "id": "341182" }] },
  
    {
      "name": "阜阳市",
      "id": "341200",
      "children": [{
        "name": "颍州区",
        "id": "341202" },
      {
        "name": "颍东区",
        "id": "341203" },
      {
        "name": "颍泉区",
        "id": "341204" },
      {
        "name": "临泉县",
        "id": "341221" },
      {
        "name": "太和县",
        "id": "341222" },
      {
        "name": "阜南县",
        "id": "341225" },
      {
        "name": "颍上县",
        "id": "341226" },
      {
        "name": "界首市",
        "id": "341282" }] },
  
    {
      "name": "宿州市",
      "id": "341300",
      "children": [{
        "name": "埇桥区",
        "id": "341302" },
      {
        "name": "砀山县",
        "id": "341321" },
      {
        "name": "萧县",
        "id": "341322" },
      {
        "name": "灵璧县",
        "id": "341323" },
      {
        "name": "泗县",
        "id": "341324" }] },
  
    {
      "name": "六安市",
      "id": "341500",
      "children": [{
        "name": "金安区",
        "id": "341502" },
      {
        "name": "裕安区",
        "id": "341503" },
      {
        "name": "叶集区",
        "id": "341504" },
      {
        "name": "霍邱县",
        "id": "341522" },
      {
        "name": "舒城县",
        "id": "341523" },
      {
        "name": "金寨县",
        "id": "341524" },
      {
        "name": "霍山县",
        "id": "341525" }] },
  
    {
      "name": "亳州市",
      "id": "341600",
      "children": [{
        "name": "谯城区",
        "id": "341602" },
      {
        "name": "涡阳县",
        "id": "341621" },
      {
        "name": "蒙城县",
        "id": "341622" },
      {
        "name": "利辛县",
        "id": "341623" }] },
  
    {
      "name": "池州市",
      "id": "341700",
      "children": [{
        "name": "贵池区",
        "id": "341702" },
      {
        "name": "东至县",
        "id": "341721" },
      {
        "name": "石台县",
        "id": "341722" },
      {
        "name": "青阳县",
        "id": "341723" }] },
  
    {
      "name": "宣城市",
      "id": "341800",
      "children": [{
        "name": "宣州区",
        "id": "341802" },
      {
        "name": "郎溪县",
        "id": "341821" },
      {
        "name": "广德县",
        "id": "341822" },
      {
        "name": "泾县",
        "id": "341823" },
      {
        "name": "绩溪县",
        "id": "341824" },
      {
        "name": "旌德县",
        "id": "341825" },
      {
        "name": "宁国市",
        "id": "341881" }] }] }];
  
  /***/ }),
  
  /***/ 472:
  /*!**************************************************!*\
    !*** D:/work/uniapp/ThorUI/libs/weapp-qrcode.js ***!
    \**************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(wx) { //Core code comes from https://github.com/davidshimjs/qrcodejs
  
  var QRCode;
  
  (function () {
    /**
                     * Get the type by string length
                     * 
                     * @private
                     * @param {String} sText
                     * @param {Number} nCorrectLevel
                     * @return {Number} type
                     */
    function _getTypeNumber(sText, nCorrectLevel) {
      var nType = 1;
      var length = _getUTF8Length(sText);
  
      for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
        var nLimit = 0;
  
        switch (nCorrectLevel) {
          case QRErrorCorrectLevel.L:
            nLimit = QRCodeLimitLength[i][0];
            break;
          case QRErrorCorrectLevel.M:
            nLimit = QRCodeLimitLength[i][1];
            break;
          case QRErrorCorrectLevel.Q:
            nLimit = QRCodeLimitLength[i][2];
            break;
          case QRErrorCorrectLevel.H:
            nLimit = QRCodeLimitLength[i][3];
            break;}
  
  
        if (length <= nLimit) {
          break;
        } else {
          nType++;
        }
      }
  
      if (nType > QRCodeLimitLength.length) {
        throw new Error("Too long data");
      }
  
      return nType;
    }
  
    function _getUTF8Length(sText) {
      var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
      return replacedText.length + (replacedText.length != sText ? 3 : 0);
    }
  
    function QR8bitByte(data) {
      this.mode = QRMode.MODE_8BIT_BYTE;
      this.data = data;
      this.parsedData = [];
  
      // Added to support UTF-8 Characters
      for (var i = 0, l = this.data.length; i < l; i++) {
        var byteArray = [];
        var code = this.data.charCodeAt(i);
  
        if (code > 0x10000) {
          byteArray[0] = 0xF0 | (code & 0x1C0000) >>> 18;
          byteArray[1] = 0x80 | (code & 0x3F000) >>> 12;
          byteArray[2] = 0x80 | (code & 0xFC0) >>> 6;
          byteArray[3] = 0x80 | code & 0x3F;
        } else if (code > 0x800) {
          byteArray[0] = 0xE0 | (code & 0xF000) >>> 12;
          byteArray[1] = 0x80 | (code & 0xFC0) >>> 6;
          byteArray[2] = 0x80 | code & 0x3F;
        } else if (code > 0x80) {
          byteArray[0] = 0xC0 | (code & 0x7C0) >>> 6;
          byteArray[1] = 0x80 | code & 0x3F;
        } else {
          byteArray[0] = code;
        }
  
        this.parsedData.push(byteArray);
      }
  
      this.parsedData = Array.prototype.concat.apply([], this.parsedData);
  
      if (this.parsedData.length != this.data.length) {
        this.parsedData.unshift(191);
        this.parsedData.unshift(187);
        this.parsedData.unshift(239);
      }
    }
  
    QR8bitByte.prototype = {
      getLength: function getLength(buffer) {
        return this.parsedData.length;
      },
      write: function write(buffer) {
        for (var i = 0, l = this.parsedData.length; i < l; i++) {
          buffer.put(this.parsedData[i], 8);
        }
      } };
  
  
  
    // QRCodeModel
    function QRCodeModel(typeNumber, errorCorrectLevel) {
      this.typeNumber = typeNumber;
      this.errorCorrectLevel = errorCorrectLevel;
      this.modules = null;
      this.moduleCount = 0;
      this.dataCache = null;
      this.dataList = [];
    }
    QRCodeModel.prototype = {
      addData: function addData(data) {var newData = new QR8bitByte(data);this.dataList.push(newData);this.dataCache = null;}, isDark: function isDark(row, col) {
        if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {throw new Error(row + "," + col);}
        return this.modules[row][col];
      }, getModuleCount: function getModuleCount() {return this.moduleCount;}, make: function make() {this.makeImpl(false, this.getBestMaskPattern());}, makeImpl: function makeImpl(test, maskPattern) {
        this.moduleCount = this.typeNumber * 4 + 17;this.modules = new Array(this.moduleCount);for (var row = 0; row < this.moduleCount; row++) {this.modules[row] = new Array(this.moduleCount);for (var col = 0; col < this.moduleCount; col++) {this.modules[row][col] = null;}}
        this.setupPositionProbePattern(0, 0);this.setupPositionProbePattern(this.moduleCount - 7, 0);this.setupPositionProbePattern(0, this.moduleCount - 7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(test, maskPattern);if (this.typeNumber >= 7) {this.setupTypeNumber(test);}
        if (this.dataCache == null) {this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);}
        this.mapData(this.dataCache, maskPattern);
      }, setupPositionProbePattern: function setupPositionProbePattern(row, col) {for (var r = -1; r <= 7; r++) {if (row + r <= -1 || this.moduleCount <= row + r) continue;for (var c = -1; c <= 7; c++) {if (col + c <= -1 || this.moduleCount <= col + c) continue;if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {this.modules[row + r][col + c] = true;} else {this.modules[row + r][col + c] = false;}}}}, getBestMaskPattern: function getBestMaskPattern() {
        var minLostPoint = 0;var pattern = 0;for (var i = 0; i < 8; i++) {this.makeImpl(true, i);var lostPoint = QRUtil.getLostPoint(this);if (i == 0 || minLostPoint > lostPoint) {minLostPoint = lostPoint;pattern = i;}}
        return pattern;
      }, createMovieClip: function createMovieClip(target_mc, instance_name, depth) {
        var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);var cs = 1;this.make();for (var row = 0; row < this.modules.length; row++) {var y = row * cs;for (var col = 0; col < this.modules[row].length; col++) {var x = col * cs;var dark = this.modules[row][col];if (dark) {qr_mc.beginFill(0, 100);qr_mc.moveTo(x, y);qr_mc.lineTo(x + cs, y);qr_mc.lineTo(x + cs, y + cs);qr_mc.lineTo(x, y + cs);qr_mc.endFill();}}}
        return qr_mc;
      }, setupTimingPattern: function setupTimingPattern() {
        for (var r = 8; r < this.moduleCount - 8; r++) {
          if (this.modules[r][6] != null) {continue;}
          this.modules[r][6] = r % 2 == 0;
        }
        for (var c = 8; c < this.moduleCount - 8; c++) {
          if (this.modules[6][c] != null) {continue;}
          this.modules[6][c] = c % 2 == 0;
        }
      }, setupPositionAdjustPattern: function setupPositionAdjustPattern() {
        var pos = QRUtil.getPatternPosition(this.typeNumber);for (var i = 0; i < pos.length; i++) {
          for (var j = 0; j < pos.length; j++) {
            var row = pos[i];var col = pos[j];if (this.modules[row][col] != null) {continue;}
            for (var r = -2; r <= 2; r++) {for (var c = -2; c <= 2; c++) {if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {this.modules[row + r][col + c] = true;} else {this.modules[row + r][col + c] = false;}}}
          }
        }
      }, setupTypeNumber: function setupTypeNumber(test) {
        var bits = QRUtil.getBCHTypeNumber(this.typeNumber);for (var i = 0; i < 18; i++) {var mod = !test && (bits >> i & 1) == 1;this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;}
        for (var i = 0; i < 18; i++) {var mod = !test && (bits >> i & 1) == 1;this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;}
      }, setupTypeInfo: function setupTypeInfo(test, maskPattern) {
        var data = this.errorCorrectLevel << 3 | maskPattern;var bits = QRUtil.getBCHTypeInfo(data);for (var i = 0; i < 15; i++) {var mod = !test && (bits >> i & 1) == 1;if (i < 6) {this.modules[i][8] = mod;} else if (i < 8) {this.modules[i + 1][8] = mod;} else {this.modules[this.moduleCount - 15 + i][8] = mod;}}
        for (var i = 0; i < 15; i++) {var mod = !test && (bits >> i & 1) == 1;if (i < 8) {this.modules[8][this.moduleCount - i - 1] = mod;} else if (i < 9) {this.modules[8][15 - i - 1 + 1] = mod;} else {this.modules[8][15 - i - 1] = mod;}}
        this.modules[this.moduleCount - 8][8] = !test;
      }, mapData: function mapData(data, maskPattern) {
        var inc = -1;var row = this.moduleCount - 1;var bitIndex = 7;var byteIndex = 0;for (var col = this.moduleCount - 1; col > 0; col -= 2) {
          if (col == 6) col--;while (true) {
            for (var c = 0; c < 2; c++) {
              if (this.modules[row][col - c] == null) {
                var dark = false;if (byteIndex < data.length) {dark = (data[byteIndex] >>> bitIndex & 1) == 1;}
                var mask = QRUtil.getMask(maskPattern, row, col - c);if (mask) {dark = !dark;}
                this.modules[row][col - c] = dark;bitIndex--;if (bitIndex == -1) {byteIndex++;bitIndex = 7;}
              }
            }
            row += inc;if (row < 0 || this.moduleCount <= row) {row -= inc;inc = -inc;break;}
          }
        }
      } };
  
    QRCodeModel.PAD0 = 0xEC;
    QRCodeModel.PAD1 = 0x11;
    QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {
      var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);var buffer = new QRBitBuffer();for (var i = 0; i < dataList.length; i++) {var data = dataList[i];buffer.put(data.mode, 4);buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));data.write(buffer);}
      var totalDataCount = 0;for (var i = 0; i < rsBlocks.length; i++) {totalDataCount += rsBlocks[i].dataCount;}
      if (buffer.getLengthInBits() > totalDataCount * 8) {
        throw new Error("code length overflow. (" +
        buffer.getLengthInBits() +
        ">" +
        totalDataCount * 8 +
        ")");
      }
      if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {buffer.put(0, 4);}
      while (buffer.getLengthInBits() % 8 != 0) {buffer.putBit(false);}
      while (true) {
        if (buffer.getLengthInBits() >= totalDataCount * 8) {break;}
        buffer.put(QRCodeModel.PAD0, 8);if (buffer.getLengthInBits() >= totalDataCount * 8) {break;}
        buffer.put(QRCodeModel.PAD1, 8);
      }
      return QRCodeModel.createBytes(buffer, rsBlocks);
    };
    QRCodeModel.createBytes = function (buffer, rsBlocks) {
      var offset = 0;var maxDcCount = 0;var maxEcCount = 0;var dcdata = new Array(rsBlocks.length);var ecdata = new Array(rsBlocks.length);for (var r = 0; r < rsBlocks.length; r++) {
        var dcCount = rsBlocks[r].dataCount;var ecCount = rsBlocks[r].totalCount - dcCount;maxDcCount = Math.max(maxDcCount, dcCount);maxEcCount = Math.max(maxEcCount, ecCount);dcdata[r] = new Array(dcCount);for (var i = 0; i < dcdata[r].length; i++) {dcdata[r][i] = 0xff & buffer.buffer[i + offset];}
        offset += dcCount;var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);var modPoly = rawPoly.mod(rsPoly);ecdata[r] = new Array(rsPoly.getLength() - 1);for (var i = 0; i < ecdata[r].length; i++) {var modIndex = i + modPoly.getLength() - ecdata[r].length;ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;}
      }
      var totalCodeCount = 0;for (var i = 0; i < rsBlocks.length; i++) {totalCodeCount += rsBlocks[i].totalCount;}
      var data = new Array(totalCodeCount);var index = 0;for (var i = 0; i < maxDcCount; i++) {for (var r = 0; r < rsBlocks.length; r++) {if (i < dcdata[r].length) {data[index++] = dcdata[r][i];}}}
      for (var i = 0; i < maxEcCount; i++) {for (var r = 0; r < rsBlocks.length; r++) {if (i < ecdata[r].length) {data[index++] = ecdata[r][i];}}}
      return data;
    };
    var QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 };
    var QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 };
    var QRMaskPattern = { PATTERN000: 0, PATTERN001: 1, PATTERN010: 2, PATTERN011: 3, PATTERN100: 4, PATTERN101: 5, PATTERN110: 6, PATTERN111: 7 };
    var QRUtil = {
      PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0, G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0, G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1, getBCHTypeInfo: function getBCHTypeInfo(data) {
        var d = data << 10;while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);}
        return (data << 10 | d) ^ QRUtil.G15_MASK;
      }, getBCHTypeNumber: function getBCHTypeNumber(data) {
        var d = data << 12;while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);}
        return data << 12 | d;
      }, getBCHDigit: function getBCHDigit(data) {
        var digit = 0;while (data != 0) {digit++;data >>>= 1;}
        return digit;
      }, getPatternPosition: function getPatternPosition(typeNumber) {return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];}, getMask: function getMask(maskPattern, i, j) {switch (maskPattern) {case QRMaskPattern.PATTERN000:return (i + j) % 2 == 0;case QRMaskPattern.PATTERN001:return i % 2 == 0;case QRMaskPattern.PATTERN010:return j % 3 == 0;case QRMaskPattern.PATTERN011:return (i + j) % 3 == 0;case QRMaskPattern.PATTERN100:return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;case QRMaskPattern.PATTERN101:return i * j % 2 + i * j % 3 == 0;case QRMaskPattern.PATTERN110:return (i * j % 2 + i * j % 3) % 2 == 0;case QRMaskPattern.PATTERN111:return (i * j % 3 + (i + j) % 2) % 2 == 0;default:throw new Error("bad maskPattern:" + maskPattern);}}, getErrorCorrectPolynomial: function getErrorCorrectPolynomial(errorCorrectLength) {
        var a = new QRPolynomial([1], 0);for (var i = 0; i < errorCorrectLength; i++) {a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));}
        return a;
      }, getLengthInBits: function getLengthInBits(mode, type) {if (1 <= type && type < 10) {switch (mode) {case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:" + mode);}} else if (type < 27) {switch (mode) {case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:" + mode);}} else if (type < 41) {switch (mode) {case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:" + mode);}} else {throw new Error("type:" + type);}}, getLostPoint: function getLostPoint(qrCode) {
        var moduleCount = qrCode.getModuleCount();var lostPoint = 0;for (var row = 0; row < moduleCount; row++) {
          for (var col = 0; col < moduleCount; col++) {
            var sameCount = 0;var dark = qrCode.isDark(row, col);for (var r = -1; r <= 1; r++) {
              if (row + r < 0 || moduleCount <= row + r) {continue;}
              for (var c = -1; c <= 1; c++) {
                if (col + c < 0 || moduleCount <= col + c) {continue;}
                if (r == 0 && c == 0) {continue;}
                if (dark == qrCode.isDark(row + r, col + c)) {sameCount++;}
              }
            }
            if (sameCount > 5) {lostPoint += 3 + sameCount - 5;}
          }
        }
        for (var row = 0; row < moduleCount - 1; row++) {for (var col = 0; col < moduleCount - 1; col++) {var count = 0;if (qrCode.isDark(row, col)) count++;if (qrCode.isDark(row + 1, col)) count++;if (qrCode.isDark(row, col + 1)) count++;if (qrCode.isDark(row + 1, col + 1)) count++;if (count == 0 || count == 4) {lostPoint += 3;}}}
        for (var row = 0; row < moduleCount; row++) {for (var col = 0; col < moduleCount - 6; col++) {if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {lostPoint += 40;}}}
        for (var col = 0; col < moduleCount; col++) {for (var row = 0; row < moduleCount - 6; row++) {if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {lostPoint += 40;}}}
        var darkCount = 0;for (var col = 0; col < moduleCount; col++) {for (var row = 0; row < moduleCount; row++) {if (qrCode.isDark(row, col)) {darkCount++;}}}
        var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;lostPoint += ratio * 10;return lostPoint;
      } };
  
    var QRMath = {
      glog: function glog(n) {
        if (n < 1) {throw new Error("glog(" + n + ")");}
        return QRMath.LOG_TABLE[n];
      }, gexp: function gexp(n) {
        while (n < 0) {n += 255;}
        while (n >= 256) {n -= 255;}
        return QRMath.EXP_TABLE[n];
      }, EXP_TABLE: new Array(256), LOG_TABLE: new Array(256) };
    for (var i = 0; i < 8; i++) {QRMath.EXP_TABLE[i] = 1 << i;}
    for (var i = 8; i < 256; i++) {QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];}
    for (var i = 0; i < 255; i++) {QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;}
    function QRPolynomial(num, shift) {
      if (num.length == undefined) {throw new Error(num.length + "/" + shift);}
      var offset = 0;while (offset < num.length && num[offset] == 0) {offset++;}
      this.num = new Array(num.length - offset + shift);for (var i = 0; i < num.length - offset; i++) {this.num[i] = num[i + offset];}
    }
    QRPolynomial.prototype = {
      get: function get(index) {return this.num[index];}, getLength: function getLength() {return this.num.length;}, multiply: function multiply(e) {
        var num = new Array(this.getLength() + e.getLength() - 1);for (var i = 0; i < this.getLength(); i++) {for (var j = 0; j < e.getLength(); j++) {num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));}}
        return new QRPolynomial(num, 0);
      }, mod: function mod(e) {
        if (this.getLength() - e.getLength() < 0) {return this;}
        var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));var num = new Array(this.getLength());for (var i = 0; i < this.getLength(); i++) {num[i] = this.get(i);}
        for (var i = 0; i < e.getLength(); i++) {num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);}
        return new QRPolynomial(num, 0).mod(e);
      } };
  
    function QRRSBlock(totalCount, dataCount) {this.totalCount = totalCount;this.dataCount = dataCount;}
    QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
    QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
      var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);if (rsBlock == undefined) {throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);}
      var length = rsBlock.length / 3;var list = [];for (var i = 0; i < length; i++) {var count = rsBlock[i * 3 + 0];var totalCount = rsBlock[i * 3 + 1];var dataCount = rsBlock[i * 3 + 2];for (var j = 0; j < count; j++) {list.push(new QRRSBlock(totalCount, dataCount));}}
      return list;
    };
    QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {switch (errorCorrectLevel) {case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];default:return undefined;}};
    function QRBitBuffer() {this.buffer = [];this.length = 0;}
    QRBitBuffer.prototype = {
      get: function get(index) {var bufIndex = Math.floor(index / 8);return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;}, put: function put(num, length) {for (var i = 0; i < length; i++) {this.putBit((num >>> length - i - 1 & 1) == 1);}}, getLengthInBits: function getLengthInBits() {return this.length;}, putBit: function putBit(bit) {
        var bufIndex = Math.floor(this.length / 8);if (this.buffer.length <= bufIndex) {this.buffer.push(0);}
        if (bit) {this.buffer[bufIndex] |= 0x80 >>> this.length % 8;}
        this.length++;
      } };
  
    var QRCodeLimitLength = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]];
  
    // QRCode object
    QRCode = function QRCode(canvasId, vOption) {
      this._htOption = {
        width: 256,
        height: 256,
        typeNumber: 4,
        colorDark: "#000000",
        colorLight: "#ffffff",
        correctLevel: QRErrorCorrectLevel.H };
  
  
      if (typeof vOption === 'string') {
        vOption = {
          text: vOption };
  
      }
  
      // Overwrites options
      if (vOption) {
        for (var i in vOption) {
          this._htOption[i] = vOption[i];
        }
      }
  
      this._oQRCode = null;
      this.canvasId = canvasId;
  
      if (this._htOption.text && this.canvasId) {
        this.makeCode(this._htOption.text);
      }
    };
  
    QRCode.prototype.makeCode = function (sText) {
      this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
      this._oQRCode.addData(sText);
      this._oQRCode.make();
      this.makeImage();
    };
  
    QRCode.prototype.makeImage = function () {
      var _oContext;
      if (this._htOption.usingIn) {
        _oContext = wx.createCanvasContext(this.canvasId, this._htOption.usingIn);
      } else
      {
        _oContext = wx.createCanvasContext(this.canvasId);
      }
      var _htOption = this._htOption;
      var oQRCode = this._oQRCode;
  
      var nCount = oQRCode.getModuleCount();
      var nWidth = _htOption.width / nCount;
      var nHeight = _htOption.height / nCount;
      var nRoundedWidth = Math.round(nWidth);
      var nRoundedHeight = Math.round(nHeight);
  
      if (_htOption.image && _htOption.image != '') {
        _oContext.drawImage(_htOption.image, 0, 0, _htOption.width, _htOption.height);
      }
  
      for (var row = 0; row < nCount; row++) {
        for (var col = 0; col < nCount; col++) {
          var bIsDark = oQRCode.isDark(row, col);
          var nLeft = col * nWidth;
          var nTop = row * nHeight;
          _oContext.setStrokeStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight);
          // _oContext.setStrokeStyle('yellow')
          _oContext.setLineWidth(1);
          _oContext.setFillStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight);
          // _oContext.setFillStyle('red')
          // if (bIsDark) {
          _oContext.fillRect(nLeft, nTop, nWidth, nHeight);
          // }
  
          // 안티 앨리어싱 방지 처리
          // if (bIsDark) {
          _oContext.strokeRect(
          Math.floor(nLeft) + 0.5,
          Math.floor(nTop) + 0.5,
          nRoundedWidth,
          nRoundedHeight);
  
  
          _oContext.strokeRect(
          Math.ceil(nLeft) - 0.5,
          Math.ceil(nTop) - 0.5,
          nRoundedWidth,
          nRoundedHeight);
  
          // }
          // _oContext.fillRect(
          //     Math.floor(nLeft) + 0.5,
          //     Math.floor(nTop) + 0.5,
          //     nRoundedWidth,
          //     nRoundedHeight
          // );
          // _oContext.fillRect(
          //     Math.ceil(nLeft) - 0.5,
          //     Math.ceil(nTop) - 0.5,
          //     nRoundedWidth,
          //     nRoundedHeight
          // );
          // _oContext.clearRect(
          //     Math.floor(nLeft) + 0.5,
          //     Math.floor(nTop) + 0.5,
          //     nRoundedWidth,
          //     nRoundedHeight
          // );
          // _oContext.clearRect(
          //     Math.ceil(nLeft) - 0.5,
          //     Math.ceil(nTop) - 0.5,
          //     nRoundedWidth,
          //     nRoundedHeight
          // );
        }
      }
  
      _oContext.draw();
    };
  
    // 保存为图片，将临时路径传给回调
    QRCode.prototype.exportImage = function (callback) {
      if (!callback) {
        return;
      }
      wx.canvasToTempFilePath({
        x: 0,
        y: 0,
        width: this._htOption.width,
        height: this._htOption.height,
        destWidth: this._htOption.width,
        destHeight: this._htOption.height,
        canvasId: this.canvasId,
        success: function success(res) {
          console.log(res.tempFilePath);
          callback(res.tempFilePath);
        } });
  
    };
  
    QRCode.CorrectLevel = QRErrorCorrectLevel;
  })();
  
  module.exports = QRCode;
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 481:
  /*!*******************************************!*\
    !*** D:/work/uniapp/ThorUI/utils/city.js ***!
    \*******************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  module.exports = {
    list: [
    {
      "letter": "A",
      "data": [] },
  
    {
      "letter": "A",
      "data": [
      {
        "cityName": "阿坝",
        "keyword": "阿坝ABA" },
  
      {
        "cityName": "阿克苏",
        "keyword": "阿克苏AKESU" },
  
      {
        "cityName": "阿拉善",
        "keyword": "阿拉善ALASHAN" },
  
      {
        "cityName": "阿勒泰",
        "keyword": "阿勒泰ALETAI" },
  
      {
        "cityName": "阿里",
        "keyword": "阿里ALI" },
  
      {
        "cityName": "安康",
        "keyword": "安康ANKANG" },
  
      {
        "cityName": "安庆",
        "keyword": "安庆ANQING" },
  
      {
        "cityName": "鞍山",
        "keyword": "鞍山ANSHAN" },
  
      {
        "cityName": "马鞍山",
        "keyword": "马鞍山MAANSHAN" },
  
      {
        "cityName": "安顺",
        "keyword": "安顺ANSHUN" },
  
      {
        "cityName": "安阳",
        "keyword": "安阳ANYANG" }] },
  
  
  
    {
      "letter": "B",
      "data": [
      {
        "cityName": "白城",
        "keyword": "白城BAICHENG" },
  
      {
        "cityName": "白山",
        "keyword": "白山BAISHAN" },
  
      {
        "cityName": "白银",
        "keyword": "白银BAIYIN" },
  
      {
        "cityName": "保定",
        "keyword": "保定BAODING" },
  
      {
        "cityName": "宝鸡",
        "keyword": "宝鸡BAOJI" },
  
      {
        "cityName": "保山",
        "keyword": "保山BAOSHAN" },
  
      {
        "cityName": "包头",
        "keyword": "包头BAOTOU" },
  
      {
        "cityName": "巴彦淖尔",
        "keyword": "巴彦淖尔BAYANNAOER" },
  
      {
        "cityName": "巴音郭楞",
        "keyword": "巴音郭楞BAYINGUOLENG" },
  
      {
        "cityName": "巴中",
        "keyword": "巴中BAZHONG" },
  
      {
        "cityName": "北海",
        "keyword": "北海BEIHAI" },
  
      {
        "cityName": "北京",
        "keyword": "北京BEIJING" },
  
      {
        "cityName": "蚌埠",
        "keyword": "蚌埠BENGBU" },
  
      {
        "cityName": "本溪",
        "keyword": "本溪BENXI" },
  
      {
        "cityName": "毕节",
        "keyword": "毕节BIJIE" },
  
      {
        "cityName": "滨州",
        "keyword": "滨州BINZHOU" },
  
      {
        "cityName": "博尔塔拉",
        "keyword": "博尔塔拉BOERTALA" },
  
      {
        "cityName": "百色",
        "keyword": "百色BOSE" },
  
      {
        "cityName": "亳州",
        "keyword": "亳州BOZHOU" }] },
  
  
  
    {
      "letter": "C",
      "data": [
      {
        "cityName": "沧州",
        "keyword": "沧州CANGZHOU" },
  
      {
        "cityName": "长春",
        "keyword": "长春CHANGCHUN" },
  
      {
        "cityName": "常德",
        "keyword": "常德CHANGDE" },
  
      {
        "cityName": "昌都",
        "keyword": "昌都CHANGDU" },
  
      {
        "cityName": "昌吉",
        "keyword": "昌吉CHANGJI" },
  
      {
        "cityName": "长沙",
        "keyword": "长沙CHANGSHA" },
  
      {
        "cityName": "长治",
        "keyword": "长治CHANGZHI" },
  
      {
        "cityName": "常州",
        "keyword": "常州CHANGZHOU" },
  
      {
        "cityName": "潮州",
        "keyword": "潮州CHAOZHOU" },
  
      {
        "cityName": "承德",
        "keyword": "承德CHENGDE" },
  
      {
        "cityName": "成都",
        "keyword": "成都CHENGDU" },
  
      {
        "cityName": "郴州",
        "keyword": "郴州CHENZHOU" },
  
      {
        "cityName": "赤峰",
        "keyword": "赤峰CHIFENG" },
  
      {
        "cityName": "池州",
        "keyword": "池州CHIZHOU" },
  
      {
        "cityName": "重庆",
        "keyword": "重庆CHONGQING" },
  
      {
        "cityName": "崇左",
        "keyword": "崇左CHONGZUO" },
  
      {
        "cityName": "楚雄",
        "keyword": "楚雄CHUXIONG" },
  
      {
        "cityName": "滁州",
        "keyword": "滁州CHUZHOU" }] },
  
  
  
    {
      "letter": "D",
      "data": [
      {
        "cityName": "大理",
        "keyword": "大理DALI" },
  
      {
        "cityName": "大连",
        "keyword": "大连DALIAN" },
  
      {
        "cityName": "丹东",
        "keyword": "丹东DANDONG" },
  
      {
        "cityName": "儋州",
        "keyword": "儋州DANZHOU" },
  
      {
        "cityName": "大庆",
        "keyword": "大庆DAQING" },
  
      {
        "cityName": "大同",
        "keyword": "大同DATONG" },
  
      {
        "cityName": "大兴安岭",
        "keyword": "大兴安岭DAXINGANLING" },
  
      {
        "cityName": "达州",
        "keyword": "达州DAZHOU" },
  
      {
        "cityName": "德宏",
        "keyword": "德宏DEHONG" },
  
      {
        "cityName": "德阳",
        "keyword": "德阳DEYANG" },
  
      {
        "cityName": "德州",
        "keyword": "德州DEZHOU" },
  
      {
        "cityName": "定西",
        "keyword": "定西DINGXI" },
  
      {
        "cityName": "迪庆",
        "keyword": "迪庆DIQING" },
  
      {
        "cityName": "东莞",
        "keyword": "东莞DONGGUAN" },
  
      {
        "cityName": "东营",
        "keyword": "东营DONGYING" }] },
  
  
  
    {
      "letter": "E",
      "data": [
      {
        "cityName": "鄂尔多斯",
        "keyword": "鄂尔多斯EERDUOSI" },
  
      {
        "cityName": "恩施",
        "keyword": "恩施ENSHI" },
  
      {
        "cityName": "鄂州",
        "keyword": "鄂州EZHOU" }] },
  
  
  
    {
      "letter": "F",
      "data": [
      {
        "cityName": "防城港",
        "keyword": "防城港FANGCHENGGANG" },
  
      {
        "cityName": "佛山",
        "keyword": "佛山FOSHAN" },
  
      {
        "cityName": "抚顺",
        "keyword": "抚顺FUSHUN" },
  
      {
        "cityName": "阜新",
        "keyword": "阜新FUXIN" },
  
      {
        "cityName": "阜阳",
        "keyword": "阜阳FUYANG" },
  
      {
        "cityName": "抚州",
        "keyword": "抚州FUZHOU" },
  
      {
        "cityName": "福州",
        "keyword": "福州FUZHOU" }] },
  
  
  
    {
      "letter": "G",
      "data": [
      {
        "cityName": "甘南",
        "keyword": "甘南GANNAN" },
  
      {
        "cityName": "赣州",
        "keyword": "赣州GANZHOU" },
  
      {
        "cityName": "甘孜",
        "keyword": "甘孜GANZI" },
  
      {
        "cityName": "广安",
        "keyword": "广安GUANGAN" },
  
      {
        "cityName": "广元",
        "keyword": "广元GUANGYUAN" },
  
      {
        "cityName": "广州",
        "keyword": "广州GUANGZHOU" },
  
      {
        "cityName": "贵港",
        "keyword": "贵港GUIGANG" },
  
      {
        "cityName": "桂林",
        "keyword": "桂林GUILIN" },
  
      {
        "cityName": "贵阳",
        "keyword": "贵阳GUIYANG" },
  
      {
        "cityName": "果洛",
        "keyword": "果洛GUOLUO" },
  
      {
        "cityName": "固原",
        "keyword": "固原GUYUAN" }] },
  
  
  
    {
      "letter": "H",
      "data": [
      {
        "cityName": "哈尔滨",
        "keyword": "哈尔滨HAERBIN" },
  
      {
        "cityName": "海北",
        "keyword": "海北HAIBEI" },
  
      {
        "cityName": "海东",
        "keyword": "海东HAIDONG" },
  
      {
        "cityName": "海口",
        "keyword": "海口HAIKOU" },
  
      {
        "cityName": "海南藏族自治州",
        "keyword": "海南藏族自治州HAINAN" },
  
      {
        "cityName": "海南",
        "keyword": "海南藏族自治州HAINAN" },
  
      {
        "cityName": "海南",
        "keyword": "海南HAINAN" },
  
      {
        "cityName": "海西",
        "keyword": "海西HAIXI" },
  
      {
        "cityName": "哈密",
        "keyword": "哈密HAMI" },
  
      {
        "cityName": "邯郸",
        "keyword": "邯郸HANDAN" },
  
      {
        "cityName": "杭州",
        "keyword": "杭州HANGZHOU" },
  
      {
        "cityName": "汉中",
        "keyword": "汉中HANZHONG" },
  
      {
        "cityName": "河北",
        "keyword": "河北HEBEI" },
  
      {
        "cityName": "鹤壁",
        "keyword": "鹤壁HEBI" },
  
      {
        "cityName": "河池",
        "keyword": "河池HECHI" },
  
      {
        "cityName": "合肥",
        "keyword": "合肥HEFEI" },
  
      {
        "cityName": "鹤岗",
        "keyword": "鹤岗HEGANG" },
  
      {
        "cityName": "黑河",
        "keyword": "黑河HEIHE" },
  
      {
        "cityName": "河南",
        "keyword": "河南HENAN" },
  
      {
        "cityName": "衡水",
        "keyword": "衡水HENGSHUI" },
  
      {
        "cityName": "衡阳",
        "keyword": "衡阳HENGYANG" },
  
      {
        "cityName": "和田",
        "keyword": "和田HETIAN" },
  
      {
        "cityName": "河源",
        "keyword": "河源HEYUAN" },
  
      {
        "cityName": "菏泽",
        "keyword": "菏泽HEZE" },
  
      {
        "cityName": "贺州",
        "keyword": "贺州HEZHOU" },
  
      {
        "cityName": "红河",
        "keyword": "红河HONGHE" },
  
      {
        "cityName": "淮安",
        "keyword": "淮安HUAIAN" },
  
      {
        "cityName": "淮北",
        "keyword": "淮北HUAIBEI" },
  
      {
        "cityName": "怀化",
        "keyword": "怀化HUAIHUA" },
  
      {
        "cityName": "淮南",
        "keyword": "淮南HUAINAN" },
  
      {
        "cityName": "黄冈",
        "keyword": "黄冈HUANGGANG" },
  
      {
        "cityName": "黄南",
        "keyword": "黄南HUANGNAN" },
  
      {
        "cityName": "黄山",
        "keyword": "黄山HUANGSHAN" },
  
      {
        "cityName": "黄石",
        "keyword": "黄石HUANGSHI" },
  
      {
        "cityName": "湖北",
        "keyword": "湖北HUBEI" },
  
      {
        "cityName": "呼和浩特",
        "keyword": "呼和浩特HUHEHAOTE" },
  
      {
        "cityName": "惠州",
        "keyword": "惠州HUIZHOU" },
  
      {
        "cityName": "葫芦岛",
        "keyword": "葫芦岛HULUDAO" },
  
      {
        "cityName": "呼伦贝尔",
        "keyword": "呼伦贝尔HULUNBEIER" },
  
      {
        "cityName": "湖州",
        "keyword": "湖州HUZHOU" }] },
  
  
  
    {
      "letter": "I",
      "data": [] },
  
  
  
    {
      "letter": "J",
      "data": [
      {
        "cityName": "佳木斯",
        "keyword": "佳木斯JIAMUSI" },
  
      {
        "cityName": "吉安",
        "keyword": "吉安JIAN" },
  
      {
        "cityName": "江门",
        "keyword": "江门JIANGMEN" },
  
      {
        "cityName": "焦作",
        "keyword": "焦作JIAOZUO" },
  
      {
        "cityName": "嘉兴",
        "keyword": "嘉兴JIAXING" },
  
      {
        "cityName": "嘉峪关",
        "keyword": "嘉峪关JIAYUGUAN" },
  
      {
        "cityName": "揭阳",
        "keyword": "揭阳JIEYANG" },
  
      {
        "cityName": "吉林",
        "keyword": "吉林JILIN" },
  
      {
        "cityName": "济南",
        "keyword": "济南JINAN" },
  
      {
        "cityName": "金昌",
        "keyword": "金昌JINCHANG" },
  
      {
        "cityName": "晋城",
        "keyword": "晋城JINCHENG" },
  
      {
        "cityName": "景德镇",
        "keyword": "景德镇JINGDEZHEN" },
  
      {
        "cityName": "荆门",
        "keyword": "荆门JINGMEN" },
  
      {
        "cityName": "荆州",
        "keyword": "荆州JINGZHOU" },
  
      {
        "cityName": "金华",
        "keyword": "金华JINHUA" },
  
      {
        "cityName": "济宁",
        "keyword": "济宁JINING" },
  
      {
        "cityName": "晋中",
        "keyword": "晋中JINZHONG" },
  
      {
        "cityName": "锦州",
        "keyword": "锦州JINZHOU" },
  
      {
        "cityName": "九江",
        "keyword": "九江JIUJIANG" },
  
      {
        "cityName": "酒泉",
        "keyword": "酒泉JIUQUAN" },
  
      {
        "cityName": "鸡西",
        "keyword": "鸡西JIXI" }] },
  
  
  
    {
      "letter": "K",
      "data": [
      {
        "cityName": "开封",
        "keyword": "开封KAIFENG" },
  
      {
        "cityName": "喀什",
        "keyword": "喀什KASHI" },
  
      {
        "cityName": "克拉玛依",
        "keyword": "克拉玛依KELAMAYI" },
  
      {
        "cityName": "克孜勒苏",
        "keyword": "克孜勒苏KEZILESU" },
  
      {
        "cityName": "昆明",
        "keyword": "昆明KUNMING" }] },
  
  
  
    {
      "letter": "L",
      "data": [
      {
        "cityName": "来宾",
        "keyword": "来宾LAIBIN" },
  
      {
        "cityName": "莱芜",
        "keyword": "莱芜LAIWU" },
  
      {
        "cityName": "廊坊",
        "keyword": "廊坊LANGFANG" },
  
      {
        "cityName": "兰州",
        "keyword": "兰州LANZHOU" },
  
      {
        "cityName": "拉萨",
        "keyword": "拉萨LASA" },
  
      {
        "cityName": "乐山",
        "keyword": "乐山LESHAN" },
  
      {
        "cityName": "凉山",
        "keyword": "凉山LIANGSHAN" },
  
      {
        "cityName": "连云港",
        "keyword": "连云港LIANYUNGANG" },
  
      {
        "cityName": "聊城",
        "keyword": "聊城LIAOCHENG" },
  
      {
        "cityName": "辽阳",
        "keyword": "辽阳LIAOYANG" },
  
      {
        "cityName": "辽源",
        "keyword": "辽源LIAOYUAN" },
  
      {
        "cityName": "丽江",
        "keyword": "丽江LIJIANG" },
  
      {
        "cityName": "临沧",
        "keyword": "临沧LINCANG" },
  
      {
        "cityName": "临汾",
        "keyword": "临汾LINFEN" },
  
      {
        "cityName": "临夏",
        "keyword": "临夏LINXIA" },
  
      {
        "cityName": "临沂",
        "keyword": "临沂LINYI" },
  
      {
        "cityName": "林芝",
        "keyword": "林芝LINZHI" },
  
      {
        "cityName": "丽水",
        "keyword": "丽水LISHUI" },
  
      {
        "cityName": "六盘水",
        "keyword": "六盘水LIUPANSHUI" },
  
      {
        "cityName": "柳州",
        "keyword": "柳州LIUZHOU" },
  
      {
        "cityName": "陇南",
        "keyword": "陇南LONGNAN" },
  
      {
        "cityName": "龙岩",
        "keyword": "龙岩LONGYAN" },
  
      {
        "cityName": "娄底",
        "keyword": "娄底LOUDI" },
  
      {
        "cityName": "六安",
        "keyword": "六安LUAN" },
  
      {
        "cityName": "洛阳",
        "keyword": "洛阳LUOYANG" },
  
      {
        "cityName": "泸州",
        "keyword": "泸州LUZHOU" },
  
      {
        "cityName": "吕梁",
        "keyword": "吕梁LVLIANG" }] },
  
  
  
    {
      "letter": "M",
      "data": [
      {
        "cityName": "马鞍山",
        "keyword": "马鞍山MAANSHAN" },
  
      {
        "cityName": "茂名",
        "keyword": "茂名MAOMING" },
  
      {
        "cityName": "眉山",
        "keyword": "眉山MEISHAN" },
  
      {
        "cityName": "梅州",
        "keyword": "梅州MEIZHOU" },
  
      {
        "cityName": "绵阳",
        "keyword": "绵阳MIANYANG" },
  
      {
        "cityName": "牡丹江",
        "keyword": "牡丹江MUDANJIANG" }] },
  
  
  
    {
      "letter": "N",
      "data": [
      {
        "cityName": "南昌",
        "keyword": "南昌NANCHANG" },
  
      {
        "cityName": "南充",
        "keyword": "南充NANCHONG" },
  
      {
        "cityName": "南京",
        "keyword": "南京NANJING" },
  
      {
        "cityName": "南宁",
        "keyword": "南宁NANNING" },
  
      {
        "cityName": "南平",
        "keyword": "南平NANPING" },
  
      {
        "cityName": "南通",
        "keyword": "南通NANTONG" },
  
      {
        "cityName": "南阳",
        "keyword": "南阳NANYANG" },
  
      {
        "cityName": "那曲",
        "keyword": "那曲NAQU" },
  
      {
        "cityName": "内江",
        "keyword": "内江NEIJIANG" },
  
      {
        "cityName": "宁波",
        "keyword": "宁波NINGBO" },
  
      {
        "cityName": "宁德",
        "keyword": "宁德NINGDE" },
  
      {
        "cityName": "怒江",
        "keyword": "怒江NUJIANG" }] },
  
  
  
    {
      "letter": "O",
      "data": [] },
  
  
  
    {
      "letter": "P",
      "data": [
      {
        "cityName": "盘锦",
        "keyword": "盘锦PANJIN" },
  
      {
        "cityName": "攀枝花",
        "keyword": "攀枝花PANZHIHUA" },
  
      {
        "cityName": "平顶山",
        "keyword": "平顶山PINGDINGSHAN" },
  
      {
        "cityName": "平凉",
        "keyword": "平凉PINGLIANG" },
  
      {
        "cityName": "萍乡",
        "keyword": "萍乡PINGXIANG" },
  
      {
        "cityName": "普洱",
        "keyword": "普洱PUER" },
  
      {
        "cityName": "莆田",
        "keyword": "莆田PUTIAN" },
  
      {
        "cityName": "濮阳",
        "keyword": "濮阳PUYANG" }] },
  
  
  
    {
      "letter": "Q",
      "data": [
      {
        "cityName": "黔东南",
        "keyword": "黔东南QIANDONGNAN" },
  
      {
        "cityName": "黔南",
        "keyword": "黔南QIANNAN" },
  
      {
        "cityName": "黔西南",
        "keyword": "黔西南QIANXINAN" },
  
      {
        "cityName": "青岛",
        "keyword": "青岛QINGDAO" },
  
      {
        "cityName": "庆阳",
        "keyword": "庆阳QINGYANG" },
  
      {
        "cityName": "清远",
        "keyword": "清远QINGYUAN" },
  
      {
        "cityName": "秦皇岛",
        "keyword": "秦皇岛QINHUANGDAO" },
  
      {
        "cityName": "钦州",
        "keyword": "钦州QINZHOU" },
  
      {
        "cityName": "齐齐哈尔",
        "keyword": "齐齐哈尔QIQIHAER" },
  
      {
        "cityName": "七台河",
        "keyword": "七台河QITAIHE" },
  
      {
        "cityName": "泉州",
        "keyword": "泉州QUANZHOU" },
  
      {
        "cityName": "曲靖",
        "keyword": "曲靖QUJING" },
  
      {
        "cityName": "衢州",
        "keyword": "衢州QUZHOU" }] },
  
  
  
    {
      "letter": "R",
      "data": [
      {
        "cityName": "日喀则",
        "keyword": "日喀则RIKAZE" },
  
      {
        "cityName": "日照",
        "keyword": "日照RIZHAO" }] },
  
  
  
    {
      "letter": "S",
      "data": [
      {
        "cityName": "三门峡",
        "keyword": "三门峡SANMENXIA" },
  
      {
        "cityName": "三明",
        "keyword": "三明SANMING" },
  
      {
        "cityName": "三沙",
        "keyword": "三沙SANSHA" },
  
      {
        "cityName": "三亚",
        "keyword": "三亚SANYA" },
  
      {
        "cityName": "上海",
        "keyword": "上海SHANGHAI" },
  
      {
        "cityName": "商洛",
        "keyword": "商洛SHANGLUO" },
  
      {
        "cityName": "商丘",
        "keyword": "商丘SHANGQIU" },
  
      {
        "cityName": "上饶",
        "keyword": "上饶SHANGRAO" },
  
      {
        "cityName": "山南",
        "keyword": "山南SHANNAN" },
  
      {
        "cityName": "汕头",
        "keyword": "汕头SHANTOU" },
  
      {
        "cityName": "汕尾",
        "keyword": "汕尾SHANWEI" },
  
      {
        "cityName": "韶关",
        "keyword": "韶关SHAOGUAN" },
  
      {
        "cityName": "绍兴",
        "keyword": "绍兴SHAOXING" },
  
      {
        "cityName": "邵阳",
        "keyword": "邵阳SHAOYANG" },
  
      {
        "cityName": "沈阳",
        "keyword": "沈阳SHENYANG" },
  
      {
        "cityName": "深圳",
        "keyword": "深圳SHENZHEN" },
  
      {
        "cityName": "石家庄",
        "keyword": "石家庄SHIJIAZHUANG" },
  
      {
        "cityName": "十堰",
        "keyword": "十堰SHIYAN" },
  
      {
        "cityName": "石嘴山",
        "keyword": "石嘴山SHIZUISHAN" },
  
      {
        "cityName": "双鸭山",
        "keyword": "双鸭山SHUANGYASHAN" },
  
      {
        "cityName": "朔州",
        "keyword": "朔州SHUOZHOU" },
  
      {
        "cityName": "四平",
        "keyword": "四平SIPING" },
  
      {
        "cityName": "松原",
        "keyword": "松原SONGYUAN" },
  
      {
        "cityName": "绥化",
        "keyword": "绥化SUIHUA" },
  
      {
        "cityName": "遂宁",
        "keyword": "遂宁SUINING" },
  
      {
        "cityName": "随州",
        "keyword": "随州SUIZHOU" },
  
      {
        "cityName": "宿迁",
        "keyword": "宿迁SUQIAN" },
  
      {
        "cityName": "苏州",
        "keyword": "苏州SUZHOU" },
  
      {
        "cityName": "宿州",
        "keyword": "宿州SUZHOU" }] },
  
  
  
    {
      "letter": "T",
      "data": [
      {
        "cityName": "塔城",
        "keyword": "塔城TACHENG" },
  
      {
        "cityName": "漯河",
        "keyword": "漯河TAHE" },
  
      {
        "cityName": "泰安",
        "keyword": "泰安TAIAN" },
  
      {
        "cityName": "太原",
        "keyword": "太原TAIYUAN" },
  
      {
        "cityName": "泰州",
        "keyword": "泰州TAIZHOU" },
  
      {
        "cityName": "台州",
        "keyword": "台州TAIZHOU" },
  
      {
        "cityName": "唐山",
        "keyword": "唐山TANGSHAN" },
  
      {
        "cityName": "天津",
        "keyword": "天津TIANJIN" },
  
      {
        "cityName": "天水",
        "keyword": "天水TIANSHUI" },
  
      {
        "cityName": "铁岭",
        "keyword": "铁岭TIELING" },
  
      {
        "cityName": "铜川",
        "keyword": "铜川TONGCHUAN" },
  
      {
        "cityName": "通化",
        "keyword": "通化TONGHUA" },
  
      {
        "cityName": "通辽",
        "keyword": "通辽TONGLIAO" },
  
      {
        "cityName": "铜陵",
        "keyword": "铜陵TONGLING" },
  
      {
        "cityName": "铜仁",
        "keyword": "铜仁TONGREN" },
  
      {
        "cityName": "吐鲁番",
        "keyword": "吐鲁番TULUFAN" }] },
  
  
  
    {
      "letter": "W",
      "data": [
      {
        "cityName": "潍坊",
        "keyword": "潍坊WEIFANG" },
  
      {
        "cityName": "威海",
        "keyword": "威海WEIHAI" },
  
      {
        "cityName": "渭南",
        "keyword": "渭南WEINAN" },
  
      {
        "cityName": "文山",
        "keyword": "文山WENSHAN" },
  
      {
        "cityName": "温州",
        "keyword": "温州WENZHOU" },
  
      {
        "cityName": "乌海",
        "keyword": "乌海WUHAI" },
  
      {
        "cityName": "武汉",
        "keyword": "武汉WUHAN" },
  
      {
        "cityName": "芜湖",
        "keyword": "芜湖WUHU" },
  
      {
        "cityName": "乌兰察布",
        "keyword": "乌兰察布WULANCHABU" },
  
      {
        "cityName": "乌鲁木齐",
        "keyword": "乌鲁木齐WULUMUQI" },
  
      {
        "cityName": "武威",
        "keyword": "武威WUWEI" },
  
      {
        "cityName": "无锡",
        "keyword": "无锡WUXI" },
  
      {
        "cityName": "吴忠",
        "keyword": "吴忠WUZHONG" },
  
      {
        "cityName": "梧州",
        "keyword": "梧州WUZHOU" }] },
  
  
  
    {
      "letter": "X",
      "data": [
      {
        "cityName": "厦门",
        "keyword": "厦门XIAMEN" },
  
      {
        "cityName": "西安",
        "keyword": "西安XIAN" },
  
      {
        "cityName": "湘潭",
        "keyword": "湘潭XIANGTAN" },
  
      {
        "cityName": "湘西",
        "keyword": "湘西XIANGXI" },
  
      {
        "cityName": "襄阳",
        "keyword": "襄阳XIANGYANG" },
  
      {
        "cityName": "咸宁",
        "keyword": "咸宁XIANNING" },
  
      {
        "cityName": "咸阳",
        "keyword": "咸阳XIANYANG" },
  
      {
        "cityName": "孝感",
        "keyword": "孝感XIAOGAN" },
  
      {
        "cityName": "锡林郭勒",
        "keyword": "锡林郭勒XILINGUOLE" },
  
      {
        "cityName": "兴安",
        "keyword": "大兴安岭DAXINGANLING" },
  
      {
        "cityName": "兴安",
        "keyword": "兴安XINGAN" },
  
      {
        "cityName": "邢台",
        "keyword": "邢台XINGTAI" },
  
      {
        "cityName": "西宁",
        "keyword": "西宁XINING" },
  
      {
        "cityName": "新疆",
        "keyword": "新疆XINJIANG" },
  
      {
        "cityName": "新乡",
        "keyword": "新乡XINXIANG" },
  
      {
        "cityName": "信阳",
        "keyword": "信阳XINYANG" },
  
      {
        "cityName": "新余",
        "keyword": "新余XINYU" },
  
      {
        "cityName": "忻州",
        "keyword": "忻州XINZHOU" },
  
      {
        "cityName": "西双版纳",
        "keyword": "西双版纳XISHUANGBANNA" },
  
      {
        "cityName": "宣城",
        "keyword": "宣城XUANCHENG" },
  
      {
        "cityName": "许昌",
        "keyword": "许昌XUCHANG" },
  
      {
        "cityName": "徐州",
        "keyword": "徐州XUZHOU" }] },
  
  
  
    {
      "letter": "Y",
      "data": [
      {
        "cityName": "雅安",
        "keyword": "雅安YAAN" },
  
      {
        "cityName": "延安",
        "keyword": "延安YANAN" },
  
      {
        "cityName": "延边",
        "keyword": "延边YANBIAN" },
  
      {
        "cityName": "盐城",
        "keyword": "盐城YANCHENG" },
  
      {
        "cityName": "阳江",
        "keyword": "阳江YANGJIANG" },
  
      {
        "cityName": "阳泉",
        "keyword": "阳泉YANGQUAN" },
  
      {
        "cityName": "扬州",
        "keyword": "扬州YANGZHOU" },
  
      {
        "cityName": "烟台",
        "keyword": "烟台YANTAI" },
  
      {
        "cityName": "宜宾",
        "keyword": "宜宾YIBIN" },
  
      {
        "cityName": "宜昌",
        "keyword": "宜昌YICHANG" },
  
      {
        "cityName": "伊春",
        "keyword": "伊春YICHUN" },
  
      {
        "cityName": "宜春",
        "keyword": "宜春YICHUN" },
  
      {
        "cityName": "伊犁",
        "keyword": "伊犁YILI" },
  
      {
        "cityName": "银川",
        "keyword": "银川YINCHUAN" },
  
      {
        "cityName": "营口",
        "keyword": "营口YINGKOU" },
  
      {
        "cityName": "鹰潭",
        "keyword": "鹰潭YINGTAN" },
  
      {
        "cityName": "益阳",
        "keyword": "益阳YIYANG" },
  
      {
        "cityName": "永州",
        "keyword": "永州YONGZHOU" },
  
      {
        "cityName": "岳阳",
        "keyword": "岳阳YUEYANG" },
  
      {
        "cityName": "玉林",
        "keyword": "玉林YULIN" },
  
      {
        "cityName": "榆林",
        "keyword": "榆林YULIN" },
  
      {
        "cityName": "运城",
        "keyword": "运城YUNCHENG" },
  
      {
        "cityName": "云浮",
        "keyword": "云浮YUNFU" },
  
      {
        "cityName": "玉树",
        "keyword": "玉树YUSHU" },
  
      {
        "cityName": "玉溪",
        "keyword": "玉溪YUXI" }] },
  
  
  
    {
      "letter": "Z",
      "data": [
      {
        "cityName": "枣庄",
        "keyword": "枣庄ZAOZHUANG" },
  
      {
        "cityName": "张家界",
        "keyword": "张家界ZHANGJIAJIE" },
  
      {
        "cityName": "张家口",
        "keyword": "张家口ZHANGJIAKOU" },
  
      {
        "cityName": "张掖",
        "keyword": "张掖ZHANGYE" },
  
      {
        "cityName": "漳州",
        "keyword": "漳州ZHANGZHOU" },
  
      {
        "cityName": "湛江",
        "keyword": "湛江ZHANJIANG" },
  
      {
        "cityName": "肇庆",
        "keyword": "肇庆ZHAOQING" },
  
      {
        "cityName": "昭通",
        "keyword": "昭通ZHAOTONG" },
  
      {
        "cityName": "朝阳",
        "keyword": "朝阳ZHAOYANG" },
  
      {
        "cityName": "郑州",
        "keyword": "郑州ZHENGZHOU" },
  
      {
        "cityName": "镇江",
        "keyword": "镇江ZHENJIANG" },
  
      {
        "cityName": "中山",
        "keyword": "中山ZHONGSHAN" },
  
      {
        "cityName": "中卫",
        "keyword": "中卫ZHONGWEI" },
  
      {
        "cityName": "周口",
        "keyword": "周口ZHOUKOU" },
  
      {
        "cityName": "舟山",
        "keyword": "舟山ZHOUSHAN" },
  
      {
        "cityName": "珠海",
        "keyword": "珠海ZHUHAI" },
  
      {
        "cityName": "驻马店",
        "keyword": "驻马店ZHUMADIAN" },
  
      {
        "cityName": "株洲",
        "keyword": "株洲ZHUZHOU" },
  
      {
        "cityName": "淄博",
        "keyword": "淄博ZIBO" },
  
      {
        "cityName": "自贡",
        "keyword": "自贡ZIGONG" },
  
      {
        "cityName": "资阳",
        "keyword": "资阳ZIYANG" },
  
      {
        "cityName": "遵义",
        "keyword": "遵义ZUNYI" }] }] };
  
  /***/ }),
  
  /***/ 5:
  /*!*******************************************************!*\
    !*** ./node_modules/@dcloudio/uni-stat/dist/index.js ***!
    \*******************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(uni) {var _package = __webpack_require__(/*! ../package.json */ 6);function _possibleConstructorReturn(self, call) {if (call && (typeof call === "object" || typeof call === "function")) {return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self) {if (self === void 0) {throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o) {_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {return o.__proto__ || Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass, superClass) {if (typeof superClass !== "function" && superClass !== null) {throw new TypeError("Super expression must either be null or a function");}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });if (superClass) _setPrototypeOf(subClass, superClass);}function _setPrototypeOf(o, p) {_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {o.__proto__ = p;return o;};return _setPrototypeOf(o, p);}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a 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);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}
  
  var STAT_VERSION = _package.version;
  var STAT_URL = 'https://tongji.dcloud.io/uni/stat';
  var STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif';
  var PAGE_PVER_TIME = 1800;
  var APP_PVER_TIME = 300;
  var OPERATING_TIME = 10;
  
  var UUID_KEY = '__DC_STAT_UUID';
  var UUID_VALUE = '__DC_UUID_VALUE';
  
  function getUuid() {
    var uuid = '';
    if (getPlatformName() === 'n') {
      try {
        uuid = plus.runtime.getDCloudId();
      } catch (e) {
        uuid = '';
      }
      return uuid;
    }
  
    try {
      uuid = uni.getStorageSync(UUID_KEY);
    } catch (e) {
      uuid = UUID_VALUE;
    }
  
    if (!uuid) {
      uuid = Date.now() + '' + Math.floor(Math.random() * 1e7);
      try {
        uni.setStorageSync(UUID_KEY, uuid);
      } catch (e) {
        uni.setStorageSync(UUID_KEY, UUID_VALUE);
      }
    }
    return uuid;
  }
  
  var getSgin = function getSgin(statData) {
    var arr = Object.keys(statData);
    var sortArr = arr.sort();
    var sgin = {};
    var sginStr = '';
    for (var i in sortArr) {
      sgin[sortArr[i]] = statData[sortArr[i]];
      sginStr += sortArr[i] + '=' + statData[sortArr[i]] + '&';
    }
    // const options = sginStr.substr(0, sginStr.length - 1)
    // sginStr = sginStr.substr(0, sginStr.length - 1) + '&key=' + STAT_KEY;
    // const si = crypto.createHash('md5').update(sginStr).digest('hex');
    return {
      sign: '',
      options: sginStr.substr(0, sginStr.length - 1) };
  
  };
  
  var getSplicing = function getSplicing(data) {
    var str = '';
    for (var i in data) {
      str += i + '=' + data[i] + '&';
    }
    return str.substr(0, str.length - 1);
  };
  
  var getTime = function getTime() {
    return parseInt(new Date().getTime() / 1000);
  };
  
  var getPlatformName = function getPlatformName() {
    var platformList = {
      'app-plus': 'n',
      'h5': 'h5',
      'mp-weixin': 'wx',
      'mp-alipay': 'ali',
      'mp-baidu': 'bd',
      'mp-toutiao': 'tt',
      'mp-qq': 'qq' };
  
    return platformList["mp-alipay"];
  };
  
  var getPackName = function getPackName() {
    var packName = '';
    if (getPlatformName() === 'wx' || getPlatformName() === 'qq') {
      // 兼容微信小程序低版本基础库
      if (uni.canIUse('getAccountInfoSync')) {
        packName = uni.getAccountInfoSync().miniProgram.appId || '';
      }
    }
    return packName;
  };
  
  var getVersion = function getVersion() {
    return getPlatformName() === 'n' ? plus.runtime.version : '';
  };
  
  var getChannel = function getChannel() {
    var platformName = getPlatformName();
    var channel = '';
    if (platformName === 'n') {
      channel = plus.runtime.channel;
    }
    return channel;
  };
  
  var getScene = function getScene(options) {
    var platformName = getPlatformName();
    var scene = '';
    if (options) {
      return options;
    }
    if (platformName === 'wx') {
      scene = uni.getLaunchOptionsSync().scene;
    }
    return scene;
  };
  var First__Visit__Time__KEY = 'First__Visit__Time';
  var Last__Visit__Time__KEY = 'Last__Visit__Time';
  
  var getFirstVisitTime = function getFirstVisitTime() {
    var timeStorge = uni.getStorageSync(First__Visit__Time__KEY);
    var time = 0;
    if (timeStorge) {
      time = timeStorge;
    } else {
      time = getTime();
      uni.setStorageSync(First__Visit__Time__KEY, time);
      uni.removeStorageSync(Last__Visit__Time__KEY);
    }
    return time;
  };
  
  var getLastVisitTime = function getLastVisitTime() {
    var timeStorge = uni.getStorageSync(Last__Visit__Time__KEY);
    var time = 0;
    if (timeStorge) {
      time = timeStorge;
    } else {
      time = '';
    }
    uni.setStorageSync(Last__Visit__Time__KEY, getTime());
    return time;
  };
  
  
  var PAGE_RESIDENCE_TIME = '__page__residence__time';
  var First_Page_residence_time = 0;
  var Last_Page_residence_time = 0;
  
  
  var setPageResidenceTime = function setPageResidenceTime() {
    First_Page_residence_time = getTime();
    if (getPlatformName() === 'n') {
      uni.setStorageSync(PAGE_RESIDENCE_TIME, getTime());
    }
    return First_Page_residence_time;
  };
  
  var getPageResidenceTime = function getPageResidenceTime() {
    Last_Page_residence_time = getTime();
    if (getPlatformName() === 'n') {
      First_Page_residence_time = uni.getStorageSync(PAGE_RESIDENCE_TIME);
    }
    return Last_Page_residence_time - First_Page_residence_time;
  };
  var TOTAL__VISIT__COUNT = 'Total__Visit__Count';
  var getTotalVisitCount = function getTotalVisitCount() {
    var timeStorge = uni.getStorageSync(TOTAL__VISIT__COUNT);
    var count = 1;
    if (timeStorge) {
      count = timeStorge;
      count++;
    }
    uni.setStorageSync(TOTAL__VISIT__COUNT, count);
    return count;
  };
  
  var GetEncodeURIComponentOptions = function GetEncodeURIComponentOptions(statData) {
    var data = {};
    for (var prop in statData) {
      data[prop] = encodeURIComponent(statData[prop]);
    }
    return data;
  };
  
  var Set__First__Time = 0;
  var Set__Last__Time = 0;
  
  var getFirstTime = function getFirstTime() {
    var time = new Date().getTime();
    Set__First__Time = time;
    Set__Last__Time = 0;
    return time;
  };
  
  
  var getLastTime = function getLastTime() {
    var time = new Date().getTime();
    Set__Last__Time = time;
    return time;
  };
  
  
  var getResidenceTime = function getResidenceTime(type) {
    var residenceTime = 0;
    if (Set__First__Time !== 0) {
      residenceTime = Set__Last__Time - Set__First__Time;
    }
  
    residenceTime = parseInt(residenceTime / 1000);
    residenceTime = residenceTime < 1 ? 1 : residenceTime;
    if (type === 'app') {
      var overtime = residenceTime > APP_PVER_TIME ? true : false;
      return {
        residenceTime: residenceTime,
        overtime: overtime };
  
    }
    if (type === 'page') {
      var _overtime = residenceTime > PAGE_PVER_TIME ? true : false;
      return {
        residenceTime: residenceTime,
        overtime: _overtime };
  
    }
  
    return {
      residenceTime: residenceTime };
  
  
  };
  
  var getRoute = function getRoute() {
    var pages = getCurrentPages();
    var page = pages[pages.length - 1];
    var _self = page.$vm;
  
    if (getPlatformName() === 'bd') {
      return _self.$mp && _self.$mp.page.is;
    } else {
      return _self.$scope && _self.$scope.route || _self.$mp && _self.$mp.page.route;
    }
  };
  
  var getPageRoute = function getPageRoute(self) {
    var pages = getCurrentPages();
    var page = pages[pages.length - 1];
    var _self = page.$vm;
    var query = self._query;
    var str = query && JSON.stringify(query) !== '{}' ? '?' + JSON.stringify(query) : '';
    // clear
    self._query = '';
    if (getPlatformName() === 'bd') {
      return _self.$mp && _self.$mp.page.is + str;
    } else {
      return _self.$scope && _self.$scope.route + str || _self.$mp && _self.$mp.page.route + str;
    }
  };
  
  var getPageTypes = function getPageTypes(self) {
    if (self.mpType === 'page' || self.$mp && self.$mp.mpType === 'page' || self.$options.mpType === 'page') {
      return true;
    }
    return false;
  };
  
  var calibration = function calibration(eventName, options) {
    //  login 、 share 、pay_success 、pay_fail 、register 、title
    if (!eventName) {
      console.error("uni.report \u7F3A\u5C11 [eventName] \u53C2\u6570");
      return true;
    }
    if (typeof eventName !== 'string') {
      console.error("uni.report [eventName] \u53C2\u6570\u7C7B\u578B\u9519\u8BEF,\u53EA\u80FD\u4E3A String \u7C7B\u578B");
      return true;
    }
    if (eventName.length > 255) {
      console.error("uni.report [eventName] \u53C2\u6570\u957F\u5EA6\u4E0D\u80FD\u5927\u4E8E 255");
      return true;
    }
  
    if (typeof options !== 'string' && typeof options !== 'object') {
      console.error("uni.report [options] \u53C2\u6570\u7C7B\u578B\u9519\u8BEF,\u53EA\u80FD\u4E3A String \u6216 Object \u7C7B\u578B");
      return true;
    }
  
    if (typeof options === 'string' && options.length > 255) {
      console.error("uni.report [options] \u53C2\u6570\u957F\u5EA6\u4E0D\u80FD\u5927\u4E8E 255");
      return true;
    }
  
    if (eventName === 'title' && typeof options !== 'string') {
      console.error('uni.report [eventName] 参数为 title 时，[options] 参数只能为 String 类型');
      return true;
    }
  };
  
  var PagesJson = __webpack_require__(/*! uni-pages?{"type":"style"} */ 7).default;
  var statConfig = __webpack_require__(/*! uni-stat-config */ 8).default || __webpack_require__(/*! uni-stat-config */ 8);
  
  var resultOptions = uni.getSystemInfoSync();var
  
  Util = /*#__PURE__*/function () {
    function Util() {_classCallCheck(this, Util);
      this.self = '';
      this._retry = 0;
      this._platform = '';
      this._query = {};
      this._navigationBarTitle = {
        config: '',
        page: '',
        report: '',
        lt: '' };
  
      this._operatingTime = 0;
      this._reportingRequestData = {
        '1': [],
        '11': [] };
  
      this.__prevent_triggering = false;
  
      this.__licationHide = false;
      this.__licationShow = false;
      this._lastPageRoute = '';
      this.statData = {
        uuid: getUuid(),
        ut: getPlatformName(),
        mpn: getPackName(),
        ak: statConfig.appid,
        usv: STAT_VERSION,
        v: getVersion(),
        ch: getChannel(),
        cn: '',
        pn: '',
        ct: '',
        t: getTime(),
        tt: '',
        p: resultOptions.platform === 'android' ? 'a' : 'i',
        brand: resultOptions.brand || '',
        md: resultOptions.model,
        sv: resultOptions.system.replace(/(Android|iOS)\s/, ''),
        mpsdk: resultOptions.SDKVersion || '',
        mpv: resultOptions.version || '',
        lang: resultOptions.language,
        pr: resultOptions.pixelRatio,
        ww: resultOptions.windowWidth,
        wh: resultOptions.windowHeight,
        sw: resultOptions.screenWidth,
        sh: resultOptions.screenHeight };
  
  
    }_createClass(Util, [{ key: "_applicationShow", value: function _applicationShow()
  
      {
        if (this.__licationHide) {
          getLastTime();
          var time = getResidenceTime('app');
          if (time.overtime) {
            var options = {
              path: this._lastPageRoute,
              scene: this.statData.sc };
  
            this._sendReportRequest(options);
          }
          this.__licationHide = false;
        }
      } }, { key: "_applicationHide", value: function _applicationHide(
  
      self, type) {
  
        this.__licationHide = true;
        getLastTime();
        var time = getResidenceTime();
        getFirstTime();
        var route = getPageRoute(this);
        this._sendHideRequest({
          urlref: route,
          urlref_ts: time.residenceTime },
        type);
      } }, { key: "_pageShow", value: function _pageShow()
  
      {
        var route = getPageRoute(this);
        var routepath = getRoute();
        this._navigationBarTitle.config = PagesJson &&
        PagesJson.pages[routepath] &&
        PagesJson.pages[routepath].titleNView &&
        PagesJson.pages[routepath].titleNView.titleText ||
        PagesJson &&
        PagesJson.pages[routepath] &&
        PagesJson.pages[routepath].navigationBarTitleText || '';
  
        if (this.__licationShow) {
          getFirstTime();
          this.__licationShow = false;
          // console.log('这是 onLauch 之后执行的第一次 pageShow ，为下次记录时间做准备');
          this._lastPageRoute = route;
          return;
        }
  
        getLastTime();
        this._lastPageRoute = route;
        var time = getResidenceTime('page');
        if (time.overtime) {
          var options = {
            path: this._lastPageRoute,
            scene: this.statData.sc };
  
          this._sendReportRequest(options);
        }
        getFirstTime();
      } }, { key: "_pageHide", value: function _pageHide()
  
      {
        if (!this.__licationHide) {
          getLastTime();
          var time = getResidenceTime('page');
          this._sendPageRequest({
            url: this._lastPageRoute,
            urlref: this._lastPageRoute,
            urlref_ts: time.residenceTime });
  
          this._navigationBarTitle = {
            config: '',
            page: '',
            report: '',
            lt: '' };
  
          return;
        }
      } }, { key: "_login", value: function _login()
  
      {
        this._sendEventRequest({
          key: 'login' },
        0);
      } }, { key: "_share", value: function _share()
  
      {
        this._sendEventRequest({
          key: 'share' },
        0);
      } }, { key: "_payment", value: function _payment(
      key) {
        this._sendEventRequest({
          key: key },
        0);
      } }, { key: "_sendReportRequest", value: function _sendReportRequest(
      options) {
  
        this._navigationBarTitle.lt = '1';
        var query = options.query && JSON.stringify(options.query) !== '{}' ? '?' + JSON.stringify(options.query) : '';
        this.statData.lt = '1';
        this.statData.url = options.path + query || '';
        this.statData.t = getTime();
        this.statData.sc = getScene(options.scene);
        this.statData.fvts = getFirstVisitTime();
        this.statData.lvts = getLastVisitTime();
        this.statData.tvc = getTotalVisitCount();
        if (getPlatformName() === 'n') {
          this.getProperty();
        } else {
          this.getNetworkInfo();
        }
      } }, { key: "_sendPageRequest", value: function _sendPageRequest(
  
      opt) {var
  
        url =
  
  
        opt.url,urlref = opt.urlref,urlref_ts = opt.urlref_ts;
        this._navigationBarTitle.lt = '11';
        var options = {
          ak: this.statData.ak,
          uuid: this.statData.uuid,
          lt: '11',
          ut: this.statData.ut,
          url: url,
          tt: this.statData.tt,
          urlref: urlref,
          urlref_ts: urlref_ts,
          ch: this.statData.ch,
          usv: this.statData.usv,
          t: getTime(),
          p: this.statData.p };
  
        this.request(options);
      } }, { key: "_sendHideRequest", value: function _sendHideRequest(
  
      opt, type) {var
  
        urlref =
  
        opt.urlref,urlref_ts = opt.urlref_ts;
        var options = {
          ak: this.statData.ak,
          uuid: this.statData.uuid,
          lt: '3',
          ut: this.statData.ut,
          urlref: urlref,
          urlref_ts: urlref_ts,
          ch: this.statData.ch,
          usv: this.statData.usv,
          t: getTime(),
          p: this.statData.p };
  
        this.request(options, type);
      } }, { key: "_sendEventRequest", value: function _sendEventRequest()
  
  
  
      {var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},_ref$key = _ref.key,key = _ref$key === void 0 ? '' : _ref$key,_ref$value = _ref.value,value = _ref$value === void 0 ? "" : _ref$value;
        var route = this._lastPageRoute;
        var options = {
          ak: this.statData.ak,
          uuid: this.statData.uuid,
          lt: '21',
          ut: this.statData.ut,
          url: route,
          ch: this.statData.ch,
          e_n: key,
          e_v: typeof value === 'object' ? JSON.stringify(value) : value.toString(),
          usv: this.statData.usv,
          t: getTime(),
          p: this.statData.p };
  
        this.request(options);
      } }, { key: "getNetworkInfo", value: function getNetworkInfo()
  
      {var _this = this;
        uni.getNetworkType({
          success: function success(result) {
            _this.statData.net = result.networkType;
            _this.getLocation();
          } });
  
      } }, { key: "getProperty", value: function getProperty()
  
      {var _this2 = this;
        plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {
          _this2.statData.v = wgtinfo.version || '';
          _this2.getNetworkInfo();
        });
      } }, { key: "getLocation", value: function getLocation()
  
      {var _this3 = this;
        if (statConfig.getLocation) {
          uni.getLocation({
            type: 'wgs84',
            geocode: true,
            success: function success(result) {
              if (result.address) {
                _this3.statData.cn = result.address.country;
                _this3.statData.pn = result.address.province;
                _this3.statData.ct = result.address.city;
              }
  
              _this3.statData.lat = result.latitude;
              _this3.statData.lng = result.longitude;
              _this3.request(_this3.statData);
            } });
  
        } else {
          this.statData.lat = 0;
          this.statData.lng = 0;
          this.request(this.statData);
        }
      } }, { key: "request", value: function request(
  
      data, type) {var _this4 = this;
        var time = getTime();
        var title = this._navigationBarTitle;
        data.ttn = title.page;
        data.ttpj = title.config;
        data.ttc = title.report;
  
        var requestData = this._reportingRequestData;
        if (getPlatformName() === 'n') {
          requestData = uni.getStorageSync('__UNI__STAT__DATA') || {};
        }
        if (!requestData[data.lt]) {
          requestData[data.lt] = [];
        }
        requestData[data.lt].push(data);
  
        if (getPlatformName() === 'n') {
          uni.setStorageSync('__UNI__STAT__DATA', requestData);
        }
        if (getPageResidenceTime() < OPERATING_TIME && !type) {
          return;
        }
        var uniStatData = this._reportingRequestData;
        if (getPlatformName() === 'n') {
          uniStatData = uni.getStorageSync('__UNI__STAT__DATA');
        }
        // 时间超过，重新获取时间戳
        setPageResidenceTime();
        var firstArr = [];
        var contentArr = [];
        var lastArr = [];var _loop = function _loop(
  
        i) {
          var rd = uniStatData[i];
          rd.forEach(function (elm) {
            var newData = getSplicing(elm);
            if (i === 0) {
              firstArr.push(newData);
            } else if (i === 3) {
              lastArr.push(newData);
            } else {
              contentArr.push(newData);
            }
          });};for (var i in uniStatData) {_loop(i);
        }
  
        firstArr.push.apply(firstArr, contentArr.concat(lastArr));
        var optionsData = {
          usv: STAT_VERSION, //统计 SDK 版本号
          t: time, //发送请求时的时间戮
          requests: JSON.stringify(firstArr) };
  
  
        this._reportingRequestData = {};
        if (getPlatformName() === 'n') {
          uni.removeStorageSync('__UNI__STAT__DATA');
        }
  
        if (data.ut === 'h5') {
          this.imageRequest(optionsData);
          return;
        }
  
        if (getPlatformName() === 'n' && this.statData.p === 'a') {
          setTimeout(function () {
            _this4._sendRequest(optionsData);
          }, 200);
          return;
        }
        this._sendRequest(optionsData);
      } }, { key: "_sendRequest", value: function _sendRequest(
      optionsData) {var _this5 = this;
        uni.request({
          url: STAT_URL,
          method: 'POST',
          // header: {
          //   'content-type': 'application/json' // 默认值
          // },
          data: optionsData,
          success: function success() {
            // if (process.env.NODE_ENV === 'development') {
            //   console.log('stat request success');
            // }
          },
          fail: function fail(e) {
            if (++_this5._retry < 3) {
              setTimeout(function () {
                _this5._sendRequest(optionsData);
              }, 1000);
            }
          } });
  
      }
      /**
         * h5 请求
         */ }, { key: "imageRequest", value: function imageRequest(
      data) {
        var image = new Image();
        var options = getSgin(GetEncodeURIComponentOptions(data)).options;
        image.src = STAT_H5_URL + '?' + options;
      } }, { key: "sendEvent", value: function sendEvent(
  
      key, value) {
        // 校验 type 参数
        if (calibration(key, value)) return;
  
        if (key === 'title') {
          this._navigationBarTitle.report = value;
          return;
        }
        this._sendEventRequest({
          key: key,
          value: typeof value === 'object' ? JSON.stringify(value) : value },
        1);
      } }]);return Util;}();var
  
  
  
  Stat = /*#__PURE__*/function (_Util) {_inherits(Stat, _Util);_createClass(Stat, null, [{ key: "getInstance", value: function getInstance()
      {
        if (!this.instance) {
          this.instance = new Stat();
        }
        return this.instance;
      } }]);
    function Stat() {var _this6;_classCallCheck(this, Stat);
      _this6 = _possibleConstructorReturn(this, _getPrototypeOf(Stat).call(this));
      _this6.instance = null;
      // 注册拦截器
      if (typeof uni.addInterceptor === 'function' && "development" !== 'development') {
        _this6.addInterceptorInit();
        _this6.interceptLogin();
        _this6.interceptShare(true);
        _this6.interceptRequestPayment();
      }return _this6;
    }_createClass(Stat, [{ key: "addInterceptorInit", value: function addInterceptorInit()
  
      {
        var self = this;
        uni.addInterceptor('setNavigationBarTitle', {
          invoke: function invoke(args) {
            self._navigationBarTitle.page = args.title;
          } });
  
      } }, { key: "interceptLogin", value: function interceptLogin()
  
      {
        var self = this;
        uni.addInterceptor('login', {
          complete: function complete() {
            self._login();
          } });
  
      } }, { key: "interceptShare", value: function interceptShare(
  
      type) {
        var self = this;
        if (!type) {
          self._share();
          return;
        }
        uni.addInterceptor('share', {
          success: function success() {
            self._share();
          },
          fail: function fail() {
            self._share();
          } });
  
      } }, { key: "interceptRequestPayment", value: function interceptRequestPayment()
  
      {
        var self = this;
        uni.addInterceptor('requestPayment', {
          success: function success() {
            self._payment('pay_success');
          },
          fail: function fail() {
            self._payment('pay_fail');
          } });
  
      } }, { key: "report", value: function report(
  
      options, self) {
        this.self = self;
        // if (process.env.NODE_ENV === 'development') {
        //   console.log('report init');
        // }
        setPageResidenceTime();
        this.__licationShow = true;
        this._sendReportRequest(options, true);
      } }, { key: "load", value: function load(
  
      options, self) {
        if (!self.$scope && !self.$mp) {
          var page = getCurrentPages();
          self.$scope = page[page.length - 1];
        }
        this.self = self;
        this._query = options;
      } }, { key: "show", value: function show(
  
      self) {
        this.self = self;
        if (getPageTypes(self)) {
          this._pageShow(self);
        } else {
          this._applicationShow(self);
        }
      } }, { key: "ready", value: function ready(
  
      self) {
        // this.self = self;
        // if (getPageTypes(self)) {
        //   this._pageShow(self);
        // }
      } }, { key: "hide", value: function hide(
      self) {
        this.self = self;
        if (getPageTypes(self)) {
          this._pageHide(self);
        } else {
          this._applicationHide(self, true);
        }
      } }, { key: "error", value: function error(
      em) {
        if (this._platform === 'devtools') {
          if (true) {
            console.info('当前运行环境为开发者工具，不上报数据。');
          }
          // return;
        }
        var emVal = '';
        if (!em.message) {
          emVal = JSON.stringify(em);
        } else {
          emVal = em.stack;
        }
        var options = {
          ak: this.statData.ak,
          uuid: this.statData.uuid,
          lt: '31',
          ut: this.statData.ut,
          ch: this.statData.ch,
          mpsdk: this.statData.mpsdk,
          mpv: this.statData.mpv,
          v: this.statData.v,
          em: emVal,
          usv: this.statData.usv,
          t: getTime(),
          p: this.statData.p };
  
        this.request(options);
      } }]);return Stat;}(Util);
  
  
  var stat = Stat.getInstance();
  var isHide = false;
  var lifecycle = {
    onLaunch: function onLaunch(options) {
      stat.report(options, this);
    },
    onReady: function onReady() {
      stat.ready(this);
    },
    onLoad: function onLoad(options) {
      stat.load(options, this);
      // 重写分享，获取分享上报事件
      if (this.$scope && this.$scope.onShareAppMessage) {
        var oldShareAppMessage = this.$scope.onShareAppMessage;
        this.$scope.onShareAppMessage = function (options) {
          stat.interceptShare(false);
          return oldShareAppMessage.call(this, options);
        };
      }
    },
    onShow: function onShow() {
      isHide = false;
      stat.show(this);
    },
    onHide: function onHide() {
      isHide = true;
      stat.hide(this);
    },
    onUnload: function onUnload() {
      if (isHide) {
        isHide = false;
        return;
      }
      stat.hide(this);
    },
    onError: function onError(e) {
      stat.error(e);
    } };
  
  
  function main() {
    if (true) {
      uni.report = function (type, options) {};
    } else { var Vue; }
  }
  
  main();
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 584:
  /*!****************************************************************!*\
    !*** D:/work/uniapp/ThorUI/components/utils/formValidation.js ***!
    \****************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
   /**
                 * 表单验证
                 * @author dingyong
                 * @version 1.4.0
                 **/
  
  var form = {
    //当出现错误时返回错误消息，否则返回空即为验证通过
    /*
     formData:Object 表单对象。{key:value,key:value},key==rules.name
     rules: Array [{name:name,rule:[],msg:[]},{name:name,rule:[],msg:[]}]
    		name:name 属性=> 元素的名称
    		rule:字符串数组 ["required","isMobile","isEmail","isCarNo","isIdCard","isAmount","isNum","isChinese","isEnglish",isEnAndNo","isSpecial","isEmoji",""isDate","isUrl","isSame:key","range:[1,9]","minLength:9","maxLength:Number"]
    		msg:数组 []。 与数组 rule 长度相同,对应的错误提示信息
    */
    validation: function validation(formData, rules) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {
        for (var _iterator = rules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var item = _step.value;
          var key = item.name;
          var rule = item.rule;
          var msgArr = item.msg;
          if (!key || !rule || rule.length === 0 || !msgArr || msgArr.length === 0) {
            continue;
          }
          for (var i = 0, length = rule.length; i < length; i++) {
            var ruleItem = rule[i];
            var msg = msgArr[i];
            if (!ruleItem || !msg) {
              continue;
            }
            //数据处理
            var value = null;
            if (~ruleItem.indexOf(":")) {
              var temp = ruleItem.split(":");
              ruleItem = temp[0];
              value = temp[1];
            }
            var isError = false;
            switch (ruleItem) {
              case "required":
                isError = form._isNullOrEmpty(formData[key]);
                break;
              case "isMobile":
                isError = !form._isMobile(formData[key]);
                break;
              case "isEmail":
                isError = !form._isEmail(formData[key]);
                break;
              case "isCarNo":
                isError = !form._isCarNo(formData[key]);
                break;
              case "isIdCard":
                isError = !form._isIdCard(formData[key]);
                break;
              case "isAmount":
                isError = !form._isAmount(formData[key]);
                break;
              case "isNum":
                isError = !form._isNum(formData[key]);
                break;
              case "isChinese":
                isError = !form._isChinese(formData[key]);
                break;
              case "isEnglish":
                isError = !form._isEnglish(formData[key]);
                break;
              case "isEnAndNo":
                isError = !form._isEnAndNo(formData[key]);
                break;
              case "isEnOrNo":
                isError = !form._isEnOrNo(formData[key]);
                break;
              case "isSpecial":
                isError = form._isSpecial(formData[key]);
                break;
              case "isEmoji":
                isError = form._isEmoji(formData[key]);
                break;
              case "isDate":
                isError = !form._isDate(formData[key]);
                break;
              case "isUrl":
                isError = !form._isUrl(formData[key]);
                break;
              case "isSame":
                isError = !form._isSame(formData[key], formData[value]);
                break;
              case "range":
                var range = null;
                try {
                  range = JSON.parse(value);
                  if (range.length <= 1) {
                    throw new Error("range值传入有误！");
                  }
                } catch (e) {
                  return "range值传入有误！";
                }
                isError = !form._isRange(formData[key], range[0], range[1]);
                break;
              case "minLength":
                isError = !form._minLength(formData[key], value);
                break;
              case "maxLength":
                isError = !form._maxLength(formData[key], value);
                break;
              default:
                break;}
  
            if (isError) {
              return msg;
            }
          }
        }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator.return != null) {_iterator.return();}} finally {if (_didIteratorError) {throw _iteratorError;}}}
      return "";
    },
    _isNullOrEmpty: function _isNullOrEmpty(value) {
      return value === null || value === '' || value === undefined ? true : false;
    },
    _isMobile: function _isMobile(value) {
      return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(value);
    },
    _isEmail: function _isEmail(value) {
      return /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(value);
    },
    _isCarNo: function _isCarNo(value) {
      // 新能源车牌
      var xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
      // 旧车牌
      var creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
      if (value.length === 7) {
        return creg.test(value);
      } else if (value.length === 8) {
        return xreg.test(value);
      } else {
        return false;
      }
    },
    _isIdCard: function _isIdCard(value) {
      var idCard = value;
      if (idCard.length == 15) {
        return this.__isValidityBrithBy15IdCard;
      } else if (idCard.length == 18) {
        var arrIdCard = idCard.split("");
        if (this.__isValidityBrithBy18IdCard(idCard) && this.__isTrueValidateCodeBy18IdCard(arrIdCard)) {
          return true;
        } else {
          return false;
        }
      } else {
        return false;
      }
    },
    __isTrueValidateCodeBy18IdCard: function __isTrueValidateCodeBy18IdCard(arrIdCard) {
      var sum = 0;
      var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
      var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
      if (arrIdCard[17].toLowerCase() == 'x') {
        arrIdCard[17] = 10;
      }
      for (var i = 0; i < 17; i++) {
        sum += Wi[i] * arrIdCard[i];
      }
      var valCodePosition = sum % 11;
      if (arrIdCard[17] == ValideCode[valCodePosition]) {
        return true;
      } else {
        return false;
      }
    },
    __isValidityBrithBy18IdCard: function __isValidityBrithBy18IdCard(idCard18) {
      var year = idCard18.substring(6, 10);
      var month = idCard18.substring(10, 12);
      var day = idCard18.substring(12, 14);
      var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
      if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() !=
      parseFloat(day)) {
        return false;
      } else {
        return true;
      }
    },
    __isValidityBrithBy15IdCard: function __isValidityBrithBy15IdCard(idCard15) {
      var year = idCard15.substring(6, 8);
      var month = idCard15.substring(8, 10);
      var day = idCard15.substring(10, 12);
      var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
  
      if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() !=
      parseFloat(day)) {
        return false;
      } else {
        return true;
      }
    },
    _isAmount: function _isAmount(value) {
      //金额，只允许保留两位小数
      return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(value);
    },
    _isNum: function _isNum(value) {
      //只能为数字
      return /^[0-9]+$/.test(value);
    },
    _isChinese: function _isChinese(value) {
      var reg = /.*[\u4e00-\u9fa5]+.*$/;
      return value !== "" && reg.test(value) && !form._isSpecial(value) && !form._isEmoji(value);
    },
    _isEnglish: function _isEnglish(value) {
      return /^[a-zA-Z]*$/.test(value);
    },
    _isEnAndNo: function _isEnAndNo(value) {
      //8~20位数字和字母组合
      return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(value);
    },
    _isEnOrNo: function _isEnOrNo(value) {
      //英文或者数字
      var reg = /.*[\u4e00-\u9fa5]+.*$/;
      var result = true;
      if (reg.test(value) || form._isSpecial(value) || form._isEmoji(value)) {
        result = false;
      }
      return result;
    },
    _isSpecial: function _isSpecial(value) {
      //是否包含特殊字符
      var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
      regCn = /[·！#￥（——）：；“”‘、，|《。》？、【】[\]]/im;
      if (regEn.test(value) || regCn.test(value)) {
        return true;
      }
      return false;
    },
    _isEmoji: function _isEmoji(value) {
      //是否包含表情
      return /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(value);
    },
    _isDate: function _isDate(value) {
      //2019-10-12
      var reg =
      /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
      return reg.test(value);
    },
    _isUrl: function _isUrl(value) {
      return /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(value);
    },
    _isSame: function _isSame(value1, value2) {
      return value1 === value2;
    },
    _isRange: function _isRange(value, range1, range2) {
      if (!range1 && range1 != 0 && !range2 && range2 != 0) {
        return true;
      } else if (!range1 && range1 != 0) {
        return value <= range2;
      } else if (!range2 && range2 != 0) {
        return value >= range1;
      } else {
        return value >= range1 && value <= range2;
      }
    },
    _minLength: function _minLength(value, min) {
      return value.length >= Number(min);
    },
    _maxLength: function _maxLength(value, max) {
      return value.length <= Number(max);
    } };
  
  module.exports = {
    validation: form.validation };
  
  /***/ }),
  
  /***/ 6:
  /*!******************************************************!*\
    !*** ./node_modules/@dcloudio/uni-stat/package.json ***!
    \******************************************************/
  /*! exports provided: _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _shasum, _spec, _where, author, bugs, bundleDependencies, deprecated, description, devDependencies, files, gitHead, homepage, license, main, name, repository, scripts, version, default */
  /***/ (function(module) {
  
  module.exports = {"_from":"@dcloudio/uni-stat@next","_id":"@dcloudio/uni-stat@2.0.0-23320190923002","_inBundle":false,"_integrity":"sha512-MnftsvgOac3q1FCOBPzivbFn8GNQFo7D2DY325HeEZyFCWgx5GEwHpGYjT1PQU6v7DaDn0ruxa3ObdpUIYbmZw==","_location":"/@dcloudio/uni-stat","_phantomChildren":{},"_requested":{"type":"tag","registry":true,"raw":"@dcloudio/uni-stat@next","name":"@dcloudio/uni-stat","escapedName":"@dcloudio%2funi-stat","scope":"@dcloudio","rawSpec":"next","saveSpec":null,"fetchSpec":"next"},"_requiredBy":["#USER","/","/@dcloudio/vue-cli-plugin-uni"],"_resolved":"https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-2.0.0-23320190923002.tgz","_shasum":"0c400c140ca0b3c05f52d25f11583cf05a0c4e9a","_spec":"@dcloudio/uni-stat@next","_where":"/Users/fxy/Documents/DCloud/HbuilderX-plugins/release/uniapp-cli","author":"","bugs":{"url":"https://github.com/dcloudio/uni-app/issues"},"bundleDependencies":false,"deprecated":false,"description":"","devDependencies":{"@babel/core":"^7.5.5","@babel/preset-env":"^7.5.5","eslint":"^6.1.0","rollup":"^1.19.3","rollup-plugin-babel":"^4.3.3","rollup-plugin-clear":"^2.0.7","rollup-plugin-commonjs":"^10.0.2","rollup-plugin-copy":"^3.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2"},"files":["dist","package.json","LICENSE"],"gitHead":"fed4c73fb9142a1b277dd79313939cad90693d3e","homepage":"https://github.com/dcloudio/uni-app#readme","license":"Apache-2.0","main":"dist/index.js","name":"@dcloudio/uni-stat","repository":{"type":"git","url":"git+https://github.com/dcloudio/uni-app.git","directory":"packages/uni-stat"},"scripts":{"build":"NODE_ENV=production rollup -c rollup.config.js","dev":"NODE_ENV=development rollup -w -c rollup.config.js"},"version":"2.0.0-23320190923002"};
  
  /***/ }),
  
  /***/ 679:
  /*!******************************************************************!*\
    !*** D:/work/uniapp/ThorUI/components/utils/clipboard.thorui.js ***!
    \******************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* WEBPACK VAR INJECTION */(function(uni) { /**
                 * 复制文本 兼容H5
                 * 来自 ThorUI  www.thorui.cn | 文档地址： www.donarui.com
                 * @author echo.
                 * @version 1.0.0
                 **/
  
  
  
  var thorui = {
    getClipboardData: function getClipboardData(data, callback) {
  
      uni.setClipboardData({
        data: data,
        success: function success(res) {
          uni.getClipboardData({
            success: function success(res) {
              "function" == typeof callback && callback(true);
            },
            fail: function fail(res) {
              "function" == typeof callback && callback(false);
            } });
  
        },
        fail: function fail(res) {
          "function" == typeof callback && callback(false);
        } });
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
    } };
  
  
  module.exports = {
    getClipboardData: thorui.getClipboardData };
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-alipay/dist/index.js */ 1)["default"]))
  
  /***/ }),
  
  /***/ 7:
  /*!*********************************************************!*\
    !*** D:/work/uniapp/ThorUI/pages.json?{"type":"style"} ***!
    \*********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = { "pages": { "pages/index/index": { "defaultTitle": "Thor UI" }, "pages/about/about": {}, "pages/basic/basic": { "defaultTitle": "基础组件", "titleBarColor": "#FFFFFF" }, "pages/basic-view/badge/badge": { "defaultTitle": "Badge", "titleBarColor": "#FFFFFF" }, "pages/basic-view/button/button": { "defaultTitle": "Button", "titleBarColor": "#FFFFFF" }, "pages/basic-view/card/card": { "defaultTitle": "Card", "titleBarColor": "#FFFFFF" }, "pages/basic-view/color/color": { "defaultTitle": "Color", "titleBarColor": "#FFFFFF" }, "pages/basic-view/flex/flex": { "defaultTitle": "Flex", "titleBarColor": "#FFFFFF" }, "pages/basic-view/footer/footer": { "defaultTitle": "Footer", "titleBarColor": "#FFFFFF" }, "pages/basic-view/grid/grid": { "defaultTitle": "Grid", "titleBarColor": "#FFFFFF" }, "pages/basic-view/icon/icon": { "defaultTitle": "icon", "titleBarColor": "#FFFFFF" }, "pages/basic-view/list/list": { "defaultTitle": "List", "titleBarColor": "#FFFFFF" }, "pages/basic-view/load/load": { "defaultTitle": "Loading", "titleBarColor": "#FFFFFF" }, "pages/basic-view/other/other": { "defaultTitle": "Other", "titleBarColor": "#FFFFFF" }, "pages/basic-view/tag/tag": { "defaultTitle": "Tag", "titleBarColor": "#FFFFFF" }, "pages/drawer/drawer": { "defaultTitle": "drawer 抽屉" }, "pages/extend/extend": { "defaultTitle": "extend" }, "pages/extend-view/actionsheet/actionsheet": { "defaultTitle": "操作菜单", "titleBarColor": "#FFFFFF" }, "pages/extend-view/chat/chat": { "defaultTitle": "技术交流群", "titleBarColor": "#fff" }, "pages/extend-view/friendsList/friendsList": { "defaultTitle": "联系人 ", "titleBarColor": "#fff" }, "pages/extend-view/keyboard/keyboard": { "defaultTitle": "数字键盘", "titleBarColor": "#FFFFFF" }, "pages/extend-view/lockscreen/lockscreen": { "defaultTitle": "解锁ThorUI", "titleBarColor": "#FFFFFF" }, "pages/extend-view/luckdraw/luckdraw": { "defaultTitle": "抽奖", "titleBarColor": "#FC4034" }, "pages/extend-view/mall/mall": { "defaultTitle": "ThorUI商城", "pullRefresh": true, "titleBarColor": "#fff" }, "pages/extend-view/msgList/msgList": { "defaultTitle": "消息 ", "pullRefresh": true, "titleBarColor": "#fff" }, "pages/extend-view/msgtips/msgtips": { "defaultTitle": "消息提示", "titleBarColor": "#FFFFFF" }, "pages/extend-view/news/news": { "defaultTitle": "新闻列表", "pullRefresh": true }, "pages/extend-view/news-cmt/news-cmt": { "defaultTitle": "发表评论" }, "pages/extend-view/news-cmt-list/news-cmt-list": { "defaultTitle": "评论", "pullRefresh": true }, "pages/extend-view/news-cmt-reply/news-cmt-reply": { "defaultTitle": "回复", "pullRefresh": true }, "pages/extend-view/newsDetail/newsDetail": { "defaultTitle": "新闻详情" }, "pages/extend-view/news-search/news-search": { "defaultTitle": "搜索", "titleBarColor": "#fff" }, "pages/extend-view/news-video/news-video": { "defaultTitle": "新闻详情" }, "pages/extend-view/numberbox/numberbox": { "defaultTitle": "数字输入框 ", "titleBarColor": "#fff" }, "pages/extend-view/popup/popup": { "defaultTitle": "弹层、下拉选择" }, "pages/extend-view/productDetail/productDetail": { "defaultTitle": "商品详情 ", "titleBarColor": "#fff" }, "pages/extend-view/productList/productList": { "defaultTitle": "商品列表 ", "titleBarColor": "#fff" }, "pages/extend-view/rate/rate": { "defaultTitle": "Rate评分", "titleBarColor": "#fff" }, "pages/extend-view/rollingNews/rollingNews": { "defaultTitle": "滚动消息" }, "pages/extend-view/sticky/sticky": { "defaultTitle": "吸顶容器", "titleBarColor": "#FFFFFF" }, "pages/extend-view/template/template": { "defaultTitle": "模板" }, "pages/extend-view/timeaxis/timeaxis": { "defaultTitle": "时间轴" }, "pages/indexList/indexList": { "defaultTitle": "索引列表" }, "pages/location/location": { "defaultTitle": "拖拽定位", "titleBarColor": "#FFFFFF" }, "pages/log/log": { "defaultTitle": "更新日志" }, "pages/login/login": { "defaultTitle": "" }, "pages/longlat/longlat": { "defaultTitle": "地址解析" }, "pages/maps/maps": { "defaultTitle": "选择位置" }, "pages/my/my": {}, "pages/navbar-1/navbar-1": { "defaultTitle": "顶部选项卡", "titleBarColor": "#FFFFFF" }, "pages/navbar-2/navbar-2": { "defaultTitle": "商品分类", "titleBarColor": "#fff" }, "pages/news/news": { "defaultTitle": "新闻列表", "pullRefresh": true }, "pages/picker/picker": { "defaultTitle": "picker三级联动" }, "pages/picker-view/picker-view": { "defaultTitle": "picker-view" }, "pages/product/product": { "defaultTitle": "商品列表", "pullRefresh": true, "titleBarColor": "#fff" }, "pages/qrcode/qrcode": { "defaultTitle": "二维码" }, "pages/selectCity/selectCity": { "defaultTitle": "城市选择" }, "pages/swipe-action/swipe-action": { "defaultTitle": "滑动菜单" }, "pages/weather/weather": { "defaultTitle": "实时天气" }, "pages/productNvue/productNvue": { "defaultTitle": "", "titleBarColor": "#fff" }, "pages/extend-view/modal/modal": { "defaultTitle": "modal", "titleBarColor": "#fff" }, "pages/extend-view/countdown/countdown": { "defaultTitle": "倒计时", "titleBarColor": "#fff" }, "pages/extend-view/carousel/carousel": { "defaultTitle": "卡片轮播", "titleBarColor": "#fff" }, "pages/extend-view/divider/divider": { "defaultTitle": "分隔符", "titleBarColor": "#fff" }, "pages/extend-view/button/button": { "defaultTitle": "扩展Button", "titleBarColor": "#fff" }, "pages/extend-view/tips/tips": { "defaultTitle": "扩展tips", "titleBarColor": "#fff" }, "pages/extend-view/alert/alert": { "defaultTitle": "扩展alert", "titleBarColor": "#fff" }, "pages/extend-view/toast/toast": { "defaultTitle": "扩展toast", "titleBarColor": "#fff" }, "pages/extend-view/goTop/goTop": { "defaultTitle": "回到顶部", "titleBarColor": "#fff" }, "pages/extend-view/formValidation/formValidation": { "defaultTitle": "表单验证", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/shopcart/shopcart": { "defaultTitle": "购物车", "pullRefresh": true, "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/my/my": { "defaultTitle": "我的", "pullRefresh": true, "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/submitOrder/submitOrder": { "defaultTitle": "提交订单", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/success/success": { "defaultTitle": "支付成功", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/address/address": { "defaultTitle": "地址", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/editAddress/editAddress": { "defaultTitle": "新增地址", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/set/set": { "defaultTitle": "账户设置", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/userInfo/userInfo": { "defaultTitle": "个人信息", "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/myOrder/myOrder": { "defaultTitle": "我的订单", "pullRefresh": true, "titleBarColor": "#fff" }, "pages/extend-view/mall-extend/orderDetail/orderDetail": { "defaultTitle": "订单详情", "titleBarColor": "#fff" }, "pages/extend-view/picker-dateTime/picker-dateTime": { "defaultTitle": "日期时间选择", "titleBarColor": "#fff" }, "pages/extend-view/clipboard/clipboard": { "defaultTitle": "复制文本", "titleBarColor": "#fff" }, "pages/extend-view/fab/fab": { "defaultTitle": "悬浮按钮", "titleBarColor": "#fff" }, "pages/extend-view/tabbar/tabbar": { "defaultTitle": "Tabbar", "titleBarColor": "#fff" }, "pages/extend-view/tabs/tabs": { "defaultTitle": "tabs标签页", "titleBarColor": "#fff" }, "pages/extend-view/collapse/collapse": { "defaultTitle": "collapse折叠面板", "titleBarColor": "#fff" }, "pages/extend-view/upload/upload": { "defaultTitle": "图片上传", "titleBarColor": "#fff" } }, "globalStyle": { "defaultTitle": "Thor UI", "titleBarColor": "#5677FC", "backgroundColor": "#fafafa" } };exports.default = _default;
  
  /***/ }),
  
  /***/ 8:
  /*!********************************************************!*\
    !*** D:/work/uniapp/ThorUI/pages.json?{"type":"stat"} ***!
    \********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = { "appid": "__UNI__9B4FAA5" };exports.default = _default;
  
  /***/ })
  
  }]);
  //# sourceMappingURL=../../.sourcemap/mp-alipay/common/vendor.js.map