daxiongYang 7 years ago
parent
commit
1964fa3b98
43 changed files with 8734 additions and 95 deletions
  1. 20 8
      CHANGELOG.md
  2. 6 0
      build/webpack.base.conf.js
  3. 1 1
      gulpfile.js
  4. 4 11
      index.html
  5. 1 0
      package.json
  6. 0 4
      src/assets/scss/_variables.scss
  7. 2 2
      src/components/sub-menu-nav/index.vue
  8. 0 1
      src/iconfont/iconfont.js
  9. 0 13
      src/iconfont/index.js
  10. 22 0
      src/icons/index.js
  11. 1 0
      src/icons/svg/icon-bianji.svg
  12. 1 0
      src/icons/svg/icon-dangdifill.svg
  13. 1 0
      src/icons/svg/icon-daohang.svg
  14. 1 0
      src/icons/svg/icon-duanxin.svg
  15. 1 0
      src/icons/svg/icon-geren.svg
  16. 1 0
      src/icons/svg/icon-jiesuo.svg
  17. 1 0
      src/icons/svg/icon-mudedi.svg
  18. 1 0
      src/icons/svg/icon-pinglun.svg
  19. 1 0
      src/icons/svg/icon-shanchu.svg
  20. 1 0
      src/icons/svg/icon-shezhi.svg
  21. 1 0
      src/icons/svg/icon-shoucang.svg
  22. 1 0
      src/icons/svg/icon-shoucangfill.svg
  23. 1 0
      src/icons/svg/icon-shouye.svg
  24. 1 0
      src/icons/svg/icon-sousuo.svg
  25. 1 0
      src/icons/svg/icon-suoding.svg
  26. 1 0
      src/icons/svg/icon-tixing.svg
  27. 1 0
      src/icons/svg/icon-xiangqu.svg
  28. 1 0
      src/icons/svg/icon-xiangqufill.svg
  29. 1 0
      src/icons/svg/icon-zhedie.svg
  30. 1 0
      src/icons/svg/icon-zonghe.svg
  31. 2 2
      src/main.js
  32. 1 1
      src/views/layout/navbar.vue
  33. 1 1
      src/views/layout/sidebar.vue
  34. 55 16
      src/views/menu/add-or-update.vue
  35. 1 2
      src/views/menu/index.vue
  36. 9 8
      static/config/index-prod.js
  37. 9 8
      static/config/index-qa.js
  38. 9 8
      static/config/index-uat.js
  39. 9 8
      static/config/index.js
  40. 13 1
      static/config/init.js
  41. 0 0
      static/img/favicon.ico
  42. 10 0
      static/plugins/mock-1.0.0-beta3/mock-min.js
  43. 8539 0
      static/plugins/mock-1.0.0-beta3/mock.js

+ 20 - 8
CHANGELOG.md

@ -1,18 +1,30 @@
1 1
## 更新日志
2 2
3
### 1.1.0
3
### 1.1.1 计划任务清单
4 4
5 5
*待定*
6 6
7
- 更新element-ui 2.2.1 用于修复tree半选中状态项不能传给后台接口问题
8
- 修复本地开发找不到baseUrl问题
9
- 新增Mock本地开发模拟数据功能
10
- 更新element-ui 2.3.2 用于修复左侧菜单收缩卡顿问题
11
- 优化路由机制,通过meta isTab属性, 设定是否通过tab标签页展示内容
12
- 新增scss变量皮肤定制
7
- 支持全站mock模拟数据/api请求数据,两种方式切换访问
8
- 支持菜单管理操作自动同步路由
9
- 新增图表、富文本编辑器等demo
10
- 新增NProgress进度条
11
- bug修复
12
13
14
### 1.1.0
15
16
*2018-04-15*
17
18
- 使用SVG Sprite矢量图标,替换fontawesome字体图标
13 19
- 新增内容tabs标签页,关闭当前/其它/全部、刷新当前功能
20
- 新增scss变量皮肤定制
21
- 优化路由机制,通过meta isTab属性,设定是否通过tab标签页展示内容
22
- 更新element-ui 2.3.2 用于修复左侧菜单收缩卡顿问题
23
- 新增mock本地开发模拟数据功能
24
- 修复本地开发找不到baseUrl问题
25
- 更新element-ui 2.2.1 用于修复tree半选中状态项不能传给后台接口问题
14 26
- 修复其它已知bug
15 27
16 28
### 1.0.0
17 29
18
*2018-02-11*
30
*2018-02-11*

+ 6 - 0
build/webpack.base.conf.js

@ -51,9 +51,15 @@ module.exports = {
51 51
        loader: 'babel-loader',
52 52
        include: [resolve('src'), resolve('test')]
53 53
      },
54
      {
55
        test: /\.svg$/,
56
        loader: 'svg-sprite-loader',
57
        include: [resolve('src/icons')]
58
      },
54 59
      {
55 60
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
56 61
        loader: 'url-loader',
62
        exclude: [resolve('src/icons')],
57 63
        options: {
58 64
          limit: 10000,
59 65
          name: utils.assetsPath('img/[name].[hash:7].[ext]')

+ 1 - 1
gulpfile.js

@ -36,7 +36,7 @@ gulp.task('replace:cdnUrl', ['create:versionPath'], function () {
36 36
// 替换${versionPath}/static/config/index-${env}.js window.SITE_CONFIG.staticFileName配置变量
37 37
gulp.task('replace:staticFileName', ['create:versionPath'], function () {
38 38
  return gulp.src(`${versionPath}/static/config/index-${env}.js`)
39
    .pipe($.replace(/window.SITE_CONFIG.staticFileName = \'.*\'/g, `window.SITE_CONFIG.staticFileName = \'${version}\'`))
39
    .pipe($.replace(/window.SITE_CONFIG\['staticFileName'\] = '.*'/g, `window.SITE_CONFIG['staticFileName'] = '${version}'`))
40 40
    .pipe(gulp.dest(`${versionPath}/static/config/`))
41 41
});
42 42

+ 4 - 11
index.html

@ -4,22 +4,15 @@
4 4
  <meta charset="UTF-8">
5 5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 6
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
7
  <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
8 7
  <title>人人快速开发平台</title>
9
  <link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
10 8
  <% if (process.env.NODE_ENV === 'production') { %>
11 9
    <!-- 生产环境 -->
12
    <script>
13
      (function () {
14
        var s = document.createElement('script');
15
        s.src = './config/index.js?v=' + new Date().getTime();
16
        document.getElementsByTagName('head')[0].appendChild(s);
17
      })();
18
    </script>
10
    <script src="./config/index.js?h=<%=compilation.hash%>"></script>
19 11
  <% }else { %>
20 12
    <!-- 开发环境 -->
21
    <script src="https://cdn.bootcss.com/Mock.js/1.0.0/mock-min.js"></script>
22
    <script src="./static/config/index.js?v=<%=new Date().getTime()%>"></script>
13
    <link rel="shortcut icon" type="image/x-icon" href="./static/img/favicon.ico">
14
    <script src="./static/config/index.js"></script>
15
    <script src="./static/plugins/mock-1.0.0-beta3/mock-min.js"></script>
23 16
  <% } %>
24 17
</head>
25 18
<body>

+ 1 - 0
package.json

@ -24,6 +24,7 @@
24 24
    "gulp-replace": "0.6.1",
25 25
    "gulp-shell": "0.6.5",
26 26
    "lodash": "4.17.5",
27
    "svg-sprite-loader": "3.7.3",
27 28
    "vue": "2.5.2",
28 29
    "vue-cookie": "1.1.4",
29 30
    "vue-router": "3.0.1",

+ 0 - 4
src/assets/scss/_variables.scss

@ -7,10 +7,6 @@
7 7
8 8
// ---------- #1 ----------
9 9
$--color-primary: #17b3a3;
10
$--color-success: #67c23a;
11
$--color-warning: #e6a23c;
12
$--color-danger: #f56c6c;
13
$--color-info: #909399;
14 10
$--color-text-primary: #303133;
15 11
16 12

+ 2 - 2
src/components/sub-menu-nav/index.vue

@ -4,7 +4,7 @@
4 4
    :data-idx="menuNav.menuId + ''"
5 5
    :index="menuNav.menuId + ''">
6 6
    <template slot="title">
7
      <ion-svg :name="menuNav.icon" :class="['site-sidebar__menu-icon', menuNav.icon ? menuNav.icon : 'fa fa-circle-o']"></i>
7
      <icon-svg :name="menuNav.icon"on-svg :name="menuNav.icon" class="site-sidebar__menu-icon"></icon-svg>
8 8
      <span>{{ menuNav.name }}</span>
9 9
    </template>
10 10
    <sub-menu-nav
@ -18,7 +18,7 @@
18 18
    :index="menuNav.menuId + ''"
19 19
    :data-idx="menuNav.menuId + ''"
20 20
    @click="gotoRouteHandle(menuNav.url)">
21
    <ion-svg :name="menuNav.icon" :class="['site-sidebar__menu-icon', menuNav.icon ? menuNav.icon : 'fa fa-circle-o']"></i>
21
    <icon-svg :name="menuNav.icon"on-svg :name="menuNav.icon" class="site-sidebar__menu-icon"></icon-svg>
22 22
    <span>{{ menuNav.name }}</span>
23 23
  </el-menu-item>
24 24
</template>

+ 0 - 1
src/iconfont/iconfont.js

@ -1 +0,0 @@
1
(function(window){var svgSprite='<svg><symbol id="icon-shouye" viewBox="0 0 1024 1024"><path d="M965.59999659 521.40766853L510.27878192 95.67649185l-455.32121468 424.48220616c-8.91056583 8.30161503-9.40766853 22.2702008-1.08119837 31.16833906 8.31404259 8.89192448 22.29505593 9.39524096 31.19940798 1.06877079l425.17193614-396.34619355 425.1905775 397.55166759c4.26886941 3.98924914 9.6872888 5.95901857 15.08706683 5.95901857 5.88445317 0 11.77512012-2.33638267 16.11855493-6.99050667C974.97038241 543.67786932 974.51056242 529.72792491 965.59999659 521.40766853L965.59999659 521.40766853M965.59999659 521.40766853L965.59999659 521.40766853z"  ></path><path d="M826.65979297 530.1504622c-12.18522985 0-22.07135971 9.87991609-22.07135971 22.05271837l0 338.1354678-176.59573287 0 0-235.22278211L392.53379451 655.11586626l0 235.22278211L215.94427543 890.33864837 215.94427543 552.20318057c0-12.17280227-9.8737023-22.05271837-22.07135971-22.05271837-12.2038712 0-22.07757349 9.87991609-22.0775735 22.05271837l0 382.24090453 264.88738551 0 0-235.22278211 147.16103945 0 0 235.22278211 264.88117172 0L848.7249389 552.20318057C848.73115269 540.03037829 838.84502282 530.1504622 826.65979297 530.1504622L826.65979297 530.1504622M826.65979297 530.1504622L826.65979297 530.1504622z"  ></path><path d="M672.14163361 214.06771276l132.44058586 0L804.58221947 331.67599692c0 12.19144363 9.88612987 22.05893215 22.07135972 22.05893215s22.07757349-9.86748852 22.0775735-22.05893215L848.73115269 169.96848981l-176.58951908 0c-12.19144363 0-22.08378729 9.86127474-22.08378728 22.05271837C650.06406011 204.20022423 659.95640377 214.06771276 672.14163361 214.06771276L672.14163361 214.06771276M672.14163361 214.06771276L672.14163361 214.06771276z"  ></path></symbol><symbol id="icon-xitong" viewBox="0 0 1024 1024"><path d="M507.81536863 685.30671525c-99.56802924 0-180.58185204-80.6486999-180.58185205-179.76467153 0-99.13460084 81.01382281-179.7845435 180.58185205-179.7845435 99.61770553 0 180.60296434 80.64994267 180.60296435 179.7845435 0 99.14205252-80.98525882 179.76467274-180.60296435 179.76467153z m0-299.36354372c-66.24621485 0-120.16766885 53.64574891-120.16766885 119.59887219 0 65.95933343 53.92145401 119.62619343 120.16766885 119.62619343 66.27229574 0 120.19374853-53.64450614 120.19374853-119.62619343 0-65.93076823-53.92145401-119.5988722-120.19374853-119.59887219z m-117.60063102 556.36910261l-1.18106066-0.02235505a29.18375363 29.18375363 0 0 1-7.49371392-1.25184926l-0.74763226-0.2471411a452.86296174 452.86296174 0 0 1-179.92487913-104.40528752l-0.47689577-0.45329795-0.0919021-0.11425717a24.21733725 24.21733725 0 0 1-1.92869293-2.04667471l-0.0919021-0.08693472a27.66489251 27.66489251 0 0 1-1.74985732-2.27270353l-0.17883561-0.24962419c-0.4967653-0.70292336-0.95751615-1.42820178-1.38597717-2.18080264l-0.18256145-0.36388135a22.77671641 22.77671641 0 0 1-1.11151362-2.24910692l-0.22727035-0.47565423a36.1297832 36.1297832 0 0 1-0.81842207-2.20439802l-0.18380298-0.53899112a29.84569515 29.84569515 0 0 1-0.61102247-2.30002598l-0.09314366-0.45329915a36.403004 36.403004 0 0 1-0.43218564-2.49624804l-0.04470891-0.38996226a28.89438791 28.89438791 0 0 1-0.17759406-2.56579508v-0.11177286c-0.02732244-1.02085427 0-1.90633908 0.04222461-2.7918239v-0.14033684c0.15151316-1.87280771 0.46571824-3.73567943 0.93143646-5.56005118l0.04346736-0.20615806c0.24962541-0.83953437 0.52533051-1.72750348 0.83829162-2.52232894l0.04967749-0.1577233c0.32413984-0.85195344 0.68802119-1.68279457 1.08791702-2.49624925l0.20491529-0.43466994c0.38499365-0.77371316 0.79606701-1.45055683 1.22328649-2.20191495l0.27570509-0.45578225 0.06582121-0.11425593 0.22727035-0.34152631c11.31135947-16.91363647 17.26137291-36.65138787 17.2613729-57.07219187 0-56.86603381-46.49231974-103.15467859-103.63405744-103.15467859-2.17707679 0-4.0896248 0.06582121-5.88170793 0.15772331h-0.04346736c-0.52533051 0.02607969-1.04569242 0.04595044-1.57102293 0.04595044l-1.35865473-0.02483815h-0.11425594a28.29205989 28.29205989 0 0 1-1.38597596-0.11425594c-0.07078859 0-0.13536825 0-0.1838042-0.04346736l-1.24439879-0.13288395 0.26949617-2.84274293-0.38375212 2.84274293-0.27694664-0.0707898a5.87425625 5.87425625 0 0 1-1.04569242-0.183803l-0.42721826-0.08693472a6.9758351 6.9758351 0 0 1-0.93143647-0.20367375l-0.66069875-0.18628729a22.02163246 22.02163246 0 0 1-0.86064666-0.2285119l-0.54520006-0.17759406-0.43466995-0.11425594-0.13412791-0.07078859-0.88300052-0.31544661c-0.07078859 0.15772331-0.22727035 0.0869335-0.3887195 0.02235383l-0.88300172-0.3837509-0.7041649-0.29806015a5.81712828 5.81712828 0 0 1-0.70416612-0.320414l-0.56879665-0.31296232-0.68181105-0.34152629-0.49676653-0.29806016-0.73148734-0.43218565-0.44957332-0.2496254c-0.24962541-0.16020639-0.4967653-0.32538139-0.75260087-0.47565302l-0.5464416-0.40734871-0.54271696-0.38871829-0.68181106-0.52160467-0.4992496-0.40983179a24.68926442 24.68926442 0 0 0-0.65945721-0.54395852l-0.40610597-0.36139706-0.66069875-0.61847415-0.41231611-0.3837509-0.67560091-0.70292458-0.29806015-0.3415263-0.68181106-0.74763226 2.06902977-1.97712888-2.15968912 1.84051787a1.097853 1.097853 0 0 1-0.20119067-0.22851189c-0.18504575-0.183803-0.38996105-0.45329917-0.61723139-0.7513581l-0.2496242-0.34152751a9.6074526 9.6074526 0 0 1-0.56879787-0.76874457l-0.33531616-0.475653-0.48186315-0.70292457-0.04346735-0.14033564a7.58313172 7.58313172 0 0 0-0.320414-0.47565422l-0.34028476-0.56507081-0.36139706-0.6383437-0.29185001-0.57003941-0.4123161-0.83953437a8.0264949 8.0264949 0 0 1-0.20118946-0.45329916l-0.41231609-0.88300051-0.0211123-0.0919021-0.1626907-0.38996104-0.40610596-1.10903053-0.09314365-0.24962421-0.38499366-1.22949541-0.0707898-0.22851311-0.29309155-1.15746406a1.27793015 1.27793015 0 0 0-0.09065935-0.31296231l-0.13661101-0.61350555a449.57064548 449.57064548 0 0 1 0.02235505-204.0925401l0.18256145-0.79109963 0.34152631-1.22825386 0.0633369-0.24962541c0.11425595-0.38375212 0.22727035-0.79606701 0.38499367-1.18106066l0.07203134-0.2049153c0.13412671-0.41231611 0.28688262-0.82463099 0.4545407-1.22452802l0.11301441-0.24962541c0.13412671-0.3676072 0.29185002-0.68181106 0.45454071-1.02333736 0.04967629-0.14530423 0.10804702-0.29185002 0.18007836-0.43218686l0.4545407-0.91032296 0.27570511-0.52036191 0.33531615-0.6383449 0.3912038-0.63337631 0.31296231-0.51912037 0.50297545-0.7538424 0.34152631-0.47441147 0.51912036-0.74763226 0.32041399-0.4123161 0.63337632-0.76998732a2.4217336 2.4217336 0 0 1 0.27570509-0.31917124l0.65573137-0.75260087 0.45454072-0.47689455 0.56879665-0.56879786 0.34152629-0.33531616 0.20615806-0.18380421 0.49800806-0.4545407c0.12419194-0.11301441 0.2545928-0.22727035 0.38375212-0.34028476l0.61226401-0.52036191 0.14033564-0.1130144 0.4992496-0.38996104 0.49800806-0.40610597 0.77495471-0.54644281 0.40610597-0.29185001 0.75260085-0.50297544 0.42721826-0.2496242c0.29805894-0.17883561 0.56879665-0.3626386 0.86561528-0.49924962l0.34028354-0.17759405c0.32041401-0.183803 0.64579538-0.35767122 0.97490383-0.52533051l0.22851189-0.11425596 1.04320811-0.47689455 0.29185001-0.13536945 1.07301486-0.43218565 0.3415263-0.13661101 0.99725768-0.3626386 0.43218686-0.1341267 0.95379031-0.27694786 0.45454071-0.13536825 0.88051742-0.20615805 0.66194029-0.15648177 0.68181107-0.11425594 0.8407759-0.15523901 0.49800806-0.07203134 1.04445088-0.13536826 0.3415263-0.06954704 1.20093142-0.08693472 0.36884875-0.02607969 1.20217296-0.02235505h0.29309278c0.41107334 0 0.7749547 0 1.13635176 0.04843474h0.29805893c1.76972807 0.0869335 3.69842222 0.13661101 5.83699904 0.13661101 57.16409276 0 103.65268666-46.2650494 103.65268666-103.13853368 0-20.43570617-5.97361004-40.17221601-17.2849683-57.09454571l-0.22106142-0.38499366-0.320414-0.47565301a28.14178706 28.14178706 0 0 1-1.27296276-2.25283398l-0.13412671-0.31420385a26.22054582 26.22054582 0 0 1-1.99823997-5.26944393l-0.04843474-0.22727035a36.92709296 36.92709296 0 0 1-0.54271697-2.45278189v-0.04967629l-0.04843476-0.24962541a74.03426187 74.03426187 0 0 1-0.34028475-2.77195313v-0.13536947a35.58955054 35.58955054 0 0 1-0.0658212-2.70240608v-0.15648177c0.01614492-1.84548526 0.23844788-3.6822773 0.65573016-5.47435921l0.0919021-0.47689577a30.45174901 30.45174901 0 0 1 0.61350556-2.29630012l0.18256145-0.51912038c0.27197925-0.8407759 0.54768435-1.54370048 0.84077712-2.22675308l0.20491529-0.475653c0.3862352-0.84450175 0.72651996-1.54866787 1.08915978-2.22551154l0.20491529-0.3626386c0.4545407-0.79606701 0.90908141-1.50023312 1.38597718-2.2031577l0.15648176-0.22727034c0.56879665-0.79606701 1.15994836-1.54370048 1.74985732-2.27394507l0.0919021-0.08693472a36.49366457 36.49366457 0 0 1 2.01935348-2.13857682l0.56879667-0.52036191a452.96852446 452.96852446 0 0 1 180.60296434-104.56549391l0.36139705-0.06457966h0.02235506a31.28879908 31.28879908 0 0 1 7.08760675-1.13883606l1.22949541-0.0211123a29.90158036 29.90158036 0 0 1 8.90204494 1.33754243l0.86064666 0.27694663 0.18380421 0.06457966c0.11301441 0.0211123 0.22727035 0.04222461 0.34028475 0.1130144l0.88300052 0.34152631 0.47441146 0.18380299 0.3912038 0.15648176 0.99477338 0.45454071a29.96740278 29.96740278 0 0 1 14.17148885 14.07834521l0.38871951 0.54768436v0.29185001c17.39798391 35.86152979 53.7376498 58.64818096 93.5919349 58.69164712 40.03187917-0.07078859 76.47959207-23.07850118 93.75214251-59.19213948a30.58090834 30.58090834 0 0 1 13.06121678-13.73681771l0.63958646-0.34152751h0.06582119l0.63958647-0.31917124 0.79109961-0.36263982 0.63834492-0.2707365 0.47689455-0.1838042 0.74763226-0.320414 0.11425716-0.0211123 0.25459158-0.07078859a29.75876043 29.75876043 0 0 1 18.45857849-0.49676652l0.20615805 0.04843474 0.18380421 0.06457966a453.15853759 453.15853759 0 0 1 181.30588771 105.38391598h1.70018103v1.67906872c0.4545407 0.43466994 0.81717931 0.86685681 1.22949541 1.31642892l0.2968186 0.34152631v0.02732244c0.53650683 0.63337631 1.03451489 1.29904245 1.49526454 1.99699964l0.14033684 0.11301319 1.42820178 2.29133274 0.13536824 0.29930169c0.40610596 0.74639072 0.77371316 1.49899158 1.13759452 2.2900912l0.15648055 0.34028476c0.31917246 0.7513581 0.59115171 1.52134542 0.88796911 2.35963703l0.11425717 0.320414c0.27073772 0.90908141 0.49800806 1.72750348 0.65448861 2.544684 0.07078859 0.13536825 0.07078859 0.24962541 0.0919021 0.3415263 0.20615805 0.86561405 0.35767122 1.74861578 0.4545407 2.63037595l0.02235385 0.22727036a28.71927815 28.71927815 0 0 1-0.77371317 10.94996119v0.18256145l-0.15772209 0.36263982a24.40114025 24.40114025 0 0 1-0.81718052 2.49624803l-0.04346735 0.0919021-0.09190089 0.11301441c-0.33034877 0.80724453-0.68802119 1.60455429-1.06556317 2.38323363l-0.22851191 0.43467116a28.84346887 28.84346887 0 0 1-1.20217417 2.11125438l-0.2545928 0.43218686-0.11425595 0.15772331a102.49894722 102.49894722 0 0 0-16.75839746 56.30344487c0 56.8449203 46.49231974 103.13108199 103.65765526 103.13108321 1.63435983 0 3.10851205-0.0211123 4.35911976-0.06954705h0.11425716l1.25060771-0.02111351c1.08791702 0 2.13360944 0.07078859 3.17930185 0.18380421h0.11425596c0.53650683 0.03228982 1.06556317 0.10804702 1.59089245 0.22727035l1.04569242 0.1788356 0.44957332 0.0919009 0.52532929 0.13536946 0.49676653 0.1130144 0.43466994 0.0919009 0.79606701 0.22727034 0.61102248 0.2073996 0.43466994 0.13412792 0.99601613 0.36263861 0.22851189 0.07078858 1.04444966 0.44833178h0.04346736l0.18380421 0.09314365c0.37878352 0.15151316 0.74763227 0.31917246 1.11027086 0.49800806l0.29806015 0.11301441 0.11301441 0.09190089c0.32041401 0.13536825 0.63461786 0.32041401 0.93143525 0.47689576l0.22851311 0.13536825 1.04569121 0.59487755 0.38499365 0.2496242 0.81718052 0.51912036c0.2334805 0.14157839 0.44833178 0.30426909 0.659456 0.47689576l0.45578347 0.31917246 0.93019371 0.70292336 0.22851189 0.183803c2.17707679 1.81443698 4.13185061 3.92569257 5.7177757 6.28657235l0.02608091 0.04967629 0.06582119 0.06457966c0.13412671 0.20615805 0.24838266 0.43342841 0.41107336 0.63834491l0.40610595 0.63337632 0.52533052 0.9090814 0.22727034 0.45578225c0.0869335 0.16765808 0.17386822 0.33655891 0.27197926 0.49800807l0.45454071 0.90908141 0.0422246 0.11425716 0.0496775 0.09314365 0.0211123 0.04346614 0.47689455 1.13635176 0.0707898 0.11425717v0.04346613c0.54271696 1.38597717 0.99725767 2.79430819 1.33754242 4.24610657a449.21421582 449.21421582 0 0 1 0.02235386 205.24503677 30.83053253 30.83053253 0 0 1-1.35989628 4.31813792l-0.0707898 0.2260276-0.09190088 0.13536946-0.43342842 0.97986999v0.06582242l-0.08569196 0.1813187c-0.1626907 0.32289829-0.34028476 0.59239325-0.47689575 0.91156571l-0.27073772 0.48310469c-0.07575719 0.18877159-0.17386822 0.37630043-0.2918488 0.54395851l-0.0919021 0.1602076a6.7026143 6.7026143 0 0 1-0.31917246 0.5700382l-0.34152629 0.49676653-0.47565302 0.7985513-0.18007835 0.19870636c-0.183803 0.27694663-0.3626386 0.50173391-0.50297546 0.7513581l-0.06457966 0.13536826-0.27197925 0.320414a32.02401348 32.02401348 0 0 1-2.68005103 3.1333514l-1.02333857 0.95627461-0.11301441 0.11177165 0.02111351-0.04843474-0.09066055 0.0707898a6.48279442 6.48279442 0 0 1-0.90535558 0.79606701c-0.12543348 0.12419194-0.25956018 0.22851189-0.41107334 0.3129623l-0.0919021 0.09190211a9.31808566 9.31808566 0 0 1-0.63461786 0.47813731c-0.24838266 0.20615805-0.50794284 0.39492844-0.77371316 0.56755511l-0.0919021 0.07078859a1.15870683 1.15870683 0 0 1-0.31420386 0.20119066c-0.27694663 0.20615805-0.56879665 0.43218686-0.93143647 0.61598986v0.02483814l-0.20615805 0.11425595a29.40978244 29.40978244 0 0 1-6.3561194 2.97190225l-0.25459279 0.11425596a3.27865443 3.27865443 0 0 0-0.70292337 0.20615805l-0.67808521 0.20367375-0.65945721 0.1577233-0.183803 0.04843474c-0.19994791 0.04595044-0.47689577 0.13536825-0.67684367 0.15772331l-0.61723139 0.11425596-0.93143648 0.20615805-0.27073771 0.04098305-0.52036191-2.81417895 0.42846103 2.81417895-1.15994838 0.1602064h-0.1788356c-0.41107334 0.0683055-0.86561405 0.0894178-1.36486488 0.13785254h-0.0919021l-1.42944332 0.04595044h-0.04222459l-1.45676698-0.02483814h-0.0869335a83.88885557 83.88885557 0 0 0-4.36532991-0.09190089c-57.18644782 0-103.6564125 46.28740323-103.6564125 103.15716169 0 20.05443835 5.77117783 39.47177574 16.71493011 56.23514059l0.14033684 0.1577233c0.02235506 0.09438518 0.11425595 0.22851189 0.20118945 0.36388136l0.0919021 0.15523901c0.43342841 0.68429536 0.82835683 1.38721872 1.17981913 2.11498144l0.24838265 0.48062038c0.38996105 0.76874578 0.73148735 1.52134542 1.02333736 2.26773614l0.11425594 0.320414c0.31917246 0.83953437 0.56879665 1.67906873 0.83953437 2.51736155l0.02235505 0.16269069c0.27073772 0.89790388 0.47689577 1.82188866 0.61723141 2.74587345l0.04222581 0.26949617a26.9868073 26.9868073 0 0 1 0.3862352 5.47435922v0.22851311c-0.02235506 0.90908141-0.0869335 1.74861578-0.18007836 2.54468278l-0.02235384 0.3415263c-0.1626907 0.95379031-0.2757051 1.77097083-0.45454071 2.51736155l-0.0919021 0.4123161c-0.17386822 0.79606701-0.37381613 1.5784734-0.61102126 2.35963704l-0.13536946 0.41231609-0.86561406 2.35963825-0.20615805 0.45578225c-0.38499365 0.79606701-0.72527841 1.52134542-1.11027207 2.22427l-0.20615805 0.38375089a40.45537158 40.45537158 0 0 1-1.38597597 2.24910814l-0.08569316-0.04346735c-0.63958645 0.91156571-1.20838311 1.61324752-1.77717976 2.31617088l-0.11301441 0.13536825a31.32108891 31.32108891 0 0 1-1.77096963 1.88522678l-0.1577233 0.20864234-0.24838265 0.20367376a452.6071274 452.6071274 0 0 1-182.08084362 106.03840459 30.11146426 30.11146426 0 0 1-8.76667548 1.33878397l-0.38499366-0.02235384h-0.7749547l-0.66069876-0.02235506-1.31643013-0.11177165h-0.2049153l-0.06582241-0.04843474a29.55260238 29.55260238 0 0 1-3.72574344-0.63586062h-0.04222583l-0.41231488-0.11425594-1.13635176-0.320414-0.29185002-0.08445042-0.93143647-0.29806016c-0.11425595-0.07078859-0.29805894-0.11425595-0.47689576-0.18007715a7.25650758 7.25650758 0 0 1-0.6830526-0.27446355 2.47140989 2.47140989 0 0 1-0.63337631-0.27197926 1.07301486 1.07301486 0 0 1-0.41107456-0.16269069l-0.86064667-0.38375211-0.3626386-0.1813187a30.1127058 30.1127058 0 0 1-14.10566766-14.2410359c-17.26758183-36.16083149-53.75379471-59.19959116-93.82541539-59.25547759-39.84683342 0.06085381-76.16414667 22.85371514-93.54598446 58.70903477v0.26949495l-0.38375211 0.57003942a30.70634181 30.70634181 0 0 1-14.03487786 13.96905665l-0.11425595 0.0658212c-0.29805894 0.15772331-0.60108649 0.29309155-0.91032417 0.41231611l-0.54644159 0.27197925-0.51912036 0.18131991-1.11523947-2.63658489 0.97490262 2.68253534a11.65288577 11.65288577 0 0 1-0.72527842 0.29557585l-0.63213477 0.20118945v0.04843474l-1.15994837 0.33904323a29.42592736 29.42592736 0 0 1-8.38540766 1.20465725z m121.16865116-136.78945529c53.79105193-0.08196611 104.20409685 26.23048059 134.90671282 70.4029036a388.75656526 388.75656526 0 0 0 118.55317979-69.29511583 161.28994933 161.28994933 0 0 1-14.03487787-66.15803859c0-40.67767455 15.10168257-79.64771638 42.53930474-109.74427848a164.07183724 164.07183724 0 0 1 102.36357897-52.50691285 391.6626463 391.6626463 0 0 0 0-133.36301234 163.95385546 163.95385546 0 0 1-102.36357897-52.48580054 162.52565367 162.52565367 0 0 1-42.53930474-109.72316498c0-23.0288249 4.72672697-45.28393663 14.03487787-66.18039365a388.77892031 388.77892031 0 0 0-118.55317979-69.29387428 164.07183724 164.07183724 0 0 1-134.86448701 70.360679 164.11157876 164.11157876 0 0 1-134.92782512-70.360679 388.54543982 388.54543982 0 0 0-117.21563735 68.13516747c9.65588734 21.23798331 14.56144991 43.86070224 14.56144991 67.33910046a162.39525281 162.39525281 0 0 1-43.15777768 110.38262218 163.90045332 163.90045332 0 0 1-103.63033281 52.03125984 388.51687583 388.51687583 0 0 0-0.02235384 132.97801869 163.95758129 163.95758129 0 0 1 103.60921929 52.03125863 162.36793037 162.36793037 0 0 1 43.15156875 110.40000985 161.11359681 161.11359681 0 0 1-14.55524098 67.29687465 388.61126102 388.61126102 0 0 0 117.20942842 68.13516747 164.23452914 164.23452914 0 0 1 134.9352756-70.3817913z m0 0"  ></path></symbol><symbol id="icon-zhedie" viewBox="0 0 1024 1024"><path d="M914.7391013 783.78649017l-807.02687634-0.00282656c-21.54153523 0-39.00084656 17.44942036-39.00084655 38.97400023 0 21.5231659 17.45789872 38.97541285 39.00084655 38.97541284l807.02687634 0c21.54012263 0 39.00084656-17.45224693 39.00084656-38.97541284C953.73994786 801.23308533 936.28063653 783.78649017 914.7391013 783.78649017zM914.7391013 471.61156444l-807.02687634 0c-21.54153523 0-39.00084656 17.45224693-39.00084655 38.97541285 0 21.52457851 17.45789872 38.97258627 39.00084655 38.97258628l807.02687634 0c21.54012263 0 39.00084656-17.44518117 39.00084656-38.97258628C953.73994786 489.06239742 936.28063653 471.61156444 914.7391013 471.61156444zM107.71363893 237.38605044l807.02687634 0c21.54012263 0 39.00084656-17.44800775 39.00084656-38.97258626 0-21.52740509-17.45931133-38.97400026-39.00084656-38.97400025L107.71363893 159.43946393c-21.54153523 0-39.00084656 17.44659517-39.00084654 38.97258627C68.71279101 219.93945529 86.17068973 237.38605044 107.71363893 237.38605044z"  ></path></symbol></svg>';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window)

+ 0 - 13
src/iconfont/index.js

@ -1,13 +0,0 @@
1
/**
2
 * 字体图标, 统一使用阿里矢量图标(http://www.iconfont.cn/)
3
 *
4
 * 使用:
5
 *  1. 在阿里矢量图标站创建一个项目, 并添加图标
6
 *  2. 下载图标库对应[iconfont.js]文件, 替换项目[./iconfont.js]文件
7
 *  3. 组件模版中使用[<icon-svg name="canyin"></icon-svg>]
8
 */
9
import Vue from 'vue'
10
import IconSvg from '@/components/icon-svg'
11
import './iconfont.js'
12
13
Vue.component('IconSvg', IconSvg)

+ 22 - 0
src/icons/index.js

@ -0,0 +1,22 @@
1
/**
2
 * 字体图标, 统一使用SVG Sprite矢量图标(http://www.iconfont.cn/)
3
 *
4
 * 使用:
5
 *  1. 在阿里矢量图标站创建一个项目, 并添加图标(这一步非必须, 创建方便项目图标管理)
6
 *  2. 选中新增的icon图标, 复制代码 -> 下载 -> SVG下载 -> 粘贴代码(重命名)
7
 *  3. 组件模版中使用 [<icon-svg name="canyin"></icon-svg>]
8
 */
9
import Vue from 'vue'
10
import IconSvg from '@/components/icon-svg'
11
12
Vue.component('IconSvg', IconSvg)
13
14
const svgFiles = require.context('./svg', true, /\.svg$/)
15
const iconList = svgFiles.keys().map(item => svgFiles(item))
16
17
export default {
18
  // 获取图标icon-(*).svg名称列表, 例如[shouye, xitong, zhedie, ...]
19
  getNameList () {
20
    return iconList.map(item => item.default.id.split('-')[1])
21
  }
22
}

+ 1 - 0
src/icons/svg/icon-bianji.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793686319" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2491" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M908.785955 492.415966c-11.04966 0-20.008706 8.958022-20.008706 20.008706l0 338.328565c0 38.614459-31.416524 70.030983-70.030983 70.030983L202.707748 920.78422c-38.614459 0-70.030983-31.416524-70.030983-70.030983l0-676.303067c0-38.614459 31.416524-70.030983 70.030983-70.030983l362.378308 0c11.04966 0 20.008706-8.958022 20.008706-20.008706 0-11.050684-8.959046-20.008706-20.008706-20.008706L202.707748 64.401776c-60.681034 0-110.049418 49.367361-110.049418 110.049418l0 676.303067c0 60.681034 49.367361 110.049418 110.049418 110.049418l616.038518 0c60.681034 0 110.049418-49.367361 110.049418-110.049418L928.795685 512.425695C928.795685 501.373988 919.836639 492.415966 908.785955 492.415966z" p-id="2492"></path><path d="M942.576549 117.985158 907.20597 82.614579c-23.405059-23.405059-61.486376-23.400966-84.891436 0l-422.369633 422.36861c-1.295506 1.296529-2.407839 2.76395-3.304256 4.363378L269.318842 736.416166c-4.457522 7.951089-2.977821 17.909905 3.598968 24.221658 3.830235 3.675716 8.823969 5.572926 13.859659 5.572926 3.613294 0 7.247054-0.977257 10.488889-2.973728l219.285309-135.104047c1.327228-0.816598 2.552126-1.784646 3.654226-2.885723l422.369633-422.36861C965.979562 179.471534 965.979562 141.390217 942.576549 117.985158zM418.556794 552.080857l55.42124 55.279001-132.025942 81.343633L418.556794 552.080857zM914.279063 174.579107 505.926678 582.930469l-63.748906-63.586201L850.612021 110.912066c7.798617-7.800663 20.493753-7.804756 28.29544 0l35.371602 35.371602C922.081773 154.084331 922.081773 166.777421 914.279063 174.579107z" p-id="2493"></path></svg>

+ 1 - 0
src/icons/svg/icon-dangdifill.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793636434" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1860" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M814.898635 729.554898c-52.181453-15.880689-113.718995-27.296693-179.771363-33.619702 83.378989-122.791627 144.990209-275.473005 144.990209-379.626133 0-144.027278-119.42802-260.733303-266.739087-260.733303-147.317207 0-266.739087 116.706025-266.739087 260.733303 0 102.385878 61.574381 255.895111 145.227616 379.482871-66.636676 6.290263-128.727827 17.752316-181.310416 33.752732-60.22771 18.326391-132.022872 49.885154-132.022872 96.160083 0 89.684602 218.426755 136.608308 434.19496 136.608308 112.413256 0 218.348983-12.394285 298.29478-34.899858 88.904843-25.027 135.898133-60.19701 135.898133-101.707426C946.922531 779.442098 875.128391 747.883335 814.898635 729.554898zM514.324952 181.990914c60.772109 0 110.043279 49.269124 110.043279 110.063745 0 60.753689-49.27117 110.034069-110.043279 110.034069-60.784388 0-110.054535-49.28038-110.054535-110.034069C404.269393 231.260038 453.540563 181.990914 514.324952 181.990914zM883.279025 854.435093c-18.848277 12.544711-47.583738 24.460088-83.099626 34.458813-76.514651 21.538549-178.599677 33.401738-287.450804 33.401738s-210.9382-11.863189-287.451828-33.401738c-35.515888-9.998725-64.250326-21.914102-83.099626-34.458813-15.234983-10.140964-23.626094-20.343327-23.626094-28.729322 0-5.562692 17.591657-31.6877 103.654778-57.875129 56.150858-17.086144 123.93773-28.755927 196.708104-34.169217 24.391527 32.31601 50.161447 61.676711 76.472696 86.332251 4.39203 4.923126 10.781554 8.099469 17.99177 8.099469 7.100722 0 13.407358-3.080152 17.799388-7.869225 26.40744-24.667819 52.311413-54.06229 76.838016-86.449931 72.206532 5.462408 139.457192 17.093307 195.23352 34.06791 86.064145 26.191522 103.655801 52.306296 103.655801 57.865919C906.904095 834.091766 898.514008 844.294129 883.279025 854.435093z" p-id="1861"></path></svg>

+ 1 - 0
src/icons/svg/icon-daohang.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793771421" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3764" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M605.848435 958.708971c-0.36225 0-0.724501-0.008186-1.088798-0.026606-9.098215-0.468674-16.872273-6.712889-19.288299-15.495926L476.898551 548.458353 80.07064 437.83486c-8.760524-2.442632-14.976086-10.218736-15.427364-19.304671-0.451278-9.083889 4.965082-17.437138 13.44215-20.73423L929.251056 66.728774c7.80885-3.038196 16.669658-1.174756 22.597671 4.750187 5.922896 5.92392 7.788383 14.789844 4.751211 22.597671L625.531729 945.241238C622.361527 953.390849 614.518908 958.708971 605.848435 958.708971zM152.537092 414.172951l347.232352 96.79658c7.148817 1.9934 12.726859 7.591909 14.696724 14.746866l94.821599 344.730369 290.525839-746.93166L152.537092 414.172951z" p-id="3765"></path></svg>

+ 1 - 0
src/icons/svg/icon-duanxin.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793786368" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4016" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M958.359001 286.941198c0-64.308655-52.132334-116.440989-116.440989-116.440989L181.453678 170.500209c-64.308655 0-116.440989 52.132334-116.440989 116.440989l0 448.63995c0 64.308655 52.132334 116.440989 116.440989 116.440989l660.464333 0c64.308655 0 116.440989-52.132334 116.440989-116.440989L958.359001 286.941198zM843.814198 212.455763c12.059664 0 23.444968 3.465938 33.519418 8.598842L530.749016 549.347606c-1.227967 1.161453-1.156336 0.916882-1.752924 1.868557-1.426489 1.067308-6.055926 3.922333-15.449877 3.922333-9.397021 0-14.025435-2.75474-15.4509-3.818979-0.676405-1.077541-0.662079-0.716314-1.995447-1.940189l-353.122503-324.412624c11.609409-7.557116 25.445532-12.509918 40.300868-12.509918L843.814198 212.456786zM916.403446 736.484727c0 40.857547-31.730679 73.582879-72.589248 73.582879L183.27721 810.067606c-40.85857 0-75.28566-32.725332-75.28566-73.582879L107.99155 287.657512c0-10.630105 2.860141-20.735253 6.909363-29.882588l351.486236 322.096882c4.91187 5.302773 19.479657 17.676591 47.009663 17.676591 27.799136 0 42.303478-12.618389 47.076178-17.830087l346.800517-328.899822c6.251378 10.860349 9.129938 23.433712 9.129938 36.838L916.403446 736.484727z" p-id="4017"></path></svg>

+ 1 - 0
src/icons/svg/icon-geren.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793764144" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3637" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M586.945923 513.581008c55.067176-27.962865 92.91211-85.125773 92.91211-150.998039 0-93.338828-75.937506-169.276335-169.277358-169.276335s-169.275311 75.937506-169.275311 169.276335c0 65.872267 37.844933 123.034151 92.911086 150.998039-95.652524 32.016181-164.778904 122.45496-164.778904 228.743728 0 11.31572 9.17394 20.491707 20.491707 20.491707s20.491707-9.174963 20.491707-20.491707c0-110.36869 89.791026-200.160739 200.160739-200.160739S710.741413 631.956046 710.741413 742.324736c0 11.31572 9.17394 20.491707 20.491707 20.491707s20.491707-9.174963 20.491707-20.491707C751.723803 636.035968 682.598446 545.598212 586.945923 513.581008zM382.287753 362.582969c0-70.742181 57.552787-128.293945 128.292921-128.293945 70.742181 0 128.293945 57.552787 128.293945 128.293945 0 70.741157-57.552787 128.292921-128.293945 128.292921C439.84054 490.876913 382.287753 433.324126 382.287753 362.582969z" p-id="3638"></path><path d="M827.871087 196.127889C743.498468 111.757317 631.320573 65.290005 512 65.290005S280.500509 111.756293 196.128913 196.127889C111.756293 280.501532 65.291029 392.678404 65.291029 511.998977s46.465265 231.499491 130.837884 315.872111 196.550515 130.837884 315.871087 130.837884 231.498468-46.465265 315.871087-130.837884S958.708971 631.319549 958.708971 511.998977 912.243707 280.500509 827.871087 196.127889zM512 917.726581c-223.718271 0-405.726581-182.007287-405.726581-405.727605 0-223.718271 182.00831-405.726581 405.726581-405.726581s405.726581 182.007287 405.726581 405.726581C917.726581 735.719294 735.718271 917.726581 512 917.726581z" p-id="3639"></path></svg>

+ 1 - 0
src/icons/svg/icon-jiesuo.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793740417" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3258" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M753.845117 371.674021l-17.46272 0 0-83.669608c0-59.275012-22.62837-115.203812-63.715137-157.482731-42.170448-43.394323-99.369172-67.291592-161.058163-67.291592-126.040624 0-224.772276 98.731652-224.772276 224.7733l0 83.669608-16.680914 0c-62.788022 0-113.688295 50.900274-113.688295 113.688295L156.467611 842.961784c0 62.788022 50.900274 113.688295 113.688295 113.688295l483.690234 0c62.788022 0 113.688295-50.900274 113.688295-113.688295L867.534436 485.362316C867.532389 422.574295 816.633139 371.674021 753.845117 371.674021zM328.176344 288.005436c0-102.858646 80.573083-183.432753 183.431729-183.432753 50.423413 0 97.093339 19.447934 131.410935 54.762231 33.547047 34.519188 52.021817 80.214926 52.021817 128.670521l0 83.669608L328.176344 371.675044 328.176344 288.005436zM826.191842 842.961784c0 39.956014-32.390711 72.346725-72.346725 72.346725L270.154883 915.308509c-39.956014 0-72.346725-32.390711-72.346725-72.346725L197.808158 485.362316c0-39.956014 32.390711-72.346725 72.346725-72.346725l483.690234 0c39.956014 0 72.346725 32.390711 72.346725 72.346725L826.191842 842.961784z" p-id="3259"></path><path d="M509.932921 580.446905c-11.416004 0-20.670785 9.254781-20.670785 20.670785l0 109.554138c0 11.414981 9.254781 20.670785 20.670785 20.670785 11.416004 0 20.670785-9.254781 20.670785-20.670785L530.603707 601.116667C530.602683 589.701686 521.348925 580.446905 509.932921 580.446905z" p-id="3260"></path></svg>

+ 1 - 0
src/icons/svg/icon-mudedi.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793755611" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3511" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M954.382433 263.833921l-82.627882-98.120738c-3.925403-4.66116-9.707083-7.351432-15.801894-7.351432L577.082274 158.361751 577.082274 87.082334c0-11.408841-9.248641-20.657482-20.657482-20.657482l-86.759993 0c-11.408841 0-20.657482 9.248641-20.657482 20.657482L449.007317 271.967158 171.158195 271.967158c-6.327102 0-12.305257 2.90005-16.223496 7.868201L70.252017 387.261021c-5.91164 7.500834-5.91164 18.076704 0 25.577538l84.682681 107.423615c3.917216 4.970198 9.895371 7.869225 16.223496 7.869225l277.850146 0 0 299.32218-135.281079 0c-11.408841 0-20.657482 9.248641-20.657482 20.657482l0 86.759993c0 11.408841 9.248641 20.657482 20.657482 20.657482l396.616086 0c11.408841 0 20.657482-9.248641 20.657482-20.657482l0-86.759993c0-11.408841-9.248641-20.657482-20.657482-20.657482L577.082274 827.453578 577.082274 669.675112l159.40757 0c5.16872 0 10.149151-1.936095 13.959943-5.430686l76.081793-69.744457c4.266164-3.911076 6.697539-9.43693 6.697539-15.226796s-2.430352-11.314697-6.699586-15.226796l-76.081793-69.742411c-3.808746-3.493567-8.789177-5.430686-13.957897-5.430686L577.082274 488.87328l0-92.957135 278.869359 0c6.093788 0 11.875468-2.690272 15.801894-7.351432l82.627882-98.120738C960.855868 282.757922 960.855868 271.523043 954.382433 263.833921zM181.178409 486.817458l-68.399833-86.768179 68.399833-86.769202 267.829931 0 0 173.536358L181.178409 486.816434zM689.686888 914.214595l-355.302145 0 0-45.446052 355.302145 0L689.686888 914.214595zM490.322281 827.454602 490.322281 107.738793l45.446052 0 0 719.715809L490.322281 827.454602zM728.454844 530.189268l53.547567 49.084928-53.547567 49.086975L577.082274 628.361171l0-98.171903L728.454844 530.189268zM846.341764 354.60425 577.082274 354.60425l0-154.928558 269.25949 0 65.233724 77.464279L846.341764 354.60425z" p-id="3512"></path></svg>

+ 1 - 0
src/icons/svg/icon-pinglun.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793693782" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2618" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M850.879104 96.41591l-676.303067 0c-60.681034 0-110.049418 49.367361-110.049418 110.049418l0 446.200388c0 60.681034 49.367361 110.049418 110.049418 110.049418l90.307795 0L396.936381 931.129846c3.793396 4.838192 9.598612 7.66354 15.746636 7.66354s11.952216-2.825348 15.746636-7.66354l132.052548-168.414711 290.396903 0c60.681034 0 110.049418-49.367361 110.049418-110.049418L960.928522 206.465329C960.928522 145.784294 911.561162 96.41591 850.879104 96.41591zM920.91111 652.665717c0 38.614459-31.416524 70.030983-70.030983 70.030983L550.744419 722.6967c-6.147 0-11.952216 2.825348-15.745612 7.66354L412.683017 886.356107l-122.31579-155.995867c-3.792373-4.838192-9.597589-7.66354-15.745612-7.66354l-100.045577 0c-38.614459 0-70.030983-31.416524-70.030983-70.030983L104.545054 206.465329c0-38.614459 31.416524-70.030983 70.030983-70.030983l676.303067 0c38.614459 0 70.030983 31.416524 70.030983 70.030983L920.910087 652.665717z" p-id="2619"></path><path d="M272.621051 344.526731c-44.132126 0-80.035848 35.903721-80.035848 80.035848 0 44.132126 35.903721 80.036871 80.035848 80.036871s80.035848-35.904745 80.035848-80.036871C352.655875 380.430452 316.752154 344.526731 272.621051 344.526731zM272.621051 464.582037c-22.065552 0-40.017412-17.951861-40.017412-40.018436 0-22.065552 17.952884-40.017412 40.017412-40.017412 22.065552 0 40.017412 17.951861 40.017412 40.017412C312.638463 446.629153 294.686602 464.582037 272.621051 464.582037z" p-id="2620"></path><path d="M512.727571 344.526731c-44.132126 0-80.035848 35.903721-80.035848 80.035848 0 44.132126 35.903721 80.036871 80.035848 80.036871 44.132126 0 80.035848-35.904745 80.035848-80.036871C592.763418 380.430452 556.859697 344.526731 512.727571 344.526731zM512.727571 464.582037c-22.065552 0-40.017412-17.951861-40.017412-40.018436 0-22.065552 17.951861-40.017412 40.017412-40.017412 22.065552 0 40.017412 17.951861 40.017412 40.017412C552.746006 446.629153 534.793122 464.582037 512.727571 464.582037z" p-id="2621"></path><path d="M752.836137 344.526731c-44.131103 0-80.035848 35.903721-80.035848 80.035848 0 44.132126 35.904745 80.036871 80.035848 80.036871s80.035848-35.904745 80.035848-80.036871C832.871985 380.430452 796.96724 344.526731 752.836137 344.526731zM752.836137 464.582037c-22.066575 0-40.017412-17.951861-40.017412-40.018436 0-22.065552 17.951861-40.017412 40.017412-40.017412s40.017412 17.951861 40.017412 40.017412C792.853549 446.629153 774.902712 464.582037 752.836137 464.582037z" p-id="2622"></path></svg>

+ 1 - 0
src/icons/svg/icon-shanchu.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793725342" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3129" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M909.050991 169.476903l-217.554898 0 0-31.346939c0-39.5866-32.205493-71.792093-71.793116-71.792093L408.15591 66.337871c-39.5866 0-71.792093 32.205493-71.792093 71.792093l0 31.346939L113.349581 169.476903c-11.013845 0-19.942191 8.940626-19.942191 19.954471s8.928347 19.954471 19.942191 19.954471l84.264149 0 0 640.687918c0 60.479443 49.203632 109.683075 109.683075 109.683075l416.474366 0c60.479443 0 109.683075-49.203632 109.683075-109.683075L833.454246 209.385844l75.595722 0c11.012821 0 19.942191-8.940626 19.942191-19.954471S920.063813 169.476903 909.050991 169.476903zM376.2482 138.130987c0-17.593703 14.314007-31.907711 31.907711-31.907711l211.547067 0c17.593703 0 31.907711 14.314007 31.907711 31.907711l0 31.346939L376.2482 169.477926 376.2482 138.130987zM793.569864 850.074785c0 38.486546-31.312146 69.798692-69.798692 69.798692L307.297828 919.873478c-38.486546 0-69.798692-31.312146-69.798692-69.798692L237.499136 211.042577l556.070728 0L793.569864 850.074785z" p-id="3130"></path><path d="M510.662539 861.276918c11.012821 0 19.954471-8.92937 19.954471-19.942191L530.61701 294.912753c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471 8.928347-19.954471 19.942191L490.708068 841.334727C490.708068 852.347548 499.649717 861.276918 510.662539 861.276918z" p-id="3131"></path><path d="M374.562814 801.449321c11.012821 0 19.954471-8.92937 19.954471-19.942191L394.517285 354.74035c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471 8.928347-19.954471 19.942191l0 426.76678C354.608344 792.519951 363.549993 801.449321 374.562814 801.449321z" p-id="3132"></path><path d="M649.832182 801.449321c11.012821 0 19.954471-8.92937 19.954471-19.942191L669.786653 354.74035c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471 8.928347-19.954471 19.942191l0 426.76678C629.877711 792.519951 638.81936 801.449321 649.832182 801.449321z" p-id="3133"></path></svg>

+ 1 - 0
src/icons/svg/icon-shezhi.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793716736" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3002" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M545.784454 962.539206l-65.943898 0c-29.341259 0-54.624085-25.281803-54.624085-54.615898L425.216471 868.462574c0-9.623171-7.826246-20.911262-16.690124-23.680329l-1.566682-0.611937-55.725162-23.104207-0.880043-0.494257c-8.153704-4.41045-22.017456-2.376117-28.55229 4.187369l-28.17469 28.123524c-9.930163 9.977235-23.239284 15.494902-37.432541 15.494902-14.195304 0-27.507494-5.517667-37.487799-15.541975l-46.682205-46.630017c-20.60427-20.603247-20.6319-54.233182-0.069585-74.974575l28.15013-28.106128c6.637164-6.574742 8.676613-20.599154 4.253884-28.909423l-0.831948-1.768273-23.164582-56.128345-0.26913-0.682545c-2.803859-9.03477-14.279215-17.394159-23.611767-17.394159l-39.631626 0c-29.391401 0-52.861952-24.065092-52.861952-53.193503l0-65.943898c0-28.770254 22.998807-51.754734 52.919257-51.754734l39.575344 0c9.081843 0 20.803815-8.830109 23.666002-18.057261l0.567935-1.476631 23.163559-57.088206 0.505513-0.913812c4.40431-8.220219 2.319835-22.224164-4.2897-28.830629l-28.04166-28.087709c-9.964956-9.921977-15.486716-23.216771-15.502066-37.396725-0.01535-14.201443 5.492084-27.53717 15.507182-37.552268l46.6556-46.614667c9.94142-9.985422 23.248494-15.503089 37.432541-15.503089 0.001023 0 0 0 0.001023 0 14.184047 0 27.490098 5.51869 37.46938 15.540951l28.039613 28.05087c6.557346 6.525624 20.500916 8.596795 28.655643 4.231371l0.893346-0.478907 57.375755-23.64963c8.836249-2.731204 16.634866-14.037714 16.634866-23.719214l0-39.632649c0-28.967752 24.777313-52.095495 54.624085-52.095495L545.784454 64.076364c29.161157 0 52.370765 22.636556 52.370765 52.095495l0 39.632649c0 9.127891 8.709359 20.85498 17.767666 23.674189l1.51654 0.577145 56.639998 23.113417 0.923022 0.509606c8.202822 4.424776 22.184255 2.353604 28.788673-4.254907l28.163433-27.912723c9.895371-9.94142 23.179932-15.33936 37.352723-15.33936 0.019443 0 0.040932 0 0.060375 0 14.18814 0 27.508517 5.375427 37.516452 15.384385l46.709835 46.554292c10.004865 9.960863 15.524578 23.254633 15.524578 37.47552 0 14.18814-5.498224 27.506471-15.479553 37.532825l-28.16855 28.152177c-6.580882 6.610558-8.640798 20.771069-4.204765 29.107945l0.478907 0.896416 23.654746 57.956993c2.902096 9.255805 14.635325 18.114566 23.686469 18.114566l39.132252 0 0-0.573051c27.629267 0 52.188616 22.984481 52.188616 52.327786l0 65.998133c0 29.590945-22.985504 53.138244-51.746548 53.138244l-39.630602 0c-9.337669 0-20.84884 8.372691-23.686469 17.423835l-0.580215 1.51654-23.086811 56.240909-0.468674 0.860601c-4.419659 8.30413-2.393513 22.320355 4.169973 28.855188l28.135804 28.02017c10.031471 10.029424 15.539928 23.350824 15.537881 37.541011-0.004093 14.186094-5.514597 27.505447-15.518438 37.505195l-46.747697 46.682205c-9.920954 9.964956-23.219841 15.506159-37.406958 15.506159-0.019443 0-0.040932 0-0.060375 0-14.192234 0-27.514657-5.514597-37.518498-15.517415l-28.039613-28.095895c-6.490831-6.490831-20.807908-8.575306-28.887934-4.206812l-0.951675 0.514723-57.93755 23.680329c-9.087982 2.859118-17.823947 14.594393-17.823947 23.691585l0 39.460734C598.155219 937.76394 574.45954 962.539206 545.784454 962.539206zM421.86719 806.892287c25.192775 8.370645 44.282552 34.650171 44.282552 61.570287l0 39.460734c0 7.114025 6.569626 13.68365 13.691837 13.68365L545.784454 921.606958c6.496971 0 12.461823-6.043646 12.461823-13.68365L558.246277 868.462574c0-26.273387 19.516496-53.131081 44.901653-61.58052l53.859675-22.062482c23.62814-12.116969 56.342216-7.098675 75.118861 11.6749l28.009937 28.1532c2.432399 2.430352 5.678326 3.837398 9.179057 3.837398 0.00614 0 0.011256 0 0.01535 0 3.482311 0 6.726192-1.39886 9.135054-3.820002l46.780443-46.738487c2.436492-2.436492 3.783163-5.724375 3.78521-9.224082 0-3.495614-1.344624-6.774287-3.787256-9.216919l-28.106128-27.998681c-18.693758-18.609847-23.762193-51.349505-11.773138-75.036997l22.083971-53.603849c8.374738-25.167193 35.224246-44.51382 61.578474-44.51382l39.630602 0c7.745405 0 10.8143-7.086395 10.8143-13.229303l0-65.998133c0-6.862291-5.116531-12.07399-11.256368-12.302187l0 1.479701-39.132252 0c-26.236548 0-53.099359-20.149922-61.585637-45.735647l-22.083971-54.261834c-11.960403-23.654746-6.913457-56.502875 11.728112-75.228355l28.16855-28.192086c2.430352-2.441609 3.78828-5.764284 3.78828-9.295714 0-3.498684-1.334391-6.762007-3.759627-9.17394l-46.741557-46.577828c-2.462075-2.462075-5.736655-3.734044-9.234315-3.734044-0.004093 0-0.010233 0-0.013303 0-3.465938 0-6.700609 1.255597-9.105379 3.671623l-28.198226 28.037567c-18.703991 18.710131-51.417043 23.734564-75.000158 11.69025l-53.865815-22.072715c-25.403576-8.388041-44.934398-35.255968-44.934398-61.60508l0-39.632649c0-7.253194-5.517667-12.186554-12.461823-12.186554l-65.943898 0c-7.517207 0-13.691837 5.51869-13.691837 12.186554l0 39.632649c0 27.027563-19.107173 53.336766-44.325531 61.643965l-53.501518 21.99699c-23.834848 12.168134-55.857169 7.234775-74.878384-11.69639l-28.130687-28.115338c-2.441609-2.451842-5.690606-3.787256-9.152451-3.787256-3.462868-0.001023-6.704702 1.334391-9.117658 3.758604l-46.690392 46.64639c-2.438539 2.438539-3.784186 5.710049-3.781116 9.207709 0.004093 3.474125 1.339508 6.716982 3.762697 9.128915l28.068266 28.121478c18.698874 18.690688 23.782659 51.389414 11.808954 74.973552l-22.124903 54.813397c-8.413624 25.616424-35.281551 45.783743-61.603033 45.783743l-39.575344 0c-6.630001 0-13.010315 3.411703-13.010315 10.822486l0 65.943898c0 6.942109 5.753027 13.284561 12.95301 13.284561l39.631626 0c26.380834 0 53.195549 19.35072 61.524239 44.537356l22.182208 53.629431c12.027941 23.731494 6.918573 56.449663-11.863189 75.05644l-28.022217 27.949562c-5.021364 5.066389-5.048993 13.348006 0.010233 18.409279l46.713928 46.653553c2.452865 2.464121 5.695722 3.794419 9.168824 3.794419 3.472078 0 6.711865-1.336438 9.124821-3.759627l28.181853-28.122501c18.641569-18.730597 51.440579-23.752983 75.011414-11.642155L421.86719 806.892287z" p-id="3003"></path><path d="M513.734504 731.880873c-120.639614 0-218.786958-98.147344-218.786958-218.786958s98.147344-218.786958 218.786958-218.786958 218.786958 98.147344 218.786958 218.786958S634.375142 731.880873 513.734504 731.880873zM513.734504 334.324368c-98.573039 0-178.769546 80.195483-178.769546 178.769546s80.195483 178.769546 178.769546 178.769546 178.769546-80.195483 178.769546-178.769546S612.308567 334.324368 513.734504 334.324368z" p-id="3004"></path></svg>

+ 1 - 0
src/icons/svg/icon-shoucang.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793748368" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3385" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M248.482281 938.000324c-4.306072 0-8.592702-1.336438-12.211113-3.967358-6.395664-4.646833-9.600659-12.521175-8.264221-20.314675l48.430012-282.363949L71.288626 431.382914c-5.66093-5.519714-7.698333-13.772678-5.255701-21.291932 2.444679-7.519254 8.943696-13.000082 16.768919-14.137998l283.508006-41.195238L493.099535 97.853655c3.498684-7.089465 10.720156-11.577686 18.627243-11.577686 7.907087 0 15.127536 4.489244 18.627243 11.577686l126.788661 256.904091 283.510052 41.195238c7.823176 1.137916 14.322194 6.618744 16.766872 14.137998 2.442632 7.519254 0.405229 15.773242-5.255701 21.291932L747.012502 631.354342l48.430012 282.363949c1.336438 7.7935-1.868557 15.667841-8.264221 20.314675-6.399757 4.646833-14.878872 5.257747-21.874193 1.582031L511.726777 802.298666 258.146385 935.614997C255.107165 937.211355 251.789607 938.000324 248.482281 938.000324zM130.422422 431.011454 313.25654 609.228415c4.894474 4.7727 7.128351 11.647271 5.974062 18.385742l-43.163055 251.64532 225.994104-118.811989c6.048763-3.180436 13.282514-3.180436 19.331277 0l225.992057 118.811989-43.163055-251.64532c-1.154289-6.738471 1.079588-13.613042 5.974062-18.385742l182.833095-178.216961-252.665557-36.71418c-6.767124-0.983397-12.614296-5.233188-15.641235-11.362792L511.726777 153.97893 398.729214 382.934482c-3.025916 6.129604-8.874111 10.379395-15.639189 11.362792L130.422422 431.011454z" p-id="3386"></path></svg>

+ 1 - 0
src/icons/svg/icon-shoucangfill.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793677777" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2365" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M777.312598 940.007027c-3.184529 0-6.380314-0.759293-9.307993-2.297322L512.694825 803.484677 257.385045 937.708682c-6.741541 3.543709-14.909571 2.952238-21.070898-1.52268-6.161327-4.475941-9.246595-12.062733-7.959276-19.568684l48.759517-284.289812L70.566172 430.990988c-5.453199-5.316076-7.4159-13.268188-5.062296-20.511149 2.353604-7.242961 8.614192-12.521175 16.150842-13.616112l285.444101-41.47767L494.753197 96.730065c3.370771-6.828522 10.326183-11.153014 17.941628-11.153014 7.615445 0 14.570857 4.323469 17.941628 11.153014l127.654378 258.655991 285.444101 41.47767c7.53665 1.094938 13.797237 6.373151 16.150842 13.616112 2.353604 7.242961 0.390903 15.19405-5.062296 20.511149l-206.54924 201.335495 48.759517 284.289812c1.287319 7.505951-1.798972 15.092743-7.959276 19.568684C785.589099 938.717661 781.461081 940.007027 777.312598 940.007027z" p-id="2366"></path></svg>

+ 1 - 0
src/icons/svg/icon-shouye.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793666871" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2239" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M958.400956 451.54921c-0.058328-5.760191-2.597151-11.215436-6.965645-14.97097L524.345166 69.511143c-7.498788-6.445806-18.581194-6.445806-26.079982 0L309.582871 231.6755l0-102.017488c0-11.04966-8.901741-19.532869-19.951401-19.532869l-88.034009 0c-11.048637 0-19.928888 8.482185-19.928888 19.532869l0 211.954343L71.176063 436.57824c-4.423753 3.800559-6.967692 9.341762-6.967692 15.173584l0 105.500822c0 7.819083 4.554736 14.921851 11.660574 18.183128 2.670829 1.226944 5.51562 1.824555 8.343015 1.824555 4.699022 0 9.346879-1.654686 13.048177-4.836145l53.29788-45.825698 0 324.100516c0 60.677964 49.364291 110.042255 110.042255 110.042255L764.792447 960.741257c60.677964 0 110.042255-49.364291 110.042255-110.042255L874.834702 527.026228l51.585889 44.335764c5.955642 5.119601 14.356986 6.282077 21.481244 2.965541 7.122211-3.313465 11.645225-10.488889 11.565407-18.342764L958.400956 451.54921zM221.578538 150.034085l48.095391 0 0 115.941616-48.095391 41.336454L221.578538 150.034085zM570.718333 920.725892 436.666244 920.725892 436.666244 700.642404c0-11.031241 8.976442-20.007683 20.007683-20.007683l94.0357 0c11.031241 0 20.007683 8.976442 20.007683 20.007683L570.71731 920.725892zM834.818313 495.895207l0 354.803795c0 38.612413-31.414477 70.02689-70.02689 70.02689l-154.058748 0L610.732675 700.642404c0-33.096792-26.926256-60.023048-60.023048-60.023048l-94.0357 0c-33.096792 0-60.023048 26.926256-60.023048 60.023048l0 220.084511L260.59925 920.726915c-38.612413 0-70.02689-31.414477-70.02689-70.02689L190.57236 495.895207c0-1.172709-0.121773-2.314719-0.315178-3.432169l322.113255-276.958846 322.70268 277.348726C834.921667 493.848595 834.818313 494.858598 834.818313 495.895207zM525.411451 173.947727c-7.502881-6.445806-18.587334-6.446829-26.086122 0.00307L104.223736 513.663896l0-52.726875 407.081439-349.870436 407.176606 349.9523 0.521886 51.205219L525.411451 173.947727z" p-id="2240"></path></svg>

+ 1 - 0
src/icons/svg/icon-sousuo.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793709531" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2876" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M955.069071 864.311021 740.015134 649.258107c-3.752464-3.751441-8.841366-5.860475-14.149255-5.860475-5.306866 0-10.395768 2.108011-14.149255 5.860475l-16.692171 16.692171-38.34226-38.34226c53.03796-59.810201 85.298711-138.442072 85.298711-224.478588 0-186.774871-151.952784-338.727655-338.727655-338.727655S64.527642 216.35456 64.527642 403.12943c0 186.775894 151.952784 338.728678 338.727655 338.728678 86.36909 0 165.276231-32.510438 225.170343-85.913718l38.303374 38.303374-17.34504 17.34504c-7.812943 7.813966-7.812943 20.48352 0 28.297486l215.051891 215.052914c3.753487 3.751441 8.841366 5.860475 14.149255 5.860475 5.306866 0 10.395768-2.108011 14.149255-5.860475l62.334697-62.334697C962.883037 884.794541 962.883037 872.124987 955.069071 864.311021zM104.546078 403.12943c0-164.709319 133.9999-298.709219 298.709219-298.709219s298.709219 133.9999 298.709219 298.709219S567.964616 701.839673 403.255297 701.839673 104.546078 567.838749 104.546078 403.12943zM878.585119 912.496463 691.829691 725.741036l34.036187-34.036187 186.755428 186.755428L878.585119 912.496463z" p-id="2877"></path></svg>

+ 1 - 0
src/icons/svg/icon-suoding.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793623946" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1733" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M757.810429 373.751333 325.645708 373.751333l0-83.895759c0-103.694687 81.507362-184.922686 185.559183-184.922686 78.121242 0 146.053424 46.74565 173.062568 119.090329 3.865028 10.352789 15.384385 15.609513 25.742291 11.746532 10.351766-3.866051 15.609513-15.390525 11.744485-25.742291C688.844707 121.877815 606.198405 64.918545 511.204891 64.918545c-61.918211 0-119.246895 23.662933-161.423483 66.63156-41.3692 42.142819-64.151066 98.363262-64.151066 158.305469l0 83.895759-20.007683 0c-60.774155 0-110.042255 49.267077-110.042255 110.042255l0 366.139981c0 60.774155 49.267077 110.042255 110.042255 110.042255l492.187769 0c60.775178 0 110.042255-49.267077 110.042255-110.042255L867.852684 483.793588C867.852684 423.01841 818.585607 373.751333 757.810429 373.751333zM827.837318 849.933569c0 38.674834-31.352055 70.02689-70.02689 70.02689L265.62266 919.960459c-38.674834 0-70.02689-31.352055-70.02689-70.02689L195.59577 483.793588c0-38.674834 31.352055-70.02689 70.02689-70.02689l492.187769 0c38.674834 0 70.02689 31.352055 70.02689 70.02689L827.837318 849.933569z" p-id="1734"></path><path d="M509.715981 583.832002c-11.048637 0-20.007683 8.959046-20.007683 20.007683l0 110.042255c0 11.048637 8.958022 20.007683 20.007683 20.007683s20.007683-8.958022 20.007683-20.007683L529.723663 603.839685C529.723663 592.790024 520.765641 583.832002 509.715981 583.832002z" p-id="1735"></path></svg>

+ 1 - 0
src/icons/svg/icon-tixing.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793655710" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2112" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M925.007405 706.493669c-9.007141-8.121981-23.219841-18.370393-42.243103-30.456662-5.865591-3.725858-9.318226-10.111289-9.238408-17.07898l0.031722-2.539846c0.60989-51.78134 1.529843-130.034589-12.19167-209.543434-16.686031-96.679923-51.42216-172.286901-103.242386-224.720088-40.829917-41.314964-92.434226-68.674079-154.064888-81.818447-3.056616-19.094894-12.19781-36.341696-26.516934-49.569976-17.135262-15.8285-40.165792-24.546046-64.846914-24.546046-24.679076 0-47.709605 8.718569-64.844867 24.546046-14.31503 13.222139-23.455201 30.463826-26.514887 49.552579-61.343113 13.07069-112.581078 40.223097-152.97302 81.204463-117.15014 118.866225-114.199948 322.050834-112.614847 431.207929l0.085958 5.973038c0.099261 6.963599-3.508917 13.56597-9.417487 17.231453-19.403932 12.038174-33.983999 22.151509-43.334971 30.05655-24.833595 20.99415-39.076994 51.64831-39.076994 84.102467 0 28.354791 23.067368 51.42216 51.42216 51.42216l277.239232 0c0.540306 65.73412 54.174853 119.045303 120.032794 119.045303s119.492488-53.312206 120.032794-119.045303l275.389094 0c29.375028 0 53.272297-23.898293 53.272297-53.272297C961.390034 757.14221 948.130032 727.34558 925.007405 706.493669zM512.693802 106.235556c14.58723 0 27.973098 4.945639 37.694507 13.925151 4.253884 3.929496 7.624654 8.439206 10.070356 13.418614-15.392572-1.550309-31.31317-2.334161-47.76384-2.334161-16.395412 0-32.256658 0.775666-47.586808 2.308579C473.319026 117.106138 491.085668 106.235556 512.693802 106.235556zM512.695848 920.54579c-43.792389 0-79.464843-35.363416-80.005149-79.029938l160.010297 0C592.160691 885.183398 556.488237 920.54579 512.695848 920.54579zM908.117736 801.500487 115.422799 801.500487c-6.28924 0-11.406794-5.117554-11.406794-11.406794 0-20.652366 9.073656-40.169885 24.896017-53.543474 7.752568-6.553253 21.099551-15.755846 38.59911-26.614148 17.772782-11.026124 28.628014-30.875195 28.331255-51.798736l-0.085958-5.986341c-1.500167-103.306854-4.29277-295.599392 101.104699-402.537959 51.240011-51.990095 123.857912-78.352509 215.832673-78.352509 92.148723 0 165.147294 26.586518 216.96752 79.022775 45.958728 46.502104 77.003791 114.936729 92.27152 203.39848 13.098319 75.896574 12.20395 151.944598 11.611455 202.266703l-0.029676 2.541893c-0.246617 20.922519 10.143011 40.107463 27.78788 51.321876 16.656355 10.584056 29.764907 19.958564 36.906561 26.39823 14.722306 13.276375 23.165606 32.242332 23.165606 52.033074C921.375691 795.553031 915.427212 801.500487 908.117736 801.500487z" p-id="2113"></path><path d="M450.672236 213.276455c-24.200168 0-58.362222 22.532179-82.263585 43.620473-19.808138 17.477047-54.381561 53.168943-63.362096 95.835695-2.275833 10.812253 4.644787 21.423939 15.45704 23.698748 1.38965 0.292666 2.774183 0.433882 4.140297 0.433882 9.260921 0 17.575284-6.467295 19.558451-15.890922 4.823865-22.910802 23.295566-49.909713 50.681286-74.070996 26.590612-23.462365 49.811476-33.610492 55.788607-33.610492 11.048637 0 20.007683-8.958022 20.007683-20.007683C470.679919 222.234477 461.720873 213.276455 450.672236 213.276455z" p-id="2114"></path></svg>

+ 1 - 0
src/icons/svg/icon-xiangqu.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793779062" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3890" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 922.110425c-0.002047 0-0.004093 0-0.00614 0-5.574972-0.002047-10.916631-2.229784-14.84101-6.186909L370.833887 788.530081c-1.613754-1.622964-164.173107-165.007101-187.469696-188.304713C114.596991 531.459191 74.209142 454.2886 66.567092 377.057635c-7.609305-76.902484 18.981307-150.036132 74.874291-205.929116 54.793954-54.79293 121.562637-77.752852 193.072297-66.412572 59.33027 9.41237 120.361275 42.176588 177.48632 95.104031 57.122999-52.92642 118.155027-85.690638 177.485297-95.104031 71.513754-11.351536 138.279367 11.616572 193.072297 66.412572 55.891961 55.892985 82.482573 129.026632 74.874291 205.929116-7.643074 77.230965-48.0299 154.400532-116.7971 223.167732-50.870598 50.868551-311.172065 313.063135-313.795822 315.705312C522.914584 919.886781 517.572926 922.110425 512 922.110425zM298.928207 143.679353c-47.080272 0-89.998757 19.104103-127.914298 57.020668-47.547923 47.547923-69.27476 107.107413-62.829977 172.238806 6.67912 67.496254 42.902112 135.863341 104.751762 197.714014 23.334451 23.334451 185.92962 186.758498 187.568956 188.406021l111.505583 112.451118c56.269561-56.671721 255.224846-257.029958 299.05305-300.858162 61.850673-61.850673 98.073666-130.216737 104.750739-197.714014 6.446829-65.131393-15.280008-124.690884-62.828954-172.238806-45.573965-45.574988-98.377588-63.974034-156.947542-54.680367-55.707766 8.838296-114.234741 42.590004-169.251775 97.609085-3.922333 3.921309-9.240455 6.125511-14.785751 6.125511s-10.863419-2.203178-14.785751-6.124488c-55.020104-55.020104-113.546056-88.772836-169.252799-97.610108C318.119291 144.458089 308.437791 143.679353 298.928207 143.679353z" p-id="3891"></path></svg>

+ 1 - 0
src/icons/svg/icon-xiangqufill.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793646685" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1986" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512.693802 923.653571c-0.002047 0-0.00307 0-0.005117 0-5.334495 0-10.44591-1.889023-14.201443-5.676279L371.4755 790.006711c-1.623987-1.632173-165.076686-165.854399-188.502212-189.280948C113.996311 531.748786 73.487711 454.399117 65.827241 376.98191c-7.621585-77.016071 19.012006-150.243863 74.992995-206.225875 54.854329-54.853305 121.683387-77.840856 193.253422-66.48318 59.696614 9.471722 121.131825 42.556235 178.620144 96.012727 57.488319-53.456492 118.92353-86.535889 178.620144-96.007611 71.573105-11.350512 138.399093 11.639085 193.253422 66.49239 55.980989 55.980989 82.613556 129.225153 74.992995 206.241224-7.66047 77.417207-48.169069 154.797575-117.146047 223.775576-51.150984 51.14996-312.884057 314.541813-315.52214 317.199339C523.137665 921.770687 518.02625 923.653571 512.693802 923.653571z" p-id="1987"></path></svg>

+ 1 - 0
src/icons/svg/icon-zhedie.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793794156" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4137" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M914.7391013 783.78649017l-807.02687634-0.00282656c-21.54153523 0-39.00084656 17.44942036-39.00084655 38.97400023 0 21.5231659 17.45789872 38.97541285 39.00084655 38.97541284l807.02687634 0c21.54012263 0 39.00084656-17.45224693 39.00084656-38.97541284C953.73994786 801.23308533 936.28063653 783.78649017 914.7391013 783.78649017zM914.7391013 471.61156444l-807.02687634 0c-21.54153523 0-39.00084656 17.45224693-39.00084655 38.97541285 0 21.52457851 17.45789872 38.97258627 39.00084655 38.97258628l807.02687634 0c21.54012263 0 39.00084656-17.44518117 39.00084656-38.97258628C953.73994786 489.06239742 936.28063653 471.61156444 914.7391013 471.61156444zM107.71363893 237.38605044l807.02687634 0c21.54012263 0 39.00084656-17.44800775 39.00084656-38.97258626 0-21.52740509-17.45931133-38.97400026-39.00084656-38.97400025L107.71363893 159.43946393c-21.54153523 0-39.00084656 17.44659517-39.00084654 38.97258627C68.71279101 219.93945529 86.17068973 237.38605044 107.71363893 237.38605044z" p-id="4138"></path></svg>

+ 1 - 0
src/icons/svg/icon-zonghe.svg

@ -0,0 +1 @@
1
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1523793702040" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2747" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M483.882616 483.757772 184.580902 483.757772c-60.681034 0-110.049418-49.367361-110.049418-110.049418L74.531484 184.456059c0-60.681034 49.367361-110.049418 110.049418-110.049418l189.252295 0c60.681034 0 110.049418 49.367361 110.049418 110.049418L483.882616 483.757772zM184.580902 114.424052c-38.614459 0-70.030983 31.416524-70.030983 70.030983l0 189.253318c0 38.614459 31.416524 70.030983 70.030983 70.030983l259.283278 0L443.86418 184.456059c0-38.614459-31.416524-70.030983-70.030983-70.030983L184.580902 114.425076z" p-id="2748"></path><path d="M840.875263 483.757772 539.619034 483.757772 539.619034 184.456059c0-60.681034 49.367361-110.049418 110.049418-110.049418L840.875263 74.40664c60.681034 0 110.049418 49.367361 110.049418 110.049418l0 189.253318C950.924681 434.390411 901.556297 483.757772 840.875263 483.757772zM579.636446 443.74036 840.875263 443.74036c38.614459 0 70.030983-31.416524 70.030983-70.030983L910.906246 184.456059c0-38.614459-31.416524-70.030983-70.030983-70.030983L649.667429 114.425076c-38.615483 0-70.030983 31.416524-70.030983 70.030983L579.636446 443.74036z" p-id="2749"></path><path d="M373.83422 950.798814 184.580902 950.798814c-60.681034 0-110.049418-49.367361-110.049418-110.049418L74.531484 649.541563c0-60.681034 49.367361-110.049418 110.049418-110.049418l299.301713 0 0 301.257252C483.882616 901.43043 434.515255 950.798814 373.83422 950.798814zM184.580902 579.509557c-38.614459 0-70.030983 31.416524-70.030983 70.030983l0 191.208856c0 38.614459 31.416524 70.030983 70.030983 70.030983l189.252295 0c38.614459 0 70.030983-31.416524 70.030983-70.030983l0-261.239839L184.580902 579.509557z" p-id="2750"></path><path d="M840.875263 950.798814 649.667429 950.798814c-60.681034 0-110.049418-49.367361-110.049418-110.049418L539.618011 539.492144 840.875263 539.492144c60.681034 0 110.049418 49.367361 110.049418 110.049418l0 191.208856C950.924681 901.43043 901.556297 950.798814 840.875263 950.798814zM579.636446 579.509557l0 261.239839c0 38.614459 31.4155 70.030983 70.030983 70.030983L840.875263 910.780379c38.614459 0 70.030983-31.416524 70.030983-70.030983L910.906246 649.541563c0-38.614459-31.416524-70.030983-70.030983-70.030983L579.636446 579.51058z" p-id="2751"></path></svg>

+ 2 - 2
src/main.js

@ -6,14 +6,14 @@ import router from '@/router'       // api: https://github.com/vuejs/vue-router
6 6
import store from '@/store'         // api: https://github.com/vuejs/vuex
7 7
import VueCookie from 'vue-cookie'  // api: https://github.com/alfhen/vue-cookie
8 8
import '@/element-ui'               // api: https://github.com/ElemeFE/element
9
import '@/iconfont'                 // api: http://www.iconfont.cn/
9
import '@/icons'                    // api: http://www.iconfont.cn/
10 10
import '@/assets/scss/index.scss'
11 11
import { isAuth } from '@/utils'
12 12
13 13
Vue.use(VueCookie)
14 14
Vue.config.productionTip = false
15 15
16
// 非生产环境, 适配mockjs模拟数据. api: https://github.com/nuysoft/Mock
16
// 非生产环境, 适配mockjs模拟数据.        api: https://github.com/nuysoft/Mock
17 17
if (process.env.NODE_ENV !== 'production') {
18 18
  require('@/mock')
19 19
}

+ 1 - 1
src/views/layout/navbar.vue

@ -20,7 +20,7 @@
20 20
        <el-menu-item index="1" @click="$router.push({ name: 'setting' })">
21 21
          <template slot="title">
22 22
            <el-badge value="new">
23
              <i class="el-icon-setting"></i>
23
              <icon-svg name="shezhi" class="el-icon-setting"></icon-svg>
24 24
            </el-badge>
25 25
          </template>
26 26
        </el-menu-item>

+ 1 - 1
src/views/layout/sidebar.vue

@ -7,7 +7,7 @@
7 7
        :collapseTransition="false"
8 8
        class="site-sidebar__menu">
9 9
        <el-menu-item index="1-1" @click="$router.push({ name: 'home' })">
10
          <i class="site-sidebar__menu-icon fa fa-home"></i>
10
          <icon-svg name="shouye" class="site-sidebar__menu-icon"></icon-svg>
11 11
          <span slot="title">首页</span>
12 12
        </el-menu-item>
13 13
        <sub-menu-nav

+ 55 - 16
src/views/menu/add-or-update.vue

@ -6,18 +6,16 @@
6 6
    <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
7 7
      <el-form-item label="类型" prop="type">
8 8
        <el-radio-group v-model="dataForm.type">
9
          <el-radio :label="0">目录</el-radio>
10
          <el-radio :label="1">菜单</el-radio>
11
          <el-radio :label="2">按钮</el-radio>
9
          <el-radio v-for="(type, index) in dataForm.typeList" :label="index" :key="index">{{ type }}</el-radio>
12 10
        </el-radio-group>
13 11
      </el-form-item>
14
      <el-form-item label="菜单名称" prop="name">
15
        <el-input v-model="dataForm.name" placeholder="菜单名称或按钮名称"></el-input>
12
      <el-form-item :label="dataForm.typeList[dataForm.type] + '名称'" prop="name">
13
        <el-input v-model="dataForm.name" :placeholder="dataForm.typeList[dataForm.type] + '名称'"></el-input>
16 14
      </el-form-item>
17 15
      <el-form-item label="上级菜单" prop="parentName">
18 16
        <el-popover
19 17
          ref="menuListPopover"
20
          placement="bottom-end"
18
          placement="bottom-start"
21 19
          trigger="click">
22 20
          <el-tree
23 21
            :data="menuList"
@ -44,15 +42,26 @@
44 42
      <el-form-item v-if="dataForm.type !== 2" label="菜单图标" prop="icon">
45 43
        <el-row>
46 44
          <el-col :span="22">
47
            <el-input v-model="dataForm.icon" placeholder="菜单图标"></el-input>
45
            <el-popover
46
              ref="iconListPopover"
47
              placement="bottom-start"
48
              trigger="click"
49
              popper-class="mod-menu__icon-popover">
50
              <div class="mod-menu__icon-list">
51
                <el-button
52
                  v-for="(item, index) in iconList"
53
                  :key="index"
54
                  @click="iconActiveHandle(item)"
55
                  :class="{ 'is-active': item === dataForm.icon }">
56
                  <icon-svg :name="item"></icon-svg>
57
                </el-button>
58
              </div>
59
            </el-popover>
60
            <el-input v-model="dataForm.icon" v-popover:iconListPopover :readonly="true" placeholder="菜单图标名称" class="icon-list__input"></el-input>
48 61
          </el-col>
49
          <el-col :span="2" class="icon-tips">
62
          <el-col :span="2" class="icon-list__tips">
50 63
            <el-tooltip placement="top" effect="light">
51
              <div slot="content">
52
                <span>获取图标: </span><br/>
53
                1. 暂时兼容旧版引入使用 <a href="//fontawesome.io/icons/" target="_blank">fontawesome</a><br/>
54
                2. 之后统一全站修改使用 <a href="//github.com/daxiongYang/renren-fast-vue/blob/master/src/iconfont/index.js" target="_blank">iconfont</a>
55
              </div>
64
              <div slot="content">全站推荐使用SVG Sprite, 详细请参考:<a href="//github.com/daxiongYang/renren-fast-vue/blob/master/src/icons/index.js" target="_blank">icons/index.js</a>描述</div>
56 65
              <i class="el-icon-warning"></i>
57 66
            </el-tooltip>
58 67
          </el-col>
@ -69,6 +78,7 @@
69 78
<script>
70 79
  import API from '@/api'
71 80
  import { treeDataTranslate } from '@/utils'
81
  import Icon from '@/icons'
72 82
  export default {
73 83
    data () {
74 84
      var validateUrl = (rule, value, callback) => {
@ -83,13 +93,15 @@
83 93
        dataForm: {
84 94
          id: 0,
85 95
          type: 1,
96
          typeList: ['目录', '菜单', '按钮'],
86 97
          name: '',
87 98
          parentId: 0,
88 99
          parentName: '',
89 100
          url: '',
90 101
          perms: '',
91 102
          orderNum: 0,
92
          icon: ''
103
          icon: '',
104
          iconList: []
93 105
        },
94 106
        dataRule: {
95 107
          name: [
@ -109,6 +121,9 @@
109 121
        }
110 122
      }
111 123
    },
124
    created () {
125
      this.iconList = Icon.getNameList()
126
    },
112 127
    methods: {
113 128
      init (id) {
114 129
        this.dataForm.id = id || 0
@ -149,6 +164,10 @@
149 164
        this.$refs.menuListTree.setCurrentKey(this.dataForm.parentId)
150 165
        this.dataForm.parentName = (this.$refs.menuListTree.getCurrentNode() || {})['name']
151 166
      },
167
      // 图标选中
168
      iconActiveHandle (iconName) {
169
        this.dataForm.icon = iconName
170
      },
152 171
      // 表单提交
153 172
      dataFormSubmit () {
154 173
        this.$refs['dataForm'].validate((valid) => {
@ -188,12 +207,32 @@
188 207
189 208
<style lang="scss">
190 209
  .mod-menu {
191
    .menu-list__input {
210
    .menu-list__input,
211
    .icon-list__input {
192 212
       > .el-input__inner {
193 213
        cursor: pointer;
194 214
      }
195 215
    }
196
    .icon-tips {
216
    &__icon-popover {
217
      max-width: 370px;
218
    }
219
    &__icon-list {
220
      max-height: 180px;
221
      padding: 0;
222
      margin: -8px 0 0 -8px;
223
      > .el-button {
224
        padding: 8px;
225
        margin: 8px 0 0 8px;
226
        > span {
227
          display: inline-block;
228
          vertical-align: middle;
229
          width: 18px;
230
          height: 18px;
231
          font-size: 18px;
232
        }
233
      }
234
    }
235
    .icon-list__tips {
197 236
      font-size: 18px;
198 237
      text-align: center;
199 238
      color: #e6a23c;

+ 1 - 2
src/views/menu/index.vue

@ -31,12 +31,11 @@
31 31
        label="上级菜单">
32 32
      </el-table-column>
33 33
      <el-table-column
34
        prop="icon"
35 34
        header-align="center"
36 35
        align="center"
37 36
        label="图标">
38 37
        <template slot-scope="scope">
39
          <i :class="['fa-lg', scope.row.icon]"></i>
38
          <icon-svg :name="scope.row.icon"></icon-svg>
40 39
        </template>
41 40
      </el-table-column>
42 41
      <el-table-column

+ 9 - 8
static/config/index-prod.js

@ -2,17 +2,18 @@
2 2
 * 生产环境
3 3
 */
4 4
;(function () {
5
  window.SITE_CONFIG = {}
6
  // api请求地址
7
  window.SITE_CONFIG.baseUrl = '//demo.renren.io/renren-fast/'
5
  window.SITE_CONFIG = {};
6
7
  // api接口请求地址
8
  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';
8 9
9 10
  // 嵌套iframe地址
10
  window.SITE_CONFIG.nestIframeUrl = '//demo.renren.io/renren-fast/'
11
  window.SITE_CONFIG['nestIframeUrl'] = 'http://demo.renren.io/renren-fast';
11 12
  // 嵌套iframe路由名称列表
12
  window.SITE_CONFIG.nestIframeRouteNameList = ['sql']
13
  
13
  window.SITE_CONFIG['nestIframeRouteNameList'] = ['sql'];
14
14 15
  // 静态资源文件夹名称
15
  window.SITE_CONFIG.staticFileName = ''
16
  window.SITE_CONFIG['staticFileName'] = '';
16 17
  // cdn地址
17
  window.SITE_CONFIG.cdnUrl = './' + window.SITE_CONFIG.staticFileName
18
  window.SITE_CONFIG['cdnUrl'] = './' + window.SITE_CONFIG.staticFileName;
18 19
})();

+ 9 - 8
static/config/index-qa.js

@ -2,17 +2,18 @@
2 2
 * 测试环境
3 3
 */
4 4
;(function () {
5
  window.SITE_CONFIG = {}
6
  // api请求地址
7
  window.SITE_CONFIG.baseUrl = '//demo.renren.io/renren-fast/'
5
  window.SITE_CONFIG = {};
6
7
  // api接口请求地址
8
  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';
8 9
9 10
  // 嵌套iframe地址
10
  window.SITE_CONFIG.nestIframeUrl = '//demo.renren.io/renren-fast/'
11
  window.SITE_CONFIG['nestIframeUrl'] = 'http://demo.renren.io/renren-fast';
11 12
  // 嵌套iframe路由名称列表
12
  window.SITE_CONFIG.nestIframeRouteNameList = ['sql']
13
  
13
  window.SITE_CONFIG['nestIframeRouteNameList'] = ['sql'];
14
14 15
  // 静态资源文件夹名称
15
  window.SITE_CONFIG.staticFileName = ''
16
  window.SITE_CONFIG['staticFileName'] = '';
16 17
  // cdn地址
17
  window.SITE_CONFIG.cdnUrl = './' + window.SITE_CONFIG.staticFileName
18
  window.SITE_CONFIG['cdnUrl'] = './' + window.SITE_CONFIG.staticFileName;
18 19
})();

+ 9 - 8
static/config/index-uat.js

@ -2,17 +2,18 @@
2 2
 * 验收环境
3 3
 */
4 4
;(function () {
5
  window.SITE_CONFIG = {}
6
  // api请求地址
7
  window.SITE_CONFIG.baseUrl = '//dev.demo.renren.io/renren-fast/'
5
  window.SITE_CONFIG = {};
6
7
  // api接口请求地址
8
  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';
8 9
9 10
  // 嵌套iframe地址
10
  window.SITE_CONFIG.nestIframeUrl = '//demo.renren.io/renren-fast/'
11
  window.SITE_CONFIG['nestIframeUrl'] = 'http://demo.renren.io/renren-fast';
11 12
  // 嵌套iframe路由名称列表
12
  window.SITE_CONFIG.nestIframeRouteNameList = ['sql']
13
  
13
  window.SITE_CONFIG['nestIframeRouteNameList'] = ['sql'];
14
14 15
  // 静态资源文件夹名称
15
  window.SITE_CONFIG.staticFileName = ''
16
  window.SITE_CONFIG['staticFileName'] = '';
16 17
  // cdn地址
17
  window.SITE_CONFIG.cdnUrl = './' + window.SITE_CONFIG.staticFileName
18
  window.SITE_CONFIG['cdnUrl'] = './' + window.SITE_CONFIG.staticFileName;
18 19
})();

+ 9 - 8
static/config/index.js

@ -2,17 +2,18 @@
2 2
 * 开发环境
3 3
 */
4 4
;(function () {
5
  window.SITE_CONFIG = {}
5
  window.SITE_CONFIG = {};
6
6 7
  // api接口请求地址
7
  window.SITE_CONFIG.baseUrl = '//demo.renren.io/renren-fast'
8
  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';
8 9
9 10
  // 嵌套iframe地址
10
  window.SITE_CONFIG.nestIframeUrl = '//demo.renren.io/renren-fast/'
11
  window.SITE_CONFIG['nestIframeUrl'] = 'http://demo.renren.io/renren-fast';
11 12
  // 嵌套iframe路由名称列表
12
  window.SITE_CONFIG.nestIframeRouteNameList = ['sql']
13
  
13
  window.SITE_CONFIG['nestIframeRouteNameList'] = ['sql'];
14
14 15
  // 静态资源文件夹名称
15
  window.SITE_CONFIG.staticFileName = ''
16
  window.SITE_CONFIG['staticFileName'] = '';
16 17
  // cdn地址
17
  window.SITE_CONFIG.cdnUrl = './' + window.SITE_CONFIG.staticFileName
18
})();
18
  window.SITE_CONFIG['cdnUrl'] = './' + window.SITE_CONFIG.staticFileName;
19
})();

+ 13 - 1
static/config/init.js

@ -3,16 +3,28 @@
3 3
 */
4 4
;(function(window, document) {
5 5
  var resList = {
6
    icon: window.SITE_CONFIG.cdnUrl + '/static/img/favicon.ico',
6 7
    css: [
7 8
      window.SITE_CONFIG.cdnUrl + '/static/css/app.css'
8 9
    ],
9 10
    js: [
10 11
      window.SITE_CONFIG.cdnUrl + '/static/js/manifest.js',
11 12
      window.SITE_CONFIG.cdnUrl + '/static/js/vendor.js',
12
      window.SITE_CONFIG.cdnUrl + '/static/js/app.js'
13
      window.SITE_CONFIG.cdnUrl + '/static/js/app.js',
14
      // window.SITE_CONFIG.cdnUrl + '/static/plugins/mock-1.0.0-beta3/mock-min.js'
13 15
    ]
14 16
  };
15 17
18
  // 图标
19
  (function () {
20
    document.getElementsByTagName('html')[0].style.opacity = 0;
21
    var _icon = document.createElement('link');
22
    _icon.setAttribute('rel', 'shortcut icon');
23
    _icon.setAttribute('type', 'image/x-icon');
24
    _icon.setAttribute('href', resList.icon);
25
      document.getElementsByTagName('head')[0].appendChild(_icon);
26
  })();
27
16 28
  // 样式
17 29
  (function () {
18 30
    document.getElementsByTagName('html')[0].style.opacity = 0;

favicon.ico → static/img/favicon.ico


+ 10 - 0
static/plugins/mock-1.0.0-beta3/mock-min.js

@ -0,0 +1,10 @@
1
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Mock=e():t.Mock=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={exports:{},id:r,loaded:!1};return t[r].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){var r,a=n(1),o=n(3),u=n(5),i=n(20),l=n(23),s=n(25);"undefined"!=typeof window&&(r=n(27));/*!
2
	    Mock - 模拟请求 & 模拟数据
3
	    https://github.com/nuysoft/Mock
4
	    墨智 mozhi.gyy@taobao.com nuysoft@gmail.com
5
	*/
6
var c={Handler:a,Random:u,Util:o,XHR:r,RE:i,toJSONSchema:l,valid:s,heredoc:o.heredoc,setup:function(t){return r.setup(t)},_mocked:{}};c.version="1.0.1-beta3",r&&(r.Mock=c),c.mock=function(t,e,n){return 1===arguments.length?a.gen(t):(2===arguments.length&&(n=e,e=void 0),r&&(window.XMLHttpRequest=r),c._mocked[t+(e||"")]={rurl:t,rtype:e,template:n},c)},t.exports=c},function(module,exports,__webpack_require__){var Constant=__webpack_require__(2),Util=__webpack_require__(3),Parser=__webpack_require__(4),Random=__webpack_require__(5),RE=__webpack_require__(20),Handler={extend:Util.extend};Handler.gen=function(t,e,n){e=void 0==e?"":e+"",n=n||{},n={path:n.path||[Constant.GUID],templatePath:n.templatePath||[Constant.GUID++],currentContext:n.currentContext,templateCurrentContext:n.templateCurrentContext||t,root:n.root||n.currentContext,templateRoot:n.templateRoot||n.templateCurrentContext||t};var r,a=Parser.parse(e),o=Util.type(t);return Handler[o]?(r=Handler[o]({type:o,template:t,name:e,parsedName:e?e.replace(Constant.RE_KEY,"$1"):e,rule:a,context:n}),n.root||(n.root=r),r):t},Handler.extend({array:function(t){var e,n,r=[];if(0===t.template.length)return r;if(t.rule.parameters)if(1===t.rule.min&&void 0===t.rule.max)t.context.path.push(t.name),t.context.templatePath.push(t.name),r=Random.pick(Handler.gen(t.template,void 0,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();else if(t.rule.parameters[2])t.template.__order_index=t.template.__order_index||0,t.context.path.push(t.name),t.context.templatePath.push(t.name),r=Handler.gen(t.template,void 0,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})[t.template.__order_index%t.template.length],t.template.__order_index+=+t.rule.parameters[2],t.context.path.pop(),t.context.templatePath.pop();else for(e=0;e<t.rule.count;e++)for(n=0;n<t.template.length;n++)t.context.path.push(r.length),t.context.templatePath.push(n),r.push(Handler.gen(t.template[n],r.length,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();else for(e=0;e<t.template.length;e++)t.context.path.push(e),t.context.templatePath.push(e),r.push(Handler.gen(t.template[e],e,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();return r},object:function(t){var e,n,r,a,o,u,i={};if(void 0!=t.rule.min)for(e=Util.keys(t.template),e=Random.shuffle(e),e=e.slice(0,t.rule.count),u=0;u<e.length;u++)r=e[u],a=r.replace(Constant.RE_KEY,"$1"),t.context.path.push(a),t.context.templatePath.push(r),i[a]=Handler.gen(t.template[r],r,{path:t.context.path,templatePath:t.context.templatePath,currentContext:i,templateCurrentContext:t.template,root:t.context.root||i,templateRoot:t.context.templateRoot||t.template}),t.context.path.pop(),t.context.templatePath.pop();else{e=[],n=[];for(r in t.template)("function"==typeof t.template[r]?n:e).push(r);for(e=e.concat(n),u=0;u<e.length;u++)r=e[u],a=r.replace(Constant.RE_KEY,"$1"),t.context.path.push(a),t.context.templatePath.push(r),i[a]=Handler.gen(t.template[r],r,{path:t.context.path,templatePath:t.context.templatePath,currentContext:i,templateCurrentContext:t.template,root:t.context.root||i,templateRoot:t.context.templateRoot||t.template}),t.context.path.pop(),t.context.templatePath.pop(),o=r.match(Constant.RE_KEY),o&&o[2]&&"number"===Util.type(t.template[r])&&(t.template[r]+=parseInt(o[2],10))}return i},number:function(t){var e,n;if(t.rule.decimal){for(t.template+="",n=t.template.split("."),n[0]=t.rule.range?t.rule.count:n[0],n[1]=(n[1]||"").slice(0,t.rule.dcount);n[1].length<t.rule.dcount;)n[1]+=n[1].length<t.rule.dcount-1?Random.character("number"):Random.character("123456789");e=parseFloat(n.join("."),10)}else e=t.rule.range&&!t.rule.parameters[2]?t.rule.count:t.template;return e},"boolean":function(t){var e;return e=t.rule.parameters?Random.bool(t.rule.min,t.rule.max,t.template):t.template},string:function(t){var e,n,r,a,o="";if(t.template.length){for(void 0==t.rule.count&&(o+=t.template),e=0;e<t.rule.count;e++)o+=t.template;for(n=o.match(Constant.RE_PLACEHOLDER)||[],e=0;e<n.length;e++)if(r=n[e],/^\\/.test(r))n.splice(e--,1);else{if(a=Handler.placeholder(r,t.context.currentContext,t.context.templateCurrentContext,t),1===n.length&&r===o&&typeof a!=typeof o){o=a;break}o=o.replace(r,a)}}else o=t.rule.range?Random.string(t.rule.count):t.template;return o},"function":function(t){return t.template.call(t.context.currentContext,t)},regexp:function(t){var e="";void 0==t.rule.count&&(e+=t.template.source);for(var n=0;n<t.rule.count;n++)e+=t.template.source;return RE.Handler.gen(RE.Parser.parse(e))}}),Handler.extend({_all:function(){var t={};for(var e in Random)t[e.toLowerCase()]=e;return t},placeholder:function(placeholder,obj,templateContext,options){Constant.RE_PLACEHOLDER.exec("");var parts=Constant.RE_PLACEHOLDER.exec(placeholder),key=parts&&parts[1],lkey=key&&key.toLowerCase(),okey=this._all()[lkey],params=parts&&parts[2]||"",pathParts=this.splitPathToArray(key);try{params=eval("(function(){ return [].splice.call(arguments, 0 ) })("+params+")")}catch(error){params=parts[2].split(/,\s*/)}if(obj&&key in obj)return obj[key];if("/"===key.charAt(0)||pathParts.length>1)return this.getValueByKeyPath(key,options);if(templateContext&&"object"==typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handler.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random||lkey in Random||okey in Random))return placeholder;for(var i=0;i<params.length;i++)Constant.RE_PLACEHOLDER.exec(""),Constant.RE_PLACEHOLDER.test(params[i])&&(params[i]=Handler.placeholder(params[i],obj,templateContext,options));var handle=Random[key]||Random[lkey]||Random[okey];switch(Util.type(handle)){case"array":return Random.pick(handle);case"function":handle.options=options;var re=handle.apply(Random,params);return void 0===re&&(re=""),delete handle.options,re}},getValueByKeyPath:function(t,e){var n=t,r=this.splitPathToArray(t),a=[];"/"===t.charAt(0)?a=[e.context.path[0]].concat(this.normalizePath(r)):r.length>1&&(a=e.context.path.slice(0),a.pop(),a=this.normalizePath(a.concat(r))),t=r[r.length-1];for(var o=e.context.root,u=e.context.templateRoot,i=1;i<a.length-1;i++)o=o[a[i]],u=u[a[i]];return o&&t in o?o[t]:u&&"object"==typeof u&&t in u&&n!==u[t]?(u[t]=Handler.gen(u[t],t,{currentContext:o,templateCurrentContext:u}),u[t]):void 0},normalizePath:function(t){for(var e=[],n=0;n<t.length;n++)switch(t[n]){case"..":e.pop();break;case".":break;default:e.push(t[n])}return e},splitPathToArray:function(t){var e=t.split(/\/+/);return e[e.length-1]||(e=e.slice(0,-1)),e[0]||(e=e.slice(1)),e}}),module.exports=Handler},function(t,e){t.exports={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g}},function(t,e){var n={};n.extend=function(){var t,e,r,a,o,u=arguments[0]||{},i=1,l=arguments.length;for(1===l&&(u=this,i=0);l>i;i++)if(t=arguments[i])for(e in t)r=u[e],a=t[e],u!==a&&void 0!==a&&(n.isArray(a)||n.isObject(a)?(n.isArray(a)&&(o=r&&n.isArray(r)?r:[]),n.isObject(a)&&(o=r&&n.isObject(r)?r:{}),u[e]=n.extend(o,a)):u[e]=a);return u},n.each=function(t,e,n){var r,a;if("number"===this.type(t))for(r=0;t>r;r++)e(r,r);else if(t.length===+t.length)for(r=0;r<t.length&&e.call(n,t[r],r,t)!==!1;r++);else for(a in t)if(e.call(n,t[a],a,t)===!1)break},n.type=function(t){return null===t||void 0===t?String(t):Object.prototype.toString.call(t).match(/\[object (\w+)\]/)[1].toLowerCase()},n.each("String Object Array RegExp Function".split(" "),function(t){n["is"+t]=function(e){return n.type(e)===t.toLowerCase()}}),n.isObjectOrArray=function(t){return n.isObject(t)||n.isArray(t)},n.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},n.keys=function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(n);return e},n.values=function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e},n.heredoc=function(t){return t.toString().replace(/^[^\/]+\/\*!?/,"").replace(/\*\/[^\/]+$/,"").replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")},n.noop=function(){},t.exports=n},function(t,e,n){var r=n(2),a=n(5);t.exports={parse:function(t){t=void 0==t?"":t+"";var e=(t||"").match(r.RE_KEY),n=e&&e[3]&&e[3].match(r.RE_RANGE),o=n&&n[1]&&parseInt(n[1],10),u=n&&n[2]&&parseInt(n[2],10),i=n?n[2]?a.integer(o,u):parseInt(n[1],10):void 0,l=e&&e[4]&&e[4].match(r.RE_RANGE),s=l&&l[1]&&parseInt(l[1],10),c=l&&l[2]&&parseInt(l[2],10),h=l?!l[2]&&parseInt(l[1],10)||a.integer(s,c):void 0,p={parameters:e,range:n,min:o,max:u,count:i,decimal:l,dmin:s,dmax:c,dcount:h};for(var f in p)if(void 0!=p[f])return p;return{}}}},function(t,e,n){var r=n(3),a={extend:r.extend};a.extend(n(6)),a.extend(n(7)),a.extend(n(8)),a.extend(n(10)),a.extend(n(13)),a.extend(n(15)),a.extend(n(16)),a.extend(n(17)),a.extend(n(14)),a.extend(n(19)),t.exports=a},function(t,e){t.exports={"boolean":function(t,e,n){return void 0!==n?(t="undefined"==typeof t||isNaN(t)?1:parseInt(t,10),e="undefined"==typeof e||isNaN(e)?1:parseInt(e,10),Math.random()>1/(t+e)*t?!n:n):Math.random()>=.5},bool:function(t,e,n){return this["boolean"](t,e,n)},natural:function(t,e){return t="undefined"!=typeof t?parseInt(t,10):0,e="undefined"!=typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},integer:function(t,e){return t="undefined"!=typeof t?parseInt(t,10):-9007199254740992,e="undefined"!=typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},"int":function(t,e){return this.integer(t,e)},"float":function(t,e,n,r){n=void 0===n?0:n,n=Math.max(Math.min(n,17),0),r=void 0===r?17:r,r=Math.max(Math.min(r,17),0);for(var a=this.integer(t,e)+".",o=0,u=this.natural(n,r);u>o;o++)a+=u-1>o?this.character("number"):this.character("123456789");return parseFloat(a,10)},character:function(t){var e={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};return e.alpha=e.lower+e.upper,e.undefined=e.lower+e.upper+e.number+e.symbol,t=e[(""+t).toLowerCase()]||t,t.charAt(this.natural(0,t.length-1))},"char":function(t){return this.character(t)},string:function(t,e,n){var r;switch(arguments.length){case 0:r=this.natural(3,7);break;case 1:r=t,t=void 0;break;case 2:"string"==typeof arguments[0]?r=e:(r=this.natural(t,e),t=void 0);break;case 3:r=this.natural(e,n)}for(var a="",o=0;r>o;o++)a+=this.character(t);return a},str:function(){return this.string.apply(this,arguments)},range:function(t,e,n){arguments.length<=1&&(e=t||0,t=0),n=arguments[2]||1,t=+t,e=+e,n=+n;for(var r=Math.max(Math.ceil((e-t)/n),0),a=0,o=new Array(r);r>a;)o[a++]=t,t+=n;return o}}},function(t,e){var n={yyyy:"getFullYear",yy:function(t){return(""+t.getFullYear()).slice(2)},y:"yy",MM:function(t){var e=t.getMonth()+1;return 10>e?"0"+e:e},M:function(t){return t.getMonth()+1},dd:function(t){var e=t.getDate();return 10>e?"0"+e:e},d:"getDate",HH:function(t){var e=t.getHours();return 10>e?"0"+e:e},H:"getHours",hh:function(t){var e=t.getHours()%12;return 10>e?"0"+e:e},h:function(t){return t.getHours()%12},mm:function(t){var e=t.getMinutes();return 10>e?"0"+e:e},m:"getMinutes",ss:function(t){var e=t.getSeconds();return 10>e?"0"+e:e},s:"getSeconds",SS:function(t){var e=t.getMilliseconds();return 10>e&&"00"+e||100>e&&"0"+e||e},S:"getMilliseconds",A:function(t){return t.getHours()<12?"AM":"PM"},a:function(t){return t.getHours()<12?"am":"pm"},T:"getTime"};t.exports={_patternLetters:n,_rformat:new RegExp(function(){var t=[];for(var e in n)t.push(e);return"("+t.join("|")+")"}(),"g"),_formatDate:function(t,e){return e.replace(this._rformat,function r(e,a){return"function"==typeof n[a]?n[a](t):n[a]in n?r(e,n[a]):t[n[a]]()})},_randomDate:function(t,e){return t=void 0===t?new Date(0):t,e=void 0===e?new Date:e,new Date(Math.random()*(e.getTime()-t.getTime()))},date:function(t){return t=t||"yyyy-MM-dd",this._formatDate(this._randomDate(),t)},time:function(t){return t=t||"HH:mm:ss",this._formatDate(this._randomDate(),t)},datetime:function(t){return t=t||"yyyy-MM-dd HH:mm:ss",this._formatDate(this._randomDate(),t)},now:function(t,e){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(t)||(e=t,t="")),t=(t||"").toLowerCase(),e=e||"yyyy-MM-dd HH:mm:ss";var n=new Date;switch(t){case"year":n.setMonth(0);case"month":n.setDate(1);case"week":case"day":n.setHours(0);case"hour":n.setMinutes(0);case"minute":n.setSeconds(0);case"second":n.setMilliseconds(0)}switch(t){case"week":n.setDate(n.getDate()-n.getDay())}return this._formatDate(n,e)}}},function(t,e,n){(function(t){t.exports={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"],image:function(t,e,n,r,a){return 4===arguments.length&&(a=r,r=void 0),3===arguments.length&&(a=n,n=void 0),t||(t=this.pick(this._adSize)),e&&~e.indexOf("#")&&(e=e.slice(1)),n&&~n.indexOf("#")&&(n=n.slice(1)),"http://dummyimage.com/"+t+(e?"/"+e:"")+(n?"/"+n:"")+(r?"."+r:"")+(a?"&text="+a:"")},img:function(){return this.image.apply(this,arguments)},_brandColors:{"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"},_brandNames:function(){var t=[];for(var e in this._brandColors)t.push(e);return t},dataImage:function(e,n){var r;if("undefined"!=typeof document)r=document.createElement("canvas");else{var a=t.require("canvas");r=new a}var o=r&&r.getContext&&r.getContext("2d");if(!r||!o)return"";e||(e=this.pick(this._adSize)),n=void 0!==n?n:e,e=e.split("x");var u=parseInt(e[0],10),i=parseInt(e[1],10),l=this._brandColors[this.pick(this._brandNames())],s="#FFF",c=14,h="sans-serif";return r.width=u,r.height=i,o.textAlign="center",o.textBaseline="middle",o.fillStyle=l,o.fillRect(0,0,u,i),o.fillStyle=s,o.font="bold "+c+"px "+h,o.fillText(n,u/2,i/2,u),r.toDataURL("image/png")}}}).call(e,n(9)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e,n){var r=n(11),a=n(12);t.exports={color:function(t){return t||a[t]?a[t].nicer:this.hex()},hex:function(){var t=this._goldenRatioColor(),e=r.hsv2rgb(t),n=r.rgb2hex(e[0],e[1],e[2]);return n},rgb:function(){var t=this._goldenRatioColor(),e=r.hsv2rgb(t);return"rgb("+parseInt(e[0],10)+", "+parseInt(e[1],10)+", "+parseInt(e[2],10)+")"},rgba:function(){var t=this._goldenRatioColor(),e=r.hsv2rgb(t);return"rgba("+parseInt(e[0],10)+", "+parseInt(e[1],10)+", "+parseInt(e[2],10)+", "+Math.random().toFixed(2)+")"},hsl:function(){var t=this._goldenRatioColor(),e=r.hsv2hsl(t);return"hsl("+parseInt(e[0],10)+", "+parseInt(e[1],10)+", "+parseInt(e[2],10)+")"},_goldenRatioColor:function(t,e){return this._goldenRatio=.618033988749895,this._hue=this._hue||Math.random(),this._hue+=this._goldenRatio,this._hue%=1,"number"!=typeof t&&(t=.5),"number"!=typeof e&&(e=.95),[360*this._hue,100*t,100*e]}}},function(t,e){t.exports={rgb2hsl:function(t){var e,n,r,a=t[0]/255,o=t[1]/255,u=t[2]/255,i=Math.min(a,o,u),l=Math.max(a,o,u),s=l-i;return l==i?e=0:a==l?e=(o-u)/s:o==l?e=2+(u-a)/s:u==l&&(e=4+(a-o)/s),e=Math.min(60*e,360),0>e&&(e+=360),r=(i+l)/2,n=l==i?0:.5>=r?s/(l+i):s/(2-l-i),[e,100*n,100*r]},rgb2hsv:function(t){var e,n,r,a=t[0],o=t[1],u=t[2],i=Math.min(a,o,u),l=Math.max(a,o,u),s=l-i;return n=0===l?0:s/l*1e3/10,l==i?e=0:a==l?e=(o-u)/s:o==l?e=2+(u-a)/s:u==l&&(e=4+(a-o)/s),e=Math.min(60*e,360),0>e&&(e+=360),r=l/255*1e3/10,[e,n,r]},hsl2rgb:function(t){var e,n,r,a,o,u=t[0]/360,i=t[1]/100,l=t[2]/100;if(0===i)return o=255*l,[o,o,o];n=.5>l?l*(1+i):l+i-l*i,e=2*l-n,a=[0,0,0];for(var s=0;3>s;s++)r=u+1/3*-(s-1),0>r&&r++,r>1&&r--,o=1>6*r?e+6*(n-e)*r:1>2*r?n:2>3*r?e+(n-e)*(2/3-r)*6:e,a[s]=255*o;return a},hsl2hsv:function(t){var e,n,r=t[0],a=t[1]/100,o=t[2]/100;return o*=2,a*=1>=o?o:2-o,n=(o+a)/2,e=2*a/(o+a),[r,100*e,100*n]},hsv2rgb:function(t){var e=t[0]/60,n=t[1]/100,r=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),u=255*r*(1-n),i=255*r*(1-n*o),l=255*r*(1-n*(1-o));switch(r=255*r,a){case 0:return[r,l,u];case 1:return[i,r,u];case 2:return[u,r,l];case 3:return[u,i,r];case 4:return[l,u,r];case 5:return[r,u,i]}},hsv2hsl:function(t){var e,n,r=t[0],a=t[1]/100,o=t[2]/100;return n=(2-a)*o,e=a*o,e/=1>=n?n:2-n,n/=2,[r,100*e,100*n]},rgb2hex:function(t,e,n){return"#"+((256+t<<8|e)<<8|n).toString(16).slice(1)},hex2rgb:function(t){return t="0x"+t.slice(1).replace(t.length>4?t:/./g,"$&$&")|0,[t>>16,t>>8&255,255&t]}}},function(t,e){t.exports={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}}},function(t,e,n){function r(t,e,n,r){return void 0===n?a.natural(t,e):void 0===r?n:a.natural(parseInt(n,10),parseInt(r,10))}var a=n(6),o=n(14);t.exports={paragraph:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.sentence());return a.join(" ")},cparagraph:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.csentence());return a.join("")},sentence:function(t,e){for(var n=r(12,18,t,e),a=[],u=0;n>u;u++)a.push(this.word());return o.capitalize(a.join(" "))+"."},csentence:function(t,e){for(var n=r(12,18,t,e),a=[],o=0;n>o;o++)a.push(this.cword());return a.join("")+"。"},word:function(t,e){for(var n=r(3,10,t,e),o="",u=0;n>u;u++)o+=a.character("lower");return o},cword:function(t,e,n){var r,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(arguments.length){case 0:t=a,r=1;break;case 1:"string"==typeof arguments[0]?r=1:(r=t,t=a);break;case 2:"string"==typeof arguments[0]?r=e:(r=this.natural(t,e),t=a);break;case 3:r=this.natural(e,n)}for(var o="",u=0;r>u;u++)o+=t.charAt(this.natural(0,t.length-1));return o},title:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.capitalize(this.word()));return a.join(" ")},ctitle:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.cword());return a.join("")}}},function(t,e,n){var r=n(3);t.exports={capitalize:function(t){return(t+"").charAt(0).toUpperCase()+(t+"").substr(1)},upper:function(t){return(t+"").toUpperCase()},lower:function(t){return(t+"").toLowerCase()},pick:function(t,e,n){return r.isArray(t)?(void 0===e&&(e=1),void 0===n&&(n=e)):(t=[].slice.call(arguments),e=1,n=1),1===e&&1===n?t[this.natural(0,t.length-1)]:this.shuffle(t,e,n)},shuffle:function(t,e,n){t=t||[];for(var r=t.slice(0),a=[],o=0,u=r.length,i=0;u>i;i++)o=this.natural(0,r.length-1),a.push(r[o]),r.splice(o,1);switch(arguments.length){case 0:case 1:return a;case 2:n=e;case 3:return e=parseInt(e,10),n=parseInt(n,10),a.slice(0,this.natural(e,n))}},order:function a(t){a.cache=a.cache||{},arguments.length>1&&(t=[].slice.call(arguments,0));var e=a.options,n=e.context.templatePath.join("."),r=a.cache[n]=a.cache[n]||{index:0,array:t};return r.array[r.index++%r.array.length]}}},function(t,e){t.exports={first:function(){var t=["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"].concat(["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]);return this.pick(t)},last:function(){var t=["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"];return this.pick(t)},name:function(t){return this.first()+" "+(t?this.first()+" ":"")+this.last()},cfirst:function(){var t="王 李 张 刘 陈 杨 赵 黄 周 吴 徐 孙 胡 朱 高 林 何 郭 马 罗 梁 宋 郑 谢 韩 唐 冯 于 董 萧 程 曹 袁 邓 许 傅 沈 曾 彭 吕 苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 余 潘 杜 戴 夏 锺 汪 田 任 姜 范 方 石 姚 谭 廖 邹 熊 金 陆 郝 孔 白 崔 康 毛 邱 秦 江 史 顾 侯 邵 孟 龙 万 段 雷 钱 汤 尹 黎 易 常 武 乔 贺 赖 龚 文".split(" ");return this.pick(t)},clast:function(){var t="伟 芳 娜 秀英 敏 静 丽 强 磊 军 洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 平 刚 桂英".split(" ");return this.pick(t)},cname:function(){return this.cfirst()+this.clast()}}},function(t,e){t.exports={url:function(t,e){return(t||this.protocol())+"://"+(e||this.domain())+"/"+this.word()},protocol:function(){return this.pick("http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "))},domain:function(t){return this.word()+"."+(t||this.tld())},tld:function(){return this.pick("com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" "))},email:function(t){return this.character("lower")+"."+this.word()+"@"+(t||this.word()+"."+this.tld())},ip:function(){return this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)}}},function(t,e,n){var r=n(18),a=["东北","华北","华东","华中","华南","西南","西北"];t.exports={region:function(){return this.pick(a)},province:function(){return this.pick(r).name},city:function(t){var e=this.pick(r),n=this.pick(e.children);return t?[e.name,n.name].join(" "):n.name},county:function(t){var e=this.pick(r),n=this.pick(e.children),a=this.pick(n.children)||{name:"-"};return t?[e.name,n.name,a.name].join(" "):a.name},zip:function(t){for(var e="",n=0;(t||6)>n;n++)e+=this.natural(0,9);return e}}},function(t,e){function n(t){for(var e,n={},r=0;r<t.length;r++)e=t[r],e&&e.id&&(n[e.id]=e);for(var a=[],o=0;o<t.length;o++)if(e=t[o])if(void 0!=e.pid||void 0!=e.parentId){var u=n[e.pid]||n[e.parentId];u&&(u.children||(u.children=[]),u.children.push(e))}else a.push(e);return a}var r={110000:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",120000:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",130000:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131000:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",140000:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141000:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",150000:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",
7
150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",210000:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211000:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",220000:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",230000:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231000:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",310000:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",320000:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321000:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",330000:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331000:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",340000:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341000:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",350000:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",360000:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361000:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",370000:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371000:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",410000:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411000:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",420000:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421000:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",430000:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431000:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",440000:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442000:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",450000:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451000:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",460000:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",471005:"其它区",500000:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",510000:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511000:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512000:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",520000:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",
8
522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",530000:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",540000:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",610000:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611000:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",620000:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621000:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623000:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",630000:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",640000:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",650000:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653000:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654000:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",710000:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",810000:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",820000:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",990000:"海外",990100:"海外"},a=function(){var t=[];for(var e in r){var a="0000"===e.slice(2,6)?void 0:"00"==e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";t.push({id:e,pid:a,name:r[e]})}return n(t)}();t.exports=a},function(t,e,n){var r=n(18);t.exports={d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){var t="abcdefABCDEF1234567890",e=this.string(t,8)+"-"+this.string(t,4)+"-"+this.string(t,4)+"-"+this.string(t,4)+"-"+this.string(t,12);return e},uuid:function(){return this.guid()},id:function(){var t,e=0,n=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],a=["1","0","X","9","8","7","6","5","4","3","2"];t=this.pick(r).id+this.date("yyyyMMdd")+this.string("number",3);for(var o=0;o<t.length;o++)e+=t[o]*n[o];return t+=a[e%11]},increment:function(){var t=0;return function(e){return t+=+e||1}}(),inc:function(t){return this.increment(t)}}},function(t,e,n){var r=n(21),a=n(22);t.exports={Parser:r,Handler:a}},function(t,e){function n(t){this.type=t,this.offset=n.offset(),this.text=n.text()}function r(t,e){n.call(this,"alternate"),this.left=t,this.right=e}function a(t){n.call(this,"match"),this.body=t.filter(Boolean)}function o(t,e){n.call(this,t),this.body=e}function u(t){o.call(this,"capture-group"),this.index=y[this.offset]||(y[this.offset]=x++),this.body=t}function i(t,e){n.call(this,"quantified"),this.body=t,this.quantifier=e}function l(t,e){n.call(this,"quantifier"),this.min=t,this.max=e,this.greedy=!0}function s(t,e){n.call(this,"charset"),this.invert=t,this.body=e}function c(t,e){n.call(this,"range"),this.start=t,this.end=e}function h(t){n.call(this,"literal"),this.body=t,this.escaped=this.body!=this.text}function p(t){n.call(this,"unicode"),this.code=t.toUpperCase()}function f(t){n.call(this,"hex"),this.code=t.toUpperCase()}function d(t){n.call(this,"octal"),this.code=t.toUpperCase()}function m(t){n.call(this,"back-reference"),this.code=t.toUpperCase()}function g(t){n.call(this,"control-character"),this.code=t.toUpperCase()}var v=function(){function t(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n}function e(t,e,n,r,a){function o(t,e){function n(t){function e(t){return t.charCodeAt(0).toString(16).toUpperCase()}return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,function(t){return"\\x0"+e(t)}).replace(/[\x10-\x1F\x80-\xFF]/g,function(t){return"\\x"+e(t)}).replace(/[\u0180-\u0FFF]/g,function(t){return"\\u0"+e(t)}).replace(/[\u1080-\uFFFF]/g,function(t){return"\\u"+e(t)})}var r,a;switch(t.length){case 0:r="end of input";break;case 1:r=t[0];break;default:r=t.slice(0,-1).join(", ")+" or "+t[t.length-1]}return a=e?'"'+n(e)+'"':"end of input","Expected "+r+" but "+a+" found."}this.expected=t,this.found=e,this.offset=n,this.line=r,this.column=a,this.name="SyntaxError",this.message=o(t,e)}function v(t){function v(){return t.substring(Qn,Zn)}function x(){return Qn}function y(e){function n(e,n,r){var a,o;for(a=n;r>a;a++)o=t.charAt(a),"\n"===o?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return tr!==e&&(tr>e&&(tr=0,er={line:1,column:1,seenCR:!1}),n(er,tr,e),tr=e),er}function b(t){nr>Zn||(Zn>nr&&(nr=Zn,rr=[]),rr.push(t))}function w(t){var e=0;for(t.sort();e<t.length;)t[e-1]===t[e]?t.splice(e,1):e++}function C(){var e,n,r,a,o;return e=Zn,n=k(),null!==n?(r=Zn,124===t.charCodeAt(Zn)?(a=Rt,Zn++):(a=null,0===ar&&b(At)),null!==a?(o=C(),null!==o?(a=[a,o],r=a):(Zn=r,r=kt)):(Zn=r,r=kt),null===r&&(r=Et),null!==r?(Qn=e,n=_t(n,r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function k(){var t,e,n,r,a;if(t=Zn,e=R(),null===e&&(e=Et),null!==e)if(n=Zn,ar++,r=M(),ar--,null===r?n=Et:(Zn=n,n=kt),null!==n){for(r=[],a=_(),null===a&&(a=E());null!==a;)r.push(a),a=_(),null===a&&(a=E());null!==r?(a=A(),null===a&&(a=Et),null!==a?(Qn=t,e=Mt(e,r,a),null===e?(Zn=t,t=e):t=e):(Zn=t,t=kt)):(Zn=t,t=kt)}else Zn=t,t=kt;else Zn=t,t=kt;return t}function E(){var t;return t=I(),null===t&&(t=B(),null===t&&(t=Y())),t}function R(){var e,n;return e=Zn,94===t.charCodeAt(Zn)?(n=Pt,Zn++):(n=null,0===ar&&b(Tt)),null!==n&&(Qn=e,n=Ht()),null===n?(Zn=e,e=n):e=n,e}function A(){var e,n;return e=Zn,36===t.charCodeAt(Zn)?(n=St,Zn++):(n=null,0===ar&&b(Dt)),null!==n&&(Qn=e,n=qt()),null===n?(Zn=e,e=n):e=n,e}function _(){var t,e,n;return t=Zn,e=E(),null!==e?(n=M(),null!==n?(Qn=t,e=Ft(e,n),null===e?(Zn=t,t=e):t=e):(Zn=t,t=kt)):(Zn=t,t=kt),t}function M(){var t,e,n;return ar++,t=Zn,e=P(),null!==e?(n=L(),null===n&&(n=Et),null!==n?(Qn=t,e=Ot(e,n),null===e?(Zn=t,t=e):t=e):(Zn=t,t=kt)):(Zn=t,t=kt),ar--,null===t&&(e=null,0===ar&&b(Lt)),t}function P(){var t;return t=T(),null===t&&(t=H(),null===t&&(t=S(),null===t&&(t=D(),null===t&&(t=q(),null===t&&(t=F()))))),t}function T(){var e,n,r,a,o,u;return e=Zn,123===t.charCodeAt(Zn)?(n=It,Zn++):(n=null,0===ar&&b(jt)),null!==n?(r=O(),null!==r?(44===t.charCodeAt(Zn)?(a=Nt,Zn++):(a=null,0===ar&&b(zt)),null!==a?(o=O(),null!==o?(125===t.charCodeAt(Zn)?(u=Ut,Zn++):(u=null,0===ar&&b(Bt)),null!==u?(Qn=e,n=Gt(r,o),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function H(){var e,n,r,a;return e=Zn,123===t.charCodeAt(Zn)?(n=It,Zn++):(n=null,0===ar&&b(jt)),null!==n?(r=O(),null!==r?(t.substr(Zn,2)===Xt?(a=Xt,Zn+=2):(a=null,0===ar&&b(Kt)),null!==a?(Qn=e,n=Wt(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function S(){var e,n,r,a;return e=Zn,123===t.charCodeAt(Zn)?(n=It,Zn++):(n=null,0===ar&&b(jt)),null!==n?(r=O(),null!==r?(125===t.charCodeAt(Zn)?(a=Ut,Zn++):(a=null,0===ar&&b(Bt)),null!==a?(Qn=e,n=Yt(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function D(){var e,n;return e=Zn,43===t.charCodeAt(Zn)?(n=$t,Zn++):(n=null,0===ar&&b(Jt)),null!==n&&(Qn=e,n=Vt()),null===n?(Zn=e,e=n):e=n,e}function q(){var e,n;return e=Zn,42===t.charCodeAt(Zn)?(n=Zt,Zn++):(n=null,0===ar&&b(Qt)),null!==n&&(Qn=e,n=te()),null===n?(Zn=e,e=n):e=n,e}function F(){var e,n;return e=Zn,63===t.charCodeAt(Zn)?(n=ee,Zn++):(n=null,0===ar&&b(ne)),null!==n&&(Qn=e,n=re()),null===n?(Zn=e,e=n):e=n,e}function L(){var e;return 63===t.charCodeAt(Zn)?(e=ee,Zn++):(e=null,0===ar&&b(ne)),e}function O(){var e,n,r;if(e=Zn,n=[],ae.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(oe)),null!==r)for(;null!==r;)n.push(r),ae.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(oe));else n=kt;return null!==n&&(Qn=e,n=ue(n)),null===n?(Zn=e,e=n):e=n,e}function I(){var e,n,r,a;return e=Zn,40===t.charCodeAt(Zn)?(n=ie,Zn++):(n=null,0===ar&&b(le)),null!==n?(r=z(),null===r&&(r=U(),null===r&&(r=N(),null===r&&(r=j()))),null!==r?(41===t.charCodeAt(Zn)?(a=se,Zn++):(a=null,0===ar&&b(ce)),null!==a?(Qn=e,n=he(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function j(){var t,e;return t=Zn,e=C(),null!==e&&(Qn=t,e=pe(e)),null===e?(Zn=t,t=e):t=e,t}function N(){var e,n,r;return e=Zn,t.substr(Zn,2)===fe?(n=fe,Zn+=2):(n=null,0===ar&&b(de)),null!==n?(r=C(),null!==r?(Qn=e,n=me(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function z(){var e,n,r;return e=Zn,t.substr(Zn,2)===ge?(n=ge,Zn+=2):(n=null,0===ar&&b(ve)),null!==n?(r=C(),null!==r?(Qn=e,n=xe(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function U(){var e,n,r;return e=Zn,t.substr(Zn,2)===ye?(n=ye,Zn+=2):(n=null,0===ar&&b(be)),null!==n?(r=C(),null!==r?(Qn=e,n=we(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function B(){var e,n,r,a,o;if(ar++,e=Zn,91===t.charCodeAt(Zn)?(n=ke,Zn++):(n=null,0===ar&&b(Ee)),null!==n)if(94===t.charCodeAt(Zn)?(r=Pt,Zn++):(r=null,0===ar&&b(Tt)),null===r&&(r=Et),null!==r){for(a=[],o=G(),null===o&&(o=X());null!==o;)a.push(o),o=G(),null===o&&(o=X());null!==a?(93===t.charCodeAt(Zn)?(o=Re,Zn++):(o=null,0===ar&&b(Ae)),null!==o?(Qn=e,n=_e(r,a),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)}else Zn=e,e=kt;else Zn=e,e=kt;return ar--,null===e&&(n=null,0===ar&&b(Ce)),e}function G(){var e,n,r,a;return ar++,e=Zn,n=X(),null!==n?(45===t.charCodeAt(Zn)?(r=Pe,Zn++):(r=null,0===ar&&b(Te)),null!==r?(a=X(),null!==a?(Qn=e,n=He(n,a),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),ar--,null===e&&(n=null,0===ar&&b(Me)),e}function X(){var t,e;return ar++,t=W(),null===t&&(t=K()),ar--,null===t&&(e=null,0===ar&&b(Se)),t}function K(){var e,n;return e=Zn,De.test(t.charAt(Zn))?(n=t.charAt(Zn),Zn++):(n=null,0===ar&&b(qe)),null!==n&&(Qn=e,n=Fe(n)),null===n?(Zn=e,e=n):e=n,e}function W(){var t;return t=Z(),null===t&&(t=pt(),null===t&&(t=et(),null===t&&(t=nt(),null===t&&(t=rt(),null===t&&(t=at(),null===t&&(t=ot(),null===t&&(t=ut(),null===t&&(t=it(),null===t&&(t=lt(),null===t&&(t=st(),null===t&&(t=ct(),null===t&&(t=ht(),null===t&&(t=dt(),null===t&&(t=mt(),null===t&&(t=gt(),null===t&&(t=vt(),null===t&&(t=xt()))))))))))))))))),t}function Y(){var t;return t=$(),null===t&&(t=V(),null===t&&(t=J())),t}function $(){var e,n;return e=Zn,46===t.charCodeAt(Zn)?(n=Le,Zn++):(n=null,0===ar&&b(Oe)),null!==n&&(Qn=e,n=Ie()),null===n?(Zn=e,e=n):e=n,e}function J(){var e,n;return ar++,e=Zn,Ne.test(t.charAt(Zn))?(n=t.charAt(Zn),Zn++):(n=null,0===ar&&b(ze)),null!==n&&(Qn=e,n=Fe(n)),null===n?(Zn=e,e=n):e=n,ar--,null===e&&(n=null,0===ar&&b(je)),e}function V(){var t;return t=Q(),null===t&&(t=tt(),null===t&&(t=pt(),null===t&&(t=et(),null===t&&(t=nt(),null===t&&(t=rt(),null===t&&(t=at(),null===t&&(t=ot(),null===t&&(t=ut(),null===t&&(t=it(),null===t&&(t=lt(),null===t&&(t=st(),null===t&&(t=ct(),null===t&&(t=ht(),null===t&&(t=ft(),null===t&&(t=dt(),null===t&&(t=mt(),null===t&&(t=gt(),null===t&&(t=vt(),null===t&&(t=xt()))))))))))))))))))),t}function Z(){var e,n;return e=Zn,t.substr(Zn,2)===Ue?(n=Ue,Zn+=2):(n=null,0===ar&&b(Be)),null!==n&&(Qn=e,n=Ge()),null===n?(Zn=e,e=n):e=n,e}function Q(){var e,n;return e=Zn,t.substr(Zn,2)===Ue?(n=Ue,Zn+=2):(n=null,0===ar&&b(Be)),null!==n&&(Qn=e,n=Xe()),null===n?(Zn=e,e=n):e=n,e}function tt(){var e,n;return e=Zn,t.substr(Zn,2)===Ke?(n=Ke,Zn+=2):(n=null,0===ar&&b(We)),null!==n&&(Qn=e,n=Ye()),null===n?(Zn=e,e=n):e=n,e}function et(){var e,n;return e=Zn,t.substr(Zn,2)===$e?(n=$e,Zn+=2):(n=null,0===ar&&b(Je)),null!==n&&(Qn=e,n=Ve()),null===n?(Zn=e,e=n):e=n,e}function nt(){var e,n;return e=Zn,t.substr(Zn,2)===Ze?(n=Ze,Zn+=2):(n=null,0===ar&&b(Qe)),null!==n&&(Qn=e,n=tn()),null===n?(Zn=e,e=n):e=n,e}function rt(){var e,n;return e=Zn,t.substr(Zn,2)===en?(n=en,Zn+=2):(n=null,0===ar&&b(nn)),null!==n&&(Qn=e,n=rn()),null===n?(Zn=e,e=n):e=n,e}function at(){var e,n;return e=Zn,t.substr(Zn,2)===an?(n=an,Zn+=2):(n=null,0===ar&&b(on)),null!==n&&(Qn=e,n=un()),null===n?(Zn=e,e=n):e=n,e}function ot(){var e,n;return e=Zn,t.substr(Zn,2)===ln?(n=ln,Zn+=2):(n=null,0===ar&&b(sn)),null!==n&&(Qn=e,n=cn()),null===n?(Zn=e,e=n):e=n,e}function ut(){var e,n;return e=Zn,t.substr(Zn,2)===hn?(n=hn,Zn+=2):(n=null,0===ar&&b(pn)),null!==n&&(Qn=e,n=fn()),null===n?(Zn=e,e=n):e=n,e}function it(){var e,n;return e=Zn,t.substr(Zn,2)===dn?(n=dn,Zn+=2):(n=null,0===ar&&b(mn)),null!==n&&(Qn=e,n=gn()),null===n?(Zn=e,e=n):e=n,e}function lt(){var e,n;return e=Zn,t.substr(Zn,2)===vn?(n=vn,Zn+=2):(n=null,0===ar&&b(xn)),null!==n&&(Qn=e,n=yn()),null===n?(Zn=e,e=n):e=n,e}function st(){var e,n;return e=Zn,t.substr(Zn,2)===bn?(n=bn,Zn+=2):(n=null,0===ar&&b(wn)),null!==n&&(Qn=e,n=Cn()),null===n?(Zn=e,e=n):e=n,e}function ct(){var e,n;return e=Zn,t.substr(Zn,2)===kn?(n=kn,Zn+=2):(n=null,0===ar&&b(En)),null!==n&&(Qn=e,n=Rn()),null===n?(Zn=e,e=n):e=n,e}function ht(){var e,n;return e=Zn,t.substr(Zn,2)===An?(n=An,Zn+=2):(n=null,0===ar&&b(_n)),null!==n&&(Qn=e,n=Mn()),null===n?(Zn=e,e=n):e=n,e}function pt(){var e,n,r;return e=Zn,t.substr(Zn,2)===Pn?(n=Pn,Zn+=2):(n=null,0===ar&&b(Tn)),null!==n?(t.length>Zn?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Hn)),null!==r?(Qn=e,n=Sn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function ft(){var e,n,r;return e=Zn,92===t.charCodeAt(Zn)?(n=Dn,Zn++):(n=null,0===ar&&b(qn)),null!==n?(Fn.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Ln)),null!==r?(Qn=e,n=On(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function dt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===In?(n=In,Zn+=2):(n=null,0===ar&&b(jn)),null!==n){if(r=[],Nn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(zn)),null!==a)for(;null!==a;)r.push(a),Nn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(zn));else r=kt;null!==r?(Qn=e,n=Un(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function mt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===Bn?(n=Bn,Zn+=2):(n=null,0===ar&&b(Gn)),null!==n){if(r=[],Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn)),null!==a)for(;null!==a;)r.push(a),Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn));else r=kt;null!==r?(Qn=e,n=Wn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function gt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===Yn?(n=Yn,Zn+=2):(n=null,0===ar&&b($n)),null!==n){if(r=[],Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn)),null!==a)for(;null!==a;)r.push(a),Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn));else r=kt;null!==r?(Qn=e,n=Jn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function vt(){var e,n;return e=Zn,t.substr(Zn,2)===In?(n=In,Zn+=2):(n=null,0===ar&&b(jn)),null!==n&&(Qn=e,n=Vn()),null===n?(Zn=e,e=n):e=n,e}function xt(){var e,n,r;return e=Zn,92===t.charCodeAt(Zn)?(n=Dn,Zn++):(n=null,0===ar&&b(qn)),null!==n?(t.length>Zn?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Hn)),null!==r?(Qn=e,n=Fe(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}var yt,bt=arguments.length>1?arguments[1]:{},wt={regexp:C},Ct=C,kt=null,Et="",Rt="|",At='"|"',_t=function(t,e){return e?new r(t,e[1]):t},Mt=function(t,e,n){return new a([t].concat(e).concat([n]))},Pt="^",Tt='"^"',Ht=function(){return new n("start")},St="$",Dt='"$"',qt=function(){return new n("end")},Ft=function(t,e){return new i(t,e)},Lt="Quantifier",Ot=function(t,e){return e&&(t.greedy=!1),t},It="{",jt='"{"',Nt=",",zt='","',Ut="}",Bt='"}"',Gt=function(t,e){return new l(t,e)},Xt=",}",Kt='",}"',Wt=function(t){return new l(t,1/0)},Yt=function(t){return new l(t,t)},$t="+",Jt='"+"',Vt=function(){return new l(1,1/0)},Zt="*",Qt='"*"',te=function(){return new l(0,1/0)},ee="?",ne='"?"',re=function(){return new l(0,1)},ae=/^[0-9]/,oe="[0-9]",ue=function(t){return+t.join("")},ie="(",le='"("',se=")",ce='")"',he=function(t){return t},pe=function(t){return new u(t)},fe="?:",de='"?:"',me=function(t){return new o("non-capture-group",t)},ge="?=",ve='"?="',xe=function(t){return new o("positive-lookahead",t)},ye="?!",be='"?!"',we=function(t){return new o("negative-lookahead",t)},Ce="CharacterSet",ke="[",Ee='"["',Re="]",Ae='"]"',_e=function(t,e){return new s(!!t,e)},Me="CharacterRange",Pe="-",Te='"-"',He=function(t,e){return new c(t,e)},Se="Character",De=/^[^\\\]]/,qe="[^\\\\\\]]",Fe=function(t){return new h(t)},Le=".",Oe='"."',Ie=function(){return new n("any-character")},je="Literal",Ne=/^[^|\\\/.[()?+*$\^]/,ze="[^|\\\\\\/.[()?+*$\\^]",Ue="\\b",Be='"\\\\b"',Ge=function(){return new n("backspace")},Xe=function(){return new n("word-boundary")},Ke="\\B",We='"\\\\B"',Ye=function(){return new n("non-word-boundary")},$e="\\d",Je='"\\\\d"',Ve=function(){return new n("digit")},Ze="\\D",Qe='"\\\\D"',tn=function(){return new n("non-digit")},en="\\f",nn='"\\\\f"',rn=function(){return new n("form-feed")},an="\\n",on='"\\\\n"',un=function(){return new n("line-feed")},ln="\\r",sn='"\\\\r"',cn=function(){return new n("carriage-return")},hn="\\s",pn='"\\\\s"',fn=function(){return new n("white-space")},dn="\\S",mn='"\\\\S"',gn=function(){return new n("non-white-space")},vn="\\t",xn='"\\\\t"',yn=function(){return new n("tab")},bn="\\v",wn='"\\\\v"',Cn=function(){return new n("vertical-tab")},kn="\\w",En='"\\\\w"',Rn=function(){
9
return new n("word")},An="\\W",_n='"\\\\W"',Mn=function(){return new n("non-word")},Pn="\\c",Tn='"\\\\c"',Hn="any character",Sn=function(t){return new g(t)},Dn="\\",qn='"\\\\"',Fn=/^[1-9]/,Ln="[1-9]",On=function(t){return new m(t)},In="\\0",jn='"\\\\0"',Nn=/^[0-7]/,zn="[0-7]",Un=function(t){return new d(t.join(""))},Bn="\\x",Gn='"\\\\x"',Xn=/^[0-9a-fA-F]/,Kn="[0-9a-fA-F]",Wn=function(t){return new f(t.join(""))},Yn="\\u",$n='"\\\\u"',Jn=function(t){return new p(t.join(""))},Vn=function(){return new n("null-character")},Zn=0,Qn=0,tr=0,er={line:1,column:1,seenCR:!1},nr=0,rr=[],ar=0;if("startRule"in bt){if(!(bt.startRule in wt))throw new Error("Can't start parsing from rule \""+bt.startRule+'".');Ct=wt[bt.startRule]}if(n.offset=x,n.text=v,yt=Ct(),null!==yt&&Zn===t.length)return yt;throw w(rr),Qn=Math.max(Zn,nr),new e(rr,Qn<t.length?t.charAt(Qn):null,Qn,y(Qn).line,y(Qn).column)}return t(e,Error),{SyntaxError:e,parse:v}}(),x=1,y={};t.exports=v},function(t,e,n){function r(t,e){for(var n="",r=t;e>=r;r++)n+=String.fromCharCode(r);return n}var a=n(3),o=n(5),u={extend:a.extend},i=r(97,122),l=r(65,90),s=r(48,57),c=r(32,47)+r(58,64)+r(91,96)+r(123,126),h=r(32,126),p=" \f\n\r	\x0B \u2028\u2029",f={"\\w":i+l+s+"_","\\W":c.replace("_",""),"\\s":p,"\\S":function(){for(var t=h,e=0;e<p.length;e++)t=t.replace(p[e],"");return t}(),"\\d":s,"\\D":i+l+c};u.gen=function(t,e,n){return n=n||{guid:1},u[t.type]?u[t.type](t,e,n):u.token(t,e,n)},u.extend({token:function(t,e,n){switch(t.type){case"start":case"end":return"";case"any-character":return o.character();case"backspace":return"";case"word-boundary":return"";case"non-word-boundary":break;case"digit":return o.pick(s.split(""));case"non-digit":return o.pick((i+l+c).split(""));case"form-feed":break;case"line-feed":return t.body||t.text;case"carriage-return":break;case"white-space":return o.pick(p.split(""));case"non-white-space":return o.pick((i+l+s).split(""));case"tab":break;case"vertical-tab":break;case"word":return o.pick((i+l+s).split(""));case"non-word":return o.pick(c.replace("_","").split(""));case"null-character":}return t.body||t.text},alternate:function(t,e,n){return this.gen(o["boolean"]()?t.left:t.right,e,n)},match:function(t,e,n){e="";for(var r=0;r<t.body.length;r++)e+=this.gen(t.body[r],e,n);return e},"capture-group":function(t,e,n){return e=this.gen(t.body,e,n),n[n.guid++]=e,e},"non-capture-group":function(t,e,n){return this.gen(t.body,e,n)},"positive-lookahead":function(t,e,n){return this.gen(t.body,e,n)},"negative-lookahead":function(t,e,n){return""},quantified:function(t,e,n){e="";for(var r=this.quantifier(t.quantifier),a=0;r>a;a++)e+=this.gen(t.body,e,n);return e},quantifier:function(t,e,n){var r=Math.max(t.min,0),a=isFinite(t.max)?t.max:r+o.integer(3,7);return o.integer(r,a)},charset:function(t,e,n){if(t.invert)return this["invert-charset"](t,e,n);var r=o.pick(t.body);return this.gen(r,e,n)},"invert-charset":function(t,e,n){for(var r,a=h,u=0;u<t.body.length;u++)switch(r=t.body[u],r.type){case"literal":a=a.replace(r.body,"");break;case"range":for(var i=this.gen(r.start,e,n).charCodeAt(),l=this.gen(r.end,e,n).charCodeAt(),s=i;l>=s;s++)a=a.replace(String.fromCharCode(s),"");default:var c=f[r.text];if(c)for(var p=0;p<=c.length;p++)a=a.replace(c[p],"")}return o.pick(a.split(""))},range:function(t,e,n){var r=this.gen(t.start,e,n).charCodeAt(),a=this.gen(t.end,e,n).charCodeAt();return String.fromCharCode(o.integer(r,a))},literal:function(t,e,n){return t.escaped?t.body:t.text},unicode:function(t,e,n){return String.fromCharCode(parseInt(t.code,16))},hex:function(t,e,n){return String.fromCharCode(parseInt(t.code,16))},octal:function(t,e,n){return String.fromCharCode(parseInt(t.code,8))},"back-reference":function(t,e,n){return n[t.code]||""},CONTROL_CHARACTER_MAP:function(){for(var t="@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "),e="\x00        \b 	 \n \x0B \f \r                  ".split(" "),n={},r=0;r<t.length;r++)n[t[r]]=e[r];return n}(),"control-character":function(t,e,n){return this.CONTROL_CHARACTER_MAP[t.code]}}),t.exports=u},function(t,e,n){t.exports=n(24)},function(t,e,n){function r(t,e,n){n=n||[];var i={name:"string"==typeof e?e.replace(a.RE_KEY,"$1"):e,template:t,type:o.type(t),rule:u.parse(e)};switch(i.path=n.slice(0),i.path.push(void 0===e?"ROOT":i.name),i.type){case"array":i.items=[],o.each(t,function(t,e){i.items.push(r(t,e,i.path))});break;case"object":i.properties=[],o.each(t,function(t,e){i.properties.push(r(t,e,i.path))})}return i}var a=n(2),o=n(3),u=n(4);t.exports=r},function(t,e,n){t.exports=n(26)},function(t,e,n){function r(t,e){for(var n=u(t),r=i.diff(n,e),a=0;a<r.length;a++);return r}var a=n(2),o=n(3),u=n(23),i={diff:function(t,e,n){var r=[];return this.name(t,e,n,r)&&this.type(t,e,n,r)&&(this.value(t,e,n,r),this.properties(t,e,n,r),this.items(t,e,n,r)),r},name:function(t,e,n,r){var a=r.length;return l.equal("name",t.path,n+"",t.name+"",r),r.length===a},type:function(t,e,n,r){var u=r.length;switch(t.type){case"string":if(t.template.match(a.RE_PLACEHOLDER))return!0;break;case"array":if(t.rule.parameters){if(void 0!==t.rule.min&&void 0===t.rule.max&&1===t.rule.count)return!0;if(t.rule.parameters[2])return!0}break;case"function":return!0}return l.equal("type",t.path,o.type(e),t.type,r),r.length===u},value:function(t,e,n,r){var o=r.length,u=t.rule,i=t.type;if("object"===i||"array"===i||"function"===i)return!0;if(!u.parameters){switch(i){case"regexp":return l.match("value",t.path,e,t.template,r),r.length===o;case"string":if(t.template.match(a.RE_PLACEHOLDER))return r.length===o}return l.equal("value",t.path,e,t.template,r),r.length===o}var s;switch(i){case"number":var c=(e+"").split(".");c[0]=+c[0],void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo("value",t.path,c[0],Math.min(u.min,u.max),r),l.lessThanOrEqualTo("value",t.path,c[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&l.equal("value",t.path,c[0],u.min,r,"[value] "+n),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(l.greaterThanOrEqualTo("value",t.path,c[1].length,u.dmin,r),l.lessThanOrEqualTo("value",t.path,c[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&l.equal("value",t.path,c[1].length,u.dmin,r));break;case"boolean":break;case"string":s=e.match(new RegExp(t.template,"g")),s=s?s.length:0,void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo("repeat count",t.path,s,u.min,r),l.lessThanOrEqualTo("repeat count",t.path,s,u.max,r)),void 0!==u.min&&void 0===u.max&&l.equal("repeat count",t.path,s,u.min,r);break;case"regexp":s=e.match(new RegExp(t.template.source.replace(/^\^|\$$/g,""),"g")),s=s?s.length:0,void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo("repeat count",t.path,s,u.min,r),l.lessThanOrEqualTo("repeat count",t.path,s,u.max,r)),void 0!==u.min&&void 0===u.max&&l.equal("repeat count",t.path,s,u.min,r)}return r.length===o},properties:function(t,e,n,r){var a=r.length,u=t.rule,i=o.keys(e);if(t.properties){if(t.rule.parameters?(void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo("properties length",t.path,i.length,Math.min(u.min,u.max),r),l.lessThanOrEqualTo("properties length",t.path,i.length,Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&1!==u.count&&l.equal("properties length",t.path,i.length,u.min,r)):l.equal("properties length",t.path,i.length,t.properties.length,r),r.length!==a)return!1;for(var s=0;s<i.length;s++)r.push.apply(r,this.diff(function(){var e;return o.each(t.properties,function(t){t.name===i[s]&&(e=t)}),e||t.properties[s]}(),e[i[s]],i[s]));return r.length===a}},items:function(t,e,n,r){var a=r.length;if(t.items){var o=t.rule;if(t.rule.parameters){if(void 0!==o.min&&void 0!==o.max&&(l.greaterThanOrEqualTo("items",t.path,e.length,Math.min(o.min,o.max)*t.items.length,r,"[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements"),l.lessThanOrEqualTo("items",t.path,e.length,Math.max(o.min,o.max)*t.items.length,r,"[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements")),void 0!==o.min&&void 0===o.max){if(1===o.count)return r.length===a;l.equal("items length",t.path,e.length,o.min*t.items.length,r)}if(o.parameters[2])return r.length===a}else l.equal("items length",t.path,e.length,t.items.length,r);if(r.length!==a)return!1;for(var u=0;u<e.length;u++)r.push.apply(r,this.diff(t.items[u%t.items.length],e[u],u%t.items.length));return r.length===a}}},l={message:function(t){return(t.message||"[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}").replace("{utype}",t.type.toUpperCase()).replace("{ltype}",t.type.toLowerCase()).replace("{path}",o.isArray(t.path)&&t.path.join(".")||t.path).replace("{action}",t.action).replace("{expected}",t.expected).replace("{actual}",t.actual)},equal:function(t,e,n,r,a,o){if(n===r)return!0;switch(t){case"type":if("regexp"===r&&"string"===n)return!0}var u={path:e,type:t,actual:n,expected:r,action:"is equal to",message:o};return u.message=l.message(u),a.push(u),!1},match:function(t,e,n,r,a,o){if(r.test(n))return!0;var u={path:e,type:t,actual:n,expected:r,action:"matches",message:o};return u.message=l.message(u),a.push(u),!1},notEqual:function(t,e,n,r,a,o){if(n!==r)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is not equal to",message:o};return u.message=l.message(u),a.push(u),!1},greaterThan:function(t,e,n,r,a,o){if(n>r)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is greater than",message:o};return u.message=l.message(u),a.push(u),!1},lessThan:function(t,e,n,r,a,o){if(r>n)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is less to",message:o};return u.message=l.message(u),a.push(u),!1},greaterThanOrEqualTo:function(t,e,n,r,a,o){if(n>=r)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is greater than or equal to",message:o};return u.message=l.message(u),a.push(u),!1},lessThanOrEqualTo:function(t,e,n,r,a,o){if(r>=n)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is less than or equal to",message:o};return u.message=l.message(u),a.push(u),!1}};r.Diff=i,r.Assert=l,t.exports=r},function(t,e,n){t.exports=n(28)},function(t,e,n){function r(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}function a(){function t(){try{return new window._XMLHttpRequest}catch(t){}}function e(){try{return new window._ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}var n=function(){var t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,e=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,n=location.href,r=e.exec(n.toLowerCase())||[];return t.test(r[1])}();return window.ActiveXObject?!n&&t()||e():t()}function o(t){function e(t,e){return"string"===i.type(t)?t===e:"regexp"===i.type(t)?t.test(e):void 0}for(var n in r.Mock._mocked){var a=r.Mock._mocked[n];if((!a.rurl||e(a.rurl,t.url))&&(!a.rtype||e(a.rtype,t.type.toLowerCase())))return a}}function u(t,e){return i.isFunction(t.template)?t.template(e):r.Mock.mock(t.template)}var i=n(3);window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(l){window.Event=function(t,e,n,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(t,e,n,r),a}}var s={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},c="readystatechange loadstart progress abort error load timeout loadend".split(" "),h="timeout withCredentials".split(" "),p="readyState responseURL status statusText responseType response responseText responseXML".split(" "),f={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};r._settings={timeout:"10-100"},r.setup=function(t){return i.extend(r._settings,t),r._settings},i.extend(r,s),i.extend(r.prototype,s),r.prototype.mock=!0,r.prototype.match=!1,i.extend(r.prototype,{open:function(t,e,n,u,l){function s(t){for(var e=0;e<p.length;e++)try{f[p[e]]=m[p[e]]}catch(n){}f.dispatchEvent(new Event(t.type))}var f=this;i.extend(this.custom,{method:t,url:e,async:"boolean"==typeof n?n:!0,username:u,password:l,options:{url:e,type:t}}),this.custom.timeout=function(t){if("number"==typeof t)return t;if("string"==typeof t&&!~t.indexOf("-"))return parseInt(t,10);if("string"==typeof t&&~t.indexOf("-")){var e=t.split("-"),n=parseInt(e[0],10),r=parseInt(e[1],10);return Math.round(Math.random()*(r-n))+n}}(r._settings.timeout);var d=o(this.custom.options);if(d)this.match=!0,this.custom.template=d,this.readyState=r.OPENED,this.dispatchEvent(new Event("readystatechange"));else{var m=a();this.custom.xhr=m;for(var g=0;g<c.length;g++)m.addEventListener(c[g],s);u?m.open(t,e,n,u,l):m.open(t,e,n);for(var v=0;v<h.length;v++)try{m[h[v]]=f[h[v]]}catch(x){}}},setRequestHeader:function(t,e){if(!this.match)return void this.custom.xhr.setRequestHeader(t,e);var n=this.custom.requestHeaders;n[t]?n[t]+=","+e:n[t]=e},timeout:0,withCredentials:!1,upload:{},send:function(t){function e(){n.readyState=r.HEADERS_RECEIVED,n.dispatchEvent(new Event("readystatechange")),n.readyState=r.LOADING,n.dispatchEvent(new Event("readystatechange")),n.status=200,n.statusText=f[200],n.response=n.responseText=JSON.stringify(u(n.custom.template,n.custom.options),null,4),n.readyState=r.DONE,n.dispatchEvent(new Event("readystatechange")),n.dispatchEvent(new Event("load")),n.dispatchEvent(new Event("loadend"))}var n=this;return this.custom.options.body=t,this.match?(this.setRequestHeader("X-Requested-With","MockXMLHttpRequest"),this.dispatchEvent(new Event("loadstart")),void(this.custom.async?setTimeout(e,this.custom.timeout):e())):void this.custom.xhr.send(t)},abort:function(){return this.match?(this.readyState=r.UNSENT,this.dispatchEvent(new Event("abort",!1,!1,this)),void this.dispatchEvent(new Event("error",!1,!1,this))):void this.custom.xhr.abort()}}),i.extend(r.prototype,{responseURL:"",status:r.UNSENT,statusText:"",getResponseHeader:function(t){return this.match?this.custom.responseHeaders[t.toLowerCase()]:this.custom.xhr.getResponseHeader(t)},getAllResponseHeaders:function(){if(!this.match)return this.custom.xhr.getAllResponseHeaders();var t=this.custom.responseHeaders,e="";for(var n in t)t.hasOwnProperty(n)&&(e+=n+": "+t[n]+"\r\n");return e},overrideMimeType:function(){},responseType:"",response:null,responseText:"",responseXML:null}),i.extend(r.prototype,{addEventListener:function(t,e){var n=this.custom.events;n[t]||(n[t]=[]),n[t].push(e)},removeEventListener:function(t,e){for(var n=this.custom.events[t]||[],r=0;r<n.length;r++)n[r]===e&&n.splice(r--,1)},dispatchEvent:function(t){for(var e=this.custom.events[t.type]||[],n=0;n<e.length;n++)e[n].call(this,t);var r="on"+t.type;this[r]&&this[r](t)}}),t.exports=r}])});
10
//# sourceMappingURL=mock-min.js.map

+ 8539 - 0
static/plugins/mock-1.0.0-beta3/mock.js

@ -0,0 +1,8539 @@
1
(function webpackUniversalModuleDefinition(root, factory) {
2
	if(typeof exports === 'object' && typeof module === 'object')
3
		module.exports = factory();
4
	else if(typeof define === 'function' && define.amd)
5
		define([], factory);
6
	else if(typeof exports === 'object')
7
		exports["Mock"] = factory();
8
	else
9
		root["Mock"] = factory();
10
})(this, function() {
11
return /******/ (function(modules) { // webpackBootstrap
12
/******/ 	// The module cache
13
/******/ 	var installedModules = {};
14
15
/******/ 	// The require function
16
/******/ 	function __webpack_require__(moduleId) {
17
18
/******/ 		// Check if module is in cache
19
/******/ 		if(installedModules[moduleId])
20
/******/ 			return installedModules[moduleId].exports;
21
22
/******/ 		// Create a new module (and put it into the cache)
23
/******/ 		var module = installedModules[moduleId] = {
24
/******/ 			exports: {},
25
/******/ 			id: moduleId,
26
/******/ 			loaded: false
27
/******/ 		};
28
29
/******/ 		// Execute the module function
30
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
32
/******/ 		// Flag the module as loaded
33
/******/ 		module.loaded = true;
34
35
/******/ 		// Return the exports of the module
36
/******/ 		return module.exports;
37
/******/ 	}
38
39
40
/******/ 	// expose the modules object (__webpack_modules__)
41
/******/ 	__webpack_require__.m = modules;
42
43
/******/ 	// expose the module cache
44
/******/ 	__webpack_require__.c = installedModules;
45
46
/******/ 	// __webpack_public_path__
47
/******/ 	__webpack_require__.p = "";
48
49
/******/ 	// Load entry module and return exports
50
/******/ 	return __webpack_require__(0);
51
/******/ })
52
/************************************************************************/
53
/******/ ([
54
/* 0 */
55
/***/ function(module, exports, __webpack_require__) {
56
57
	/* global require, module, window */
58
	var Handler = __webpack_require__(1)
59
	var Util = __webpack_require__(3)
60
	var Random = __webpack_require__(5)
61
	var RE = __webpack_require__(20)
62
	var toJSONSchema = __webpack_require__(23)
63
	var valid = __webpack_require__(25)
64
65
	var XHR
66
	if (typeof window !== 'undefined') XHR = __webpack_require__(27)
67
68
	/*!
69
	    Mock - 模拟请求 & 模拟数据
70
	    https://github.com/nuysoft/Mock
71
	    墨智 mozhi.gyy@taobao.com nuysoft@gmail.com
72
	*/
73
	var Mock = {
74
	    Handler: Handler,
75
	    Random: Random,
76
	    Util: Util,
77
	    XHR: XHR,
78
	    RE: RE,
79
	    toJSONSchema: toJSONSchema,
80
	    valid: valid,
81
	    heredoc: Util.heredoc,
82
	    setup: function(settings) {
83
	        return XHR.setup(settings)
84
	    },
85
	    _mocked: {}
86
	}
87
88
	Mock.version = '1.0.1-beta3'
89
90
	// 避免循环依赖
91
	if (XHR) XHR.Mock = Mock
92
93
	/*
94
	    * Mock.mock( template )
95
	    * Mock.mock( function() )
96
	    * Mock.mock( rurl, template )
97
	    * Mock.mock( rurl, function(options) )
98
	    * Mock.mock( rurl, rtype, template )
99
	    * Mock.mock( rurl, rtype, function(options) )
100
101
	    根据数据模板生成模拟数据。
102
	*/
103
	Mock.mock = function(rurl, rtype, template) {
104
	    // Mock.mock(template)
105
	    if (arguments.length === 1) {
106
	        return Handler.gen(rurl)
107
	    }
108
	    // Mock.mock(rurl, template)
109
	    if (arguments.length === 2) {
110
	        template = rtype
111
	        rtype = undefined
112
	    }
113
	    // 拦截 XHR
114
	    if (XHR) window.XMLHttpRequest = XHR
115
	    Mock._mocked[rurl + (rtype || '')] = {
116
	        rurl: rurl,
117
	        rtype: rtype,
118
	        template: template
119
	    }
120
	    return Mock
121
	}
122
123
	module.exports = Mock
124
125
/***/ },
126
/* 1 */
127
/***/ function(module, exports, __webpack_require__) {
128
129
	/* 
130
	    ## Handler
131
132
	    处理数据模板。
133
	    
134
	    * Handler.gen( template, name?, context? )
135
136
	        入口方法。
137
138
	    * Data Template Definition, DTD
139
	        
140
	        处理数据模板定义。
141
142
	        * Handler.array( options )
143
	        * Handler.object( options )
144
	        * Handler.number( options )
145
	        * Handler.boolean( options )
146
	        * Handler.string( options )
147
	        * Handler.function( options )
148
	        * Handler.regexp( options )
149
	        
150
	        处理路径(相对和绝对)。
151
152
	        * Handler.getValueByKeyPath( key, options )
153
154
	    * Data Placeholder Definition, DPD
155
156
	        处理数据占位符定义
157
158
	        * Handler.placeholder( placeholder, context, templateContext, options )
159
160
	*/
161
162
	var Constant = __webpack_require__(2)
163
	var Util = __webpack_require__(3)
164
	var Parser = __webpack_require__(4)
165
	var Random = __webpack_require__(5)
166
	var RE = __webpack_require__(20)
167
168
	var Handler = {
169
	    extend: Util.extend
170
	}
171
172
	/*
173
	    template        属性值(即数据模板)
174
	    name            属性名
175
	    context         数据上下文,生成后的数据
176
	    templateContext 模板上下文,
177
178
	    Handle.gen(template, name, options)
179
	    context
180
	        currentContext, templateCurrentContext, 
181
	        path, templatePath
182
	        root, templateRoot
183
	*/
184
	Handler.gen = function(template, name, context) {
185
	    /* jshint -W041 */
186
	    name = name == undefined ? '' : (name + '')
187
188
	    context = context || {}
189
	    context = {
190
	            // 当前访问路径,只有属性名,不包括生成规则
191
	            path: context.path || [Constant.GUID],
192
	            templatePath: context.templatePath || [Constant.GUID++],
193
	            // 最终属性值的上下文
194
	            currentContext: context.currentContext,
195
	            // 属性值模板的上下文
196
	            templateCurrentContext: context.templateCurrentContext || template,
197
	            // 最终值的根
198
	            root: context.root || context.currentContext,
199
	            // 模板的根
200
	            templateRoot: context.templateRoot || context.templateCurrentContext || template
201
	        }
202
	        // console.log('path:', context.path.join('.'), template)
203
204
	    var rule = Parser.parse(name)
205
	    var type = Util.type(template)
206
	    var data
207
208
	    if (Handler[type]) {
209
	        data = Handler[type]({
210
	            // 属性值类型
211
	            type: type,
212
	            // 属性值模板
213
	            template: template,
214
	            // 属性名 + 生成规则
215
	            name: name,
216
	            // 属性名
217
	            parsedName: name ? name.replace(Constant.RE_KEY, '$1') : name,
218
219
	            // 解析后的生成规则
220
	            rule: rule,
221
	            // 相关上下文
222
	            context: context
223
	        })
224
225
	        if (!context.root) context.root = data
226
	        return data
227
	    }
228
229
	    return template
230
	}
231
232
	Handler.extend({
233
	    array: function(options) {
234
	        var result = [],
235
	            i, ii;
236
237
	        // 'name|1': []
238
	        // 'name|count': []
239
	        // 'name|min-max': []
240
	        if (options.template.length === 0) return result
241
242
	        // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }]
243
	        if (!options.rule.parameters) {
244
	            for (i = 0; i < options.template.length; i++) {
245
	                options.context.path.push(i)
246
	                options.context.templatePath.push(i)
247
	                result.push(
248
	                    Handler.gen(options.template[i], i, {
249
	                        path: options.context.path,
250
	                        templatePath: options.context.templatePath,
251
	                        currentContext: result,
252
	                        templateCurrentContext: options.template,
253
	                        root: options.context.root || result,
254
	                        templateRoot: options.context.templateRoot || options.template
255
	                    })
256
	                )
257
	                options.context.path.pop()
258
	                options.context.templatePath.pop()
259
	            }
260
	        } else {
261
	            // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE']
262
	            if (options.rule.min === 1 && options.rule.max === undefined) {
263
	                // fix #17
264
	                options.context.path.push(options.name)
265
	                options.context.templatePath.push(options.name)
266
	                result = Random.pick(
267
	                    Handler.gen(options.template, undefined, {
268
	                        path: options.context.path,
269
	                        templatePath: options.context.templatePath,
270
	                        currentContext: result,
271
	                        templateCurrentContext: options.template,
272
	                        root: options.context.root || result,
273
	                        templateRoot: options.context.templateRoot || options.template
274
	                    })
275
	                )
276
	                options.context.path.pop()
277
	                options.context.templatePath.pop()
278
	            } else {
279
	                // 'data|+1': [{}, {}]
280
	                if (options.rule.parameters[2]) {
281
	                    options.template.__order_index = options.template.__order_index || 0
282
283
	                    options.context.path.push(options.name)
284
	                    options.context.templatePath.push(options.name)
285
	                    result = Handler.gen(options.template, undefined, {
286
	                        path: options.context.path,
287
	                        templatePath: options.context.templatePath,
288
	                        currentContext: result,
289
	                        templateCurrentContext: options.template,
290
	                        root: options.context.root || result,
291
	                        templateRoot: options.context.templateRoot || options.template
292
	                    })[
293
	                        options.template.__order_index % options.template.length
294
	                    ]
295
296
	                    options.template.__order_index += +options.rule.parameters[2]
297
298
	                    options.context.path.pop()
299
	                    options.context.templatePath.pop()
300
301
	                } else {
302
	                    // 'data|1-10': [{}]
303
	                    for (i = 0; i < options.rule.count; i++) {
304
	                        // 'data|1-10': [{}, {}]
305
	                        for (ii = 0; ii < options.template.length; ii++) {
306
	                            options.context.path.push(result.length)
307
	                            options.context.templatePath.push(ii)
308
	                            result.push(
309
	                                Handler.gen(options.template[ii], result.length, {
310
	                                    path: options.context.path,
311
	                                    templatePath: options.context.templatePath,
312
	                                    currentContext: result,
313
	                                    templateCurrentContext: options.template,
314
	                                    root: options.context.root || result,
315
	                                    templateRoot: options.context.templateRoot || options.template
316
	                                })
317
	                            )
318
	                            options.context.path.pop()
319
	                            options.context.templatePath.pop()
320
	                        }
321
	                    }
322
	                }
323
	            }
324
	        }
325
	        return result
326
	    },
327
	    object: function(options) {
328
	        var result = {},
329
	            keys, fnKeys, key, parsedKey, inc, i;
330
331
	        // 'obj|min-max': {}
332
	        /* jshint -W041 */
333
	        if (options.rule.min != undefined) {
334
	            keys = Util.keys(options.template)
335
	            keys = Random.shuffle(keys)
336
	            keys = keys.slice(0, options.rule.count)
337
	            for (i = 0; i < keys.length; i++) {
338
	                key = keys[i]
339
	                parsedKey = key.replace(Constant.RE_KEY, '$1')
340
	                options.context.path.push(parsedKey)
341
	                options.context.templatePath.push(key)
342
	                result[parsedKey] = Handler.gen(options.template[key], key, {
343
	                    path: options.context.path,
344
	                    templatePath: options.context.templatePath,
345
	                    currentContext: result,
346
	                    templateCurrentContext: options.template,
347
	                    root: options.context.root || result,
348
	                    templateRoot: options.context.templateRoot || options.template
349
	                })
350
	                options.context.path.pop()
351
	                options.context.templatePath.pop()
352
	            }
353
354
	        } else {
355
	            // 'obj': {}
356
	            keys = []
357
	            fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便
358
	            for (key in options.template) {
359
	                (typeof options.template[key] === 'function' ? fnKeys : keys).push(key)
360
	            }
361
	            keys = keys.concat(fnKeys)
362
363
	            /*
364
	                会改变非函数属性的顺序
365
	                keys = Util.keys(options.template)
366
	                keys.sort(function(a, b) {
367
	                    var afn = typeof options.template[a] === 'function'
368
	                    var bfn = typeof options.template[b] === 'function'
369
	                    if (afn === bfn) return 0
370
	                    if (afn && !bfn) return 1
371
	                    if (!afn && bfn) return -1
372
	                })
373
	            */
374
375
	            for (i = 0; i < keys.length; i++) {
376
	                key = keys[i]
377
	                parsedKey = key.replace(Constant.RE_KEY, '$1')
378
	                options.context.path.push(parsedKey)
379
	                options.context.templatePath.push(key)
380
	                result[parsedKey] = Handler.gen(options.template[key], key, {
381
	                    path: options.context.path,
382
	                    templatePath: options.context.templatePath,
383
	                    currentContext: result,
384
	                    templateCurrentContext: options.template,
385
	                    root: options.context.root || result,
386
	                    templateRoot: options.context.templateRoot || options.template
387
	                })
388
	                options.context.path.pop()
389
	                options.context.templatePath.pop()
390
	                    // 'id|+1': 1
391
	                inc = key.match(Constant.RE_KEY)
392
	                if (inc && inc[2] && Util.type(options.template[key]) === 'number') {
393
	                    options.template[key] += parseInt(inc[2], 10)
394
	                }
395
	            }
396
	        }
397
	        return result
398
	    },
399
	    number: function(options) {
400
	        var result, parts;
401
	        if (options.rule.decimal) { // float
402
	            options.template += ''
403
	            parts = options.template.split('.')
404
	                // 'float1|.1-10': 10,
405
	                // 'float2|1-100.1-10': 1,
406
	                // 'float3|999.1-10': 1,
407
	                // 'float4|.3-10': 123.123,
408
	            parts[0] = options.rule.range ? options.rule.count : parts[0]
409
	            parts[1] = (parts[1] || '').slice(0, options.rule.dcount)
410
	            while (parts[1].length < options.rule.dcount) {
411
	                parts[1] += (
412
	                    // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。
413
	                    (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789')
414
	                )
415
	            }
416
	            result = parseFloat(parts.join('.'), 10)
417
	        } else { // integer
418
	            // 'grade1|1-100': 1,
419
	            result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template
420
	        }
421
	        return result
422
	    },
423
	    boolean: function(options) {
424
	        var result;
425
	        // 'prop|multiple': false, 当前值是相反值的概率倍数
426
	        // 'prop|probability-probability': false, 当前值与相反值的概率
427
	        result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template
428
	        return result
429
	    },
430
	    string: function(options) {
431
	        var result = '',
432
	            i, placeholders, ph, phed;
433
	        if (options.template.length) {
434
435
	            //  'foo': '★',
436
	            /* jshint -W041 */
437
	            if (options.rule.count == undefined) {
438
	                result += options.template
439
	            }
440
441
	            // 'star|1-5': '★',
442
	            for (i = 0; i < options.rule.count; i++) {
443
	                result += options.template
444
	            }
445
	            // 'email|1-10': '@EMAIL, ',
446
	            placeholders = result.match(Constant.RE_PLACEHOLDER) || [] // A-Z_0-9 > \w_
447
	            for (i = 0; i < placeholders.length; i++) {
448
	                ph = placeholders[i]
449
450
	                // 遇到转义斜杠,不需要解析占位符
451
	                if (/^\\/.test(ph)) {
452
	                    placeholders.splice(i--, 1)
453
	                    continue
454
	                }
455
456
	                phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options)
457
458
	                // 只有一个占位符,并且没有其他字符
459
	                if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // 
460
	                    result = phed
461
	                    break
462
463
	                    if (Util.isNumeric(phed)) {
464
	                        result = parseFloat(phed, 10)
465
	                        break
466
	                    }
467
	                    if (/^(true|false)$/.test(phed)) {
468
	                        result = phed === 'true' ? true :
469
	                            phed === 'false' ? false :
470
	                            phed // 已经是布尔值
471
	                        break
472
	                    }
473
	                }
474
	                result = result.replace(ph, phed)
475
	            }
476
477
	        } else {
478
	            // 'ASCII|1-10': '',
479
	            // 'ASCII': '',
480
	            result = options.rule.range ? Random.string(options.rule.count) : options.template
481
	        }
482
	        return result
483
	    },
484
	    'function': function(options) {
485
	        // ( context, options )
486
	        return options.template.call(options.context.currentContext, options)
487
	    },
488
	    'regexp': function(options) {
489
	        var source = ''
490
491
	        // 'name': /regexp/,
492
	        /* jshint -W041 */
493
	        if (options.rule.count == undefined) {
494
	            source += options.template.source // regexp.source
495
	        }
496
497
	        // 'name|1-5': /regexp/,
498
	        for (var i = 0; i < options.rule.count; i++) {
499
	            source += options.template.source
500
	        }
501
502
	        return RE.Handler.gen(
503
	            RE.Parser.parse(
504
	                source
505
	            )
506
	        )
507
	    }
508
	})
509
510
	Handler.extend({
511
	    _all: function() {
512
	        var re = {};
513
	        for (var key in Random) re[key.toLowerCase()] = key
514
	        return re
515
	    },
516
	    // 处理占位符,转换为最终值
517
	    placeholder: function(placeholder, obj, templateContext, options) {
518
	        // console.log(options.context.path)
519
	        // 1 key, 2 params
520
	        Constant.RE_PLACEHOLDER.exec('')
521
	        var parts = Constant.RE_PLACEHOLDER.exec(placeholder),
522
	            key = parts && parts[1],
523
	            lkey = key && key.toLowerCase(),
524
	            okey = this._all()[lkey],
525
	            params = parts && parts[2] || ''
526
	        var pathParts = this.splitPathToArray(key)
527
528
	        // 解析占位符的参数
529
	        try {
530
	            // 1. 尝试保持参数的类型
531
	            /*
532
	                #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24)
533
	                [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056)
534
	                应该属于 Window Firefox 30.0 的 BUG
535
	            */
536
	            /* jshint -W061 */
537
	            params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')')
538
	        } catch (error) {
539
	            // 2. 如果失败,只能解析为字符串
540
	            // console.error(error)
541
	            // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/);
542
	            // else throw error
543
	            params = parts[2].split(/,\s*/)
544
	        }
545
546
	        // 占位符优先引用数据模板中的属性
547
	        if (obj && (key in obj)) return obj[key]
548
549
	        // @index @key
550
	        // if (Constant.RE_INDEX.test(key)) return +options.name
551
	        // if (Constant.RE_KEY.test(key)) return options.name
552
553
	        // 绝对路径 or 相对路径
554
	        if (
555
	            key.charAt(0) === '/' ||
556
	            pathParts.length > 1
557
	        ) return this.getValueByKeyPath(key, options)
558
559
	        // 递归引用数据模板中的属性
560
	        if (templateContext &&
561
	            (typeof templateContext === 'object') &&
562
	            (key in templateContext) &&
563
	            (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己
564
	        ) {
565
	            // 先计算被引用的属性值
566
	            templateContext[key] = Handler.gen(templateContext[key], key, {
567
	                currentContext: obj,
568
	                templateCurrentContext: templateContext
569
	            })
570
	            return templateContext[key]
571
	        }
572
573
	        // 如果未找到,则原样返回
574
	        if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder
575
576
	        // 递归解析参数中的占位符
577
	        for (var i = 0; i < params.length; i++) {
578
	            Constant.RE_PLACEHOLDER.exec('')
579
	            if (Constant.RE_PLACEHOLDER.test(params[i])) {
580
	                params[i] = Handler.placeholder(params[i], obj, templateContext, options)
581
	            }
582
	        }
583
584
	        var handle = Random[key] || Random[lkey] || Random[okey]
585
	        switch (Util.type(handle)) {
586
	            case 'array':
587
	                // 自动从数组中取一个,例如 @areas
588
	                return Random.pick(handle)
589
	            case 'function':
590
	                // 执行占位符方法(大多数情况)
591
	                handle.options = options
592
	                var re = handle.apply(Random, params)
593
	                if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。
594
	                delete handle.options
595
	                return re
596
	        }
597
	    },
598
	    getValueByKeyPath: function(key, options) {
599
	        var originalKey = key
600
	        var keyPathParts = this.splitPathToArray(key)
601
	        var absolutePathParts = []
602
603
	        // 绝对路径
604
	        if (key.charAt(0) === '/') {
605
	            absolutePathParts = [options.context.path[0]].concat(
606
	                this.normalizePath(keyPathParts)
607
	            )
608
	        } else {
609
	            // 相对路径
610
	            if (keyPathParts.length > 1) {
611
	                absolutePathParts = options.context.path.slice(0)
612
	                absolutePathParts.pop()
613
	                absolutePathParts = this.normalizePath(
614
	                    absolutePathParts.concat(keyPathParts)
615
	                )
616
617
	            }
618
	        }
619
620
	        key = keyPathParts[keyPathParts.length - 1]
621
	        var currentContext = options.context.root
622
	        var templateCurrentContext = options.context.templateRoot
623
	        for (var i = 1; i < absolutePathParts.length - 1; i++) {
624
	            currentContext = currentContext[absolutePathParts[i]]
625
	            templateCurrentContext = templateCurrentContext[absolutePathParts[i]]
626
	        }
627
	        // 引用的值已经计算好
628
	        if (currentContext && (key in currentContext)) return currentContext[key]
629
630
	        // 尚未计算,递归引用数据模板中的属性
631
	        if (templateCurrentContext &&
632
	            (typeof templateCurrentContext === 'object') &&
633
	            (key in templateCurrentContext) &&
634
	            (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己
635
	        ) {
636
	            // 先计算被引用的属性值
637
	            templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, {
638
	                currentContext: currentContext,
639
	                templateCurrentContext: templateCurrentContext
640
	            })
641
	            return templateCurrentContext[key]
642
	        }
643
	    },
644
	    // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js
645
	    normalizePath: function(pathParts) {
646
	        var newPathParts = []
647
	        for (var i = 0; i < pathParts.length; i++) {
648
	            switch (pathParts[i]) {
649
	                case '..':
650
	                    newPathParts.pop()
651
	                    break
652
	                case '.':
653
	                    break
654
	                default:
655
	                    newPathParts.push(pathParts[i])
656
	            }
657
	        }
658
	        return newPathParts
659
	    },
660
	    splitPathToArray: function(path) {
661
	        var parts = path.split(/\/+/);
662
	        if (!parts[parts.length - 1]) parts = parts.slice(0, -1)
663
	        if (!parts[0]) parts = parts.slice(1)
664
	        return parts;
665
	    }
666
	})
667
668
	module.exports = Handler
669
670
/***/ },
671
/* 2 */
672
/***/ function(module, exports) {
673
674
	/*
675
	    ## Constant
676
677
	    常量集合。
678
	 */
679
	/*
680
	    RE_KEY
681
	        'name|min-max': value
682
	        'name|count': value
683
	        'name|min-max.dmin-dmax': value
684
	        'name|min-max.dcount': value
685
	        'name|count.dmin-dmax': value
686
	        'name|count.dcount': value
687
	        'name|+step': value
688
689
	        1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ]
690
691
	    RE_PLACEHOLDER
692
	        placeholder(*)
693
694
	    [正则查看工具](http://www.regexper.com/)
695
696
	    #26 生成规则 支持 负数,例如 number|-100-100
697
	*/
698
	module.exports = {
699
	    GUID: 1,
700
	    RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,
701
	    RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/,
702
	    RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g
703
	    // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g
704
	    // RE_INDEX: /^index$/,
705
	    // RE_KEY: /^key$/
706
	}
707
708
/***/ },
709
/* 3 */
710
/***/ function(module, exports) {
711
712
	/*
713
	    ## Utilities
714
	*/
715
	var Util = {}
716
717
	Util.extend = function extend() {
718
	    var target = arguments[0] || {},
719
	        i = 1,
720
	        length = arguments.length,
721
	        options, name, src, copy, clone
722
723
	    if (length === 1) {
724
	        target = this
725
	        i = 0
726
	    }
727
728
	    for (; i < length; i++) {
729
	        options = arguments[i]
730
	        if (!options) continue
731
732
	        for (name in options) {
733
	            src = target[name]
734
	            copy = options[name]
735
736
	            if (target === copy) continue
737
	            if (copy === undefined) continue
738
739
	            if (Util.isArray(copy) || Util.isObject(copy)) {
740
	                if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : []
741
	                if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {}
742
743
	                target[name] = Util.extend(clone, copy)
744
	            } else {
745
	                target[name] = copy
746
	            }
747
	        }
748
	    }
749
750
	    return target
751
	}
752
753
	Util.each = function each(obj, iterator, context) {
754
	    var i, key
755
	    if (this.type(obj) === 'number') {
756
	        for (i = 0; i < obj; i++) {
757
	            iterator(i, i)
758
	        }
759
	    } else if (obj.length === +obj.length) {
760
	        for (i = 0; i < obj.length; i++) {
761
	            if (iterator.call(context, obj[i], i, obj) === false) break
762
	        }
763
	    } else {
764
	        for (key in obj) {
765
	            if (iterator.call(context, obj[key], key, obj) === false) break
766
	        }
767
	    }
768
	}
769
770
	Util.type = function type(obj) {
771
	    return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase()
772
	}
773
774
	Util.each('String Object Array RegExp Function'.split(' '), function(value) {
775
	    Util['is' + value] = function(obj) {
776
	        return Util.type(obj) === value.toLowerCase()
777
	    }
778
	})
779
780
	Util.isObjectOrArray = function(value) {
781
	    return Util.isObject(value) || Util.isArray(value)
782
	}
783
784
	Util.isNumeric = function(value) {
785
	    return !isNaN(parseFloat(value)) && isFinite(value)
786
	}
787
788
	Util.keys = function(obj) {
789
	    var keys = [];
790
	    for (var key in obj) {
791
	        if (obj.hasOwnProperty(key)) keys.push(key)
792
	    }
793
	    return keys;
794
	}
795
	Util.values = function(obj) {
796
	    var values = [];
797
	    for (var key in obj) {
798
	        if (obj.hasOwnProperty(key)) values.push(obj[key])
799
	    }
800
	    return values;
801
	}
802
803
	/*
804
	    ### Mock.heredoc(fn)
805
806
	    * Mock.heredoc(fn)
807
808
	    以直观、安全的方式书写(多行)HTML 模板。
809
810
	    **使用示例**如下所示:
811
812
	        var tpl = Mock.heredoc(function() {
813
	            /*!
814
	        {{email}}{{age}}
815
	        <!-- Mock { 
816
	            email: '@EMAIL',
817
	            age: '@INT(1,100)'
818
	        } -->
819
	            *\/
820
	        })
821
	    
822
	    **相关阅读**
823
	    * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、
824
	*/
825
	Util.heredoc = function heredoc(fn) {
826
	    // 1. 移除起始的 function(){ /*!
827
	    // 2. 移除末尾的 */ }
828
	    // 3. 移除起始和末尾的空格
829
	    return fn.toString()
830
	        .replace(/^[^\/]+\/\*!?/, '')
831
	        .replace(/\*\/[^\/]+$/, '')
832
	        .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim()
833
	}
834
835
	Util.noop = function() {}
836
837
	module.exports = Util
838
839
/***/ },
840
/* 4 */
841
/***/ function(module, exports, __webpack_require__) {
842
843
	/*
844
		## Parser
845
846
		解析数据模板(属性名部分)。
847
848
		* Parser.parse( name )
849
			
850
			```json
851
			{
852
				parameters: [ name, inc, range, decimal ],
853
				rnage: [ min , max ],
854
855
				min: min,
856
				max: max,
857
				count : count,
858
859
				decimal: decimal,
860
				dmin: dmin,
861
				dmax: dmax,
862
				dcount: dcount
863
			}
864
			```
865
	 */
866
867
	var Constant = __webpack_require__(2)
868
	var Random = __webpack_require__(5)
869
870
	/* jshint -W041 */
871
	module.exports = {
872
		parse: function(name) {
873
			name = name == undefined ? '' : (name + '')
874
875
			var parameters = (name || '').match(Constant.RE_KEY)
876
877
			var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE)
878
			var min = range && range[1] && parseInt(range[1], 10) // || 1
879
			var max = range && range[2] && parseInt(range[2], 10) // || 1
880
				// repeat || min-max || 1
881
				// var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1
882
			var count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined
883
884
			var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE)
885
			var dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0,
886
			var dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0,
887
				// int || dmin-dmax || 0
888
			var dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined
889
890
			var result = {
891
				// 1 name, 2 inc, 3 range, 4 decimal
892
				parameters: parameters,
893
				// 1 min, 2 max
894
				range: range,
895
				min: min,
896
				max: max,
897
				// min-max
898
				count: count,
899
				// 是否有 decimal
900
				decimal: decimal,
901
				dmin: dmin,
902
				dmax: dmax,
903
				// dmin-dimax
904
				dcount: dcount
905
			}
906
907
			for (var r in result) {
908
				if (result[r] != undefined) return result
909
			}
910
911
			return {}
912
		}
913
	}
914
915
/***/ },
916
/* 5 */
917
/***/ function(module, exports, __webpack_require__) {
918
919
	/*
920
	    ## Mock.Random
921
	    
922
	    工具类,用于生成各种随机数据。
923
	*/
924
925
	var Util = __webpack_require__(3)
926
927
	var Random = {
928
	    extend: Util.extend
929
	}
930
931
	Random.extend(__webpack_require__(6))
932
	Random.extend(__webpack_require__(7))
933
	Random.extend(__webpack_require__(8))
934
	Random.extend(__webpack_require__(10))
935
	Random.extend(__webpack_require__(13))
936
	Random.extend(__webpack_require__(15))
937
	Random.extend(__webpack_require__(16))
938
	Random.extend(__webpack_require__(17))
939
	Random.extend(__webpack_require__(14))
940
	Random.extend(__webpack_require__(19))
941
942
	module.exports = Random
943
944
/***/ },
945
/* 6 */
946
/***/ function(module, exports) {
947
948
	/*
949
	    ## Basics
950
	*/
951
	module.exports = {
952
	    // 返回一个随机的布尔值。
953
	    boolean: function(min, max, cur) {
954
	        if (cur !== undefined) {
955
	            min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1
956
	            max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1
957
	            return Math.random() > 1.0 / (min + max) * min ? !cur : cur
958
	        }
959
960
	        return Math.random() >= 0.5
961
	    },
962
	    bool: function(min, max, cur) {
963
	        return this.boolean(min, max, cur)
964
	    },
965
	    // 返回一个随机的自然数(大于等于 0 的整数)。
966
	    natural: function(min, max) {
967
	        min = typeof min !== 'undefined' ? parseInt(min, 10) : 0
968
	        max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53
969
	        return Math.round(Math.random() * (max - min)) + min
970
	    },
971
	    // 返回一个随机的整数。
972
	    integer: function(min, max) {
973
	        min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992
974
	        max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53
975
	        return Math.round(Math.random() * (max - min)) + min
976
	    },
977
	    int: function(min, max) {
978
	        return this.integer(min, max)
979
	    },
980
	    // 返回一个随机的浮点数。
981
	    float: function(min, max, dmin, dmax) {
982
	        dmin = dmin === undefined ? 0 : dmin
983
	        dmin = Math.max(Math.min(dmin, 17), 0)
984
	        dmax = dmax === undefined ? 17 : dmax
985
	        dmax = Math.max(Math.min(dmax, 17), 0)
986
	        var ret = this.integer(min, max) + '.';
987
	        for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) {
988
	            ret += (
989
	                // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。
990
	                (i < dcount - 1) ? this.character('number') : this.character('123456789')
991
	            )
992
	        }
993
	        return parseFloat(ret, 10)
994
	    },
995
	    // 返回一个随机字符。
996
	    character: function(pool) {
997
	        var pools = {
998
	            lower: 'abcdefghijklmnopqrstuvwxyz',
999
	            upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
1000
	            number: '0123456789',
1001
	            symbol: '!@#$%^&*()[]'
1002
	        }
1003
	        pools.alpha = pools.lower + pools.upper
1004
	        pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol
1005
1006
	        pool = pools[('' + pool).toLowerCase()] || pool
1007
	        return pool.charAt(this.natural(0, pool.length - 1))
1008
	    },
1009
	    char: function(pool) {
1010
	        return this.character(pool)
1011
	    },
1012
	    // 返回一个随机字符串。
1013
	    string: function(pool, min, max) {
1014
	        var len
1015
	        switch (arguments.length) {
1016
	            case 0: // ()
1017
	                len = this.natural(3, 7)
1018
	                break
1019
	            case 1: // ( length )
1020
	                len = pool
1021
	                pool = undefined
1022
	                break
1023
	            case 2:
1024
	                // ( pool, length )
1025
	                if (typeof arguments[0] === 'string') {
1026
	                    len = min
1027
	                } else {
1028
	                    // ( min, max )
1029
	                    len = this.natural(pool, min)
1030
	                    pool = undefined
1031
	                }
1032
	                break
1033
	            case 3:
1034
	                len = this.natural(min, max)
1035
	                break
1036
	        }
1037
1038
	        var text = ''
1039
	        for (var i = 0; i < len; i++) {
1040
	            text += this.character(pool)
1041
	        }
1042
1043
	        return text
1044
	    },
1045
	    str: function( /*pool, min, max*/ ) {
1046
	        return this.string.apply(this, arguments)
1047
	    },
1048
	    // 返回一个整型数组。
1049
	    range: function(start, stop, step) {
1050
	        // range( stop )
1051
	        if (arguments.length <= 1) {
1052
	            stop = start || 0;
1053
	            start = 0;
1054
	        }
1055
	        // range( start, stop )
1056
	        step = arguments[2] || 1;
1057
1058
	        start = +start
1059
	        stop = +stop
1060
	        step = +step
1061
1062
	        var len = Math.max(Math.ceil((stop - start) / step), 0);
1063
	        var idx = 0;
1064
	        var range = new Array(len);
1065
1066
	        while (idx < len) {
1067
	            range[idx++] = start;
1068
	            start += step;
1069
	        }
1070
1071
	        return range;
1072
	    }
1073
	}
1074
1075
/***/ },
1076
/* 7 */
1077
/***/ function(module, exports) {
1078
1079
	/*
1080
	    ## Date
1081
	*/
1082
	var patternLetters = {
1083
	    yyyy: 'getFullYear',
1084
	    yy: function(date) {
1085
	        return ('' + date.getFullYear()).slice(2)
1086
	    },
1087
	    y: 'yy',
1088
1089
	    MM: function(date) {
1090
	        var m = date.getMonth() + 1
1091
	        return m < 10 ? '0' + m : m
1092
	    },
1093
	    M: function(date) {
1094
	        return date.getMonth() + 1
1095
	    },
1096
1097
	    dd: function(date) {
1098
	        var d = date.getDate()
1099
	        return d < 10 ? '0' + d : d
1100
	    },
1101
	    d: 'getDate',
1102
1103
	    HH: function(date) {
1104
	        var h = date.getHours()
1105
	        return h < 10 ? '0' + h : h
1106
	    },
1107
	    H: 'getHours',
1108
	    hh: function(date) {
1109
	        var h = date.getHours() % 12
1110
	        return h < 10 ? '0' + h : h
1111
	    },
1112
	    h: function(date) {
1113
	        return date.getHours() % 12
1114
	    },
1115
1116
	    mm: function(date) {
1117
	        var m = date.getMinutes()
1118
	        return m < 10 ? '0' + m : m
1119
	    },
1120
	    m: 'getMinutes',
1121
1122
	    ss: function(date) {
1123
	        var s = date.getSeconds()
1124
	        return s < 10 ? '0' + s : s
1125
	    },
1126
	    s: 'getSeconds',
1127
1128
	    SS: function(date) {
1129
	        var ms = date.getMilliseconds()
1130
	        return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms
1131
	    },
1132
	    S: 'getMilliseconds',
1133
1134
	    A: function(date) {
1135
	        return date.getHours() < 12 ? 'AM' : 'PM'
1136
	    },
1137
	    a: function(date) {
1138
	        return date.getHours() < 12 ? 'am' : 'pm'
1139
	    },
1140
	    T: 'getTime'
1141
	}
1142
	module.exports = {
1143
	    // 日期占位符集合。
1144
	    _patternLetters: patternLetters,
1145
	    // 日期占位符正则。
1146
	    _rformat: new RegExp((function() {
1147
	        var re = []
1148
	        for (var i in patternLetters) re.push(i)
1149
	        return '(' + re.join('|') + ')'
1150
	    })(), 'g'),
1151
	    // 格式化日期。
1152
	    _formatDate: function(date, format) {
1153
	        return format.replace(this._rformat, function creatNewSubString($0, flag) {
1154
	            return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) :
1155
	                patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) :
1156
	                date[patternLetters[flag]]()
1157
	        })
1158
	    },
1159
	    // 生成一个随机的 Date 对象。
1160
	    _randomDate: function(min, max) { // min, max
1161
	        min = min === undefined ? new Date(0) : min
1162
	        max = max === undefined ? new Date() : max
1163
	        return new Date(Math.random() * (max.getTime() - min.getTime()))
1164
	    },
1165
	    // 返回一个随机的日期字符串。
1166
	    date: function(format) {
1167
	        format = format || 'yyyy-MM-dd'
1168
	        return this._formatDate(this._randomDate(), format)
1169
	    },
1170
	    // 返回一个随机的时间字符串。
1171
	    time: function(format) {
1172
	        format = format || 'HH:mm:ss'
1173
	        return this._formatDate(this._randomDate(), format)
1174
	    },
1175
	    // 返回一个随机的日期和时间字符串。
1176
	    datetime: function(format) {
1177
	        format = format || 'yyyy-MM-dd HH:mm:ss'
1178
	        return this._formatDate(this._randomDate(), format)
1179
	    },
1180
	    // 返回当前的日期和时间字符串。
1181
	    now: function(unit, format) {
1182
	        // now(unit) now(format)
1183
	        if (arguments.length === 1) {
1184
	            // now(format)
1185
	            if (!/year|month|day|hour|minute|second|week/.test(unit)) {
1186
	                format = unit
1187
	                unit = ''
1188
	            }
1189
	        }
1190
	        unit = (unit || '').toLowerCase()
1191
	        format = format || 'yyyy-MM-dd HH:mm:ss'
1192
1193
	        var date = new Date()
1194
1195
	        /* jshint -W086 */
1196
	        // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/
1197
	        switch (unit) {
1198
	            case 'year':
1199
	                date.setMonth(0)
1200
	            case 'month':
1201
	                date.setDate(1)
1202
	            case 'week':
1203
	            case 'day':
1204
	                date.setHours(0)
1205
	            case 'hour':
1206
	                date.setMinutes(0)
1207
	            case 'minute':
1208
	                date.setSeconds(0)
1209
	            case 'second':
1210
	                date.setMilliseconds(0)
1211
	        }
1212
	        switch (unit) {
1213
	            case 'week':
1214
	                date.setDate(date.getDate() - date.getDay())
1215
	        }
1216
1217
	        return this._formatDate(date, format)
1218
	    }
1219
	}
1220
1221
/***/ },
1222
/* 8 */
1223
/***/ function(module, exports, __webpack_require__) {
1224
1225
	/* WEBPACK VAR INJECTION */(function(module) {/* global document  */
1226
	/*
1227
	    ## Image
1228
	*/
1229
	module.exports = {
1230
	    // 常见的广告宽高
1231
	    _adSize: [
1232
	        '300x250', '250x250', '240x400', '336x280', '180x150',
1233
	        '720x300', '468x60', '234x60', '88x31', '120x90',
1234
	        '120x60', '120x240', '125x125', '728x90', '160x600',
1235
	        '120x600', '300x600'
1236
	    ],
1237
	    // 常见的屏幕宽高
1238
	    _screenSize: [
1239
	        '320x200', '320x240', '640x480', '800x480', '800x480',
1240
	        '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200',
1241
	        '2560x1600'
1242
	    ],
1243
	    // 常见的视频宽高
1244
	    _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'],
1245
	    /*
1246
	        生成一个随机的图片地址。
1247
1248
	        替代图片源
1249
	            http://fpoimg.com/
1250
	        参考自 
1251
	            http://rensanning.iteye.com/blog/1933310
1252
	            http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485
1253
	    */
1254
	    image: function(size, background, foreground, format, text) {
1255
	        // Random.image( size, background, foreground, text )
1256
	        if (arguments.length === 4) {
1257
	            text = format
1258
	            format = undefined
1259
	        }
1260
	        // Random.image( size, background, text )
1261
	        if (arguments.length === 3) {
1262
	            text = foreground
1263
	            foreground = undefined
1264
	        }
1265
	        // Random.image()
1266
	        if (!size) size = this.pick(this._adSize)
1267
1268
	        if (background && ~background.indexOf('#')) background = background.slice(1)
1269
	        if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1)
1270
1271
	        // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello
1272
	        return 'http://dummyimage.com/' + size +
1273
	            (background ? '/' + background : '') +
1274
	            (foreground ? '/' + foreground : '') +
1275
	            (format ? '.' + format : '') +
1276
	            (text ? '&text=' + text : '')
1277
	    },
1278
	    img: function() {
1279
	        return this.image.apply(this, arguments)
1280
	    },
1281
1282
	    /*
1283
	        BrandColors
1284
	        http://brandcolors.net/
1285
	        A collection of major brand color codes curated by Galen Gidman.
1286
	        大牌公司的颜色集合
1287
1288
	        // 获取品牌和颜色
1289
	        $('h2').each(function(index, item){
1290
	            item = $(item)
1291
	            console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',')
1292
	        })
1293
	    */
1294
	    _brandColors: {
1295
	        '4ormat': '#fb0a2a',
1296
	        '500px': '#02adea',
1297
	        'About.me (blue)': '#00405d',
1298
	        'About.me (yellow)': '#ffcc33',
1299
	        'Addvocate': '#ff6138',
1300
	        'Adobe': '#ff0000',
1301
	        'Aim': '#fcd20b',
1302
	        'Amazon': '#e47911',
1303
	        'Android': '#a4c639',
1304
	        'Angie\'s List': '#7fbb00',
1305
	        'AOL': '#0060a3',
1306
	        'Atlassian': '#003366',
1307
	        'Behance': '#053eff',
1308
	        'Big Cartel': '#97b538',
1309
	        'bitly': '#ee6123',
1310
	        'Blogger': '#fc4f08',
1311
	        'Boeing': '#0039a6',
1312
	        'Booking.com': '#003580',
1313
	        'Carbonmade': '#613854',
1314
	        'Cheddar': '#ff7243',
1315
	        'Code School': '#3d4944',
1316
	        'Delicious': '#205cc0',
1317
	        'Dell': '#3287c1',
1318
	        'Designmoo': '#e54a4f',
1319
	        'Deviantart': '#4e6252',
1320
	        'Designer News': '#2d72da',
1321
	        'Devour': '#fd0001',
1322
	        'DEWALT': '#febd17',
1323
	        'Disqus (blue)': '#59a3fc',
1324
	        'Disqus (orange)': '#db7132',
1325
	        'Dribbble': '#ea4c89',
1326
	        'Dropbox': '#3d9ae8',
1327
	        'Drupal': '#0c76ab',
1328
	        'Dunked': '#2a323a',
1329
	        'eBay': '#89c507',
1330
	        'Ember': '#f05e1b',
1331
	        'Engadget': '#00bdf6',
1332
	        'Envato': '#528036',
1333
	        'Etsy': '#eb6d20',
1334
	        'Evernote': '#5ba525',
1335
	        'Fab.com': '#dd0017',
1336
	        'Facebook': '#3b5998',
1337
	        'Firefox': '#e66000',
1338
	        'Flickr (blue)': '#0063dc',
1339
	        'Flickr (pink)': '#ff0084',
1340
	        'Forrst': '#5b9a68',
1341
	        'Foursquare': '#25a0ca',
1342
	        'Garmin': '#007cc3',
1343
	        'GetGlue': '#2d75a2',
1344
	        'Gimmebar': '#f70078',
1345
	        'GitHub': '#171515',
1346
	        'Google Blue': '#0140ca',
1347
	        'Google Green': '#16a61e',
1348
	        'Google Red': '#dd1812',
1349
	        'Google Yellow': '#fcca03',
1350
	        'Google+': '#dd4b39',
1351
	        'Grooveshark': '#f77f00',
1352
	        'Groupon': '#82b548',
1353
	        'Hacker News': '#ff6600',
1354
	        'HelloWallet': '#0085ca',
1355
	        'Heroku (light)': '#c7c5e6',
1356
	        'Heroku (dark)': '#6567a5',
1357
	        'HootSuite': '#003366',
1358
	        'Houzz': '#73ba37',
1359
	        'HTML5': '#ec6231',
1360
	        'IKEA': '#ffcc33',
1361
	        'IMDb': '#f3ce13',
1362
	        'Instagram': '#3f729b',
1363
	        'Intel': '#0071c5',
1364
	        'Intuit': '#365ebf',
1365
	        'Kickstarter': '#76cc1e',
1366
	        'kippt': '#e03500',
1367
	        'Kodery': '#00af81',
1368
	        'LastFM': '#c3000d',
1369
	        'LinkedIn': '#0e76a8',
1370
	        'Livestream': '#cf0005',
1371
	        'Lumo': '#576396',
1372
	        'Mixpanel': '#a086d3',
1373
	        'Meetup': '#e51937',
1374
	        'Nokia': '#183693',
1375
	        'NVIDIA': '#76b900',
1376
	        'Opera': '#cc0f16',
1377
	        'Path': '#e41f11',
1378
	        'PayPal (dark)': '#1e477a',
1379
	        'PayPal (light)': '#3b7bbf',
1380
	        'Pinboard': '#0000e6',
1381
	        'Pinterest': '#c8232c',
1382
	        'PlayStation': '#665cbe',
1383
	        'Pocket': '#ee4056',
1384
	        'Prezi': '#318bff',
1385
	        'Pusha': '#0f71b4',
1386
	        'Quora': '#a82400',
1387
	        'QUOTE.fm': '#66ceff',
1388
	        'Rdio': '#008fd5',
1389
	        'Readability': '#9c0000',
1390
	        'Red Hat': '#cc0000',
1391
	        'Resource': '#7eb400',
1392
	        'Rockpack': '#0ba6ab',
1393
	        'Roon': '#62b0d9',
1394
	        'RSS': '#ee802f',
1395
	        'Salesforce': '#1798c1',
1396
	        'Samsung': '#0c4da2',
1397
	        'Shopify': '#96bf48',
1398
	        'Skype': '#00aff0',
1399
	        'Snagajob': '#f47a20',
1400
	        'Softonic': '#008ace',
1401
	        'SoundCloud': '#ff7700',
1402
	        'Space Box': '#f86960',
1403
	        'Spotify': '#81b71a',
1404
	        'Sprint': '#fee100',
1405
	        'Squarespace': '#121212',
1406
	        'StackOverflow': '#ef8236',
1407
	        'Staples': '#cc0000',
1408
	        'Status Chart': '#d7584f',
1409
	        'Stripe': '#008cdd',
1410
	        'StudyBlue': '#00afe1',
1411
	        'StumbleUpon': '#f74425',
1412
	        'T-Mobile': '#ea0a8e',
1413
	        'Technorati': '#40a800',
1414
	        'The Next Web': '#ef4423',
1415
	        'Treehouse': '#5cb868',
1416
	        'Trulia': '#5eab1f',
1417
	        'Tumblr': '#34526f',
1418
	        'Twitch.tv': '#6441a5',
1419
	        'Twitter': '#00acee',
1420
	        'TYPO3': '#ff8700',
1421
	        'Ubuntu': '#dd4814',
1422
	        'Ustream': '#3388ff',
1423
	        'Verizon': '#ef1d1d',
1424
	        'Vimeo': '#86c9ef',
1425
	        'Vine': '#00a478',
1426
	        'Virb': '#06afd8',
1427
	        'Virgin Media': '#cc0000',
1428
	        'Wooga': '#5b009c',
1429
	        'WordPress (blue)': '#21759b',
1430
	        'WordPress (orange)': '#d54e21',
1431
	        'WordPress (grey)': '#464646',
1432
	        'Wunderlist': '#2b88d9',
1433
	        'XBOX': '#9bc848',
1434
	        'XING': '#126567',
1435
	        'Yahoo!': '#720e9e',
1436
	        'Yandex': '#ffcc00',
1437
	        'Yelp': '#c41200',
1438
	        'YouTube': '#c4302b',
1439
	        'Zalongo': '#5498dc',
1440
	        'Zendesk': '#78a300',
1441
	        'Zerply': '#9dcc7a',
1442
	        'Zootool': '#5e8b1d'
1443
	    },
1444
	    _brandNames: function() {
1445
	        var brands = [];
1446
	        for (var b in this._brandColors) {
1447
	            brands.push(b)
1448
	        }
1449
	        return brands
1450
	    },
1451
	    /*
1452
	        生成一段随机的 Base64 图片编码。
1453
1454
	        https://github.com/imsky/holder
1455
	        Holder renders image placeholders entirely on the client side.
1456
1457
	        dataImageHolder: function(size) {
1458
	            return 'holder.js/' + size
1459
	        },
1460
	    */
1461
	    dataImage: function(size, text) {
1462
	        var canvas
1463
	        if (typeof document !== 'undefined') {
1464
	            canvas = document.createElement('canvas')
1465
	        } else {
1466
	            /*
1467
	                https://github.com/Automattic/node-canvas
1468
	                    npm install canvas --save
1469
	                安装问题:
1470
	                * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva
1471
	                * https://github.com/Automattic/node-canvas/issues/415
1472
	                * https://github.com/Automattic/node-canvas/wiki/_pages
1473
1474
	                PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。
1475
	             */
1476
	            var Canvas = module.require('canvas')
1477
	            canvas = new Canvas()
1478
	        }
1479
1480
	        var ctx = canvas && canvas.getContext && canvas.getContext("2d")
1481
	        if (!canvas || !ctx) return ''
1482
1483
	        if (!size) size = this.pick(this._adSize)
1484
	        text = text !== undefined ? text : size
1485
1486
	        size = size.split('x')
1487
1488
	        var width = parseInt(size[0], 10),
1489
	            height = parseInt(size[1], 10),
1490
	            background = this._brandColors[this.pick(this._brandNames())],
1491
	            foreground = '#FFF',
1492
	            text_height = 14,
1493
	            font = 'sans-serif';
1494
1495
	        canvas.width = width
1496
	        canvas.height = height
1497
	        ctx.textAlign = 'center'
1498
	        ctx.textBaseline = 'middle'
1499
	        ctx.fillStyle = background
1500
	        ctx.fillRect(0, 0, width, height)
1501
	        ctx.fillStyle = foreground
1502
	        ctx.font = 'bold ' + text_height + 'px ' + font
1503
	        ctx.fillText(text, (width / 2), (height / 2), width)
1504
	        return canvas.toDataURL('image/png')
1505
	    }
1506
	}
1507
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)(module)))
1508
1509
/***/ },
1510
/* 9 */
1511
/***/ function(module, exports) {
1512
1513
	module.exports = function(module) {
1514
		if(!module.webpackPolyfill) {
1515
			module.deprecate = function() {};
1516
			module.paths = [];
1517
			// module.parent = undefined by default
1518
			module.children = [];
1519
			module.webpackPolyfill = 1;
1520
		}
1521
		return module;
1522
	}
1523
1524
1525
/***/ },
1526
/* 10 */
1527
/***/ function(module, exports, __webpack_require__) {
1528
1529
	/*
1530
	    ## Color
1531
1532
	    http://llllll.li/randomColor/
1533
	        A color generator for JavaScript.
1534
	        randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art.
1535
1536
	    http://randomcolour.com/
1537
	        var bg_colour = Math.floor(Math.random() * 16777215).toString(16);
1538
	        bg_colour = "#" + ("000000" + bg_colour).slice(-6);
1539
	        document.bgColor = bg_colour;
1540
	    
1541
	    http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
1542
	        Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult.
1543
	        https://github.com/devongovett/color-generator
1544
1545
	    http://www.paulirish.com/2009/random-hex-color-code-snippets/
1546
	        Random Hex Color Code Generator in JavaScript
1547
1548
	    http://chancejs.com/#color
1549
	        chance.color()
1550
	        // => '#79c157'
1551
	        chance.color({format: 'hex'})
1552
	        // => '#d67118'
1553
	        chance.color({format: 'shorthex'})
1554
	        // => '#60f'
1555
	        chance.color({format: 'rgb'})
1556
	        // => 'rgb(110,52,164)'
1557
1558
	    http://tool.c7sky.com/webcolor
1559
	        网页设计常用色彩搭配表
1560
	    
1561
	    https://github.com/One-com/one-color
1562
	        An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels.
1563
	        API 很赞
1564
1565
	    https://github.com/harthur/color
1566
	        JavaScript color conversion and manipulation library
1567
1568
	    https://github.com/leaverou/css-colors
1569
	        Share & convert CSS colors
1570
	    http://leaverou.github.io/css-colors/#slategray
1571
	        Type a CSS color keyword, #hex, hsl(), rgba(), whatever:
1572
1573
	    色调 hue
1574
	        http://baike.baidu.com/view/23368.htm
1575
	        色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。
1576
	    饱和度 saturation
1577
	        http://baike.baidu.com/view/189644.htm
1578
	        饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。
1579
	    亮度 brightness
1580
	        http://baike.baidu.com/view/34773.htm
1581
	        亮度是指发光体(反光体)表面发光(反光)强弱的物理量。
1582
	    照度 luminosity
1583
	        物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。
1584
1585
	    http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript
1586
	        var letters = '0123456789ABCDEF'.split('')
1587
	        var color = '#'
1588
	        for (var i = 0; i < 6; i++) {
1589
	            color += letters[Math.floor(Math.random() * 16)]
1590
	        }
1591
	        return color
1592
	    
1593
	        // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。
1594
	        // _brainlessColor()
1595
	        var color = Math.floor(
1596
	            Math.random() *
1597
	            (16 * 16 * 16 * 16 * 16 * 16 - 1)
1598
	        ).toString(16)
1599
	        color = "#" + ("000000" + color).slice(-6)
1600
	        return color.toUpperCase()
1601
	*/
1602
1603
	var Convert = __webpack_require__(11)
1604
	var DICT = __webpack_require__(12)
1605
1606
	module.exports = {
1607
	    // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。
1608
	    color: function(name) {
1609
	        if (name || DICT[name]) return DICT[name].nicer
1610
	        return this.hex()
1611
	    },
1612
	    // #DAC0DE
1613
	    hex: function() {
1614
	        var hsv = this._goldenRatioColor()
1615
	        var rgb = Convert.hsv2rgb(hsv)
1616
	        var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2])
1617
	        return hex
1618
	    },
1619
	    // rgb(128,255,255)
1620
	    rgb: function() {
1621
	        var hsv = this._goldenRatioColor()
1622
	        var rgb = Convert.hsv2rgb(hsv)
1623
	        return 'rgb(' +
1624
	            parseInt(rgb[0], 10) + ', ' +
1625
	            parseInt(rgb[1], 10) + ', ' +
1626
	            parseInt(rgb[2], 10) + ')'
1627
	    },
1628
	    // rgba(128,255,255,0.3)
1629
	    rgba: function() {
1630
	        var hsv = this._goldenRatioColor()
1631
	        var rgb = Convert.hsv2rgb(hsv)
1632
	        return 'rgba(' +
1633
	            parseInt(rgb[0], 10) + ', ' +
1634
	            parseInt(rgb[1], 10) + ', ' +
1635
	            parseInt(rgb[2], 10) + ', ' +
1636
	            Math.random().toFixed(2) + ')'
1637
	    },
1638
	    // hsl(300,80%,90%)
1639
	    hsl: function() {
1640
	        var hsv = this._goldenRatioColor()
1641
	        var hsl = Convert.hsv2hsl(hsv)
1642
	        return 'hsl(' +
1643
	            parseInt(hsl[0], 10) + ', ' +
1644
	            parseInt(hsl[1], 10) + ', ' +
1645
	            parseInt(hsl[2], 10) + ')'
1646
	    },
1647
	    // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
1648
	    // https://github.com/devongovett/color-generator/blob/master/index.js
1649
	    // 随机生成一个有吸引力的颜色。
1650
	    _goldenRatioColor: function(saturation, value) {
1651
	        this._goldenRatio = 0.618033988749895
1652
	        this._hue = this._hue || Math.random()
1653
	        this._hue += this._goldenRatio
1654
	        this._hue %= 1
1655
1656
	        if (typeof saturation !== "number") saturation = 0.5;
1657
	        if (typeof value !== "number") value = 0.95;
1658
1659
	        return [
1660
	            this._hue * 360,
1661
	            saturation * 100,
1662
	            value * 100
1663
	        ]
1664
	    }
1665
	}
1666
1667
/***/ },
1668
/* 11 */
1669
/***/ function(module, exports) {
1670
1671
	/*
1672
	    ## Color Convert
1673
1674
	    http://blog.csdn.net/idfaya/article/details/6770414
1675
	        颜色空间RGB与HSV(HSL)的转换
1676
	*/
1677
	// https://github.com/harthur/color-convert/blob/master/conversions.js
1678
	module.exports = {
1679
		rgb2hsl: function rgb2hsl(rgb) {
1680
			var r = rgb[0] / 255,
1681
				g = rgb[1] / 255,
1682
				b = rgb[2] / 255,
1683
				min = Math.min(r, g, b),
1684
				max = Math.max(r, g, b),
1685
				delta = max - min,
1686
				h, s, l;
1687
1688
			if (max == min)
1689
				h = 0;
1690
			else if (r == max)
1691
				h = (g - b) / delta;
1692
			else if (g == max)
1693
				h = 2 + (b - r) / delta;
1694
			else if (b == max)
1695
				h = 4 + (r - g) / delta;
1696
1697
			h = Math.min(h * 60, 360);
1698
1699
			if (h < 0)
1700
				h += 360;
1701
1702
			l = (min + max) / 2;
1703
1704
			if (max == min)
1705
				s = 0;
1706
			else if (l <= 0.5)
1707
				s = delta / (max + min);
1708
			else
1709
				s = delta / (2 - max - min);
1710
1711
			return [h, s * 100, l * 100];
1712
		},
1713
		rgb2hsv: function rgb2hsv(rgb) {
1714
			var r = rgb[0],
1715
				g = rgb[1],
1716
				b = rgb[2],
1717
				min = Math.min(r, g, b),
1718
				max = Math.max(r, g, b),
1719
				delta = max - min,
1720
				h, s, v;
1721
1722
			if (max === 0)
1723
				s = 0;
1724
			else
1725
				s = (delta / max * 1000) / 10;
1726
1727
			if (max == min)
1728
				h = 0;
1729
			else if (r == max)
1730
				h = (g - b) / delta;
1731
			else if (g == max)
1732
				h = 2 + (b - r) / delta;
1733
			else if (b == max)
1734
				h = 4 + (r - g) / delta;
1735
1736
			h = Math.min(h * 60, 360);
1737
1738
			if (h < 0)
1739
				h += 360;
1740
1741
			v = ((max / 255) * 1000) / 10;
1742
1743
			return [h, s, v];
1744
		},
1745
		hsl2rgb: function hsl2rgb(hsl) {
1746
			var h = hsl[0] / 360,
1747
				s = hsl[1] / 100,
1748
				l = hsl[2] / 100,
1749
				t1, t2, t3, rgb, val;
1750
1751
			if (s === 0) {
1752
				val = l * 255;
1753
				return [val, val, val];
1754
			}
1755
1756
			if (l < 0.5)
1757
				t2 = l * (1 + s);
1758
			else
1759
				t2 = l + s - l * s;
1760
			t1 = 2 * l - t2;
1761
1762
			rgb = [0, 0, 0];
1763
			for (var i = 0; i < 3; i++) {
1764
				t3 = h + 1 / 3 * -(i - 1);
1765
				if (t3 < 0) t3++;
1766
				if (t3 > 1) t3--;
1767
1768
				if (6 * t3 < 1)
1769
					val = t1 + (t2 - t1) * 6 * t3;
1770
				else if (2 * t3 < 1)
1771
					val = t2;
1772
				else if (3 * t3 < 2)
1773
					val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
1774
				else
1775
					val = t1;
1776
1777
				rgb[i] = val * 255;
1778
			}
1779
1780
			return rgb;
1781
		},
1782
		hsl2hsv: function hsl2hsv(hsl) {
1783
			var h = hsl[0],
1784
				s = hsl[1] / 100,
1785
				l = hsl[2] / 100,
1786
				sv, v;
1787
			l *= 2;
1788
			s *= (l <= 1) ? l : 2 - l;
1789
			v = (l + s) / 2;
1790
			sv = (2 * s) / (l + s);
1791
			return [h, sv * 100, v * 100];
1792
		},
1793
		hsv2rgb: function hsv2rgb(hsv) {
1794
			var h = hsv[0] / 60
1795
			var s = hsv[1] / 100
1796
			var v = hsv[2] / 100
1797
			var hi = Math.floor(h) % 6
1798
1799
			var f = h - Math.floor(h)
1800
			var p = 255 * v * (1 - s)
1801
			var q = 255 * v * (1 - (s * f))
1802
			var t = 255 * v * (1 - (s * (1 - f)))
1803
1804
			v = 255 * v
1805
1806
			switch (hi) {
1807
				case 0:
1808
					return [v, t, p]
1809
				case 1:
1810
					return [q, v, p]
1811
				case 2:
1812
					return [p, v, t]
1813
				case 3:
1814
					return [p, q, v]
1815
				case 4:
1816
					return [t, p, v]
1817
				case 5:
1818
					return [v, p, q]
1819
			}
1820
		},
1821
		hsv2hsl: function hsv2hsl(hsv) {
1822
			var h = hsv[0],
1823
				s = hsv[1] / 100,
1824
				v = hsv[2] / 100,
1825
				sl, l;
1826
1827
			l = (2 - s) * v;
1828
			sl = s * v;
1829
			sl /= (l <= 1) ? l : 2 - l;
1830
			l /= 2;
1831
			return [h, sl * 100, l * 100];
1832
		},
1833
		// http://www.140byt.es/keywords/color
1834
		rgb2hex: function(
1835
			a, // red, as a number from 0 to 255
1836
			b, // green, as a number from 0 to 255
1837
			c // blue, as a number from 0 to 255
1838
		) {
1839
			return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1)
1840
		},
1841
		hex2rgb: function(
1842
			a // take a "#xxxxxx" hex string,
1843
		) {
1844
			a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0;
1845
			return [a >> 16, a >> 8 & 255, a & 255]
1846
		}
1847
	}
1848
1849
/***/ },
1850
/* 12 */
1851
/***/ function(module, exports) {
1852
1853
	/*
1854
	    ## Color 字典数据
1855
1856
	    字典数据来源 [A nicer color palette for the web](http://clrs.cc/)
1857
	*/
1858
	module.exports = {
1859
	    // name value nicer
1860
	    navy: {
1861
	        value: '#000080',
1862
	        nicer: '#001F3F'
1863
	    },
1864
	    blue: {
1865
	        value: '#0000ff',
1866
	        nicer: '#0074D9'
1867
	    },
1868
	    aqua: {
1869
	        value: '#00ffff',
1870
	        nicer: '#7FDBFF'
1871
	    },
1872
	    teal: {
1873
	        value: '#008080',
1874
	        nicer: '#39CCCC'
1875
	    },
1876
	    olive: {
1877
	        value: '#008000',
1878
	        nicer: '#3D9970'
1879
	    },
1880
	    green: {
1881
	        value: '#008000',
1882
	        nicer: '#2ECC40'
1883
	    },
1884
	    lime: {
1885
	        value: '#00ff00',
1886
	        nicer: '#01FF70'
1887
	    },
1888
	    yellow: {
1889
	        value: '#ffff00',
1890
	        nicer: '#FFDC00'
1891
	    },
1892
	    orange: {
1893
	        value: '#ffa500',
1894
	        nicer: '#FF851B'
1895
	    },
1896
	    red: {
1897
	        value: '#ff0000',
1898
	        nicer: '#FF4136'
1899
	    },
1900
	    maroon: {
1901
	        value: '#800000',
1902
	        nicer: '#85144B'
1903
	    },
1904
	    fuchsia: {
1905
	        value: '#ff00ff',
1906
	        nicer: '#F012BE'
1907
	    },
1908
	    purple: {
1909
	        value: '#800080',
1910
	        nicer: '#B10DC9'
1911
	    },
1912
	    silver: {
1913
	        value: '#c0c0c0',
1914
	        nicer: '#DDDDDD'
1915
	    },
1916
	    gray: {
1917
	        value: '#808080',
1918
	        nicer: '#AAAAAA'
1919
	    },
1920
	    black: {
1921
	        value: '#000000',
1922
	        nicer: '#111111'
1923
	    },
1924
	    white: {
1925
	        value: '#FFFFFF',
1926
	        nicer: '#FFFFFF'
1927
	    }
1928
	}
1929
1930
/***/ },
1931
/* 13 */
1932
/***/ function(module, exports, __webpack_require__) {
1933
1934
	/*
1935
	    ## Text
1936
1937
	    http://www.lipsum.com/
1938
	*/
1939
	var Basic = __webpack_require__(6)
1940
	var Helper = __webpack_require__(14)
1941
1942
	function range(defaultMin, defaultMax, min, max) {
1943
	    return min === undefined ? Basic.natural(defaultMin, defaultMax) : // ()
1944
	        max === undefined ? min : // ( len )
1945
	        Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max )
1946
	}
1947
1948
	module.exports = {
1949
	    // 随机生成一段文本。
1950
	    paragraph: function(min, max) {
1951
	        var len = range(3, 7, min, max)
1952
	        var result = []
1953
	        for (var i = 0; i < len; i++) {
1954
	            result.push(this.sentence())
1955
	        }
1956
	        return result.join(' ')
1957
	    },
1958
	    // 
1959
	    cparagraph: function(min, max) {
1960
	        var len = range(3, 7, min, max)
1961
	        var result = []
1962
	        for (var i = 0; i < len; i++) {
1963
	            result.push(this.csentence())
1964
	        }
1965
	        return result.join('')
1966
	    },
1967
	    // 随机生成一个句子,第一个单词的首字母大写。
1968
	    sentence: function(min, max) {
1969
	        var len = range(12, 18, min, max)
1970
	        var result = []
1971
	        for (var i = 0; i < len; i++) {
1972
	            result.push(this.word())
1973
	        }
1974
	        return Helper.capitalize(result.join(' ')) + '.'
1975
	    },
1976
	    // 随机生成一个中文句子。
1977
	    csentence: function(min, max) {
1978
	        var len = range(12, 18, min, max)
1979
	        var result = []
1980
	        for (var i = 0; i < len; i++) {
1981
	            result.push(this.cword())
1982
	        }
1983
1984
	        return result.join('') + '。'
1985
	    },
1986
	    // 随机生成一个单词。
1987
	    word: function(min, max) {
1988
	        var len = range(3, 10, min, max)
1989
	        var result = '';
1990
	        for (var i = 0; i < len; i++) {
1991
	            result += Basic.character('lower')
1992
	        }
1993
	        return result
1994
	    },
1995
	    // 随机生成一个或多个汉字。
1996
	    cword: function(pool, min, max) {
1997
	        // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm
1998
	        var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'
1999
2000
	        var len
2001
	        switch (arguments.length) {
2002
	            case 0: // ()
2003
	                pool = DICT_KANZI
2004
	                len = 1
2005
	                break
2006
	            case 1: // ( pool )
2007
	                if (typeof arguments[0] === 'string') {
2008
	                    len = 1
2009
	                } else {
2010
	                    // ( length )
2011
	                    len = pool
2012
	                    pool = DICT_KANZI
2013
	                }
2014
	                break
2015
	            case 2:
2016
	                // ( pool, length )
2017
	                if (typeof arguments[0] === 'string') {
2018
	                    len = min
2019
	                } else {
2020
	                    // ( min, max )
2021
	                    len = this.natural(pool, min)
2022
	                    pool = DICT_KANZI
2023
	                }
2024
	                break
2025
	            case 3:
2026
	                len = this.natural(min, max)
2027
	                break
2028
	        }
2029
2030
	        var result = ''
2031
	        for (var i = 0; i < len; i++) {
2032
	            result += pool.charAt(this.natural(0, pool.length - 1))
2033
	        }
2034
	        return result
2035
	    },
2036
	    // 随机生成一句标题,其中每个单词的首字母大写。
2037
	    title: function(min, max) {
2038
	        var len = range(3, 7, min, max)
2039
	        var result = []
2040
	        for (var i = 0; i < len; i++) {
2041
	            result.push(this.capitalize(this.word()))
2042
	        }
2043
	        return result.join(' ')
2044
	    },
2045
	    // 随机生成一句中文标题。
2046
	    ctitle: function(min, max) {
2047
	        var len = range(3, 7, min, max)
2048
	        var result = []
2049
	        for (var i = 0; i < len; i++) {
2050
	            result.push(this.cword())
2051
	        }
2052
	        return result.join('')
2053
	    }
2054
	}
2055
2056
/***/ },
2057
/* 14 */
2058
/***/ function(module, exports, __webpack_require__) {
2059
2060
	/*
2061
	    ## Helpers
2062
	*/
2063
2064
	var Util = __webpack_require__(3)
2065
2066
	module.exports = {
2067
		// 把字符串的第一个字母转换为大写。
2068
		capitalize: function(word) {
2069
			return (word + '').charAt(0).toUpperCase() + (word + '').substr(1)
2070
		},
2071
		// 把字符串转换为大写。
2072
		upper: function(str) {
2073
			return (str + '').toUpperCase()
2074
		},
2075
		// 把字符串转换为小写。
2076
		lower: function(str) {
2077
			return (str + '').toLowerCase()
2078
		},
2079
		// 从数组中随机选取一个元素,并返回。
2080
		pick: function pick(arr, min, max) {
2081
			// pick( item1, item2 ... )
2082
			if (!Util.isArray(arr)) {
2083
				arr = [].slice.call(arguments)
2084
				min = 1
2085
				max = 1
2086
			} else {
2087
				// pick( [ item1, item2 ... ] )
2088
				if (min === undefined) min = 1
2089
2090
				// pick( [ item1, item2 ... ], count )
2091
				if (max === undefined) max = min
2092
			}
2093
2094
			if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]
2095
2096
			// pick( [ item1, item2 ... ], min, max )
2097
			return this.shuffle(arr, min, max)
2098
2099
			// 通过参数个数判断方法签名,扩展性太差!#90
2100
			// switch (arguments.length) {
2101
			// 	case 1:
2102
			// 		// pick( [ item1, item2 ... ] )
2103
			// 		return arr[this.natural(0, arr.length - 1)]
2104
			// 	case 2:
2105
			// 		// pick( [ item1, item2 ... ], count )
2106
			// 		max = min
2107
			// 			/* falls through */
2108
			// 	case 3:
2109
			// 		// pick( [ item1, item2 ... ], min, max )
2110
			// 		return this.shuffle(arr, min, max)
2111
			// }
2112
		},
2113
		/*
2114
		    打乱数组中元素的顺序,并返回。
2115
		    Given an array, scramble the order and return it.
2116
2117
		    其他的实现思路:
2118
		        // https://code.google.com/p/jslibs/wiki/JavascriptTips
2119
		        result = result.sort(function() {
2120
		            return Math.random() - 0.5
2121
		        })
2122
		*/
2123
		shuffle: function shuffle(arr, min, max) {
2124
			arr = arr || []
2125
			var old = arr.slice(0),
2126
				result = [],
2127
				index = 0,
2128
				length = old.length;
2129
			for (var i = 0; i < length; i++) {
2130
				index = this.natural(0, old.length - 1)
2131
				result.push(old[index])
2132
				old.splice(index, 1)
2133
			}
2134
			switch (arguments.length) {
2135
				case 0:
2136
				case 1:
2137
					return result
2138
				case 2:
2139
					max = min
2140
						/* falls through */
2141
				case 3:
2142
					min = parseInt(min, 10)
2143
					max = parseInt(max, 10)
2144
					return result.slice(0, this.natural(min, max))
2145
			}
2146
		},
2147
		/*
2148
		    * Random.order(item, item)
2149
		    * Random.order([item, item ...])
2150
2151
		    顺序获取数组中的元素
2152
2153
		    [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22)
2154
2155
		    不支持单独调用!
2156
		*/
2157
		order: function order(array) {
2158
			order.cache = order.cache || {}
2159
2160
			if (arguments.length > 1) array = [].slice.call(arguments, 0)
2161
2162
			// options.context.path/templatePath
2163
			var options = order.options
2164
			var templatePath = options.context.templatePath.join('.')
2165
2166
			var cache = (
2167
				order.cache[templatePath] = order.cache[templatePath] || {
2168
					index: 0,
2169
					array: array
2170
				}
2171
			)
2172
2173
			return cache.array[cache.index++ % cache.array.length]
2174
		}
2175
	}
2176
2177
/***/ },
2178
/* 15 */
2179
/***/ function(module, exports) {
2180
2181
	/*
2182
	    ## Name
2183
2184
	    [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html)
2185
	*/
2186
	module.exports = {
2187
		// 随机生成一个常见的英文名。
2188
		first: function() {
2189
			var names = [
2190
				// male
2191
				"James", "John", "Robert", "Michael", "William",
2192
				"David", "Richard", "Charles", "Joseph", "Thomas",
2193
				"Christopher", "Daniel", "Paul", "Mark", "Donald",
2194
				"George", "Kenneth", "Steven", "Edward", "Brian",
2195
				"Ronald", "Anthony", "Kevin", "Jason", "Matthew",
2196
				"Gary", "Timothy", "Jose", "Larry", "Jeffrey",
2197
				"Frank", "Scott", "Eric"
2198
			].concat([
2199
				// female
2200
				"Mary", "Patricia", "Linda", "Barbara", "Elizabeth",
2201
				"Jennifer", "Maria", "Susan", "Margaret", "Dorothy",
2202
				"Lisa", "Nancy", "Karen", "Betty", "Helen",
2203
				"Sandra", "Donna", "Carol", "Ruth", "Sharon",
2204
				"Michelle", "Laura", "Sarah", "Kimberly", "Deborah",
2205
				"Jessica", "Shirley", "Cynthia", "Angela", "Melissa",
2206
				"Brenda", "Amy", "Anna"
2207
			])
2208
			return this.pick(names)
2209
				// or this.capitalize(this.word())
2210
		},
2211
		// 随机生成一个常见的英文姓。
2212
		last: function() {
2213
			var names = [
2214
				"Smith", "Johnson", "Williams", "Brown", "Jones",
2215
				"Miller", "Davis", "Garcia", "Rodriguez", "Wilson",
2216
				"Martinez", "Anderson", "Taylor", "Thomas", "Hernandez",
2217
				"Moore", "Martin", "Jackson", "Thompson", "White",
2218
				"Lopez", "Lee", "Gonzalez", "Harris", "Clark",
2219
				"Lewis", "Robinson", "Walker", "Perez", "Hall",
2220
				"Young", "Allen"
2221
			]
2222
			return this.pick(names)
2223
				// or this.capitalize(this.word())
2224
		},
2225
		// 随机生成一个常见的英文姓名。
2226
		name: function(middle) {
2227
			return this.first() + ' ' +
2228
				(middle ? this.first() + ' ' : '') +
2229
				this.last()
2230
		},
2231
		/*
2232
		    随机生成一个常见的中文姓。
2233
		    [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm)
2234
		    [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/)
2235
		 */
2236
		cfirst: function() {
2237
			var names = (
2238
				'王 李 张 刘 陈 杨 赵 黄 周 吴 ' +
2239
				'徐 孙 胡 朱 高 林 何 郭 马 罗 ' +
2240
				'梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' +
2241
				'程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' +
2242
				'苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' +
2243
				'余 潘 杜 戴 夏 锺 汪 田 任 姜 ' +
2244
				'范 方 石 姚 谭 廖 邹 熊 金 陆 ' +
2245
				'郝 孔 白 崔 康 毛 邱 秦 江 史 ' +
2246
				'顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' +
2247
				'尹 黎 易 常 武 乔 贺 赖 龚 文'
2248
			).split(' ')
2249
			return this.pick(names)
2250
		},
2251
		/*
2252
		    随机生成一个常见的中文名。
2253
		    [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html)
2254
		 */
2255
		clast: function() {
2256
			var names = (
2257
				'伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' +
2258
				'洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' +
2259
				'平 刚 桂英'
2260
			).split(' ')
2261
			return this.pick(names)
2262
		},
2263
		// 随机生成一个常见的中文姓名。
2264
		cname: function() {
2265
			return this.cfirst() + this.clast()
2266
		}
2267
	}
2268
2269
/***/ },
2270
/* 16 */
2271
/***/ function(module, exports) {
2272
2273
	/*
2274
	    ## Web
2275
	*/
2276
	module.exports = {
2277
	    /*
2278
	        随机生成一个 URL。
2279
2280
	        [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt)
2281
	            http                    Hypertext Transfer Protocol 
2282
	            ftp                     File Transfer protocol 
2283
	            gopher                  The Gopher protocol 
2284
	            mailto                  Electronic mail address 
2285
	            mid                     Message identifiers for electronic mail 
2286
	            cid                     Content identifiers for MIME body part 
2287
	            news                    Usenet news 
2288
	            nntp                    Usenet news for local NNTP access only 
2289
	            prospero                Access using the prospero protocols 
2290
	            telnet rlogin tn3270    Reference to interactive sessions
2291
	            wais                    Wide Area Information Servers 
2292
	    */
2293
	    url: function(protocol, host) {
2294
	        return (protocol || this.protocol()) + '://' + // protocol?
2295
	            (host || this.domain()) + // host?
2296
	            '/' + this.word()
2297
	    },
2298
	    // 随机生成一个 URL 协议。
2299
	    protocol: function() {
2300
	        return this.pick(
2301
	            // 协议簇
2302
	            'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ')
2303
	        )
2304
	    },
2305
	    // 随机生成一个域名。
2306
	    domain: function(tld) {
2307
	        return this.word() + '.' + (tld || this.tld())
2308
	    },
2309
	    /*
2310
	        随机生成一个顶级域名。
2311
	        国际顶级域名 international top-level domain-names, iTLDs
2312
	        国家顶级域名 national top-level domainnames, nTLDs
2313
	        [域名后缀大全](http://www.163ns.com/zixun/post/4417.html)
2314
	    */
2315
	    tld: function() { // Top Level Domain
2316
	        return this.pick(
2317
	            (
2318
	                // 域名后缀
2319
	                'com net org edu gov int mil cn ' +
2320
	                // 国内域名
2321
	                'com.cn net.cn gov.cn org.cn ' +
2322
	                // 中文国内域名
2323
	                '中国 中国互联.公司 中国互联.网络 ' +
2324
	                // 新国际域名
2325
	                'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' +
2326
	                // 世界各国域名后缀
2327
	                'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw'
2328
	            ).split(' ')
2329
	        )
2330
	    },
2331
	    // 随机生成一个邮件地址。
2332
	    email: function(domain) {
2333
	        return this.character('lower') + '.' + this.word() + '@' +
2334
	            (
2335
	                domain ||
2336
	                (this.word() + '.' + this.tld())
2337
	            )
2338
	            // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld()
2339
	            // return this.word() + '@' + (domain || this.domain())
2340
	    },
2341
	    // 随机生成一个 IP 地址。
2342
	    ip: function() {
2343
	        return this.natural(0, 255) + '.' +
2344
	            this.natural(0, 255) + '.' +
2345
	            this.natural(0, 255) + '.' +
2346
	            this.natural(0, 255)
2347
	    }
2348
	}
2349
2350
/***/ },
2351
/* 17 */
2352
/***/ function(module, exports, __webpack_require__) {
2353
2354
	/*
2355
	    ## Address
2356
	*/
2357
2358
	var DICT = __webpack_require__(18)
2359
	var REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']
2360
2361
	module.exports = {
2362
	    // 随机生成一个大区。
2363
	    region: function() {
2364
	        return this.pick(REGION)
2365
	    },
2366
	    // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。
2367
	    province: function() {
2368
	        return this.pick(DICT).name
2369
	    },
2370
	    // 随机生成一个(中国)市。
2371
	    city: function(prefix) {
2372
	        var province = this.pick(DICT)
2373
	        var city = this.pick(province.children)
2374
	        return prefix ? [province.name, city.name].join(' ') : city.name
2375
	    },
2376
	    // 随机生成一个(中国)县。
2377
	    county: function(prefix) {
2378
	        var province = this.pick(DICT)
2379
	        var city = this.pick(province.children)
2380
	        var county = this.pick(city.children) || {
2381
	            name: '-'
2382
	        }
2383
	        return prefix ? [province.name, city.name, county.name].join(' ') : county.name
2384
	    },
2385
	    // 随机生成一个邮政编码(六位数字)。
2386
	    zip: function(len) {
2387
	        var zip = ''
2388
	        for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9)
2389
	        return zip
2390
	    }
2391
2392
	    // address: function() {},
2393
	    // phone: function() {},
2394
	    // areacode: function() {},
2395
	    // street: function() {},
2396
	    // street_suffixes: function() {},
2397
	    // street_suffix: function() {},
2398
	    // states: function() {},
2399
	    // state: function() {},
2400
	}
2401
2402
/***/ },
2403
/* 18 */
2404
/***/ function(module, exports) {
2405
2406
	/*
2407
	    ## Address 字典数据
2408
2409
	    字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856
2410
2411
	    国标 省(市)级行政区划码表
2412
2413
	    华北   北京市 天津市 河北省 山西省 内蒙古自治区
2414
	    东北   辽宁省 吉林省 黑龙江省
2415
	    华东   上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省
2416
	    华南   广东省 广西壮族自治区 海南省
2417
	    华中   河南省 湖北省 湖南省
2418
	    西南   重庆市 四川省 贵州省 云南省 西藏自治区
2419
	    西北   陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区
2420
	    港澳台 香港特别行政区 澳门特别行政区 台湾省
2421
	    
2422
	    **排序**
2423
	    
2424
	    ```js
2425
	    var map = {}
2426
	    _.each(_.keys(REGIONS),function(id){
2427
	      map[id] = REGIONS[ID]
2428
	    })
2429
	    JSON.stringify(map)
2430
	    ```
2431
	*/
2432
	var DICT = {
2433
	    "110000": "北京",
2434
	    "110100": "北京市",
2435
	    "110101": "东城区",
2436
	    "110102": "西城区",
2437
	    "110105": "朝阳区",
2438
	    "110106": "丰台区",
2439
	    "110107": "石景山区",
2440
	    "110108": "海淀区",
2441
	    "110109": "门头沟区",
2442
	    "110111": "房山区",
2443
	    "110112": "通州区",
2444
	    "110113": "顺义区",
2445
	    "110114": "昌平区",
2446
	    "110115": "大兴区",
2447
	    "110116": "怀柔区",
2448
	    "110117": "平谷区",
2449
	    "110228": "密云县",
2450
	    "110229": "延庆县",
2451
	    "110230": "其它区",
2452
	    "120000": "天津",
2453
	    "120100": "天津市",
2454
	    "120101": "和平区",
2455
	    "120102": "河东区",
2456
	    "120103": "河西区",
2457
	    "120104": "南开区",
2458
	    "120105": "河北区",
2459
	    "120106": "红桥区",
2460
	    "120110": "东丽区",
2461
	    "120111": "西青区",
2462
	    "120112": "津南区",
2463
	    "120113": "北辰区",
2464
	    "120114": "武清区",
2465
	    "120115": "宝坻区",
2466
	    "120116": "滨海新区",
2467
	    "120221": "宁河县",
2468
	    "120223": "静海县",
2469
	    "120225": "蓟县",
2470
	    "120226": "其它区",
2471
	    "130000": "河北省",
2472
	    "130100": "石家庄市",
2473
	    "130102": "长安区",
2474
	    "130103": "桥东区",
2475
	    "130104": "桥西区",
2476
	    "130105": "新华区",
2477
	    "130107": "井陉矿区",
2478
	    "130108": "裕华区",
2479
	    "130121": "井陉县",
2480
	    "130123": "正定县",
2481
	    "130124": "栾城县",
2482
	    "130125": "行唐县",
2483
	    "130126": "灵寿县",
2484
	    "130127": "高邑县",
2485
	    "130128": "深泽县",
2486
	    "130129": "赞皇县",
2487
	    "130130": "无极县",
2488
	    "130131": "平山县",
2489
	    "130132": "元氏县",
2490
	    "130133": "赵县",
2491
	    "130181": "辛集市",
2492
	    "130182": "藁城市",
2493
	    "130183": "晋州市",
2494
	    "130184": "新乐市",
2495
	    "130185": "鹿泉市",
2496
	    "130186": "其它区",
2497
	    "130200": "唐山市",
2498
	    "130202": "路南区",
2499
	    "130203": "路北区",
2500
	    "130204": "古冶区",
2501
	    "130205": "开平区",
2502
	    "130207": "丰南区",
2503
	    "130208": "丰润区",
2504
	    "130223": "滦县",
2505
	    "130224": "滦南县",
2506
	    "130225": "乐亭县",
2507
	    "130227": "迁西县",
2508
	    "130229": "玉田县",
2509
	    "130230": "曹妃甸区",
2510
	    "130281": "遵化市",
2511
	    "130283": "迁安市",
2512
	    "130284": "其它区",
2513
	    "130300": "秦皇岛市",
2514
	    "130302": "海港区",
2515
	    "130303": "山海关区",
2516
	    "130304": "北戴河区",
2517
	    "130321": "青龙满族自治县",
2518
	    "130322": "昌黎县",
2519
	    "130323": "抚宁县",
2520
	    "130324": "卢龙县",
2521
	    "130398": "其它区",
2522
	    "130400": "邯郸市",
2523
	    "130402": "邯山区",
2524
	    "130403": "丛台区",
2525
	    "130404": "复兴区",
2526
	    "130406": "峰峰矿区",
2527
	    "130421": "邯郸县",
2528
	    "130423": "临漳县",
2529
	    "130424": "成安县",
2530
	    "130425": "大名县",
2531
	    "130426": "涉县",
2532
	    "130427": "磁县",
2533
	    "130428": "肥乡县",
2534
	    "130429": "永年县",
2535
	    "130430": "邱县",
2536
	    "130431": "鸡泽县",
2537
	    "130432": "广平县",
2538
	    "130433": "馆陶县",
2539
	    "130434": "魏县",
2540
	    "130435": "曲周县",
2541
	    "130481": "武安市",
2542
	    "130482": "其它区",
2543
	    "130500": "邢台市",
2544
	    "130502": "桥东区",
2545
	    "130503": "桥西区",
2546
	    "130521": "邢台县",
2547
	    "130522": "临城县",
2548
	    "130523": "内丘县",
2549
	    "130524": "柏乡县",
2550
	    "130525": "隆尧县",
2551
	    "130526": "任县",
2552
	    "130527": "南和县",
2553
	    "130528": "宁晋县",
2554
	    "130529": "巨鹿县",
2555
	    "130530": "新河县",
2556
	    "130531": "广宗县",
2557
	    "130532": "平乡县",
2558
	    "130533": "威县",
2559
	    "130534": "清河县",
2560
	    "130535": "临西县",
2561
	    "130581": "南宫市",
2562
	    "130582": "沙河市",
2563
	    "130583": "其它区",
2564
	    "130600": "保定市",
2565
	    "130602": "新市区",
2566
	    "130603": "北市区",
2567
	    "130604": "南市区",
2568
	    "130621": "满城县",
2569
	    "130622": "清苑县",
2570
	    "130623": "涞水县",
2571
	    "130624": "阜平县",
2572
	    "130625": "徐水县",
2573
	    "130626": "定兴县",
2574
	    "130627": "唐县",
2575
	    "130628": "高阳县",
2576
	    "130629": "容城县",
2577
	    "130630": "涞源县",
2578
	    "130631": "望都县",
2579
	    "130632": "安新县",
2580
	    "130633": "易县",
2581
	    "130634": "曲阳县",
2582
	    "130635": "蠡县",
2583
	    "130636": "顺平县",
2584
	    "130637": "博野县",
2585
	    "130638": "雄县",
2586
	    "130681": "涿州市",
2587
	    "130682": "定州市",
2588
	    "130683": "安国市",
2589
	    "130684": "高碑店市",
2590
	    "130699": "其它区",
2591
	    "130700": "张家口市",
2592
	    "130702": "桥东区",
2593
	    "130703": "桥西区",
2594
	    "130705": "宣化区",
2595
	    "130706": "下花园区",
2596
	    "130721": "宣化县",
2597
	    "130722": "张北县",
2598
	    "130723": "康保县",
2599
	    "130724": "沽源县",
2600
	    "130725": "尚义县",
2601
	    "130726": "蔚县",
2602
	    "130727": "阳原县",
2603
	    "130728": "怀安县",
2604
	    "130729": "万全县",
2605
	    "130730": "怀来县",
2606
	    "130731": "涿鹿县",
2607
	    "130732": "赤城县",
2608
	    "130733": "崇礼县",
2609
	    "130734": "其它区",
2610
	    "130800": "承德市",
2611
	    "130802": "双桥区",
2612
	    "130803": "双滦区",
2613
	    "130804": "鹰手营子矿区",
2614
	    "130821": "承德县",
2615
	    "130822": "兴隆县",
2616
	    "130823": "平泉县",
2617
	    "130824": "滦平县",
2618
	    "130825": "隆化县",
2619
	    "130826": "丰宁满族自治县",
2620
	    "130827": "宽城满族自治县",
2621
	    "130828": "围场满族蒙古族自治县",
2622
	    "130829": "其它区",
2623
	    "130900": "沧州市",
2624
	    "130902": "新华区",
2625
	    "130903": "运河区",
2626
	    "130921": "沧县",
2627
	    "130922": "青县",
2628
	    "130923": "东光县",
2629
	    "130924": "海兴县",
2630
	    "130925": "盐山县",
2631
	    "130926": "肃宁县",
2632
	    "130927": "南皮县",
2633
	    "130928": "吴桥县",
2634
	    "130929": "献县",
2635
	    "130930": "孟村回族自治县",
2636
	    "130981": "泊头市",
2637
	    "130982": "任丘市",
2638
	    "130983": "黄骅市",
2639
	    "130984": "河间市",
2640
	    "130985": "其它区",
2641
	    "131000": "廊坊市",
2642
	    "131002": "安次区",
2643
	    "131003": "广阳区",
2644
	    "131022": "固安县",
2645
	    "131023": "永清县",
2646
	    "131024": "香河县",
2647
	    "131025": "大城县",
2648
	    "131026": "文安县",
2649
	    "131028": "大厂回族自治县",
2650
	    "131081": "霸州市",
2651
	    "131082": "三河市",
2652
	    "131083": "其它区",
2653
	    "131100": "衡水市",
2654
	    "131102": "桃城区",
2655
	    "131121": "枣强县",
2656
	    "131122": "武邑县",
2657
	    "131123": "武强县",
2658
	    "131124": "饶阳县",
2659
	    "131125": "安平县",
2660
	    "131126": "故城县",
2661
	    "131127": "景县",
2662
	    "131128": "阜城县",
2663
	    "131181": "冀州市",
2664
	    "131182": "深州市",
2665
	    "131183": "其它区",
2666
	    "140000": "山西省",
2667
	    "140100": "太原市",
2668
	    "140105": "小店区",
2669
	    "140106": "迎泽区",
2670
	    "140107": "杏花岭区",
2671
	    "140108": "尖草坪区",
2672
	    "140109": "万柏林区",
2673
	    "140110": "晋源区",
2674
	    "140121": "清徐县",
2675
	    "140122": "阳曲县",
2676
	    "140123": "娄烦县",
2677
	    "140181": "古交市",
2678
	    "140182": "其它区",
2679
	    "140200": "大同市",
2680
	    "140202": "城区",
2681
	    "140203": "矿区",
2682
	    "140211": "南郊区",
2683
	    "140212": "新荣区",
2684
	    "140221": "阳高县",
2685
	    "140222": "天镇县",
2686
	    "140223": "广灵县",
2687
	    "140224": "灵丘县",
2688
	    "140225": "浑源县",
2689
	    "140226": "左云县",
2690
	    "140227": "大同县",
2691
	    "140228": "其它区",
2692
	    "140300": "阳泉市",
2693
	    "140302": "城区",
2694
	    "140303": "矿区",
2695
	    "140311": "郊区",
2696
	    "140321": "平定县",
2697
	    "140322": "盂县",
2698
	    "140323": "其它区",
2699
	    "140400": "长治市",
2700
	    "140421": "长治县",
2701
	    "140423": "襄垣县",
2702
	    "140424": "屯留县",
2703
	    "140425": "平顺县",
2704
	    "140426": "黎城县",
2705
	    "140427": "壶关县",
2706
	    "140428": "长子县",
2707
	    "140429": "武乡县",
2708
	    "140430": "沁县",
2709
	    "140431": "沁源县",
2710
	    "140481": "潞城市",
2711
	    "140482": "城区",
2712
	    "140483": "郊区",
2713
	    "140485": "其它区",
2714
	    "140500": "晋城市",
2715
	    "140502": "城区",
2716
	    "140521": "沁水县",
2717
	    "140522": "阳城县",
2718
	    "140524": "陵川县",
2719
	    "140525": "泽州县",
2720
	    "140581": "高平市",
2721
	    "140582": "其它区",
2722
	    "140600": "朔州市",
2723
	    "140602": "朔城区",
2724
	    "140603": "平鲁区",
2725
	    "140621": "山阴县",
2726
	    "140622": "应县",
2727
	    "140623": "右玉县",
2728
	    "140624": "怀仁县",
2729
	    "140625": "其它区",
2730
	    "140700": "晋中市",
2731
	    "140702": "榆次区",
2732
	    "140721": "榆社县",
2733
	    "140722": "左权县",
2734
	    "140723": "和顺县",
2735
	    "140724": "昔阳县",
2736
	    "140725": "寿阳县",
2737
	    "140726": "太谷县",
2738
	    "140727": "祁县",
2739
	    "140728": "平遥县",
2740
	    "140729": "灵石县",
2741
	    "140781": "介休市",
2742
	    "140782": "其它区",
2743
	    "140800": "运城市",
2744
	    "140802": "盐湖区",
2745
	    "140821": "临猗县",
2746
	    "140822": "万荣县",
2747
	    "140823": "闻喜县",
2748
	    "140824": "稷山县",
2749
	    "140825": "新绛县",
2750
	    "140826": "绛县",
2751
	    "140827": "垣曲县",
2752
	    "140828": "夏县",
2753
	    "140829": "平陆县",
2754
	    "140830": "芮城县",
2755
	    "140881": "永济市",
2756
	    "140882": "河津市",
2757
	    "140883": "其它区",
2758
	    "140900": "忻州市",
2759
	    "140902": "忻府区",
2760
	    "140921": "定襄县",
2761
	    "140922": "五台县",
2762
	    "140923": "代县",
2763
	    "140924": "繁峙县",
2764
	    "140925": "宁武县",
2765
	    "140926": "静乐县",
2766
	    "140927": "神池县",
2767
	    "140928": "五寨县",
2768
	    "140929": "岢岚县",
2769
	    "140930": "河曲县",
2770
	    "140931": "保德县",
2771
	    "140932": "偏关县",
2772
	    "140981": "原平市",
2773
	    "140982": "其它区",
2774
	    "141000": "临汾市",
2775
	    "141002": "尧都区",
2776
	    "141021": "曲沃县",
2777
	    "141022": "翼城县",
2778
	    "141023": "襄汾县",
2779
	    "141024": "洪洞县",
2780
	    "141025": "古县",
2781
	    "141026": "安泽县",
2782
	    "141027": "浮山县",
2783
	    "141028": "吉县",
2784
	    "141029": "乡宁县",
2785
	    "141030": "大宁县",
2786
	    "141031": "隰县",
2787
	    "141032": "永和县",
2788
	    "141033": "蒲县",
2789
	    "141034": "汾西县",
2790
	    "141081": "侯马市",
2791
	    "141082": "霍州市",
2792
	    "141083": "其它区",
2793
	    "141100": "吕梁市",
2794
	    "141102": "离石区",
2795
	    "141121": "文水县",
2796
	    "141122": "交城县",
2797
	    "141123": "兴县",
2798
	    "141124": "临县",
2799
	    "141125": "柳林县",
2800
	    "141126": "石楼县",
2801
	    "141127": "岚县",
2802
	    "141128": "方山县",
2803
	    "141129": "中阳县",
2804
	    "141130": "交口县",
2805
	    "141181": "孝义市",
2806
	    "141182": "汾阳市",
2807
	    "141183": "其它区",
2808
	    "150000": "内蒙古自治区",
2809
	    "150100": "呼和浩特市",
2810
	    "150102": "新城区",
2811
	    "150103": "回民区",
2812
	    "150104": "玉泉区",
2813
	    "150105": "赛罕区",
2814
	    "150121": "土默特左旗",
2815
	    "150122": "托克托县",
2816
	    "150123": "和林格尔县",
2817
	    "150124": "清水河县",
2818
	    "150125": "武川县",
2819
	    "150126": "其它区",
2820
	    "150200": "包头市",
2821
	    "150202": "东河区",
2822
	    "150203": "昆都仑区",
2823
	    "150204": "青山区",
2824
	    "150205": "石拐区",
2825
	    "150206": "白云鄂博矿区",
2826
	    "150207": "九原区",
2827
	    "150221": "土默特右旗",
2828
	    "150222": "固阳县",
2829
	    "150223": "达尔罕茂明安联合旗",
2830
	    "150224": "其它区",
2831
	    "150300": "乌海市",
2832
	    "150302": "海勃湾区",
2833
	    "150303": "海南区",
2834
	    "150304": "乌达区",
2835
	    "150305": "其它区",
2836
	    "150400": "赤峰市",
2837
	    "150402": "红山区",
2838
	    "150403": "元宝山区",
2839
	    "150404": "松山区",
2840
	    "150421": "阿鲁科尔沁旗",
2841
	    "150422": "巴林左旗",
2842
	    "150423": "巴林右旗",
2843
	    "150424": "林西县",
2844
	    "150425": "克什克腾旗",
2845
	    "150426": "翁牛特旗",
2846
	    "150428": "喀喇沁旗",
2847
	    "150429": "宁城县",
2848
	    "150430": "敖汉旗",
2849
	    "150431": "其它区",
2850
	    "150500": "通辽市",
2851
	    "150502": "科尔沁区",
2852
	    "150521": "科尔沁左翼中旗",
2853
	    "150522": "科尔沁左翼后旗",
2854
	    "150523": "开鲁县",
2855
	    "150524": "库伦旗",
2856
	    "150525": "奈曼旗",
2857
	    "150526": "扎鲁特旗",
2858
	    "150581": "霍林郭勒市",
2859
	    "150582": "其它区",
2860
	    "150600": "鄂尔多斯市",
2861
	    "150602": "东胜区",
2862
	    "150621": "达拉特旗",
2863
	    "150622": "准格尔旗",
2864
	    "150623": "鄂托克前旗",
2865
	    "150624": "鄂托克旗",
2866
	    "150625": "杭锦旗",
2867
	    "150626": "乌审旗",
2868
	    "150627": "伊金霍洛旗",
2869
	    "150628": "其它区",
2870
	    "150700": "呼伦贝尔市",
2871
	    "150702": "海拉尔区",
2872
	    "150703": "扎赉诺尔区",
2873
	    "150721": "阿荣旗",
2874
	    "150722": "莫力达瓦达斡尔族自治旗",
2875
	    "150723": "鄂伦春自治旗",
2876
	    "150724": "鄂温克族自治旗",
2877
	    "150725": "陈巴尔虎旗",
2878
	    "150726": "新巴尔虎左旗",
2879
	    "150727": "新巴尔虎右旗",
2880
	    "150781": "满洲里市",
2881
	    "150782": "牙克石市",
2882
	    "150783": "扎兰屯市",
2883
	    "150784": "额尔古纳市",
2884
	    "150785": "根河市",
2885
	    "150786": "其它区",
2886
	    "150800": "巴彦淖尔市",
2887
	    "150802": "临河区",
2888
	    "150821": "五原县",
2889
	    "150822": "磴口县",
2890
	    "150823": "乌拉特前旗",
2891
	    "150824": "乌拉特中旗",
2892
	    "150825": "乌拉特后旗",
2893
	    "150826": "杭锦后旗",
2894
	    "150827": "其它区",
2895
	    "150900": "乌兰察布市",
2896
	    "150902": "集宁区",
2897
	    "150921": "卓资县",
2898
	    "150922": "化德县",
2899
	    "150923": "商都县",
2900
	    "150924": "兴和县",
2901
	    "150925": "凉城县",
2902
	    "150926": "察哈尔右翼前旗",
2903
	    "150927": "察哈尔右翼中旗",
2904
	    "150928": "察哈尔右翼后旗",
2905
	    "150929": "四子王旗",
2906
	    "150981": "丰镇市",
2907
	    "150982": "其它区",
2908
	    "152200": "兴安盟",
2909
	    "152201": "乌兰浩特市",
2910
	    "152202": "阿尔山市",
2911
	    "152221": "科尔沁右翼前旗",
2912
	    "152222": "科尔沁右翼中旗",
2913
	    "152223": "扎赉特旗",
2914
	    "152224": "突泉县",
2915
	    "152225": "其它区",
2916
	    "152500": "锡林郭勒盟",
2917
	    "152501": "二连浩特市",
2918
	    "152502": "锡林浩特市",
2919
	    "152522": "阿巴嘎旗",
2920
	    "152523": "苏尼特左旗",
2921
	    "152524": "苏尼特右旗",
2922
	    "152525": "东乌珠穆沁旗",
2923
	    "152526": "西乌珠穆沁旗",
2924
	    "152527": "太仆寺旗",
2925
	    "152528": "镶黄旗",
2926
	    "152529": "正镶白旗",
2927
	    "152530": "正蓝旗",
2928
	    "152531": "多伦县",
2929
	    "152532": "其它区",
2930
	    "152900": "阿拉善盟",
2931
	    "152921": "阿拉善左旗",
2932
	    "152922": "阿拉善右旗",
2933
	    "152923": "额济纳旗",
2934
	    "152924": "其它区",
2935
	    "210000": "辽宁省",
2936
	    "210100": "沈阳市",
2937
	    "210102": "和平区",
2938
	    "210103": "沈河区",
2939
	    "210104": "大东区",
2940
	    "210105": "皇姑区",
2941
	    "210106": "铁西区",
2942
	    "210111": "苏家屯区",
2943
	    "210112": "东陵区",
2944
	    "210113": "新城子区",
2945
	    "210114": "于洪区",
2946
	    "210122": "辽中县",
2947
	    "210123": "康平县",
2948
	    "210124": "法库县",
2949
	    "210181": "新民市",
2950
	    "210184": "沈北新区",
2951
	    "210185": "其它区",
2952
	    "210200": "大连市",
2953
	    "210202": "中山区",
2954
	    "210203": "西岗区",
2955
	    "210204": "沙河口区",
2956
	    "210211": "甘井子区",
2957
	    "210212": "旅顺口区",
2958
	    "210213": "金州区",
2959
	    "210224": "长海县",
2960
	    "210281": "瓦房店市",
2961
	    "210282": "普兰店市",
2962
	    "210283": "庄河市",
2963
	    "210298": "其它区",
2964
	    "210300": "鞍山市",
2965
	    "210302": "铁东区",
2966
	    "210303": "铁西区",
2967
	    "210304": "立山区",
2968
	    "210311": "千山区",
2969
	    "210321": "台安县",
2970
	    "210323": "岫岩满族自治县",
2971
	    "210381": "海城市",
2972
	    "210382": "其它区",
2973
	    "210400": "抚顺市",
2974
	    "210402": "新抚区",
2975
	    "210403": "东洲区",
2976
	    "210404": "望花区",
2977
	    "210411": "顺城区",
2978
	    "210421": "抚顺县",
2979
	    "210422": "新宾满族自治县",
2980
	    "210423": "清原满族自治县",
2981
	    "210424": "其它区",
2982
	    "210500": "本溪市",
2983
	    "210502": "平山区",
2984
	    "210503": "溪湖区",
2985
	    "210504": "明山区",
2986
	    "210505": "南芬区",
2987
	    "210521": "本溪满族自治县",
2988
	    "210522": "桓仁满族自治县",
2989
	    "210523": "其它区",
2990
	    "210600": "丹东市",
2991
	    "210602": "元宝区",
2992
	    "210603": "振兴区",
2993
	    "210604": "振安区",
2994
	    "210624": "宽甸满族自治县",
2995
	    "210681": "东港市",
2996
	    "210682": "凤城市",
2997
	    "210683": "其它区",
2998
	    "210700": "锦州市",
2999
	    "210702": "古塔区",
3000
	    "210703": "凌河区",
3001
	    "210711": "太和区",
3002
	    "210726": "黑山县",
3003
	    "210727": "义县",
3004
	    "210781": "凌海市",
3005
	    "210782": "北镇市",
3006
	    "210783": "其它区",
3007
	    "210800": "营口市",
3008
	    "210802": "站前区",
3009
	    "210803": "西市区",
3010
	    "210804": "鲅鱼圈区",
3011
	    "210811": "老边区",
3012
	    "210881": "盖州市",
3013
	    "210882": "大石桥市",
3014
	    "210883": "其它区",
3015
	    "210900": "阜新市",
3016
	    "210902": "海州区",
3017
	    "210903": "新邱区",
3018
	    "210904": "太平区",
3019
	    "210905": "清河门区",
3020
	    "210911": "细河区",
3021
	    "210921": "阜新蒙古族自治县",
3022
	    "210922": "彰武县",
3023
	    "210923": "其它区",
3024
	    "211000": "辽阳市",
3025
	    "211002": "白塔区",
3026
	    "211003": "文圣区",
3027
	    "211004": "宏伟区",
3028
	    "211005": "弓长岭区",
3029
	    "211011": "太子河区",
3030
	    "211021": "辽阳县",
3031
	    "211081": "灯塔市",
3032
	    "211082": "其它区",
3033
	    "211100": "盘锦市",
3034
	    "211102": "双台子区",
3035
	    "211103": "兴隆台区",
3036
	    "211121": "大洼县",
3037
	    "211122": "盘山县",
3038
	    "211123": "其它区",
3039
	    "211200": "铁岭市",
3040
	    "211202": "银州区",
3041
	    "211204": "清河区",
3042
	    "211221": "铁岭县",
3043
	    "211223": "西丰县",
3044
	    "211224": "昌图县",
3045
	    "211281": "调兵山市",
3046
	    "211282": "开原市",
3047
	    "211283": "其它区",
3048
	    "211300": "朝阳市",
3049
	    "211302": "双塔区",
3050
	    "211303": "龙城区",
3051
	    "211321": "朝阳县",
3052
	    "211322": "建平县",
3053
	    "211324": "喀喇沁左翼蒙古族自治县",
3054
	    "211381": "北票市",
3055
	    "211382": "凌源市",
3056
	    "211383": "其它区",
3057
	    "211400": "葫芦岛市",
3058
	    "211402": "连山区",
3059
	    "211403": "龙港区",
3060
	    "211404": "南票区",
3061
	    "211421": "绥中县",
3062
	    "211422": "建昌县",
3063
	    "211481": "兴城市",
3064
	    "211482": "其它区",
3065
	    "220000": "吉林省",
3066
	    "220100": "长春市",
3067
	    "220102": "南关区",
3068
	    "220103": "宽城区",
3069
	    "220104": "朝阳区",
3070
	    "220105": "二道区",
3071
	    "220106": "绿园区",
3072
	    "220112": "双阳区",
3073
	    "220122": "农安县",
3074
	    "220181": "九台市",
3075
	    "220182": "榆树市",
3076
	    "220183": "德惠市",
3077
	    "220188": "其它区",
3078
	    "220200": "吉林市",
3079
	    "220202": "昌邑区",
3080
	    "220203": "龙潭区",
3081
	    "220204": "船营区",
3082
	    "220211": "丰满区",
3083
	    "220221": "永吉县",
3084
	    "220281": "蛟河市",
3085
	    "220282": "桦甸市",
3086
	    "220283": "舒兰市",
3087
	    "220284": "磐石市",
3088
	    "220285": "其它区",
3089
	    "220300": "四平市",
3090
	    "220302": "铁西区",
3091
	    "220303": "铁东区",
3092
	    "220322": "梨树县",
3093
	    "220323": "伊通满族自治县",
3094
	    "220381": "公主岭市",
3095
	    "220382": "双辽市",
3096
	    "220383": "其它区",
3097
	    "220400": "辽源市",
3098
	    "220402": "龙山区",
3099
	    "220403": "西安区",
3100
	    "220421": "东丰县",
3101
	    "220422": "东辽县",
3102
	    "220423": "其它区",
3103
	    "220500": "通化市",
3104
	    "220502": "东昌区",
3105
	    "220503": "二道江区",
3106
	    "220521": "通化县",
3107
	    "220523": "辉南县",
3108
	    "220524": "柳河县",
3109
	    "220581": "梅河口市",
3110
	    "220582": "集安市",
3111
	    "220583": "其它区",
3112
	    "220600": "白山市",
3113
	    "220602": "浑江区",
3114
	    "220621": "抚松县",
3115
	    "220622": "靖宇县",
3116
	    "220623": "长白朝鲜族自治县",
3117
	    "220625": "江源区",
3118
	    "220681": "临江市",
3119
	    "220682": "其它区",
3120
	    "220700": "松原市",
3121
	    "220702": "宁江区",
3122
	    "220721": "前郭尔罗斯蒙古族自治县",
3123
	    "220722": "长岭县",
3124
	    "220723": "乾安县",
3125
	    "220724": "扶余市",
3126
	    "220725": "其它区",
3127
	    "220800": "白城市",
3128
	    "220802": "洮北区",
3129
	    "220821": "镇赉县",
3130
	    "220822": "通榆县",
3131
	    "220881": "洮南市",
3132
	    "220882": "大安市",
3133
	    "220883": "其它区",
3134
	    "222400": "延边朝鲜族自治州",
3135
	    "222401": "延吉市",
3136
	    "222402": "图们市",
3137
	    "222403": "敦化市",
3138
	    "222404": "珲春市",
3139
	    "222405": "龙井市",
3140
	    "222406": "和龙市",
3141
	    "222424": "汪清县",
3142
	    "222426": "安图县",
3143
	    "222427": "其它区",
3144
	    "230000": "黑龙江省",
3145
	    "230100": "哈尔滨市",
3146
	    "230102": "道里区",
3147
	    "230103": "南岗区",
3148
	    "230104": "道外区",
3149
	    "230106": "香坊区",
3150
	    "230108": "平房区",
3151
	    "230109": "松北区",
3152
	    "230111": "呼兰区",
3153
	    "230123": "依兰县",
3154
	    "230124": "方正县",
3155
	    "230125": "宾县",
3156
	    "230126": "巴彦县",
3157
	    "230127": "木兰县",
3158
	    "230128": "通河县",
3159
	    "230129": "延寿县",
3160
	    "230181": "阿城区",
3161
	    "230182": "双城市",
3162
	    "230183": "尚志市",
3163
	    "230184": "五常市",
3164
	    "230186": "其它区",
3165
	    "230200": "齐齐哈尔市",
3166
	    "230202": "龙沙区",
3167
	    "230203": "建华区",
3168
	    "230204": "铁锋区",
3169
	    "230205": "昂昂溪区",
3170
	    "230206": "富拉尔基区",
3171
	    "230207": "碾子山区",
3172
	    "230208": "梅里斯达斡尔族区",
3173
	    "230221": "龙江县",
3174
	    "230223": "依安县",
3175
	    "230224": "泰来县",
3176
	    "230225": "甘南县",
3177
	    "230227": "富裕县",
3178
	    "230229": "克山县",
3179
	    "230230": "克东县",
3180
	    "230231": "拜泉县",
3181
	    "230281": "讷河市",
3182
	    "230282": "其它区",
3183
	    "230300": "鸡西市",
3184
	    "230302": "鸡冠区",
3185
	    "230303": "恒山区",
3186
	    "230304": "滴道区",
3187
	    "230305": "梨树区",
3188
	    "230306": "城子河区",
3189
	    "230307": "麻山区",
3190
	    "230321": "鸡东县",
3191
	    "230381": "虎林市",
3192
	    "230382": "密山市",
3193
	    "230383": "其它区",
3194
	    "230400": "鹤岗市",
3195
	    "230402": "向阳区",
3196
	    "230403": "工农区",
3197
	    "230404": "南山区",
3198
	    "230405": "兴安区",
3199
	    "230406": "东山区",
3200
	    "230407": "兴山区",
3201
	    "230421": "萝北县",
3202
	    "230422": "绥滨县",
3203
	    "230423": "其它区",
3204
	    "230500": "双鸭山市",
3205
	    "230502": "尖山区",
3206
	    "230503": "岭东区",
3207
	    "230505": "四方台区",
3208
	    "230506": "宝山区",
3209
	    "230521": "集贤县",
3210
	    "230522": "友谊县",
3211
	    "230523": "宝清县",
3212
	    "230524": "饶河县",
3213
	    "230525": "其它区",
3214
	    "230600": "大庆市",
3215
	    "230602": "萨尔图区",
3216
	    "230603": "龙凤区",
3217
	    "230604": "让胡路区",
3218
	    "230605": "红岗区",
3219
	    "230606": "大同区",
3220
	    "230621": "肇州县",
3221
	    "230622": "肇源县",
3222
	    "230623": "林甸县",
3223
	    "230624": "杜尔伯特蒙古族自治县",
3224
	    "230625": "其它区",
3225
	    "230700": "伊春市",
3226
	    "230702": "伊春区",
3227
	    "230703": "南岔区",
3228
	    "230704": "友好区",
3229
	    "230705": "西林区",
3230
	    "230706": "翠峦区",
3231
	    "230707": "新青区",
3232
	    "230708": "美溪区",
3233
	    "230709": "金山屯区",
3234
	    "230710": "五营区",
3235
	    "230711": "乌马河区",
3236
	    "230712": "汤旺河区",
3237
	    "230713": "带岭区",
3238
	    "230714": "乌伊岭区",
3239
	    "230715": "红星区",
3240
	    "230716": "上甘岭区",
3241
	    "230722": "嘉荫县",
3242
	    "230781": "铁力市",
3243
	    "230782": "其它区",
3244
	    "230800": "佳木斯市",
3245
	    "230803": "向阳区",
3246
	    "230804": "前进区",
3247
	    "230805": "东风区",
3248
	    "230811": "郊区",
3249
	    "230822": "桦南县",
3250
	    "230826": "桦川县",
3251
	    "230828": "汤原县",
3252
	    "230833": "抚远县",
3253
	    "230881": "同江市",
3254
	    "230882": "富锦市",
3255
	    "230883": "其它区",
3256
	    "230900": "七台河市",
3257
	    "230902": "新兴区",
3258
	    "230903": "桃山区",
3259
	    "230904": "茄子河区",
3260
	    "230921": "勃利县",
3261
	    "230922": "其它区",
3262
	    "231000": "牡丹江市",
3263
	    "231002": "东安区",
3264
	    "231003": "阳明区",
3265
	    "231004": "爱民区",
3266
	    "231005": "西安区",
3267
	    "231024": "东宁县",
3268
	    "231025": "林口县",
3269
	    "231081": "绥芬河市",
3270
	    "231083": "海林市",
3271
	    "231084": "宁安市",
3272
	    "231085": "穆棱市",
3273
	    "231086": "其它区",
3274
	    "231100": "黑河市",
3275
	    "231102": "爱辉区",
3276
	    "231121": "嫩江县",
3277
	    "231123": "逊克县",
3278
	    "231124": "孙吴县",
3279
	    "231181": "北安市",
3280
	    "231182": "五大连池市",
3281
	    "231183": "其它区",
3282
	    "231200": "绥化市",
3283
	    "231202": "北林区",
3284
	    "231221": "望奎县",
3285
	    "231222": "兰西县",
3286
	    "231223": "青冈县",
3287
	    "231224": "庆安县",
3288
	    "231225": "明水县",
3289
	    "231226": "绥棱县",
3290
	    "231281": "安达市",
3291
	    "231282": "肇东市",
3292
	    "231283": "海伦市",
3293
	    "231284": "其它区",
3294
	    "232700": "大兴安岭地区",
3295
	    "232702": "松岭区",
3296
	    "232703": "新林区",
3297
	    "232704": "呼中区",
3298
	    "232721": "呼玛县",
3299
	    "232722": "塔河县",
3300
	    "232723": "漠河县",
3301
	    "232724": "加格达奇区",
3302
	    "232725": "其它区",
3303
	    "310000": "上海",
3304
	    "310100": "上海市",
3305
	    "310101": "黄浦区",
3306
	    "310104": "徐汇区",
3307
	    "310105": "长宁区",
3308
	    "310106": "静安区",
3309
	    "310107": "普陀区",
3310
	    "310108": "闸北区",
3311
	    "310109": "虹口区",
3312
	    "310110": "杨浦区",
3313
	    "310112": "闵行区",
3314
	    "310113": "宝山区",
3315
	    "310114": "嘉定区",
3316
	    "310115": "浦东新区",
3317
	    "310116": "金山区",
3318
	    "310117": "松江区",
3319
	    "310118": "青浦区",
3320
	    "310120": "奉贤区",
3321
	    "310230": "崇明县",
3322
	    "310231": "其它区",
3323
	    "320000": "江苏省",
3324
	    "320100": "南京市",
3325
	    "320102": "玄武区",
3326
	    "320104": "秦淮区",
3327
	    "320105": "建邺区",
3328
	    "320106": "鼓楼区",
3329
	    "320111": "浦口区",
3330
	    "320113": "栖霞区",
3331
	    "320114": "雨花台区",
3332
	    "320115": "江宁区",
3333
	    "320116": "六合区",
3334
	    "320124": "溧水区",
3335
	    "320125": "高淳区",
3336
	    "320126": "其它区",
3337
	    "320200": "无锡市",
3338
	    "320202": "崇安区",
3339
	    "320203": "南长区",
3340
	    "320204": "北塘区",
3341
	    "320205": "锡山区",
3342
	    "320206": "惠山区",
3343
	    "320211": "滨湖区",
3344
	    "320281": "江阴市",
3345
	    "320282": "宜兴市",
3346
	    "320297": "其它区",
3347
	    "320300": "徐州市",
3348
	    "320302": "鼓楼区",
3349
	    "320303": "云龙区",
3350
	    "320305": "贾汪区",
3351
	    "320311": "泉山区",
3352
	    "320321": "丰县",
3353
	    "320322": "沛县",
3354
	    "320323": "铜山区",
3355
	    "320324": "睢宁县",
3356
	    "320381": "新沂市",
3357
	    "320382": "邳州市",
3358
	    "320383": "其它区",
3359
	    "320400": "常州市",
3360
	    "320402": "天宁区",
3361
	    "320404": "钟楼区",
3362
	    "320405": "戚墅堰区",
3363
	    "320411": "新北区",
3364
	    "320412": "武进区",
3365
	    "320481": "溧阳市",
3366
	    "320482": "金坛市",
3367
	    "320483": "其它区",
3368
	    "320500": "苏州市",
3369
	    "320505": "虎丘区",
3370
	    "320506": "吴中区",
3371
	    "320507": "相城区",
3372
	    "320508": "姑苏区",
3373
	    "320581": "常熟市",
3374
	    "320582": "张家港市",
3375
	    "320583": "昆山市",
3376
	    "320584": "吴江区",
3377
	    "320585": "太仓市",
3378
	    "320596": "其它区",
3379
	    "320600": "南通市",
3380
	    "320602": "崇川区",
3381
	    "320611": "港闸区",
3382
	    "320612": "通州区",
3383
	    "320621": "海安县",
3384
	    "320623": "如东县",
3385
	    "320681": "启东市",
3386
	    "320682": "如皋市",
3387
	    "320684": "海门市",
3388
	    "320694": "其它区",
3389
	    "320700": "连云港市",
3390
	    "320703": "连云区",
3391
	    "320705": "新浦区",
3392
	    "320706": "海州区",
3393
	    "320721": "赣榆县",
3394
	    "320722": "东海县",
3395
	    "320723": "灌云县",
3396
	    "320724": "灌南县",
3397
	    "320725": "其它区",
3398
	    "320800": "淮安市",
3399
	    "320802": "清河区",
3400
	    "320803": "淮安区",
3401
	    "320804": "淮阴区",
3402
	    "320811": "清浦区",
3403
	    "320826": "涟水县",
3404
	    "320829": "洪泽县",
3405
	    "320830": "盱眙县",
3406
	    "320831": "金湖县",
3407
	    "320832": "其它区",
3408
	    "320900": "盐城市",
3409
	    "320902": "亭湖区",
3410
	    "320903": "盐都区",
3411
	    "320921": "响水县",
3412
	    "320922": "滨海县",
3413
	    "320923": "阜宁县",
3414
	    "320924": "射阳县",
3415
	    "320925": "建湖县",
3416
	    "320981": "东台市",
3417
	    "320982": "大丰市",
3418
	    "320983": "其它区",
3419
	    "321000": "扬州市",
3420
	    "321002": "广陵区",
3421
	    "321003": "邗江区",
3422
	    "321023": "宝应县",
3423
	    "321081": "仪征市",
3424
	    "321084": "高邮市",
3425
	    "321088": "江都区",
3426
	    "321093": "其它区",
3427
	    "321100": "镇江市",
3428
	    "321102": "京口区",
3429
	    "321111": "润州区",
3430
	    "321112": "丹徒区",
3431
	    "321181": "丹阳市",
3432
	    "321182": "扬中市",
3433
	    "321183": "句容市",
3434
	    "321184": "其它区",
3435
	    "321200": "泰州市",
3436
	    "321202": "海陵区",
3437
	    "321203": "高港区",
3438
	    "321281": "兴化市",
3439
	    "321282": "靖江市",
3440
	    "321283": "泰兴市",
3441
	    "321284": "姜堰区",
3442
	    "321285": "其它区",
3443
	    "321300": "宿迁市",
3444
	    "321302": "宿城区",
3445
	    "321311": "宿豫区",
3446
	    "321322": "沭阳县",
3447
	    "321323": "泗阳县",
3448
	    "321324": "泗洪县",
3449
	    "321325": "其它区",
3450
	    "330000": "浙江省",
3451
	    "330100": "杭州市",
3452
	    "330102": "上城区",
3453
	    "330103": "下城区",
3454
	    "330104": "江干区",
3455
	    "330105": "拱墅区",
3456
	    "330106": "西湖区",
3457
	    "330108": "滨江区",
3458
	    "330109": "萧山区",
3459
	    "330110": "余杭区",
3460
	    "330122": "桐庐县",
3461
	    "330127": "淳安县",
3462
	    "330182": "建德市",
3463
	    "330183": "富阳市",
3464
	    "330185": "临安市",
3465
	    "330186": "其它区",
3466
	    "330200": "宁波市",
3467
	    "330203": "海曙区",
3468
	    "330204": "江东区",
3469
	    "330205": "江北区",
3470
	    "330206": "北仑区",
3471
	    "330211": "镇海区",
3472
	    "330212": "鄞州区",
3473
	    "330225": "象山县",
3474
	    "330226": "宁海县",
3475
	    "330281": "余姚市",
3476
	    "330282": "慈溪市",
3477
	    "330283": "奉化市",
3478
	    "330284": "其它区",
3479
	    "330300": "温州市",
3480
	    "330302": "鹿城区",
3481
	    "330303": "龙湾区",
3482
	    "330304": "瓯海区",
3483
	    "330322": "洞头县",
3484
	    "330324": "永嘉县",
3485
	    "330326": "平阳县",
3486
	    "330327": "苍南县",
3487
	    "330328": "文成县",
3488
	    "330329": "泰顺县",
3489
	    "330381": "瑞安市",
3490
	    "330382": "乐清市",
3491
	    "330383": "其它区",
3492
	    "330400": "嘉兴市",
3493
	    "330402": "南湖区",
3494
	    "330411": "秀洲区",
3495
	    "330421": "嘉善县",
3496
	    "330424": "海盐县",
3497
	    "330481": "海宁市",
3498
	    "330482": "平湖市",
3499
	    "330483": "桐乡市",
3500
	    "330484": "其它区",
3501
	    "330500": "湖州市",
3502
	    "330502": "吴兴区",
3503
	    "330503": "南浔区",
3504
	    "330521": "德清县",
3505
	    "330522": "长兴县",
3506
	    "330523": "安吉县",
3507
	    "330524": "其它区",
3508
	    "330600": "绍兴市",
3509
	    "330602": "越城区",
3510
	    "330621": "绍兴县",
3511
	    "330624": "新昌县",
3512
	    "330681": "诸暨市",
3513
	    "330682": "上虞市",
3514
	    "330683": "嵊州市",
3515
	    "330684": "其它区",
3516
	    "330700": "金华市",
3517
	    "330702": "婺城区",
3518
	    "330703": "金东区",
3519
	    "330723": "武义县",
3520
	    "330726": "浦江县",
3521
	    "330727": "磐安县",
3522
	    "330781": "兰溪市",
3523
	    "330782": "义乌市",
3524
	    "330783": "东阳市",
3525
	    "330784": "永康市",
3526
	    "330785": "其它区",
3527
	    "330800": "衢州市",
3528
	    "330802": "柯城区",
3529
	    "330803": "衢江区",
3530
	    "330822": "常山县",
3531
	    "330824": "开化县",
3532
	    "330825": "龙游县",
3533
	    "330881": "江山市",
3534
	    "330882": "其它区",
3535
	    "330900": "舟山市",
3536
	    "330902": "定海区",
3537
	    "330903": "普陀区",
3538
	    "330921": "岱山县",
3539
	    "330922": "嵊泗县",
3540
	    "330923": "其它区",
3541
	    "331000": "台州市",
3542
	    "331002": "椒江区",
3543
	    "331003": "黄岩区",
3544
	    "331004": "路桥区",
3545
	    "331021": "玉环县",
3546
	    "331022": "三门县",
3547
	    "331023": "天台县",
3548
	    "331024": "仙居县",
3549
	    "331081": "温岭市",
3550
	    "331082": "临海市",
3551
	    "331083": "其它区",
3552
	    "331100": "丽水市",
3553
	    "331102": "莲都区",
3554
	    "331121": "青田县",
3555
	    "331122": "缙云县",
3556
	    "331123": "遂昌县",
3557
	    "331124": "松阳县",
3558
	    "331125": "云和县",
3559
	    "331126": "庆元县",
3560
	    "331127": "景宁畲族自治县",
3561
	    "331181": "龙泉市",
3562
	    "331182": "其它区",
3563
	    "340000": "安徽省",
3564
	    "340100": "合肥市",
3565
	    "340102": "瑶海区",
3566
	    "340103": "庐阳区",
3567
	    "340104": "蜀山区",
3568
	    "340111": "包河区",
3569
	    "340121": "长丰县",
3570
	    "340122": "肥东县",
3571
	    "340123": "肥西县",
3572
	    "340192": "其它区",
3573
	    "340200": "芜湖市",
3574
	    "340202": "镜湖区",
3575
	    "340203": "弋江区",
3576
	    "340207": "鸠江区",
3577
	    "340208": "三山区",
3578
	    "340221": "芜湖县",
3579
	    "340222": "繁昌县",
3580
	    "340223": "南陵县",
3581
	    "340224": "其它区",
3582
	    "340300": "蚌埠市",
3583
	    "340302": "龙子湖区",
3584
	    "340303": "蚌山区",
3585
	    "340304": "禹会区",
3586
	    "340311": "淮上区",
3587
	    "340321": "怀远县",
3588
	    "340322": "五河县",
3589
	    "340323": "固镇县",
3590
	    "340324": "其它区",
3591
	    "340400": "淮南市",
3592
	    "340402": "大通区",
3593
	    "340403": "田家庵区",
3594
	    "340404": "谢家集区",
3595
	    "340405": "八公山区",
3596
	    "340406": "潘集区",
3597
	    "340421": "凤台县",
3598
	    "340422": "其它区",
3599
	    "340500": "马鞍山市",
3600
	    "340503": "花山区",
3601
	    "340504": "雨山区",
3602
	    "340506": "博望区",
3603
	    "340521": "当涂县",
3604
	    "340522": "其它区",
3605
	    "340600": "淮北市",
3606
	    "340602": "杜集区",
3607
	    "340603": "相山区",
3608
	    "340604": "烈山区",
3609
	    "340621": "濉溪县",
3610
	    "340622": "其它区",
3611
	    "340700": "铜陵市",
3612
	    "340702": "铜官山区",
3613
	    "340703": "狮子山区",
3614
	    "340711": "郊区",
3615
	    "340721": "铜陵县",
3616
	    "340722": "其它区",
3617
	    "340800": "安庆市",
3618
	    "340802": "迎江区",
3619
	    "340803": "大观区",
3620
	    "340811": "宜秀区",
3621
	    "340822": "怀宁县",
3622
	    "340823": "枞阳县",
3623
	    "340824": "潜山县",
3624
	    "340825": "太湖县",
3625
	    "340826": "宿松县",
3626
	    "340827": "望江县",
3627
	    "340828": "岳西县",
3628
	    "340881": "桐城市",
3629
	    "340882": "其它区",
3630
	    "341000": "黄山市",
3631
	    "341002": "屯溪区",
3632
	    "341003": "黄山区",
3633
	    "341004": "徽州区",
3634
	    "341021": "歙县",
3635
	    "341022": "休宁县",
3636
	    "341023": "黟县",
3637
	    "341024": "祁门县",
3638
	    "341025": "其它区",
3639
	    "341100": "滁州市",
3640
	    "341102": "琅琊区",
3641
	    "341103": "南谯区",
3642
	    "341122": "来安县",
3643
	    "341124": "全椒县",
3644
	    "341125": "定远县",
3645
	    "341126": "凤阳县",
3646
	    "341181": "天长市",
3647
	    "341182": "明光市",
3648
	    "341183": "其它区",
3649
	    "341200": "阜阳市",
3650
	    "341202": "颍州区",
3651
	    "341203": "颍东区",
3652
	    "341204": "颍泉区",
3653
	    "341221": "临泉县",
3654
	    "341222": "太和县",
3655
	    "341225": "阜南县",
3656
	    "341226": "颍上县",
3657
	    "341282": "界首市",
3658
	    "341283": "其它区",
3659
	    "341300": "宿州市",
3660
	    "341302": "埇桥区",
3661
	    "341321": "砀山县",
3662
	    "341322": "萧县",
3663
	    "341323": "灵璧县",
3664
	    "341324": "泗县",
3665
	    "341325": "其它区",
3666
	    "341400": "巢湖市",
3667
	    "341421": "庐江县",
3668
	    "341422": "无为县",
3669
	    "341423": "含山县",
3670
	    "341424": "和县",
3671
	    "341500": "六安市",
3672
	    "341502": "金安区",
3673
	    "341503": "裕安区",
3674
	    "341521": "寿县",
3675
	    "341522": "霍邱县",
3676
	    "341523": "舒城县",
3677
	    "341524": "金寨县",
3678
	    "341525": "霍山县",
3679
	    "341526": "其它区",
3680
	    "341600": "亳州市",
3681
	    "341602": "谯城区",
3682
	    "341621": "涡阳县",
3683
	    "341622": "蒙城县",
3684
	    "341623": "利辛县",
3685
	    "341624": "其它区",
3686
	    "341700": "池州市",
3687
	    "341702": "贵池区",
3688
	    "341721": "东至县",
3689
	    "341722": "石台县",
3690
	    "341723": "青阳县",
3691
	    "341724": "其它区",
3692
	    "341800": "宣城市",
3693
	    "341802": "宣州区",
3694
	    "341821": "郎溪县",
3695
	    "341822": "广德县",
3696
	    "341823": "泾县",
3697
	    "341824": "绩溪县",
3698
	    "341825": "旌德县",
3699
	    "341881": "宁国市",
3700
	    "341882": "其它区",
3701
	    "350000": "福建省",
3702
	    "350100": "福州市",
3703
	    "350102": "鼓楼区",
3704
	    "350103": "台江区",
3705
	    "350104": "仓山区",
3706
	    "350105": "马尾区",
3707
	    "350111": "晋安区",
3708
	    "350121": "闽侯县",
3709
	    "350122": "连江县",
3710
	    "350123": "罗源县",
3711
	    "350124": "闽清县",
3712
	    "350125": "永泰县",
3713
	    "350128": "平潭县",
3714
	    "350181": "福清市",
3715
	    "350182": "长乐市",
3716
	    "350183": "其它区",
3717
	    "350200": "厦门市",
3718
	    "350203": "思明区",
3719
	    "350205": "海沧区",
3720
	    "350206": "湖里区",
3721
	    "350211": "集美区",
3722
	    "350212": "同安区",
3723
	    "350213": "翔安区",
3724
	    "350214": "其它区",
3725
	    "350300": "莆田市",
3726
	    "350302": "城厢区",
3727
	    "350303": "涵江区",
3728
	    "350304": "荔城区",
3729
	    "350305": "秀屿区",
3730
	    "350322": "仙游县",
3731
	    "350323": "其它区",
3732
	    "350400": "三明市",
3733
	    "350402": "梅列区",
3734
	    "350403": "三元区",
3735
	    "350421": "明溪县",
3736
	    "350423": "清流县",
3737
	    "350424": "宁化县",
3738
	    "350425": "大田县",
3739
	    "350426": "尤溪县",
3740
	    "350427": "沙县",
3741
	    "350428": "将乐县",
3742
	    "350429": "泰宁县",
3743
	    "350430": "建宁县",
3744
	    "350481": "永安市",
3745
	    "350482": "其它区",
3746
	    "350500": "泉州市",
3747
	    "350502": "鲤城区",
3748
	    "350503": "丰泽区",
3749
	    "350504": "洛江区",
3750
	    "350505": "泉港区",
3751
	    "350521": "惠安县",
3752
	    "350524": "安溪县",
3753
	    "350525": "永春县",
3754
	    "350526": "德化县",
3755
	    "350527": "金门县",
3756
	    "350581": "石狮市",
3757
	    "350582": "晋江市",
3758
	    "350583": "南安市",
3759
	    "350584": "其它区",
3760
	    "350600": "漳州市",
3761
	    "350602": "芗城区",
3762
	    "350603": "龙文区",
3763
	    "350622": "云霄县",
3764
	    "350623": "漳浦县",
3765
	    "350624": "诏安县",
3766
	    "350625": "长泰县",
3767
	    "350626": "东山县",
3768
	    "350627": "南靖县",
3769
	    "350628": "平和县",
3770
	    "350629": "华安县",
3771
	    "350681": "龙海市",
3772
	    "350682": "其它区",
3773
	    "350700": "南平市",
3774
	    "350702": "延平区",
3775
	    "350721": "顺昌县",
3776
	    "350722": "浦城县",
3777
	    "350723": "光泽县",
3778
	    "350724": "松溪县",
3779
	    "350725": "政和县",
3780
	    "350781": "邵武市",
3781
	    "350782": "武夷山市",
3782
	    "350783": "建瓯市",
3783
	    "350784": "建阳市",
3784
	    "350785": "其它区",
3785
	    "350800": "龙岩市",
3786
	    "350802": "新罗区",
3787
	    "350821": "长汀县",
3788
	    "350822": "永定县",
3789
	    "350823": "上杭县",
3790
	    "350824": "武平县",
3791
	    "350825": "连城县",
3792
	    "350881": "漳平市",
3793
	    "350882": "其它区",
3794
	    "350900": "宁德市",
3795
	    "350902": "蕉城区",
3796
	    "350921": "霞浦县",
3797
	    "350922": "古田县",
3798
	    "350923": "屏南县",
3799
	    "350924": "寿宁县",
3800
	    "350925": "周宁县",
3801
	    "350926": "柘荣县",
3802
	    "350981": "福安市",
3803
	    "350982": "福鼎市",
3804
	    "350983": "其它区",
3805
	    "360000": "江西省",
3806
	    "360100": "南昌市",
3807
	    "360102": "东湖区",
3808
	    "360103": "西湖区",
3809
	    "360104": "青云谱区",
3810
	    "360105": "湾里区",
3811
	    "360111": "青山湖区",
3812
	    "360121": "南昌县",
3813
	    "360122": "新建县",
3814
	    "360123": "安义县",
3815
	    "360124": "进贤县",
3816
	    "360128": "其它区",
3817
	    "360200": "景德镇市",
3818
	    "360202": "昌江区",
3819
	    "360203": "珠山区",
3820
	    "360222": "浮梁县",
3821
	    "360281": "乐平市",
3822
	    "360282": "其它区",
3823
	    "360300": "萍乡市",
3824
	    "360302": "安源区",
3825
	    "360313": "湘东区",
3826
	    "360321": "莲花县",
3827
	    "360322": "上栗县",
3828
	    "360323": "芦溪县",
3829
	    "360324": "其它区",
3830
	    "360400": "九江市",
3831
	    "360402": "庐山区",
3832
	    "360403": "浔阳区",
3833
	    "360421": "九江县",
3834
	    "360423": "武宁县",
3835
	    "360424": "修水县",
3836
	    "360425": "永修县",
3837
	    "360426": "德安县",
3838
	    "360427": "星子县",
3839
	    "360428": "都昌县",
3840
	    "360429": "湖口县",
3841
	    "360430": "彭泽县",
3842
	    "360481": "瑞昌市",
3843
	    "360482": "其它区",
3844
	    "360483": "共青城市",
3845
	    "360500": "新余市",
3846
	    "360502": "渝水区",
3847
	    "360521": "分宜县",
3848
	    "360522": "其它区",
3849
	    "360600": "鹰潭市",
3850
	    "360602": "月湖区",
3851
	    "360622": "余江县",
3852
	    "360681": "贵溪市",
3853
	    "360682": "其它区",
3854
	    "360700": "赣州市",
3855
	    "360702": "章贡区",
3856
	    "360721": "赣县",
3857
	    "360722": "信丰县",
3858
	    "360723": "大余县",
3859
	    "360724": "上犹县",
3860
	    "360725": "崇义县",
3861
	    "360726": "安远县",
3862
	    "360727": "龙南县",
3863
	    "360728": "定南县",
3864
	    "360729": "全南县",
3865
	    "360730": "宁都县",
3866
	    "360731": "于都县",
3867
	    "360732": "兴国县",
3868
	    "360733": "会昌县",
3869
	    "360734": "寻乌县",
3870
	    "360735": "石城县",
3871
	    "360781": "瑞金市",
3872
	    "360782": "南康市",
3873
	    "360783": "其它区",
3874
	    "360800": "吉安市",
3875
	    "360802": "吉州区",
3876
	    "360803": "青原区",
3877
	    "360821": "吉安县",
3878
	    "360822": "吉水县",
3879
	    "360823": "峡江县",
3880
	    "360824": "新干县",
3881
	    "360825": "永丰县",
3882
	    "360826": "泰和县",
3883
	    "360827": "遂川县",
3884
	    "360828": "万安县",
3885
	    "360829": "安福县",
3886
	    "360830": "永新县",
3887
	    "360881": "井冈山市",
3888
	    "360882": "其它区",
3889
	    "360900": "宜春市",
3890
	    "360902": "袁州区",
3891
	    "360921": "奉新县",
3892
	    "360922": "万载县",
3893
	    "360923": "上高县",
3894
	    "360924": "宜丰县",
3895
	    "360925": "靖安县",
3896
	    "360926": "铜鼓县",
3897
	    "360981": "丰城市",
3898
	    "360982": "樟树市",
3899
	    "360983": "高安市",
3900
	    "360984": "其它区",
3901
	    "361000": "抚州市",
3902
	    "361002": "临川区",
3903
	    "361021": "南城县",
3904
	    "361022": "黎川县",
3905
	    "361023": "南丰县",
3906
	    "361024": "崇仁县",
3907
	    "361025": "乐安县",
3908
	    "361026": "宜黄县",
3909
	    "361027": "金溪县",
3910
	    "361028": "资溪县",
3911
	    "361029": "东乡县",
3912
	    "361030": "广昌县",
3913
	    "361031": "其它区",
3914
	    "361100": "上饶市",
3915
	    "361102": "信州区",
3916
	    "361121": "上饶县",
3917
	    "361122": "广丰县",
3918
	    "361123": "玉山县",
3919
	    "361124": "铅山县",
3920
	    "361125": "横峰县",
3921
	    "361126": "弋阳县",
3922
	    "361127": "余干县",
3923
	    "361128": "鄱阳县",
3924
	    "361129": "万年县",
3925
	    "361130": "婺源县",
3926
	    "361181": "德兴市",
3927
	    "361182": "其它区",
3928
	    "370000": "山东省",
3929
	    "370100": "济南市",
3930
	    "370102": "历下区",
3931
	    "370103": "市中区",
3932
	    "370104": "槐荫区",
3933
	    "370105": "天桥区",
3934
	    "370112": "历城区",
3935
	    "370113": "长清区",
3936
	    "370124": "平阴县",
3937
	    "370125": "济阳县",
3938
	    "370126": "商河县",
3939
	    "370181": "章丘市",
3940
	    "370182": "其它区",
3941
	    "370200": "青岛市",
3942
	    "370202": "市南区",
3943
	    "370203": "市北区",
3944
	    "370211": "黄岛区",
3945
	    "370212": "崂山区",
3946
	    "370213": "李沧区",
3947
	    "370214": "城阳区",
3948
	    "370281": "胶州市",
3949
	    "370282": "即墨市",
3950
	    "370283": "平度市",
3951
	    "370285": "莱西市",
3952
	    "370286": "其它区",
3953
	    "370300": "淄博市",
3954
	    "370302": "淄川区",
3955
	    "370303": "张店区",
3956
	    "370304": "博山区",
3957
	    "370305": "临淄区",
3958
	    "370306": "周村区",
3959
	    "370321": "桓台县",
3960
	    "370322": "高青县",
3961
	    "370323": "沂源县",
3962
	    "370324": "其它区",
3963
	    "370400": "枣庄市",
3964
	    "370402": "市中区",
3965
	    "370403": "薛城区",
3966
	    "370404": "峄城区",
3967
	    "370405": "台儿庄区",
3968
	    "370406": "山亭区",
3969
	    "370481": "滕州市",
3970
	    "370482": "其它区",
3971
	    "370500": "东营市",
3972
	    "370502": "东营区",
3973
	    "370503": "河口区",
3974
	    "370521": "垦利县",
3975
	    "370522": "利津县",
3976
	    "370523": "广饶县",
3977
	    "370591": "其它区",
3978
	    "370600": "烟台市",
3979
	    "370602": "芝罘区",
3980
	    "370611": "福山区",
3981
	    "370612": "牟平区",
3982
	    "370613": "莱山区",
3983
	    "370634": "长岛县",
3984
	    "370681": "龙口市",
3985
	    "370682": "莱阳市",
3986
	    "370683": "莱州市",
3987
	    "370684": "蓬莱市",
3988
	    "370685": "招远市",
3989
	    "370686": "栖霞市",
3990
	    "370687": "海阳市",
3991
	    "370688": "其它区",
3992
	    "370700": "潍坊市",
3993
	    "370702": "潍城区",
3994
	    "370703": "寒亭区",
3995
	    "370704": "坊子区",
3996
	    "370705": "奎文区",
3997
	    "370724": "临朐县",
3998
	    "370725": "昌乐县",
3999
	    "370781": "青州市",
4000
	    "370782": "诸城市",
4001
	    "370783": "寿光市",
4002
	    "370784": "安丘市",
4003
	    "370785": "高密市",
4004
	    "370786": "昌邑市",
4005
	    "370787": "其它区",
4006
	    "370800": "济宁市",
4007
	    "370802": "市中区",
4008
	    "370811": "任城区",
4009
	    "370826": "微山县",
4010
	    "370827": "鱼台县",
4011
	    "370828": "金乡县",
4012
	    "370829": "嘉祥县",
4013
	    "370830": "汶上县",
4014
	    "370831": "泗水县",
4015
	    "370832": "梁山县",
4016
	    "370881": "曲阜市",
4017
	    "370882": "兖州市",
4018
	    "370883": "邹城市",
4019
	    "370884": "其它区",
4020
	    "370900": "泰安市",
4021
	    "370902": "泰山区",
4022
	    "370903": "岱岳区",
4023
	    "370921": "宁阳县",
4024
	    "370923": "东平县",
4025
	    "370982": "新泰市",
4026
	    "370983": "肥城市",
4027
	    "370984": "其它区",
4028
	    "371000": "威海市",
4029
	    "371002": "环翠区",
4030
	    "371081": "文登市",
4031
	    "371082": "荣成市",
4032
	    "371083": "乳山市",
4033
	    "371084": "其它区",
4034
	    "371100": "日照市",
4035
	    "371102": "东港区",
4036
	    "371103": "岚山区",
4037
	    "371121": "五莲县",
4038
	    "371122": "莒县",
4039
	    "371123": "其它区",
4040
	    "371200": "莱芜市",
4041
	    "371202": "莱城区",
4042
	    "371203": "钢城区",
4043
	    "371204": "其它区",
4044
	    "371300": "临沂市",
4045
	    "371302": "兰山区",
4046
	    "371311": "罗庄区",
4047
	    "371312": "河东区",
4048
	    "371321": "沂南县",
4049
	    "371322": "郯城县",
4050
	    "371323": "沂水县",
4051
	    "371324": "苍山县",
4052
	    "371325": "费县",
4053
	    "371326": "平邑县",
4054
	    "371327": "莒南县",
4055
	    "371328": "蒙阴县",
4056
	    "371329": "临沭县",
4057
	    "371330": "其它区",
4058
	    "371400": "德州市",
4059
	    "371402": "德城区",
4060
	    "371421": "陵县",
4061
	    "371422": "宁津县",
4062
	    "371423": "庆云县",
4063
	    "371424": "临邑县",
4064
	    "371425": "齐河县",
4065
	    "371426": "平原县",
4066
	    "371427": "夏津县",
4067
	    "371428": "武城县",
4068
	    "371481": "乐陵市",
4069
	    "371482": "禹城市",
4070
	    "371483": "其它区",
4071
	    "371500": "聊城市",
4072
	    "371502": "东昌府区",
4073
	    "371521": "阳谷县",
4074
	    "371522": "莘县",
4075
	    "371523": "茌平县",
4076
	    "371524": "东阿县",
4077
	    "371525": "冠县",
4078
	    "371526": "高唐县",
4079
	    "371581": "临清市",
4080
	    "371582": "其它区",
4081
	    "371600": "滨州市",
4082
	    "371602": "滨城区",
4083
	    "371621": "惠民县",
4084
	    "371622": "阳信县",
4085
	    "371623": "无棣县",
4086
	    "371624": "沾化县",
4087
	    "371625": "博兴县",
4088
	    "371626": "邹平县",
4089
	    "371627": "其它区",
4090
	    "371700": "菏泽市",
4091
	    "371702": "牡丹区",
4092
	    "371721": "曹县",
4093
	    "371722": "单县",
4094
	    "371723": "成武县",
4095
	    "371724": "巨野县",
4096
	    "371725": "郓城县",
4097
	    "371726": "鄄城县",
4098
	    "371727": "定陶县",
4099
	    "371728": "东明县",
4100
	    "371729": "其它区",
4101
	    "410000": "河南省",
4102
	    "410100": "郑州市",
4103
	    "410102": "中原区",
4104
	    "410103": "二七区",
4105
	    "410104": "管城回族区",
4106
	    "410105": "金水区",
4107
	    "410106": "上街区",
4108
	    "410108": "惠济区",
4109
	    "410122": "中牟县",
4110
	    "410181": "巩义市",
4111
	    "410182": "荥阳市",
4112
	    "410183": "新密市",
4113
	    "410184": "新郑市",
4114
	    "410185": "登封市",
4115
	    "410188": "其它区",
4116
	    "410200": "开封市",
4117
	    "410202": "龙亭区",
4118
	    "410203": "顺河回族区",
4119
	    "410204": "鼓楼区",
4120
	    "410205": "禹王台区",
4121
	    "410211": "金明区",
4122
	    "410221": "杞县",
4123
	    "410222": "通许县",
4124
	    "410223": "尉氏县",
4125
	    "410224": "开封县",
4126
	    "410225": "兰考县",
4127
	    "410226": "其它区",
4128
	    "410300": "洛阳市",
4129
	    "410302": "老城区",
4130
	    "410303": "西工区",
4131
	    "410304": "瀍河回族区",
4132
	    "410305": "涧西区",
4133
	    "410306": "吉利区",
4134
	    "410307": "洛龙区",
4135
	    "410322": "孟津县",
4136
	    "410323": "新安县",
4137
	    "410324": "栾川县",
4138
	    "410325": "嵩县",
4139
	    "410326": "汝阳县",
4140
	    "410327": "宜阳县",
4141
	    "410328": "洛宁县",
4142
	    "410329": "伊川县",
4143
	    "410381": "偃师市",
4144
	    "410400": "平顶山市",
4145
	    "410402": "新华区",
4146
	    "410403": "卫东区",
4147
	    "410404": "石龙区",
4148
	    "410411": "湛河区",
4149
	    "410421": "宝丰县",
4150
	    "410422": "叶县",
4151
	    "410423": "鲁山县",
4152
	    "410425": "郏县",
4153
	    "410481": "舞钢市",
4154
	    "410482": "汝州市",
4155
	    "410483": "其它区",
4156
	    "410500": "安阳市",
4157
	    "410502": "文峰区",
4158
	    "410503": "北关区",
4159
	    "410505": "殷都区",
4160
	    "410506": "龙安区",
4161
	    "410522": "安阳县",
4162
	    "410523": "汤阴县",
4163
	    "410526": "滑县",
4164
	    "410527": "内黄县",
4165
	    "410581": "林州市",
4166
	    "410582": "其它区",
4167
	    "410600": "鹤壁市",
4168
	    "410602": "鹤山区",
4169
	    "410603": "山城区",
4170
	    "410611": "淇滨区",
4171
	    "410621": "浚县",
4172
	    "410622": "淇县",
4173
	    "410623": "其它区",
4174
	    "410700": "新乡市",
4175
	    "410702": "红旗区",
4176
	    "410703": "卫滨区",
4177
	    "410704": "凤泉区",
4178
	    "410711": "牧野区",
4179
	    "410721": "新乡县",
4180
	    "410724": "获嘉县",
4181
	    "410725": "原阳县",
4182
	    "410726": "延津县",
4183
	    "410727": "封丘县",
4184
	    "410728": "长垣县",
4185
	    "410781": "卫辉市",
4186
	    "410782": "辉县市",
4187
	    "410783": "其它区",
4188
	    "410800": "焦作市",
4189
	    "410802": "解放区",
4190
	    "410803": "中站区",
4191
	    "410804": "马村区",
4192
	    "410811": "山阳区",
4193
	    "410821": "修武县",
4194
	    "410822": "博爱县",
4195
	    "410823": "武陟县",
4196
	    "410825": "温县",
4197
	    "410881": "济源市",
4198
	    "410882": "沁阳市",
4199
	    "410883": "孟州市",
4200
	    "410884": "其它区",
4201
	    "410900": "濮阳市",
4202
	    "410902": "华龙区",
4203
	    "410922": "清丰县",
4204
	    "410923": "南乐县",
4205
	    "410926": "范县",
4206
	    "410927": "台前县",
4207
	    "410928": "濮阳县",
4208
	    "410929": "其它区",
4209
	    "411000": "许昌市",
4210
	    "411002": "魏都区",
4211
	    "411023": "许昌县",
4212
	    "411024": "鄢陵县",
4213
	    "411025": "襄城县",
4214
	    "411081": "禹州市",
4215
	    "411082": "长葛市",
4216
	    "411083": "其它区",
4217
	    "411100": "漯河市",
4218
	    "411102": "源汇区",
4219
	    "411103": "郾城区",
4220
	    "411104": "召陵区",
4221
	    "411121": "舞阳县",
4222
	    "411122": "临颍县",
4223
	    "411123": "其它区",
4224
	    "411200": "三门峡市",
4225
	    "411202": "湖滨区",
4226
	    "411221": "渑池县",
4227
	    "411222": "陕县",
4228
	    "411224": "卢氏县",
4229
	    "411281": "义马市",
4230
	    "411282": "灵宝市",
4231
	    "411283": "其它区",
4232
	    "411300": "南阳市",
4233
	    "411302": "宛城区",
4234
	    "411303": "卧龙区",
4235
	    "411321": "南召县",
4236
	    "411322": "方城县",
4237
	    "411323": "西峡县",
4238
	    "411324": "镇平县",
4239
	    "411325": "内乡县",
4240
	    "411326": "淅川县",
4241
	    "411327": "社旗县",
4242
	    "411328": "唐河县",
4243
	    "411329": "新野县",
4244
	    "411330": "桐柏县",
4245
	    "411381": "邓州市",
4246
	    "411382": "其它区",
4247
	    "411400": "商丘市",
4248
	    "411402": "梁园区",
4249
	    "411403": "睢阳区",
4250
	    "411421": "民权县",
4251
	    "411422": "睢县",
4252
	    "411423": "宁陵县",
4253
	    "411424": "柘城县",
4254
	    "411425": "虞城县",
4255
	    "411426": "夏邑县",
4256
	    "411481": "永城市",
4257
	    "411482": "其它区",
4258
	    "411500": "信阳市",
4259
	    "411502": "浉河区",
4260
	    "411503": "平桥区",
4261
	    "411521": "罗山县",
4262
	    "411522": "光山县",
4263
	    "411523": "新县",
4264
	    "411524": "商城县",
4265
	    "411525": "固始县",
4266
	    "411526": "潢川县",
4267
	    "411527": "淮滨县",
4268
	    "411528": "息县",
4269
	    "411529": "其它区",
4270
	    "411600": "周口市",
4271
	    "411602": "川汇区",
4272
	    "411621": "扶沟县",
4273
	    "411622": "西华县",
4274
	    "411623": "商水县",
4275
	    "411624": "沈丘县",
4276
	    "411625": "郸城县",
4277
	    "411626": "淮阳县",
4278
	    "411627": "太康县",
4279
	    "411628": "鹿邑县",
4280
	    "411681": "项城市",
4281
	    "411682": "其它区",
4282
	    "411700": "驻马店市",
4283
	    "411702": "驿城区",
4284
	    "411721": "西平县",
4285
	    "411722": "上蔡县",
4286
	    "411723": "平舆县",
4287
	    "411724": "正阳县",
4288
	    "411725": "确山县",
4289
	    "411726": "泌阳县",
4290
	    "411727": "汝南县",
4291
	    "411728": "遂平县",
4292
	    "411729": "新蔡县",
4293
	    "411730": "其它区",
4294
	    "420000": "湖北省",
4295
	    "420100": "武汉市",
4296
	    "420102": "江岸区",
4297
	    "420103": "江汉区",
4298
	    "420104": "硚口区",
4299
	    "420105": "汉阳区",
4300
	    "420106": "武昌区",
4301
	    "420107": "青山区",
4302
	    "420111": "洪山区",
4303
	    "420112": "东西湖区",
4304
	    "420113": "汉南区",
4305
	    "420114": "蔡甸区",
4306
	    "420115": "江夏区",
4307
	    "420116": "黄陂区",
4308
	    "420117": "新洲区",
4309
	    "420118": "其它区",
4310
	    "420200": "黄石市",
4311
	    "420202": "黄石港区",
4312
	    "420203": "西塞山区",
4313
	    "420204": "下陆区",
4314
	    "420205": "铁山区",
4315
	    "420222": "阳新县",
4316
	    "420281": "大冶市",
4317
	    "420282": "其它区",
4318
	    "420300": "十堰市",
4319
	    "420302": "茅箭区",
4320
	    "420303": "张湾区",
4321
	    "420321": "郧县",
4322
	    "420322": "郧西县",
4323
	    "420323": "竹山县",
4324
	    "420324": "竹溪县",
4325
	    "420325": "房县",
4326
	    "420381": "丹江口市",
4327
	    "420383": "其它区",
4328
	    "420500": "宜昌市",
4329
	    "420502": "西陵区",
4330
	    "420503": "伍家岗区",
4331
	    "420504": "点军区",
4332
	    "420505": "猇亭区",
4333
	    "420506": "夷陵区",
4334
	    "420525": "远安县",
4335
	    "420526": "兴山县",
4336
	    "420527": "秭归县",
4337
	    "420528": "长阳土家族自治县",
4338
	    "420529": "五峰土家族自治县",
4339
	    "420581": "宜都市",
4340
	    "420582": "当阳市",
4341
	    "420583": "枝江市",
4342
	    "420584": "其它区",
4343
	    "420600": "襄阳市",
4344
	    "420602": "襄城区",
4345
	    "420606": "樊城区",
4346
	    "420607": "襄州区",
4347
	    "420624": "南漳县",
4348
	    "420625": "谷城县",
4349
	    "420626": "保康县",
4350
	    "420682": "老河口市",
4351
	    "420683": "枣阳市",
4352
	    "420684": "宜城市",
4353
	    "420685": "其它区",
4354
	    "420700": "鄂州市",
4355
	    "420702": "梁子湖区",
4356
	    "420703": "华容区",
4357
	    "420704": "鄂城区",
4358
	    "420705": "其它区",
4359
	    "420800": "荆门市",
4360
	    "420802": "东宝区",
4361
	    "420804": "掇刀区",
4362
	    "420821": "京山县",
4363
	    "420822": "沙洋县",
4364
	    "420881": "钟祥市",
4365
	    "420882": "其它区",
4366
	    "420900": "孝感市",
4367
	    "420902": "孝南区",
4368
	    "420921": "孝昌县",
4369
	    "420922": "大悟县",
4370
	    "420923": "云梦县",
4371
	    "420981": "应城市",
4372
	    "420982": "安陆市",
4373
	    "420984": "汉川市",
4374
	    "420985": "其它区",
4375
	    "421000": "荆州市",
4376
	    "421002": "沙市区",
4377
	    "421003": "荆州区",
4378
	    "421022": "公安县",
4379
	    "421023": "监利县",
4380
	    "421024": "江陵县",
4381
	    "421081": "石首市",
4382
	    "421083": "洪湖市",
4383
	    "421087": "松滋市",
4384
	    "421088": "其它区",
4385
	    "421100": "黄冈市",
4386
	    "421102": "黄州区",
4387
	    "421121": "团风县",
4388
	    "421122": "红安县",
4389
	    "421123": "罗田县",
4390
	    "421124": "英山县",
4391
	    "421125": "浠水县",
4392
	    "421126": "蕲春县",
4393
	    "421127": "黄梅县",
4394
	    "421181": "麻城市",
4395
	    "421182": "武穴市",
4396
	    "421183": "其它区",
4397
	    "421200": "咸宁市",
4398
	    "421202": "咸安区",
4399
	    "421221": "嘉鱼县",
4400
	    "421222": "通城县",
4401
	    "421223": "崇阳县",
4402
	    "421224": "通山县",
4403
	    "421281": "赤壁市",
4404
	    "421283": "其它区",
4405
	    "421300": "随州市",
4406
	    "421302": "曾都区",
4407
	    "421321": "随县",
4408
	    "421381": "广水市",
4409
	    "421382": "其它区",
4410
	    "422800": "恩施土家族苗族自治州",
4411
	    "422801": "恩施市",
4412
	    "422802": "利川市",
4413
	    "422822": "建始县",
4414
	    "422823": "巴东县",
4415
	    "422825": "宣恩县",
4416
	    "422826": "咸丰县",
4417
	    "422827": "来凤县",
4418
	    "422828": "鹤峰县",
4419
	    "422829": "其它区",
4420
	    "429004": "仙桃市",
4421
	    "429005": "潜江市",
4422
	    "429006": "天门市",
4423
	    "429021": "神农架林区",
4424
	    "430000": "湖南省",
4425
	    "430100": "长沙市",
4426
	    "430102": "芙蓉区",
4427
	    "430103": "天心区",
4428
	    "430104": "岳麓区",
4429
	    "430105": "开福区",
4430
	    "430111": "雨花区",
4431
	    "430121": "长沙县",
4432
	    "430122": "望城区",
4433
	    "430124": "宁乡县",
4434
	    "430181": "浏阳市",
4435
	    "430182": "其它区",
4436
	    "430200": "株洲市",
4437
	    "430202": "荷塘区",
4438
	    "430203": "芦淞区",
4439
	    "430204": "石峰区",
4440
	    "430211": "天元区",
4441
	    "430221": "株洲县",
4442
	    "430223": "攸县",
4443
	    "430224": "茶陵县",
4444
	    "430225": "炎陵县",
4445
	    "430281": "醴陵市",
4446
	    "430282": "其它区",
4447
	    "430300": "湘潭市",
4448
	    "430302": "雨湖区",
4449
	    "430304": "岳塘区",
4450
	    "430321": "湘潭县",
4451
	    "430381": "湘乡市",
4452
	    "430382": "韶山市",
4453
	    "430383": "其它区",
4454
	    "430400": "衡阳市",
4455
	    "430405": "珠晖区",
4456
	    "430406": "雁峰区",
4457
	    "430407": "石鼓区",
4458
	    "430408": "蒸湘区",
4459
	    "430412": "南岳区",
4460
	    "430421": "衡阳县",
4461
	    "430422": "衡南县",
4462
	    "430423": "衡山县",
4463
	    "430424": "衡东县",
4464
	    "430426": "祁东县",
4465
	    "430481": "耒阳市",
4466
	    "430482": "常宁市",
4467
	    "430483": "其它区",
4468
	    "430500": "邵阳市",
4469
	    "430502": "双清区",
4470
	    "430503": "大祥区",
4471
	    "430511": "北塔区",
4472
	    "430521": "邵东县",
4473
	    "430522": "新邵县",
4474
	    "430523": "邵阳县",
4475
	    "430524": "隆回县",
4476
	    "430525": "洞口县",
4477
	    "430527": "绥宁县",
4478
	    "430528": "新宁县",
4479
	    "430529": "城步苗族自治县",
4480
	    "430581": "武冈市",
4481
	    "430582": "其它区",
4482
	    "430600": "岳阳市",
4483
	    "430602": "岳阳楼区",
4484
	    "430603": "云溪区",
4485
	    "430611": "君山区",
4486
	    "430621": "岳阳县",
4487
	    "430623": "华容县",
4488
	    "430624": "湘阴县",
4489
	    "430626": "平江县",
4490
	    "430681": "汨罗市",
4491
	    "430682": "临湘市",
4492
	    "430683": "其它区",
4493
	    "430700": "常德市",
4494
	    "430702": "武陵区",
4495
	    "430703": "鼎城区",
4496
	    "430721": "安乡县",
4497
	    "430722": "汉寿县",
4498
	    "430723": "澧县",
4499
	    "430724": "临澧县",
4500
	    "430725": "桃源县",
4501
	    "430726": "石门县",
4502
	    "430781": "津市市",
4503
	    "430782": "其它区",
4504
	    "430800": "张家界市",
4505
	    "430802": "永定区",
4506
	    "430811": "武陵源区",
4507
	    "430821": "慈利县",
4508
	    "430822": "桑植县",
4509
	    "430823": "其它区",
4510
	    "430900": "益阳市",
4511
	    "430902": "资阳区",
4512
	    "430903": "赫山区",
4513
	    "430921": "南县",
4514
	    "430922": "桃江县",
4515
	    "430923": "安化县",
4516
	    "430981": "沅江市",
4517
	    "430982": "其它区",
4518
	    "431000": "郴州市",
4519
	    "431002": "北湖区",
4520
	    "431003": "苏仙区",
4521
	    "431021": "桂阳县",
4522
	    "431022": "宜章县",
4523
	    "431023": "永兴县",
4524
	    "431024": "嘉禾县",
4525
	    "431025": "临武县",
4526
	    "431026": "汝城县",
4527
	    "431027": "桂东县",
4528
	    "431028": "安仁县",
4529
	    "431081": "资兴市",
4530
	    "431082": "其它区",
4531
	    "431100": "永州市",
4532
	    "431102": "零陵区",
4533
	    "431103": "冷水滩区",
4534
	    "431121": "祁阳县",
4535
	    "431122": "东安县",
4536
	    "431123": "双牌县",
4537
	    "431124": "道县",
4538
	    "431125": "江永县",
4539
	    "431126": "宁远县",
4540
	    "431127": "蓝山县",
4541
	    "431128": "新田县",
4542
	    "431129": "江华瑶族自治县",
4543
	    "431130": "其它区",
4544
	    "431200": "怀化市",
4545
	    "431202": "鹤城区",
4546
	    "431221": "中方县",
4547
	    "431222": "沅陵县",
4548
	    "431223": "辰溪县",
4549
	    "431224": "溆浦县",
4550
	    "431225": "会同县",
4551
	    "431226": "麻阳苗族自治县",
4552
	    "431227": "新晃侗族自治县",
4553
	    "431228": "芷江侗族自治县",
4554
	    "431229": "靖州苗族侗族自治县",
4555
	    "431230": "通道侗族自治县",
4556
	    "431281": "洪江市",
4557
	    "431282": "其它区",
4558
	    "431300": "娄底市",
4559
	    "431302": "娄星区",
4560
	    "431321": "双峰县",
4561
	    "431322": "新化县",
4562
	    "431381": "冷水江市",
4563
	    "431382": "涟源市",
4564
	    "431383": "其它区",
4565
	    "433100": "湘西土家族苗族自治州",
4566
	    "433101": "吉首市",
4567
	    "433122": "泸溪县",
4568
	    "433123": "凤凰县",
4569
	    "433124": "花垣县",
4570
	    "433125": "保靖县",
4571
	    "433126": "古丈县",
4572
	    "433127": "永顺县",
4573
	    "433130": "龙山县",
4574
	    "433131": "其它区",
4575
	    "440000": "广东省",
4576
	    "440100": "广州市",
4577
	    "440103": "荔湾区",
4578
	    "440104": "越秀区",
4579
	    "440105": "海珠区",
4580
	    "440106": "天河区",
4581
	    "440111": "白云区",
4582
	    "440112": "黄埔区",
4583
	    "440113": "番禺区",
4584
	    "440114": "花都区",
4585
	    "440115": "南沙区",
4586
	    "440116": "萝岗区",
4587
	    "440183": "增城市",
4588
	    "440184": "从化市",
4589
	    "440189": "其它区",
4590
	    "440200": "韶关市",
4591
	    "440203": "武江区",
4592
	    "440204": "浈江区",
4593
	    "440205": "曲江区",
4594
	    "440222": "始兴县",
4595
	    "440224": "仁化县",
4596
	    "440229": "翁源县",
4597
	    "440232": "乳源瑶族自治县",
4598
	    "440233": "新丰县",
4599
	    "440281": "乐昌市",
4600
	    "440282": "南雄市",
4601
	    "440283": "其它区",
4602
	    "440300": "深圳市",
4603
	    "440303": "罗湖区",
4604
	    "440304": "福田区",
4605
	    "440305": "南山区",
4606
	    "440306": "宝安区",
4607
	    "440307": "龙岗区",
4608
	    "440308": "盐田区",
4609
	    "440309": "其它区",
4610
	    "440320": "光明新区",
4611
	    "440321": "坪山新区",
4612
	    "440322": "大鹏新区",
4613
	    "440323": "龙华新区",
4614
	    "440400": "珠海市",
4615
	    "440402": "香洲区",
4616
	    "440403": "斗门区",
4617
	    "440404": "金湾区",
4618
	    "440488": "其它区",
4619
	    "440500": "汕头市",
4620
	    "440507": "龙湖区",
4621
	    "440511": "金平区",
4622
	    "440512": "濠江区",
4623
	    "440513": "潮阳区",
4624
	    "440514": "潮南区",
4625
	    "440515": "澄海区",
4626
	    "440523": "南澳县",
4627
	    "440524": "其它区",
4628
	    "440600": "佛山市",
4629
	    "440604": "禅城区",
4630
	    "440605": "南海区",
4631
	    "440606": "顺德区",
4632
	    "440607": "三水区",
4633
	    "440608": "高明区",
4634
	    "440609": "其它区",
4635
	    "440700": "江门市",
4636
	    "440703": "蓬江区",
4637
	    "440704": "江海区",
4638
	    "440705": "新会区",
4639
	    "440781": "台山市",
4640
	    "440783": "开平市",
4641
	    "440784": "鹤山市",
4642
	    "440785": "恩平市",
4643
	    "440786": "其它区",
4644
	    "440800": "湛江市",
4645
	    "440802": "赤坎区",
4646
	    "440803": "霞山区",
4647
	    "440804": "坡头区",
4648
	    "440811": "麻章区",
4649
	    "440823": "遂溪县",
4650
	    "440825": "徐闻县",
4651
	    "440881": "廉江市",
4652
	    "440882": "雷州市",
4653
	    "440883": "吴川市",
4654
	    "440884": "其它区",
4655
	    "440900": "茂名市",
4656
	    "440902": "茂南区",
4657
	    "440903": "茂港区",
4658
	    "440923": "电白县",
4659
	    "440981": "高州市",
4660
	    "440982": "化州市",
4661
	    "440983": "信宜市",
4662
	    "440984": "其它区",
4663
	    "441200": "肇庆市",
4664
	    "441202": "端州区",
4665
	    "441203": "鼎湖区",
4666
	    "441223": "广宁县",
4667
	    "441224": "怀集县",
4668
	    "441225": "封开县",
4669
	    "441226": "德庆县",
4670
	    "441283": "高要市",
4671
	    "441284": "四会市",
4672
	    "441285": "其它区",
4673
	    "441300": "惠州市",
4674
	    "441302": "惠城区",
4675
	    "441303": "惠阳区",
4676
	    "441322": "博罗县",
4677
	    "441323": "惠东县",
4678
	    "441324": "龙门县",
4679
	    "441325": "其它区",
4680
	    "441400": "梅州市",
4681
	    "441402": "梅江区",
4682
	    "441421": "梅县",
4683
	    "441422": "大埔县",
4684
	    "441423": "丰顺县",
4685
	    "441424": "五华县",
4686
	    "441426": "平远县",
4687
	    "441427": "蕉岭县",
4688
	    "441481": "兴宁市",
4689
	    "441482": "其它区",
4690
	    "441500": "汕尾市",
4691
	    "441502": "城区",
4692
	    "441521": "海丰县",
4693
	    "441523": "陆河县",
4694
	    "441581": "陆丰市",
4695
	    "441582": "其它区",
4696
	    "441600": "河源市",
4697
	    "441602": "源城区",
4698
	    "441621": "紫金县",
4699
	    "441622": "龙川县",
4700
	    "441623": "连平县",
4701
	    "441624": "和平县",
4702
	    "441625": "东源县",
4703
	    "441626": "其它区",
4704
	    "441700": "阳江市",
4705
	    "441702": "江城区",
4706
	    "441721": "阳西县",
4707
	    "441723": "阳东县",
4708
	    "441781": "阳春市",
4709
	    "441782": "其它区",
4710
	    "441800": "清远市",
4711
	    "441802": "清城区",
4712
	    "441821": "佛冈县",
4713
	    "441823": "阳山县",
4714
	    "441825": "连山壮族瑶族自治县",
4715
	    "441826": "连南瑶族自治县",
4716
	    "441827": "清新区",
4717
	    "441881": "英德市",
4718
	    "441882": "连州市",
4719
	    "441883": "其它区",
4720
	    "441900": "东莞市",
4721
	    "442000": "中山市",
4722
	    "442101": "东沙群岛",
4723
	    "445100": "潮州市",
4724
	    "445102": "湘桥区",
4725
	    "445121": "潮安区",
4726
	    "445122": "饶平县",
4727
	    "445186": "其它区",
4728
	    "445200": "揭阳市",
4729
	    "445202": "榕城区",
4730
	    "445221": "揭东区",
4731
	    "445222": "揭西县",
4732
	    "445224": "惠来县",
4733
	    "445281": "普宁市",
4734
	    "445285": "其它区",
4735
	    "445300": "云浮市",
4736
	    "445302": "云城区",
4737
	    "445321": "新兴县",
4738
	    "445322": "郁南县",
4739
	    "445323": "云安县",
4740
	    "445381": "罗定市",
4741
	    "445382": "其它区",
4742
	    "450000": "广西壮族自治区",
4743
	    "450100": "南宁市",
4744
	    "450102": "兴宁区",
4745
	    "450103": "青秀区",
4746
	    "450105": "江南区",
4747
	    "450107": "西乡塘区",
4748
	    "450108": "良庆区",
4749
	    "450109": "邕宁区",
4750
	    "450122": "武鸣县",
4751
	    "450123": "隆安县",
4752
	    "450124": "马山县",
4753
	    "450125": "上林县",
4754
	    "450126": "宾阳县",
4755
	    "450127": "横县",
4756
	    "450128": "其它区",
4757
	    "450200": "柳州市",
4758
	    "450202": "城中区",
4759
	    "450203": "鱼峰区",
4760
	    "450204": "柳南区",
4761
	    "450205": "柳北区",
4762
	    "450221": "柳江县",
4763
	    "450222": "柳城县",
4764
	    "450223": "鹿寨县",
4765
	    "450224": "融安县",
4766
	    "450225": "融水苗族自治县",
4767
	    "450226": "三江侗族自治县",
4768
	    "450227": "其它区",
4769
	    "450300": "桂林市",
4770
	    "450302": "秀峰区",
4771
	    "450303": "叠彩区",
4772
	    "450304": "象山区",
4773
	    "450305": "七星区",
4774
	    "450311": "雁山区",
4775
	    "450321": "阳朔县",
4776
	    "450322": "临桂区",
4777
	    "450323": "灵川县",
4778
	    "450324": "全州县",
4779
	    "450325": "兴安县",
4780
	    "450326": "永福县",
4781
	    "450327": "灌阳县",
4782
	    "450328": "龙胜各族自治县",
4783
	    "450329": "资源县",
4784
	    "450330": "平乐县",
4785
	    "450331": "荔浦县",
4786
	    "450332": "恭城瑶族自治县",
4787
	    "450333": "其它区",
4788
	    "450400": "梧州市",
4789
	    "450403": "万秀区",
4790
	    "450405": "长洲区",
4791
	    "450406": "龙圩区",
4792
	    "450421": "苍梧县",
4793
	    "450422": "藤县",
4794
	    "450423": "蒙山县",
4795
	    "450481": "岑溪市",
4796
	    "450482": "其它区",
4797
	    "450500": "北海市",
4798
	    "450502": "海城区",
4799
	    "450503": "银海区",
4800
	    "450512": "铁山港区",
4801
	    "450521": "合浦县",
4802
	    "450522": "其它区",
4803
	    "450600": "防城港市",
4804
	    "450602": "港口区",
4805
	    "450603": "防城区",
4806
	    "450621": "上思县",
4807
	    "450681": "东兴市",
4808
	    "450682": "其它区",
4809
	    "450700": "钦州市",
4810
	    "450702": "钦南区",
4811
	    "450703": "钦北区",
4812
	    "450721": "灵山县",
4813
	    "450722": "浦北县",
4814
	    "450723": "其它区",
4815
	    "450800": "贵港市",
4816
	    "450802": "港北区",
4817
	    "450803": "港南区",
4818
	    "450804": "覃塘区",
4819
	    "450821": "平南县",
4820
	    "450881": "桂平市",
4821
	    "450882": "其它区",
4822
	    "450900": "玉林市",
4823
	    "450902": "玉州区",
4824
	    "450903": "福绵区",
4825
	    "450921": "容县",
4826
	    "450922": "陆川县",
4827
	    "450923": "博白县",
4828
	    "450924": "兴业县",
4829
	    "450981": "北流市",
4830
	    "450982": "其它区",
4831
	    "451000": "百色市",
4832
	    "451002": "右江区",
4833
	    "451021": "田阳县",
4834
	    "451022": "田东县",
4835
	    "451023": "平果县",
4836
	    "451024": "德保县",
4837
	    "451025": "靖西县",
4838
	    "451026": "那坡县",
4839
	    "451027": "凌云县",
4840
	    "451028": "乐业县",
4841
	    "451029": "田林县",
4842
	    "451030": "西林县",
4843
	    "451031": "隆林各族自治县",
4844
	    "451032": "其它区",
4845
	    "451100": "贺州市",
4846
	    "451102": "八步区",
4847
	    "451119": "平桂管理区",
4848
	    "451121": "昭平县",
4849
	    "451122": "钟山县",
4850
	    "451123": "富川瑶族自治县",
4851
	    "451124": "其它区",
4852
	    "451200": "河池市",
4853
	    "451202": "金城江区",
4854
	    "451221": "南丹县",
4855
	    "451222": "天峨县",
4856
	    "451223": "凤山县",
4857
	    "451224": "东兰县",
4858
	    "451225": "罗城仫佬族自治县",
4859
	    "451226": "环江毛南族自治县",
4860
	    "451227": "巴马瑶族自治县",
4861
	    "451228": "都安瑶族自治县",
4862
	    "451229": "大化瑶族自治县",
4863
	    "451281": "宜州市",
4864
	    "451282": "其它区",
4865
	    "451300": "来宾市",
4866
	    "451302": "兴宾区",
4867
	    "451321": "忻城县",
4868
	    "451322": "象州县",
4869
	    "451323": "武宣县",
4870
	    "451324": "金秀瑶族自治县",
4871
	    "451381": "合山市",
4872
	    "451382": "其它区",
4873
	    "451400": "崇左市",
4874
	    "451402": "江州区",
4875
	    "451421": "扶绥县",
4876
	    "451422": "宁明县",
4877
	    "451423": "龙州县",
4878
	    "451424": "大新县",
4879
	    "451425": "天等县",
4880
	    "451481": "凭祥市",
4881
	    "451482": "其它区",
4882
	    "460000": "海南省",
4883
	    "460100": "海口市",
4884
	    "460105": "秀英区",
4885
	    "460106": "龙华区",
4886
	    "460107": "琼山区",
4887
	    "460108": "美兰区",
4888
	    "460109": "其它区",
4889
	    "460200": "三亚市",
4890
	    "460300": "三沙市",
4891
	    "460321": "西沙群岛",
4892
	    "460322": "南沙群岛",
4893
	    "460323": "中沙群岛的岛礁及其海域",
4894
	    "469001": "五指山市",
4895
	    "469002": "琼海市",
4896
	    "469003": "儋州市",
4897
	    "469005": "文昌市",
4898
	    "469006": "万宁市",
4899
	    "469007": "东方市",
4900
	    "469025": "定安县",
4901
	    "469026": "屯昌县",
4902
	    "469027": "澄迈县",
4903
	    "469028": "临高县",
4904
	    "469030": "白沙黎族自治县",
4905
	    "469031": "昌江黎族自治县",
4906
	    "469033": "乐东黎族自治县",
4907
	    "469034": "陵水黎族自治县",
4908
	    "469035": "保亭黎族苗族自治县",
4909
	    "469036": "琼中黎族苗族自治县",
4910
	    "471005": "其它区",
4911
	    "500000": "重庆",
4912
	    "500100": "重庆市",
4913
	    "500101": "万州区",
4914
	    "500102": "涪陵区",
4915
	    "500103": "渝中区",
4916
	    "500104": "大渡口区",
4917
	    "500105": "江北区",
4918
	    "500106": "沙坪坝区",
4919
	    "500107": "九龙坡区",
4920
	    "500108": "南岸区",
4921
	    "500109": "北碚区",
4922
	    "500110": "万盛区",
4923
	    "500111": "双桥区",
4924
	    "500112": "渝北区",
4925
	    "500113": "巴南区",
4926
	    "500114": "黔江区",
4927
	    "500115": "长寿区",
4928
	    "500222": "綦江区",
4929
	    "500223": "潼南县",
4930
	    "500224": "铜梁县",
4931
	    "500225": "大足区",
4932
	    "500226": "荣昌县",
4933
	    "500227": "璧山县",
4934
	    "500228": "梁平县",
4935
	    "500229": "城口县",
4936
	    "500230": "丰都县",
4937
	    "500231": "垫江县",
4938
	    "500232": "武隆县",
4939
	    "500233": "忠县",
4940
	    "500234": "开县",
4941
	    "500235": "云阳县",
4942
	    "500236": "奉节县",
4943
	    "500237": "巫山县",
4944
	    "500238": "巫溪县",
4945
	    "500240": "石柱土家族自治县",
4946
	    "500241": "秀山土家族苗族自治县",
4947
	    "500242": "酉阳土家族苗族自治县",
4948
	    "500243": "彭水苗族土家族自治县",
4949
	    "500381": "江津区",
4950
	    "500382": "合川区",
4951
	    "500383": "永川区",
4952
	    "500384": "南川区",
4953
	    "500385": "其它区",
4954
	    "510000": "四川省",
4955
	    "510100": "成都市",
4956
	    "510104": "锦江区",
4957
	    "510105": "青羊区",
4958
	    "510106": "金牛区",
4959
	    "510107": "武侯区",
4960
	    "510108": "成华区",
4961
	    "510112": "龙泉驿区",
4962
	    "510113": "青白江区",
4963
	    "510114": "新都区",
4964
	    "510115": "温江区",
4965
	    "510121": "金堂县",
4966
	    "510122": "双流县",
4967
	    "510124": "郫县",
4968
	    "510129": "大邑县",
4969
	    "510131": "蒲江县",
4970
	    "510132": "新津县",
4971
	    "510181": "都江堰市",
4972
	    "510182": "彭州市",
4973
	    "510183": "邛崃市",
4974
	    "510184": "崇州市",
4975
	    "510185": "其它区",
4976
	    "510300": "自贡市",
4977
	    "510302": "自流井区",
4978
	    "510303": "贡井区",
4979
	    "510304": "大安区",
4980
	    "510311": "沿滩区",
4981
	    "510321": "荣县",
4982
	    "510322": "富顺县",
4983
	    "510323": "其它区",
4984
	    "510400": "攀枝花市",
4985
	    "510402": "东区",
4986
	    "510403": "西区",
4987
	    "510411": "仁和区",
4988
	    "510421": "米易县",
4989
	    "510422": "盐边县",
4990
	    "510423": "其它区",
4991
	    "510500": "泸州市",
4992
	    "510502": "江阳区",
4993
	    "510503": "纳溪区",
4994
	    "510504": "龙马潭区",
4995
	    "510521": "泸县",
4996
	    "510522": "合江县",
4997
	    "510524": "叙永县",
4998
	    "510525": "古蔺县",
4999
	    "510526": "其它区",
5000
	    "510600": "德阳市",
5001
	    "510603": "旌阳区",
5002
	    "510623": "中江县",
5003
	    "510626": "罗江县",
5004
	    "510681": "广汉市",
5005
	    "510682": "什邡市",
5006
	    "510683": "绵竹市",
5007
	    "510684": "其它区",
5008
	    "510700": "绵阳市",
5009
	    "510703": "涪城区",
5010
	    "510704": "游仙区",
5011
	    "510722": "三台县",
5012
	    "510723": "盐亭县",
5013
	    "510724": "安县",
5014
	    "510725": "梓潼县",
5015
	    "510726": "北川羌族自治县",
5016
	    "510727": "平武县",
5017
	    "510781": "江油市",
5018
	    "510782": "其它区",
5019
	    "510800": "广元市",
5020
	    "510802": "利州区",
5021
	    "510811": "昭化区",
5022
	    "510812": "朝天区",
5023
	    "510821": "旺苍县",
5024
	    "510822": "青川县",
5025
	    "510823": "剑阁县",
5026
	    "510824": "苍溪县",
5027
	    "510825": "其它区",
5028
	    "510900": "遂宁市",
5029
	    "510903": "船山区",
5030
	    "510904": "安居区",
5031
	    "510921": "蓬溪县",
5032
	    "510922": "射洪县",
5033
	    "510923": "大英县",
5034
	    "510924": "其它区",
5035
	    "511000": "内江市",
5036
	    "511002": "市中区",
5037
	    "511011": "东兴区",
5038
	    "511024": "威远县",
5039
	    "511025": "资中县",
5040
	    "511028": "隆昌县",
5041
	    "511029": "其它区",
5042
	    "511100": "乐山市",
5043
	    "511102": "市中区",
5044
	    "511111": "沙湾区",
5045
	    "511112": "五通桥区",
5046
	    "511113": "金口河区",
5047
	    "511123": "犍为县",
5048
	    "511124": "井研县",
5049
	    "511126": "夹江县",
5050
	    "511129": "沐川县",
5051
	    "511132": "峨边彝族自治县",
5052
	    "511133": "马边彝族自治县",
5053
	    "511181": "峨眉山市",
5054
	    "511182": "其它区",
5055
	    "511300": "南充市",
5056
	    "511302": "顺庆区",
5057
	    "511303": "高坪区",
5058
	    "511304": "嘉陵区",
5059
	    "511321": "南部县",
5060
	    "511322": "营山县",
5061
	    "511323": "蓬安县",
5062
	    "511324": "仪陇县",
5063
	    "511325": "西充县",
5064
	    "511381": "阆中市",
5065
	    "511382": "其它区",
5066
	    "511400": "眉山市",
5067
	    "511402": "东坡区",
5068
	    "511421": "仁寿县",
5069
	    "511422": "彭山县",
5070
	    "511423": "洪雅县",
5071
	    "511424": "丹棱县",
5072
	    "511425": "青神县",
5073
	    "511426": "其它区",
5074
	    "511500": "宜宾市",
5075
	    "511502": "翠屏区",
5076
	    "511521": "宜宾县",
5077
	    "511522": "南溪区",
5078
	    "511523": "江安县",
5079
	    "511524": "长宁县",
5080
	    "511525": "高县",
5081
	    "511526": "珙县",
5082
	    "511527": "筠连县",
5083
	    "511528": "兴文县",
5084
	    "511529": "屏山县",
5085
	    "511530": "其它区",
5086
	    "511600": "广安市",
5087
	    "511602": "广安区",
5088
	    "511603": "前锋区",
5089
	    "511621": "岳池县",
5090
	    "511622": "武胜县",
5091
	    "511623": "邻水县",
5092
	    "511681": "华蓥市",
5093
	    "511683": "其它区",
5094
	    "511700": "达州市",
5095
	    "511702": "通川区",
5096
	    "511721": "达川区",
5097
	    "511722": "宣汉县",
5098
	    "511723": "开江县",
5099
	    "511724": "大竹县",
5100
	    "511725": "渠县",
5101
	    "511781": "万源市",
5102
	    "511782": "其它区",
5103
	    "511800": "雅安市",
5104
	    "511802": "雨城区",
5105
	    "511821": "名山区",
5106
	    "511822": "荥经县",
5107
	    "511823": "汉源县",
5108
	    "511824": "石棉县",
5109
	    "511825": "天全县",
5110
	    "511826": "芦山县",
5111
	    "511827": "宝兴县",
5112
	    "511828": "其它区",
5113
	    "511900": "巴中市",
5114
	    "511902": "巴州区",
5115
	    "511903": "恩阳区",
5116
	    "511921": "通江县",
5117
	    "511922": "南江县",
5118
	    "511923": "平昌县",
5119
	    "511924": "其它区",
5120
	    "512000": "资阳市",
5121
	    "512002": "雁江区",
5122
	    "512021": "安岳县",
5123
	    "512022": "乐至县",
5124
	    "512081": "简阳市",
5125
	    "512082": "其它区",
5126
	    "513200": "阿坝藏族羌族自治州",
5127
	    "513221": "汶川县",
5128
	    "513222": "理县",
5129
	    "513223": "茂县",
5130
	    "513224": "松潘县",
5131
	    "513225": "九寨沟县",
5132
	    "513226": "金川县",
5133
	    "513227": "小金县",
5134
	    "513228": "黑水县",
5135
	    "513229": "马尔康县",
5136
	    "513230": "壤塘县",
5137
	    "513231": "阿坝县",
5138
	    "513232": "若尔盖县",
5139
	    "513233": "红原县",
5140
	    "513234": "其它区",
5141
	    "513300": "甘孜藏族自治州",
5142
	    "513321": "康定县",
5143
	    "513322": "泸定县",
5144
	    "513323": "丹巴县",
5145
	    "513324": "九龙县",
5146
	    "513325": "雅江县",
5147
	    "513326": "道孚县",
5148
	    "513327": "炉霍县",
5149
	    "513328": "甘孜县",
5150
	    "513329": "新龙县",
5151
	    "513330": "德格县",
5152
	    "513331": "白玉县",
5153
	    "513332": "石渠县",
5154
	    "513333": "色达县",
5155
	    "513334": "理塘县",
5156
	    "513335": "巴塘县",
5157
	    "513336": "乡城县",
5158
	    "513337": "稻城县",
5159
	    "513338": "得荣县",
5160
	    "513339": "其它区",
5161
	    "513400": "凉山彝族自治州",
5162
	    "513401": "西昌市",
5163
	    "513422": "木里藏族自治县",
5164
	    "513423": "盐源县",
5165
	    "513424": "德昌县",
5166
	    "513425": "会理县",
5167
	    "513426": "会东县",
5168
	    "513427": "宁南县",
5169
	    "513428": "普格县",
5170
	    "513429": "布拖县",
5171
	    "513430": "金阳县",
5172
	    "513431": "昭觉县",
5173
	    "513432": "喜德县",
5174
	    "513433": "冕宁县",
5175
	    "513434": "越西县",
5176
	    "513435": "甘洛县",
5177
	    "513436": "美姑县",
5178
	    "513437": "雷波县",
5179
	    "513438": "其它区",
5180
	    "520000": "贵州省",
5181
	    "520100": "贵阳市",
5182
	    "520102": "南明区",
5183
	    "520103": "云岩区",
5184
	    "520111": "花溪区",
5185
	    "520112": "乌当区",
5186
	    "520113": "白云区",
5187
	    "520121": "开阳县",
5188
	    "520122": "息烽县",
5189
	    "520123": "修文县",
5190
	    "520151": "观山湖区",
5191
	    "520181": "清镇市",
5192
	    "520182": "其它区",
5193
	    "520200": "六盘水市",
5194
	    "520201": "钟山区",
5195
	    "520203": "六枝特区",
5196
	    "520221": "水城县",
5197
	    "520222": "盘县",
5198
	    "520223": "其它区",
5199
	    "520300": "遵义市",
5200
	    "520302": "红花岗区",
5201
	    "520303": "汇川区",
5202
	    "520321": "遵义县",
5203
	    "520322": "桐梓县",
5204
	    "520323": "绥阳县",
5205
	    "520324": "正安县",
5206
	    "520325": "道真仡佬族苗族自治县",
5207
	    "520326": "务川仡佬族苗族自治县",
5208
	    "520327": "凤冈县",
5209
	    "520328": "湄潭县",
5210
	    "520329": "余庆县",
5211
	    "520330": "习水县",
5212
	    "520381": "赤水市",
5213
	    "520382": "仁怀市",
5214
	    "520383": "其它区",
5215
	    "520400": "安顺市",
5216
	    "520402": "西秀区",
5217
	    "520421": "平坝县",
5218
	    "520422": "普定县",
5219
	    "520423": "镇宁布依族苗族自治县",
5220
	    "520424": "关岭布依族苗族自治县",
5221
	    "520425": "紫云苗族布依族自治县",
5222
	    "520426": "其它区",
5223
	    "522200": "铜仁市",
5224
	    "522201": "碧江区",
5225
	    "522222": "江口县",
5226
	    "522223": "玉屏侗族自治县",
5227
	    "522224": "石阡县",
5228
	    "522225": "思南县",
5229
	    "522226": "印江土家族苗族自治县",
5230
	    "522227": "德江县",
5231
	    "522228": "沿河土家族自治县",
5232
	    "522229": "松桃苗族自治县",
5233
	    "522230": "万山区",
5234
	    "522231": "其它区",
5235
	    "522300": "黔西南布依族苗族自治州",
5236
	    "522301": "兴义市",
5237
	    "522322": "兴仁县",
5238
	    "522323": "普安县",
5239
	    "522324": "晴隆县",
5240
	    "522325": "贞丰县",
5241
	    "522326": "望谟县",
5242
	    "522327": "册亨县",
5243
	    "522328": "安龙县",
5244
	    "522329": "其它区",
5245
	    "522400": "毕节市",
5246
	    "522401": "七星关区",
5247
	    "522422": "大方县",
5248
	    "522423": "黔西县",
5249
	    "522424": "金沙县",
5250
	    "522425": "织金县",
5251
	    "522426": "纳雍县",
5252
	    "522427": "威宁彝族回族苗族自治县",
5253
	    "522428": "赫章县",
5254
	    "522429": "其它区",
5255
	    "522600": "黔东南苗族侗族自治州",
5256
	    "522601": "凯里市",
5257
	    "522622": "黄平县",
5258
	    "522623": "施秉县",
5259
	    "522624": "三穗县",
5260
	    "522625": "镇远县",
5261
	    "522626": "岑巩县",
5262
	    "522627": "天柱县",
5263
	    "522628": "锦屏县",
5264
	    "522629": "剑河县",
5265
	    "522630": "台江县",
5266
	    "522631": "黎平县",
5267
	    "522632": "榕江县",
5268
	    "522633": "从江县",
5269
	    "522634": "雷山县",
5270
	    "522635": "麻江县",
5271
	    "522636": "丹寨县",
5272
	    "522637": "其它区",
5273
	    "522700": "黔南布依族苗族自治州",
5274
	    "522701": "都匀市",
5275
	    "522702": "福泉市",
5276
	    "522722": "荔波县",
5277
	    "522723": "贵定县",
5278
	    "522725": "瓮安县",
5279
	    "522726": "独山县",
5280
	    "522727": "平塘县",
5281
	    "522728": "罗甸县",
5282
	    "522729": "长顺县",
5283
	    "522730": "龙里县",
5284
	    "522731": "惠水县",
5285
	    "522732": "三都水族自治县",
5286
	    "522733": "其它区",
5287
	    "530000": "云南省",
5288
	    "530100": "昆明市",
5289
	    "530102": "五华区",
5290
	    "530103": "盘龙区",
5291
	    "530111": "官渡区",
5292
	    "530112": "西山区",
5293
	    "530113": "东川区",
5294
	    "530121": "呈贡区",
5295
	    "530122": "晋宁县",
5296
	    "530124": "富民县",
5297
	    "530125": "宜良县",
5298
	    "530126": "石林彝族自治县",
5299
	    "530127": "嵩明县",
5300
	    "530128": "禄劝彝族苗族自治县",
5301
	    "530129": "寻甸回族彝族自治县",
5302
	    "530181": "安宁市",
5303
	    "530182": "其它区",
5304
	    "530300": "曲靖市",
5305
	    "530302": "麒麟区",
5306
	    "530321": "马龙县",
5307
	    "530322": "陆良县",
5308
	    "530323": "师宗县",
5309
	    "530324": "罗平县",
5310
	    "530325": "富源县",
5311
	    "530326": "会泽县",
5312
	    "530328": "沾益县",
5313
	    "530381": "宣威市",
5314
	    "530382": "其它区",
5315
	    "530400": "玉溪市",
5316
	    "530402": "红塔区",
5317
	    "530421": "江川县",
5318
	    "530422": "澄江县",
5319
	    "530423": "通海县",
5320
	    "530424": "华宁县",
5321
	    "530425": "易门县",
5322
	    "530426": "峨山彝族自治县",
5323
	    "530427": "新平彝族傣族自治县",
5324
	    "530428": "元江哈尼族彝族傣族自治县",
5325
	    "530429": "其它区",
5326
	    "530500": "保山市",
5327
	    "530502": "隆阳区",
5328
	    "530521": "施甸县",
5329
	    "530522": "腾冲县",
5330
	    "530523": "龙陵县",
5331
	    "530524": "昌宁县",
5332
	    "530525": "其它区",
5333
	    "530600": "昭通市",
5334
	    "530602": "昭阳区",
5335
	    "530621": "鲁甸县",
5336
	    "530622": "巧家县",
5337
	    "530623": "盐津县",
5338
	    "530624": "大关县",
5339
	    "530625": "永善县",
5340
	    "530626": "绥江县",
5341
	    "530627": "镇雄县",
5342
	    "530628": "彝良县",
5343
	    "530629": "威信县",
5344
	    "530630": "水富县",
5345
	    "530631": "其它区",
5346
	    "530700": "丽江市",
5347
	    "530702": "古城区",
5348
	    "530721": "玉龙纳西族自治县",
5349
	    "530722": "永胜县",
5350
	    "530723": "华坪县",
5351
	    "530724": "宁蒗彝族自治县",
5352
	    "530725": "其它区",
5353
	    "530800": "普洱市",
5354
	    "530802": "思茅区",
5355
	    "530821": "宁洱哈尼族彝族自治县",
5356
	    "530822": "墨江哈尼族自治县",
5357
	    "530823": "景东彝族自治县",
5358
	    "530824": "景谷傣族彝族自治县",
5359
	    "530825": "镇沅彝族哈尼族拉祜族自治县",
5360
	    "530826": "江城哈尼族彝族自治县",
5361
	    "530827": "孟连傣族拉祜族佤族自治县",
5362
	    "530828": "澜沧拉祜族自治县",
5363
	    "530829": "西盟佤族自治县",
5364
	    "530830": "其它区",
5365
	    "530900": "临沧市",
5366
	    "530902": "临翔区",
5367
	    "530921": "凤庆县",
5368
	    "530922": "云县",
5369
	    "530923": "永德县",
5370
	    "530924": "镇康县",
5371
	    "530925": "双江拉祜族佤族布朗族傣族自治县",
5372
	    "530926": "耿马傣族佤族自治县",
5373
	    "530927": "沧源佤族自治县",
5374
	    "530928": "其它区",
5375
	    "532300": "楚雄彝族自治州",
5376
	    "532301": "楚雄市",
5377
	    "532322": "双柏县",
5378
	    "532323": "牟定县",
5379
	    "532324": "南华县",
5380
	    "532325": "姚安县",
5381
	    "532326": "大姚县",
5382
	    "532327": "永仁县",
5383
	    "532328": "元谋县",
5384
	    "532329": "武定县",
5385
	    "532331": "禄丰县",
5386
	    "532332": "其它区",
5387
	    "532500": "红河哈尼族彝族自治州",
5388
	    "532501": "个旧市",
5389
	    "532502": "开远市",
5390
	    "532522": "蒙自市",
5391
	    "532523": "屏边苗族自治县",
5392
	    "532524": "建水县",
5393
	    "532525": "石屏县",
5394
	    "532526": "弥勒市",
5395
	    "532527": "泸西县",
5396
	    "532528": "元阳县",
5397
	    "532529": "红河县",
5398
	    "532530": "金平苗族瑶族傣族自治县",
5399
	    "532531": "绿春县",
5400
	    "532532": "河口瑶族自治县",
5401
	    "532533": "其它区",
5402
	    "532600": "文山壮族苗族自治州",
5403
	    "532621": "文山市",
5404
	    "532622": "砚山县",
5405
	    "532623": "西畴县",
5406
	    "532624": "麻栗坡县",
5407
	    "532625": "马关县",
5408
	    "532626": "丘北县",
5409
	    "532627": "广南县",
5410
	    "532628": "富宁县",
5411
	    "532629": "其它区",
5412
	    "532800": "西双版纳傣族自治州",
5413
	    "532801": "景洪市",
5414
	    "532822": "勐海县",
5415
	    "532823": "勐腊县",
5416
	    "532824": "其它区",
5417
	    "532900": "大理白族自治州",
5418
	    "532901": "大理市",
5419
	    "532922": "漾濞彝族自治县",
5420
	    "532923": "祥云县",
5421
	    "532924": "宾川县",
5422
	    "532925": "弥渡县",
5423
	    "532926": "南涧彝族自治县",
5424
	    "532927": "巍山彝族回族自治县",
5425
	    "532928": "永平县",
5426
	    "532929": "云龙县",
5427
	    "532930": "洱源县",
5428
	    "532931": "剑川县",
5429
	    "532932": "鹤庆县",
5430
	    "532933": "其它区",
5431
	    "533100": "德宏傣族景颇族自治州",
5432
	    "533102": "瑞丽市",
5433
	    "533103": "芒市",
5434
	    "533122": "梁河县",
5435
	    "533123": "盈江县",
5436
	    "533124": "陇川县",
5437
	    "533125": "其它区",
5438
	    "533300": "怒江傈僳族自治州",
5439
	    "533321": "泸水县",
5440
	    "533323": "福贡县",
5441
	    "533324": "贡山独龙族怒族自治县",
5442
	    "533325": "兰坪白族普米族自治县",
5443
	    "533326": "其它区",
5444
	    "533400": "迪庆藏族自治州",
5445
	    "533421": "香格里拉县",
5446
	    "533422": "德钦县",
5447
	    "533423": "维西傈僳族自治县",
5448
	    "533424": "其它区",
5449
	    "540000": "西藏自治区",
5450
	    "540100": "拉萨市",
5451
	    "540102": "城关区",
5452
	    "540121": "林周县",
5453
	    "540122": "当雄县",
5454
	    "540123": "尼木县",
5455
	    "540124": "曲水县",
5456
	    "540125": "堆龙德庆县",
5457
	    "540126": "达孜县",
5458
	    "540127": "墨竹工卡县",
5459
	    "540128": "其它区",
5460
	    "542100": "昌都地区",
5461
	    "542121": "昌都县",
5462
	    "542122": "江达县",
5463
	    "542123": "贡觉县",
5464
	    "542124": "类乌齐县",
5465
	    "542125": "丁青县",
5466
	    "542126": "察雅县",
5467
	    "542127": "八宿县",
5468
	    "542128": "左贡县",
5469
	    "542129": "芒康县",
5470
	    "542132": "洛隆县",
5471
	    "542133": "边坝县",
5472
	    "542134": "其它区",
5473
	    "542200": "山南地区",
5474
	    "542221": "乃东县",
5475
	    "542222": "扎囊县",
5476
	    "542223": "贡嘎县",
5477
	    "542224": "桑日县",
5478
	    "542225": "琼结县",
5479
	    "542226": "曲松县",
5480
	    "542227": "措美县",
5481
	    "542228": "洛扎县",
5482
	    "542229": "加查县",
5483
	    "542231": "隆子县",
5484
	    "542232": "错那县",
5485
	    "542233": "浪卡子县",
5486
	    "542234": "其它区",
5487
	    "542300": "日喀则地区",
5488
	    "542301": "日喀则市",
5489
	    "542322": "南木林县",
5490
	    "542323": "江孜县",
5491
	    "542324": "定日县",
5492
	    "542325": "萨迦县",
5493
	    "542326": "拉孜县",
5494
	    "542327": "昂仁县",
5495
	    "542328": "谢通门县",
5496
	    "542329": "白朗县",
5497
	    "542330": "仁布县",
5498
	    "542331": "康马县",
5499
	    "542332": "定结县",
5500
	    "542333": "仲巴县",
5501
	    "542334": "亚东县",
5502
	    "542335": "吉隆县",
5503
	    "542336": "聂拉木县",
5504
	    "542337": "萨嘎县",
5505
	    "542338": "岗巴县",
5506
	    "542339": "其它区",
5507
	    "542400": "那曲地区",
5508
	    "542421": "那曲县",
5509
	    "542422": "嘉黎县",
5510
	    "542423": "比如县",
5511
	    "542424": "聂荣县",
5512
	    "542425": "安多县",
5513
	    "542426": "申扎县",
5514
	    "542427": "索县",
5515
	    "542428": "班戈县",
5516
	    "542429": "巴青县",
5517
	    "542430": "尼玛县",
5518
	    "542431": "其它区",
5519
	    "542432": "双湖县",
5520
	    "542500": "阿里地区",
5521
	    "542521": "普兰县",
5522
	    "542522": "札达县",
5523
	    "542523": "噶尔县",
5524
	    "542524": "日土县",
5525
	    "542525": "革吉县",
5526
	    "542526": "改则县",
5527
	    "542527": "措勤县",
5528
	    "542528": "其它区",
5529
	    "542600": "林芝地区",
5530
	    "542621": "林芝县",
5531
	    "542622": "工布江达县",
5532
	    "542623": "米林县",
5533
	    "542624": "墨脱县",
5534
	    "542625": "波密县",
5535
	    "542626": "察隅县",
5536
	    "542627": "朗县",
5537
	    "542628": "其它区",
5538
	    "610000": "陕西省",
5539
	    "610100": "西安市",
5540
	    "610102": "新城区",
5541
	    "610103": "碑林区",
5542
	    "610104": "莲湖区",
5543
	    "610111": "灞桥区",
5544
	    "610112": "未央区",
5545
	    "610113": "雁塔区",
5546
	    "610114": "阎良区",
5547
	    "610115": "临潼区",
5548
	    "610116": "长安区",
5549
	    "610122": "蓝田县",
5550
	    "610124": "周至县",
5551
	    "610125": "户县",
5552
	    "610126": "高陵县",
5553
	    "610127": "其它区",
5554
	    "610200": "铜川市",
5555
	    "610202": "王益区",
5556
	    "610203": "印台区",
5557
	    "610204": "耀州区",
5558
	    "610222": "宜君县",
5559
	    "610223": "其它区",
5560
	    "610300": "宝鸡市",
5561
	    "610302": "渭滨区",
5562
	    "610303": "金台区",
5563
	    "610304": "陈仓区",
5564
	    "610322": "凤翔县",
5565
	    "610323": "岐山县",
5566
	    "610324": "扶风县",
5567
	    "610326": "眉县",
5568
	    "610327": "陇县",
5569
	    "610328": "千阳县",
5570
	    "610329": "麟游县",
5571
	    "610330": "凤县",
5572
	    "610331": "太白县",
5573
	    "610332": "其它区",
5574
	    "610400": "咸阳市",
5575
	    "610402": "秦都区",
5576
	    "610403": "杨陵区",
5577
	    "610404": "渭城区",
5578
	    "610422": "三原县",
5579
	    "610423": "泾阳县",
5580
	    "610424": "乾县",
5581
	    "610425": "礼泉县",
5582
	    "610426": "永寿县",
5583
	    "610427": "彬县",
5584
	    "610428": "长武县",
5585
	    "610429": "旬邑县",
5586
	    "610430": "淳化县",
5587
	    "610431": "武功县",
5588
	    "610481": "兴平市",
5589
	    "610482": "其它区",
5590
	    "610500": "渭南市",
5591
	    "610502": "临渭区",
5592
	    "610521": "华县",
5593
	    "610522": "潼关县",
5594
	    "610523": "大荔县",
5595
	    "610524": "合阳县",
5596
	    "610525": "澄城县",
5597
	    "610526": "蒲城县",
5598
	    "610527": "白水县",
5599
	    "610528": "富平县",
5600
	    "610581": "韩城市",
5601
	    "610582": "华阴市",
5602
	    "610583": "其它区",
5603
	    "610600": "延安市",
5604
	    "610602": "宝塔区",
5605
	    "610621": "延长县",
5606
	    "610622": "延川县",
5607
	    "610623": "子长县",
5608
	    "610624": "安塞县",
5609
	    "610625": "志丹县",
5610
	    "610626": "吴起县",
5611
	    "610627": "甘泉县",
5612
	    "610628": "富县",
5613
	    "610629": "洛川县",
5614
	    "610630": "宜川县",
5615
	    "610631": "黄龙县",
5616
	    "610632": "黄陵县",
5617
	    "610633": "其它区",
5618
	    "610700": "汉中市",
5619
	    "610702": "汉台区",
5620
	    "610721": "南郑县",
5621
	    "610722": "城固县",
5622
	    "610723": "洋县",
5623
	    "610724": "西乡县",
5624
	    "610725": "勉县",
5625
	    "610726": "宁强县",
5626
	    "610727": "略阳县",
5627
	    "610728": "镇巴县",
5628
	    "610729": "留坝县",
5629
	    "610730": "佛坪县",
5630
	    "610731": "其它区",
5631
	    "610800": "榆林市",
5632
	    "610802": "榆阳区",
5633
	    "610821": "神木县",
5634
	    "610822": "府谷县",
5635
	    "610823": "横山县",
5636
	    "610824": "靖边县",
5637
	    "610825": "定边县",
5638
	    "610826": "绥德县",
5639
	    "610827": "米脂县",
5640
	    "610828": "佳县",
5641
	    "610829": "吴堡县",
5642
	    "610830": "清涧县",
5643
	    "610831": "子洲县",
5644
	    "610832": "其它区",
5645
	    "610900": "安康市",
5646
	    "610902": "汉滨区",
5647
	    "610921": "汉阴县",
5648
	    "610922": "石泉县",
5649
	    "610923": "宁陕县",
5650
	    "610924": "紫阳县",
5651
	    "610925": "岚皋县",
5652
	    "610926": "平利县",
5653
	    "610927": "镇坪县",
5654
	    "610928": "旬阳县",
5655
	    "610929": "白河县",
5656
	    "610930": "其它区",
5657
	    "611000": "商洛市",
5658
	    "611002": "商州区",
5659
	    "611021": "洛南县",
5660
	    "611022": "丹凤县",
5661
	    "611023": "商南县",
5662
	    "611024": "山阳县",
5663
	    "611025": "镇安县",
5664
	    "611026": "柞水县",
5665
	    "611027": "其它区",
5666
	    "620000": "甘肃省",
5667
	    "620100": "兰州市",
5668
	    "620102": "城关区",
5669
	    "620103": "七里河区",
5670
	    "620104": "西固区",
5671
	    "620105": "安宁区",
5672
	    "620111": "红古区",
5673
	    "620121": "永登县",
5674
	    "620122": "皋兰县",
5675
	    "620123": "榆中县",
5676
	    "620124": "其它区",
5677
	    "620200": "嘉峪关市",
5678
	    "620300": "金昌市",
5679
	    "620302": "金川区",
5680
	    "620321": "永昌县",
5681
	    "620322": "其它区",
5682
	    "620400": "白银市",
5683
	    "620402": "白银区",
5684
	    "620403": "平川区",
5685
	    "620421": "靖远县",
5686
	    "620422": "会宁县",
5687
	    "620423": "景泰县",
5688
	    "620424": "其它区",
5689
	    "620500": "天水市",
5690
	    "620502": "秦州区",
5691
	    "620503": "麦积区",
5692
	    "620521": "清水县",
5693
	    "620522": "秦安县",
5694
	    "620523": "甘谷县",
5695
	    "620524": "武山县",
5696
	    "620525": "张家川回族自治县",
5697
	    "620526": "其它区",
5698
	    "620600": "武威市",
5699
	    "620602": "凉州区",
5700
	    "620621": "民勤县",
5701
	    "620622": "古浪县",
5702
	    "620623": "天祝藏族自治县",
5703
	    "620624": "其它区",
5704
	    "620700": "张掖市",
5705
	    "620702": "甘州区",
5706
	    "620721": "肃南裕固族自治县",
5707
	    "620722": "民乐县",
5708
	    "620723": "临泽县",
5709
	    "620724": "高台县",
5710
	    "620725": "山丹县",
5711
	    "620726": "其它区",
5712
	    "620800": "平凉市",
5713
	    "620802": "崆峒区",
5714
	    "620821": "泾川县",
5715
	    "620822": "灵台县",
5716
	    "620823": "崇信县",
5717
	    "620824": "华亭县",
5718
	    "620825": "庄浪县",
5719
	    "620826": "静宁县",
5720
	    "620827": "其它区",
5721
	    "620900": "酒泉市",
5722
	    "620902": "肃州区",
5723
	    "620921": "金塔县",
5724
	    "620922": "瓜州县",
5725
	    "620923": "肃北蒙古族自治县",
5726
	    "620924": "阿克塞哈萨克族自治县",
5727
	    "620981": "玉门市",
5728
	    "620982": "敦煌市",
5729
	    "620983": "其它区",
5730
	    "621000": "庆阳市",
5731
	    "621002": "西峰区",
5732
	    "621021": "庆城县",
5733
	    "621022": "环县",
5734
	    "621023": "华池县",
5735
	    "621024": "合水县",
5736
	    "621025": "正宁县",
5737
	    "621026": "宁县",
5738
	    "621027": "镇原县",
5739
	    "621028": "其它区",
5740
	    "621100": "定西市",
5741
	    "621102": "安定区",
5742
	    "621121": "通渭县",
5743
	    "621122": "陇西县",
5744
	    "621123": "渭源县",
5745
	    "621124": "临洮县",
5746
	    "621125": "漳县",
5747
	    "621126": "岷县",
5748
	    "621127": "其它区",
5749
	    "621200": "陇南市",
5750
	    "621202": "武都区",
5751
	    "621221": "成县",
5752
	    "621222": "文县",
5753
	    "621223": "宕昌县",
5754
	    "621224": "康县",
5755
	    "621225": "西和县",
5756
	    "621226": "礼县",
5757
	    "621227": "徽县",
5758
	    "621228": "两当县",
5759
	    "621229": "其它区",
5760
	    "622900": "临夏回族自治州",
5761
	    "622901": "临夏市",
5762
	    "622921": "临夏县",
5763
	    "622922": "康乐县",
5764
	    "622923": "永靖县",
5765
	    "622924": "广河县",
5766
	    "622925": "和政县",
5767
	    "622926": "东乡族自治县",
5768
	    "622927": "积石山保安族东乡族撒拉族自治县",
5769
	    "622928": "其它区",
5770
	    "623000": "甘南藏族自治州",
5771
	    "623001": "合作市",
5772
	    "623021": "临潭县",
5773
	    "623022": "卓尼县",
5774
	    "623023": "舟曲县",
5775
	    "623024": "迭部县",
5776
	    "623025": "玛曲县",
5777
	    "623026": "碌曲县",
5778
	    "623027": "夏河县",
5779
	    "623028": "其它区",
5780
	    "630000": "青海省",
5781
	    "630100": "西宁市",
5782
	    "630102": "城东区",
5783
	    "630103": "城中区",
5784
	    "630104": "城西区",
5785
	    "630105": "城北区",
5786
	    "630121": "大通回族土族自治县",
5787
	    "630122": "湟中县",
5788
	    "630123": "湟源县",
5789
	    "630124": "其它区",
5790
	    "632100": "海东市",
5791
	    "632121": "平安县",
5792
	    "632122": "民和回族土族自治县",
5793
	    "632123": "乐都区",
5794
	    "632126": "互助土族自治县",
5795
	    "632127": "化隆回族自治县",
5796
	    "632128": "循化撒拉族自治县",
5797
	    "632129": "其它区",
5798
	    "632200": "海北藏族自治州",
5799
	    "632221": "门源回族自治县",
5800
	    "632222": "祁连县",
5801
	    "632223": "海晏县",
5802
	    "632224": "刚察县",
5803
	    "632225": "其它区",
5804
	    "632300": "黄南藏族自治州",
5805
	    "632321": "同仁县",
5806
	    "632322": "尖扎县",
5807
	    "632323": "泽库县",
5808
	    "632324": "河南蒙古族自治县",
5809
	    "632325": "其它区",
5810
	    "632500": "海南藏族自治州",
5811
	    "632521": "共和县",
5812
	    "632522": "同德县",
5813
	    "632523": "贵德县",
5814
	    "632524": "兴海县",
5815
	    "632525": "贵南县",
5816
	    "632526": "其它区",
5817
	    "632600": "果洛藏族自治州",
5818
	    "632621": "玛沁县",
5819
	    "632622": "班玛县",
5820
	    "632623": "甘德县",
5821
	    "632624": "达日县",
5822
	    "632625": "久治县",
5823
	    "632626": "玛多县",
5824
	    "632627": "其它区",
5825
	    "632700": "玉树藏族自治州",
5826
	    "632721": "玉树市",
5827
	    "632722": "杂多县",
5828
	    "632723": "称多县",
5829
	    "632724": "治多县",
5830
	    "632725": "囊谦县",
5831
	    "632726": "曲麻莱县",
5832
	    "632727": "其它区",
5833
	    "632800": "海西蒙古族藏族自治州",
5834
	    "632801": "格尔木市",
5835
	    "632802": "德令哈市",
5836
	    "632821": "乌兰县",
5837
	    "632822": "都兰县",
5838
	    "632823": "天峻县",
5839
	    "632824": "其它区",
5840
	    "640000": "宁夏回族自治区",
5841
	    "640100": "银川市",
5842
	    "640104": "兴庆区",
5843
	    "640105": "西夏区",
5844
	    "640106": "金凤区",
5845
	    "640121": "永宁县",
5846
	    "640122": "贺兰县",
5847
	    "640181": "灵武市",
5848
	    "640182": "其它区",
5849
	    "640200": "石嘴山市",
5850
	    "640202": "大武口区",
5851
	    "640205": "惠农区",
5852
	    "640221": "平罗县",
5853
	    "640222": "其它区",
5854
	    "640300": "吴忠市",
5855
	    "640302": "利通区",
5856
	    "640303": "红寺堡区",
5857
	    "640323": "盐池县",
5858
	    "640324": "同心县",
5859
	    "640381": "青铜峡市",
5860
	    "640382": "其它区",
5861
	    "640400": "固原市",
5862
	    "640402": "原州区",
5863
	    "640422": "西吉县",
5864
	    "640423": "隆德县",
5865
	    "640424": "泾源县",
5866
	    "640425": "彭阳县",
5867
	    "640426": "其它区",
5868
	    "640500": "中卫市",
5869
	    "640502": "沙坡头区",
5870
	    "640521": "中宁县",
5871
	    "640522": "海原县",
5872
	    "640523": "其它区",
5873
	    "650000": "新疆维吾尔自治区",
5874
	    "650100": "乌鲁木齐市",
5875
	    "650102": "天山区",
5876
	    "650103": "沙依巴克区",
5877
	    "650104": "新市区",
5878
	    "650105": "水磨沟区",
5879
	    "650106": "头屯河区",
5880
	    "650107": "达坂城区",
5881
	    "650109": "米东区",
5882
	    "650121": "乌鲁木齐县",
5883
	    "650122": "其它区",
5884
	    "650200": "克拉玛依市",
5885
	    "650202": "独山子区",
5886
	    "650203": "克拉玛依区",
5887
	    "650204": "白碱滩区",
5888
	    "650205": "乌尔禾区",
5889
	    "650206": "其它区",
5890
	    "652100": "吐鲁番地区",
5891
	    "652101": "吐鲁番市",
5892
	    "652122": "鄯善县",
5893
	    "652123": "托克逊县",
5894
	    "652124": "其它区",
5895
	    "652200": "哈密地区",
5896
	    "652201": "哈密市",
5897
	    "652222": "巴里坤哈萨克自治县",
5898
	    "652223": "伊吾县",
5899
	    "652224": "其它区",
5900
	    "652300": "昌吉回族自治州",
5901
	    "652301": "昌吉市",
5902
	    "652302": "阜康市",
5903
	    "652323": "呼图壁县",
5904
	    "652324": "玛纳斯县",
5905
	    "652325": "奇台县",
5906
	    "652327": "吉木萨尔县",
5907
	    "652328": "木垒哈萨克自治县",
5908
	    "652329": "其它区",
5909
	    "652700": "博尔塔拉蒙古自治州",
5910
	    "652701": "博乐市",
5911
	    "652702": "阿拉山口市",
5912
	    "652722": "精河县",
5913
	    "652723": "温泉县",
5914
	    "652724": "其它区",
5915
	    "652800": "巴音郭楞蒙古自治州",
5916
	    "652801": "库尔勒市",
5917
	    "652822": "轮台县",
5918
	    "652823": "尉犁县",
5919
	    "652824": "若羌县",
5920
	    "652825": "且末县",
5921
	    "652826": "焉耆回族自治县",
5922
	    "652827": "和静县",
5923
	    "652828": "和硕县",
5924
	    "652829": "博湖县",
5925
	    "652830": "其它区",
5926
	    "652900": "阿克苏地区",
5927
	    "652901": "阿克苏市",
5928
	    "652922": "温宿县",
5929
	    "652923": "库车县",
5930
	    "652924": "沙雅县",
5931
	    "652925": "新和县",
5932
	    "652926": "拜城县",
5933
	    "652927": "乌什县",
5934
	    "652928": "阿瓦提县",
5935
	    "652929": "柯坪县",
5936
	    "652930": "其它区",
5937
	    "653000": "克孜勒苏柯尔克孜自治州",
5938
	    "653001": "阿图什市",
5939
	    "653022": "阿克陶县",
5940
	    "653023": "阿合奇县",
5941
	    "653024": "乌恰县",
5942
	    "653025": "其它区",
5943
	    "653100": "喀什地区",
5944
	    "653101": "喀什市",
5945
	    "653121": "疏附县",
5946
	    "653122": "疏勒县",
5947
	    "653123": "英吉沙县",
5948
	    "653124": "泽普县",
5949
	    "653125": "莎车县",
5950
	    "653126": "叶城县",
5951
	    "653127": "麦盖提县",
5952
	    "653128": "岳普湖县",
5953
	    "653129": "伽师县",
5954
	    "653130": "巴楚县",
5955
	    "653131": "塔什库尔干塔吉克自治县",
5956
	    "653132": "其它区",
5957
	    "653200": "和田地区",
5958
	    "653201": "和田市",
5959
	    "653221": "和田县",
5960
	    "653222": "墨玉县",
5961
	    "653223": "皮山县",
5962
	    "653224": "洛浦县",
5963
	    "653225": "策勒县",
5964
	    "653226": "于田县",
5965
	    "653227": "民丰县",
5966
	    "653228": "其它区",
5967
	    "654000": "伊犁哈萨克自治州",
5968
	    "654002": "伊宁市",
5969
	    "654003": "奎屯市",
5970
	    "654021": "伊宁县",
5971
	    "654022": "察布查尔锡伯自治县",
5972
	    "654023": "霍城县",
5973
	    "654024": "巩留县",
5974
	    "654025": "新源县",
5975
	    "654026": "昭苏县",
5976
	    "654027": "特克斯县",
5977
	    "654028": "尼勒克县",
5978
	    "654029": "其它区",
5979
	    "654200": "塔城地区",
5980
	    "654201": "塔城市",
5981
	    "654202": "乌苏市",
5982
	    "654221": "额敏县",
5983
	    "654223": "沙湾县",
5984
	    "654224": "托里县",
5985
	    "654225": "裕民县",
5986
	    "654226": "和布克赛尔蒙古自治县",
5987
	    "654227": "其它区",
5988
	    "654300": "阿勒泰地区",
5989
	    "654301": "阿勒泰市",
5990
	    "654321": "布尔津县",
5991
	    "654322": "富蕴县",
5992
	    "654323": "福海县",
5993
	    "654324": "哈巴河县",
5994
	    "654325": "青河县",
5995
	    "654326": "吉木乃县",
5996
	    "654327": "其它区",
5997
	    "659001": "石河子市",
5998
	    "659002": "阿拉尔市",
5999
	    "659003": "图木舒克市",
6000
	    "659004": "五家渠市",
6001
	    "710000": "台湾",
6002
	    "710100": "台北市",
6003
	    "710101": "中正区",
6004
	    "710102": "大同区",
6005
	    "710103": "中山区",
6006
	    "710104": "松山区",
6007
	    "710105": "大安区",
6008
	    "710106": "万华区",
6009
	    "710107": "信义区",
6010
	    "710108": "士林区",
6011
	    "710109": "北投区",
6012
	    "710110": "内湖区",
6013
	    "710111": "南港区",
6014
	    "710112": "文山区",
6015
	    "710113": "其它区",
6016
	    "710200": "高雄市",
6017
	    "710201": "新兴区",
6018
	    "710202": "前金区",
6019
	    "710203": "芩雅区",
6020
	    "710204": "盐埕区",
6021
	    "710205": "鼓山区",
6022
	    "710206": "旗津区",
6023
	    "710207": "前镇区",
6024
	    "710208": "三民区",
6025
	    "710209": "左营区",
6026
	    "710210": "楠梓区",
6027
	    "710211": "小港区",
6028
	    "710212": "其它区",
6029
	    "710241": "苓雅区",
6030
	    "710242": "仁武区",
6031
	    "710243": "大社区",
6032
	    "710244": "冈山区",
6033
	    "710245": "路竹区",
6034
	    "710246": "阿莲区",
6035
	    "710247": "田寮区",
6036
	    "710248": "燕巢区",
6037
	    "710249": "桥头区",
6038
	    "710250": "梓官区",
6039
	    "710251": "弥陀区",
6040
	    "710252": "永安区",
6041
	    "710253": "湖内区",
6042
	    "710254": "凤山区",
6043
	    "710255": "大寮区",
6044
	    "710256": "林园区",
6045
	    "710257": "鸟松区",
6046
	    "710258": "大树区",
6047
	    "710259": "旗山区",
6048
	    "710260": "美浓区",
6049
	    "710261": "六龟区",
6050
	    "710262": "内门区",
6051
	    "710263": "杉林区",
6052
	    "710264": "甲仙区",
6053
	    "710265": "桃源区",
6054
	    "710266": "那玛夏区",
6055
	    "710267": "茂林区",
6056
	    "710268": "茄萣区",
6057
	    "710300": "台南市",
6058
	    "710301": "中西区",
6059
	    "710302": "东区",
6060
	    "710303": "南区",
6061
	    "710304": "北区",
6062
	    "710305": "安平区",
6063
	    "710306": "安南区",
6064
	    "710307": "其它区",
6065
	    "710339": "永康区",
6066
	    "710340": "归仁区",
6067
	    "710341": "新化区",
6068
	    "710342": "左镇区",
6069
	    "710343": "玉井区",
6070
	    "710344": "楠西区",
6071
	    "710345": "南化区",
6072
	    "710346": "仁德区",
6073
	    "710347": "关庙区",
6074
	    "710348": "龙崎区",
6075
	    "710349": "官田区",
6076
	    "710350": "麻豆区",
6077
	    "710351": "佳里区",
6078
	    "710352": "西港区",
6079
	    "710353": "七股区",
6080
	    "710354": "将军区",
6081
	    "710355": "学甲区",
6082
	    "710356": "北门区",
6083
	    "710357": "新营区",
6084
	    "710358": "后壁区",
6085
	    "710359": "白河区",
6086
	    "710360": "东山区",
6087
	    "710361": "六甲区",
6088
	    "710362": "下营区",
6089
	    "710363": "柳营区",
6090
	    "710364": "盐水区",
6091
	    "710365": "善化区",
6092
	    "710366": "大内区",
6093
	    "710367": "山上区",
6094
	    "710368": "新市区",
6095
	    "710369": "安定区",
6096
	    "710400": "台中市",
6097
	    "710401": "中区",
6098
	    "710402": "东区",
6099
	    "710403": "南区",
6100
	    "710404": "西区",
6101
	    "710405": "北区",
6102
	    "710406": "北屯区",
6103
	    "710407": "西屯区",
6104
	    "710408": "南屯区",
6105
	    "710409": "其它区",
6106
	    "710431": "太平区",
6107
	    "710432": "大里区",
6108
	    "710433": "雾峰区",
6109
	    "710434": "乌日区",
6110
	    "710435": "丰原区",
6111
	    "710436": "后里区",
6112
	    "710437": "石冈区",
6113
	    "710438": "东势区",
6114
	    "710439": "和平区",
6115
	    "710440": "新社区",
6116
	    "710441": "潭子区",
6117
	    "710442": "大雅区",
6118
	    "710443": "神冈区",
6119
	    "710444": "大肚区",
6120
	    "710445": "沙鹿区",
6121
	    "710446": "龙井区",
6122
	    "710447": "梧栖区",
6123
	    "710448": "清水区",
6124
	    "710449": "大甲区",
6125
	    "710450": "外埔区",
6126
	    "710451": "大安区",
6127
	    "710500": "金门县",
6128
	    "710507": "金沙镇",
6129
	    "710508": "金湖镇",
6130
	    "710509": "金宁乡",
6131
	    "710510": "金城镇",
6132
	    "710511": "烈屿乡",
6133
	    "710512": "乌坵乡",
6134
	    "710600": "南投县",
6135
	    "710614": "南投市",
6136
	    "710615": "中寮乡",
6137
	    "710616": "草屯镇",
6138
	    "710617": "国姓乡",
6139
	    "710618": "埔里镇",
6140
	    "710619": "仁爱乡",
6141
	    "710620": "名间乡",
6142
	    "710621": "集集镇",
6143
	    "710622": "水里乡",
6144
	    "710623": "鱼池乡",
6145
	    "710624": "信义乡",
6146
	    "710625": "竹山镇",
6147
	    "710626": "鹿谷乡",
6148
	    "710700": "基隆市",
6149
	    "710701": "仁爱区",
6150
	    "710702": "信义区",
6151
	    "710703": "中正区",
6152
	    "710704": "中山区",
6153
	    "710705": "安乐区",
6154
	    "710706": "暖暖区",
6155
	    "710707": "七堵区",
6156
	    "710708": "其它区",
6157
	    "710800": "新竹市",
6158
	    "710801": "东区",
6159
	    "710802": "北区",
6160
	    "710803": "香山区",
6161
	    "710804": "其它区",
6162
	    "710900": "嘉义市",
6163
	    "710901": "东区",
6164
	    "710902": "西区",
6165
	    "710903": "其它区",
6166
	    "711100": "新北市",
6167
	    "711130": "万里区",
6168
	    "711131": "金山区",
6169
	    "711132": "板桥区",
6170
	    "711133": "汐止区",
6171
	    "711134": "深坑区",
6172
	    "711135": "石碇区",
6173
	    "711136": "瑞芳区",
6174
	    "711137": "平溪区",
6175
	    "711138": "双溪区",
6176
	    "711139": "贡寮区",
6177
	    "711140": "新店区",
6178
	    "711141": "坪林区",
6179
	    "711142": "乌来区",
6180
	    "711143": "永和区",
6181
	    "711144": "中和区",
6182
	    "711145": "土城区",
6183
	    "711146": "三峡区",
6184
	    "711147": "树林区",
6185
	    "711148": "莺歌区",
6186
	    "711149": "三重区",
6187
	    "711150": "新庄区",
6188
	    "711151": "泰山区",
6189
	    "711152": "林口区",
6190
	    "711153": "芦洲区",
6191
	    "711154": "五股区",
6192
	    "711155": "八里区",
6193
	    "711156": "淡水区",
6194
	    "711157": "三芝区",
6195
	    "711158": "石门区",
6196
	    "711200": "宜兰县",
6197
	    "711214": "宜兰市",
6198
	    "711215": "头城镇",
6199
	    "711216": "礁溪乡",
6200
	    "711217": "壮围乡",
6201
	    "711218": "员山乡",
6202
	    "711219": "罗东镇",
6203
	    "711220": "三星乡",
6204
	    "711221": "大同乡",
6205
	    "711222": "五结乡",
6206
	    "711223": "冬山乡",
6207
	    "711224": "苏澳镇",
6208
	    "711225": "南澳乡",
6209
	    "711226": "钓鱼台",
6210
	    "711300": "新竹县",
6211
	    "711314": "竹北市",
6212
	    "711315": "湖口乡",
6213
	    "711316": "新丰乡",
6214
	    "711317": "新埔镇",
6215
	    "711318": "关西镇",
6216
	    "711319": "芎林乡",
6217
	    "711320": "宝山乡",
6218
	    "711321": "竹东镇",
6219
	    "711322": "五峰乡",
6220
	    "711323": "横山乡",
6221
	    "711324": "尖石乡",
6222
	    "711325": "北埔乡",
6223
	    "711326": "峨眉乡",
6224
	    "711400": "桃园县",
6225
	    "711414": "中坜市",
6226
	    "711415": "平镇市",
6227
	    "711416": "龙潭乡",
6228
	    "711417": "杨梅市",
6229
	    "711418": "新屋乡",
6230
	    "711419": "观音乡",
6231
	    "711420": "桃园市",
6232
	    "711421": "龟山乡",
6233
	    "711422": "八德市",
6234
	    "711423": "大溪镇",
6235
	    "711424": "复兴乡",
6236
	    "711425": "大园乡",
6237
	    "711426": "芦竹乡",
6238
	    "711500": "苗栗县",
6239
	    "711519": "竹南镇",
6240
	    "711520": "头份镇",
6241
	    "711521": "三湾乡",
6242
	    "711522": "南庄乡",
6243
	    "711523": "狮潭乡",
6244
	    "711524": "后龙镇",
6245
	    "711525": "通霄镇",
6246
	    "711526": "苑里镇",
6247
	    "711527": "苗栗市",
6248
	    "711528": "造桥乡",
6249
	    "711529": "头屋乡",
6250
	    "711530": "公馆乡",
6251
	    "711531": "大湖乡",
6252
	    "711532": "泰安乡",
6253
	    "711533": "铜锣乡",
6254
	    "711534": "三义乡",
6255
	    "711535": "西湖乡",
6256
	    "711536": "卓兰镇",
6257
	    "711700": "彰化县",
6258
	    "711727": "彰化市",
6259
	    "711728": "芬园乡",
6260
	    "711729": "花坛乡",
6261
	    "711730": "秀水乡",
6262
	    "711731": "鹿港镇",
6263
	    "711732": "福兴乡",
6264
	    "711733": "线西乡",
6265
	    "711734": "和美镇",
6266
	    "711735": "伸港乡",
6267
	    "711736": "员林镇",
6268
	    "711737": "社头乡",
6269
	    "711738": "永靖乡",
6270
	    "711739": "埔心乡",
6271
	    "711740": "溪湖镇",
6272
	    "711741": "大村乡",
6273
	    "711742": "埔盐乡",
6274
	    "711743": "田中镇",
6275
	    "711744": "北斗镇",
6276
	    "711745": "田尾乡",
6277
	    "711746": "埤头乡",
6278
	    "711747": "溪州乡",
6279
	    "711748": "竹塘乡",
6280
	    "711749": "二林镇",
6281
	    "711750": "大城乡",
6282
	    "711751": "芳苑乡",
6283
	    "711752": "二水乡",
6284
	    "711900": "嘉义县",
6285
	    "711919": "番路乡",
6286
	    "711920": "梅山乡",
6287
	    "711921": "竹崎乡",
6288
	    "711922": "阿里山乡",
6289
	    "711923": "中埔乡",
6290
	    "711924": "大埔乡",
6291
	    "711925": "水上乡",
6292
	    "711926": "鹿草乡",
6293
	    "711927": "太保市",
6294
	    "711928": "朴子市",
6295
	    "711929": "东石乡",
6296
	    "711930": "六脚乡",
6297
	    "711931": "新港乡",
6298
	    "711932": "民雄乡",
6299
	    "711933": "大林镇",
6300
	    "711934": "溪口乡",
6301
	    "711935": "义竹乡",
6302
	    "711936": "布袋镇",
6303
	    "712100": "云林县",
6304
	    "712121": "斗南镇",
6305
	    "712122": "大埤乡",
6306
	    "712123": "虎尾镇",
6307
	    "712124": "土库镇",
6308
	    "712125": "褒忠乡",
6309
	    "712126": "东势乡",
6310
	    "712127": "台西乡",
6311
	    "712128": "仑背乡",
6312
	    "712129": "麦寮乡",
6313
	    "712130": "斗六市",
6314
	    "712131": "林内乡",
6315
	    "712132": "古坑乡",
6316
	    "712133": "莿桐乡",
6317
	    "712134": "西螺镇",
6318
	    "712135": "二仑乡",
6319
	    "712136": "北港镇",
6320
	    "712137": "水林乡",
6321
	    "712138": "口湖乡",
6322
	    "712139": "四湖乡",
6323
	    "712140": "元长乡",
6324
	    "712400": "屏东县",
6325
	    "712434": "屏东市",
6326
	    "712435": "三地门乡",
6327
	    "712436": "雾台乡",
6328
	    "712437": "玛家乡",
6329
	    "712438": "九如乡",
6330
	    "712439": "里港乡",
6331
	    "712440": "高树乡",
6332
	    "712441": "盐埔乡",
6333
	    "712442": "长治乡",
6334
	    "712443": "麟洛乡",
6335
	    "712444": "竹田乡",
6336
	    "712445": "内埔乡",
6337
	    "712446": "万丹乡",
6338
	    "712447": "潮州镇",
6339
	    "712448": "泰武乡",
6340
	    "712449": "来义乡",
6341
	    "712450": "万峦乡",
6342
	    "712451": "崁顶乡",
6343
	    "712452": "新埤乡",
6344
	    "712453": "南州乡",
6345
	    "712454": "林边乡",
6346
	    "712455": "东港镇",
6347
	    "712456": "琉球乡",
6348
	    "712457": "佳冬乡",
6349
	    "712458": "新园乡",
6350
	    "712459": "枋寮乡",
6351
	    "712460": "枋山乡",
6352
	    "712461": "春日乡",
6353
	    "712462": "狮子乡",
6354
	    "712463": "车城乡",
6355
	    "712464": "牡丹乡",
6356
	    "712465": "恒春镇",
6357
	    "712466": "满州乡",
6358
	    "712500": "台东县",
6359
	    "712517": "台东市",
6360
	    "712518": "绿岛乡",
6361
	    "712519": "兰屿乡",
6362
	    "712520": "延平乡",
6363
	    "712521": "卑南乡",
6364
	    "712522": "鹿野乡",
6365
	    "712523": "关山镇",
6366
	    "712524": "海端乡",
6367
	    "712525": "池上乡",
6368
	    "712526": "东河乡",
6369
	    "712527": "成功镇",
6370
	    "712528": "长滨乡",
6371
	    "712529": "金峰乡",
6372
	    "712530": "大武乡",
6373
	    "712531": "达仁乡",
6374
	    "712532": "太麻里乡",
6375
	    "712600": "花莲县",
6376
	    "712615": "花莲市",
6377
	    "712616": "新城乡",
6378
	    "712617": "太鲁阁",
6379
	    "712618": "秀林乡",
6380
	    "712619": "吉安乡",
6381
	    "712620": "寿丰乡",
6382
	    "712621": "凤林镇",
6383
	    "712622": "光复乡",
6384
	    "712623": "丰滨乡",
6385
	    "712624": "瑞穗乡",
6386
	    "712625": "万荣乡",
6387
	    "712626": "玉里镇",
6388
	    "712627": "卓溪乡",
6389
	    "712628": "富里乡",
6390
	    "712700": "澎湖县",
6391
	    "712707": "马公市",
6392
	    "712708": "西屿乡",
6393
	    "712709": "望安乡",
6394
	    "712710": "七美乡",
6395
	    "712711": "白沙乡",
6396
	    "712712": "湖西乡",
6397
	    "712800": "连江县",
6398
	    "712805": "南竿乡",
6399
	    "712806": "北竿乡",
6400
	    "712807": "莒光乡",
6401
	    "712808": "东引乡",
6402
	    "810000": "香港特别行政区",
6403
	    "810100": "香港岛",
6404
	    "810101": "中西区",
6405
	    "810102": "湾仔",
6406
	    "810103": "东区",
6407
	    "810104": "南区",
6408
	    "810200": "九龙",
6409
	    "810201": "九龙城区",
6410
	    "810202": "油尖旺区",
6411
	    "810203": "深水埗区",
6412
	    "810204": "黄大仙区",
6413
	    "810205": "观塘区",
6414
	    "810300": "新界",
6415
	    "810301": "北区",
6416
	    "810302": "大埔区",
6417
	    "810303": "沙田区",
6418
	    "810304": "西贡区",
6419
	    "810305": "元朗区",
6420
	    "810306": "屯门区",
6421
	    "810307": "荃湾区",
6422
	    "810308": "葵青区",
6423
	    "810309": "离岛区",
6424
	    "820000": "澳门特别行政区",
6425
	    "820100": "澳门半岛",
6426
	    "820200": "离岛",
6427
	    "990000": "海外",
6428
	    "990100": "海外"
6429
	}
6430
6431
	// id pid/parentId name children
6432
	function tree(list) {
6433
	    var mapped = {}
6434
	    for (var i = 0, item; i < list.length; i++) {
6435
	        item = list[i]
6436
	        if (!item || !item.id) continue
6437
	        mapped[item.id] = item
6438
	    }
6439
6440
	    var result = []
6441
	    for (var ii = 0; ii < list.length; ii++) {
6442
	        item = list[ii]
6443
6444
	        if (!item) continue
6445
	            /* jshint -W041 */
6446
	        if (item.pid == undefined && item.parentId == undefined) {
6447
	            result.push(item)
6448
	            continue
6449
	        }
6450
	        var parent = mapped[item.pid] || mapped[item.parentId]
6451
	        if (!parent) continue
6452
	        if (!parent.children) parent.children = []
6453
	        parent.children.push(item)
6454
	    }
6455
	    return result
6456
	}
6457
6458
	var DICT_FIXED = function() {
6459
	    var fixed = []
6460
	    for (var id in DICT) {
6461
	        var pid = id.slice(2, 6) === '0000' ? undefined :
6462
	            id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') :
6463
	            id.slice(0, 4) + '00'
6464
	        fixed.push({
6465
	            id: id,
6466
	            pid: pid,
6467
	            name: DICT[id]
6468
	        })
6469
	    }
6470
	    return tree(fixed)
6471
	}()
6472
6473
	module.exports = DICT_FIXED
6474
6475
/***/ },
6476
/* 19 */
6477
/***/ function(module, exports, __webpack_require__) {
6478
6479
	/*
6480
	    ## Miscellaneous
6481
	*/
6482
	var DICT = __webpack_require__(18)
6483
	module.exports = {
6484
		// Dice
6485
		d4: function() {
6486
			return this.natural(1, 4)
6487
		},
6488
		d6: function() {
6489
			return this.natural(1, 6)
6490
		},
6491
		d8: function() {
6492
			return this.natural(1, 8)
6493
		},
6494
		d12: function() {
6495
			return this.natural(1, 12)
6496
		},
6497
		d20: function() {
6498
			return this.natural(1, 20)
6499
		},
6500
		d100: function() {
6501
			return this.natural(1, 100)
6502
		},
6503
		/*
6504
		    随机生成一个 GUID。
6505
6506
		    http://www.broofa.com/2008/09/javascript-uuid-function/
6507
		    [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt)
6508
		        UUIDs (Universally Unique IDentifier)
6509
		        GUIDs (Globally Unique IDentifier)
6510
		        The formal definition of the UUID string representation is provided by the following ABNF [7]:
6511
		            UUID                   = time-low "-" time-mid "-"
6512
		                                   time-high-and-version "-"
6513
		                                   clock-seq-and-reserved
6514
		                                   clock-seq-low "-" node
6515
		            time-low               = 4hexOctet
6516
		            time-mid               = 2hexOctet
6517
		            time-high-and-version  = 2hexOctet
6518
		            clock-seq-and-reserved = hexOctet
6519
		            clock-seq-low          = hexOctet
6520
		            node                   = 6hexOctet
6521
		            hexOctet               = hexDigit hexDigit
6522
		            hexDigit =
6523
		                "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" /
6524
		                "a" / "b" / "c" / "d" / "e" / "f" /
6525
		                "A" / "B" / "C" / "D" / "E" / "F"
6526
		    
6527
		    https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349
6528
		*/
6529
		guid: function() {
6530
			var pool = "abcdefABCDEF1234567890",
6531
				guid = this.string(pool, 8) + '-' +
6532
				this.string(pool, 4) + '-' +
6533
				this.string(pool, 4) + '-' +
6534
				this.string(pool, 4) + '-' +
6535
				this.string(pool, 12);
6536
			return guid
6537
		},
6538
		uuid: function() {
6539
			return this.guid()
6540
		},
6541
		/*
6542
		    随机生成一个 18 位身份证。
6543
6544
		    [身份证](http://baike.baidu.com/view/1697.htm#4)
6545
		        地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1
6546
		    [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html)
6547
		*/
6548
		id: function() {
6549
			var id,
6550
				sum = 0,
6551
				rank = [
6552
					"7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"
6553
				],
6554
				last = [
6555
					"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"
6556
				]
6557
6558
			id = this.pick(DICT).id +
6559
				this.date('yyyyMMdd') +
6560
				this.string('number', 3)
6561
6562
			for (var i = 0; i < id.length; i++) {
6563
				sum += id[i] * rank[i];
6564
			}
6565
			id += last[sum % 11];
6566
6567
			return id
6568
		},
6569
6570
		/*
6571
		    生成一个全局的自增整数。
6572
		    类似自增主键(auto increment primary key)。
6573
		*/
6574
		increment: function() {
6575
			var key = 0
6576
			return function(step) {
6577
				return key += (+step || 1) // step?
6578
			}
6579
		}(),
6580
		inc: function(step) {
6581
			return this.increment(step)
6582
		}
6583
	}
6584
6585
/***/ },
6586
/* 20 */
6587
/***/ function(module, exports, __webpack_require__) {
6588
6589
	var Parser = __webpack_require__(21)
6590
	var Handler = __webpack_require__(22)
6591
	module.exports = {
6592
		Parser: Parser,
6593
		Handler: Handler
6594
	}
6595
6596
/***/ },
6597
/* 21 */
6598
/***/ function(module, exports) {
6599
6600
	// https://github.com/nuysoft/regexp
6601
	// forked from https://github.com/ForbesLindesay/regexp
6602
6603
	function parse(n) {
6604
	    if ("string" != typeof n) {
6605
	        var l = new TypeError("The regexp to parse must be represented as a string.");
6606
	        throw l;
6607
	    }
6608
	    return index = 1, cgs = {}, parser.parse(n);
6609
	}
6610
6611
	function Token(n) {
6612
	    this.type = n, this.offset = Token.offset(), this.text = Token.text();
6613
	}
6614
6615
	function Alternate(n, l) {
6616
	    Token.call(this, "alternate"), this.left = n, this.right = l;
6617
	}
6618
6619
	function Match(n) {
6620
	    Token.call(this, "match"), this.body = n.filter(Boolean);
6621
	}
6622
6623
	function Group(n, l) {
6624
	    Token.call(this, n), this.body = l;
6625
	}
6626
6627
	function CaptureGroup(n) {
6628
	    Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), 
6629
	    this.body = n;
6630
	}
6631
6632
	function Quantified(n, l) {
6633
	    Token.call(this, "quantified"), this.body = n, this.quantifier = l;
6634
	}
6635
6636
	function Quantifier(n, l) {
6637
	    Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0;
6638
	}
6639
6640
	function CharSet(n, l) {
6641
	    Token.call(this, "charset"), this.invert = n, this.body = l;
6642
	}
6643
6644
	function CharacterRange(n, l) {
6645
	    Token.call(this, "range"), this.start = n, this.end = l;
6646
	}
6647
6648
	function Literal(n) {
6649
	    Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text;
6650
	}
6651
6652
	function Unicode(n) {
6653
	    Token.call(this, "unicode"), this.code = n.toUpperCase();
6654
	}
6655
6656
	function Hex(n) {
6657
	    Token.call(this, "hex"), this.code = n.toUpperCase();
6658
	}
6659
6660
	function Octal(n) {
6661
	    Token.call(this, "octal"), this.code = n.toUpperCase();
6662
	}
6663
6664
	function BackReference(n) {
6665
	    Token.call(this, "back-reference"), this.code = n.toUpperCase();
6666
	}
6667
6668
	function ControlCharacter(n) {
6669
	    Token.call(this, "control-character"), this.code = n.toUpperCase();
6670
	}
6671
6672
	var parser = function() {
6673
	    function n(n, l) {
6674
	        function u() {
6675
	            this.constructor = n;
6676
	        }
6677
	        u.prototype = l.prototype, n.prototype = new u();
6678
	    }
6679
	    function l(n, l, u, t, r) {
6680
	        function e(n, l) {
6681
	            function u(n) {
6682
	                function l(n) {
6683
	                    return n.charCodeAt(0).toString(16).toUpperCase();
6684
	                }
6685
	                return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) {
6686
	                    return "\\x0" + l(n);
6687
	                }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) {
6688
	                    return "\\x" + l(n);
6689
	                }).replace(/[\u0180-\u0FFF]/g, function(n) {
6690
	                    return "\\u0" + l(n);
6691
	                }).replace(/[\u1080-\uFFFF]/g, function(n) {
6692
	                    return "\\u" + l(n);
6693
	                });
6694
	            }
6695
	            var t, r;
6696
	            switch (n.length) {
6697
	              case 0:
6698
	                t = "end of input";
6699
	                break;
6700
6701
	              case 1:
6702
	                t = n[0];
6703
	                break;
6704
6705
	              default:
6706
	                t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1];
6707
	            }
6708
	            return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found.";
6709
	        }
6710
	        this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, 
6711
	        this.name = "SyntaxError", this.message = e(n, l);
6712
	    }
6713
	    function u(n) {
6714
	        function u() {
6715
	            return n.substring(Lt, qt);
6716
	        }
6717
	        function t() {
6718
	            return Lt;
6719
	        }
6720
	        function r(l) {
6721
	            function u(l, u, t) {
6722
	                var r, e;
6723
	                for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, 
6724
	                l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, 
6725
	                l.seenCR = !0) : (l.column++, l.seenCR = !1);
6726
	            }
6727
	            return Mt !== l && (Mt > l && (Mt = 0, Dt = {
6728
	                line: 1,
6729
	                column: 1,
6730
	                seenCR: !1
6731
	            }), u(Dt, Mt, l), Mt = l), Dt;
6732
	        }
6733
	        function e(n) {
6734
	            Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n));
6735
	        }
6736
	        function o(n) {
6737
	            var l = 0;
6738
	            for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++;
6739
	        }
6740
	        function c() {
6741
	            var l, u, t, r, o;
6742
	            return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, 
6743
	            qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], 
6744
	            t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, 
6745
	            u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, 
6746
	            l = il), l;
6747
	        }
6748
	        function i() {
6749
	            var n, l, u, t, r;
6750
	            if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), 
6751
	            Wt--, null === t ? u = al : (qt = u, u = il), null !== u) {
6752
	                for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), 
6753
	                null === r && (r = a());
6754
	                null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), 
6755
	                null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il);
6756
	            } else qt = n, n = il; else qt = n, n = il;
6757
	            return n;
6758
	        }
6759
	        function a() {
6760
	            var n;
6761
	            return n = x(), null === n && (n = Q(), null === n && (n = B())), n;
6762
	        }
6763
	        function f() {
6764
	            var l, u;
6765
	            return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), 
6766
	            null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l;
6767
	        }
6768
	        function s() {
6769
	            var l, u;
6770
	            return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), 
6771
	            null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l;
6772
	        }
6773
	        function h() {
6774
	            var n, l, u;
6775
	            return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), 
6776
	            null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n;
6777
	        }
6778
	        function d() {
6779
	            var n, l, u;
6780
	            return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, 
6781
	            l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, 
6782
	            n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n;
6783
	        }
6784
	        function p() {
6785
	            var n;
6786
	            return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), 
6787
	            null === n && (n = g(), null === n && (n = b()))))), n;
6788
	        }
6789
	        function v() {
6790
	            var l, u, t, r, o, c;
6791
	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), 
6792
	            null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, 
6793
	            0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, 
6794
	            qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, 
6795
	            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, 
6796
	            l = il)) : (qt = l, l = il), l;
6797
	        }
6798
	        function w() {
6799
	            var l, u, t, r;
6800
	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), 
6801
	            null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, 
6802
	            0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6803
	            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;
6804
	        }
6805
	        function A() {
6806
	            var l, u, t, r;
6807
	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), 
6808
	            null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, 
6809
	            0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6810
	            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;
6811
	        }
6812
	        function C() {
6813
	            var l, u;
6814
	            return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), 
6815
	            null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l;
6816
	        }
6817
	        function g() {
6818
	            var l, u;
6819
	            return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), 
6820
	            null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l;
6821
	        }
6822
	        function b() {
6823
	            var l, u;
6824
	            return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), 
6825
	            null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l;
6826
	        }
6827
	        function k() {
6828
	            var l;
6829
	            return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), 
6830
	            l;
6831
	        }
6832
	        function T() {
6833
	            var l, u, t;
6834
	            if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 
6835
	            0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), 
6836
	            qt++) : (t = null, 0 === Wt && e(Il)); else u = il;
6837
	            return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, 
6838
	            l;
6839
	        }
6840
	        function x() {
6841
	            var l, u, t, r;
6842
	            return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), 
6843
	            null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), 
6844
	            null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), 
6845
	            null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6846
	            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;
6847
	        }
6848
	        function y() {
6849
	            var n, l;
6850
	            return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, 
6851
	            n = l) : n = l, n;
6852
	        }
6853
	        function m() {
6854
	            var l, u, t;
6855
	            return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), 
6856
	            null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6857
	            l = il)) : (qt = l, l = il), l;
6858
	        }
6859
	        function R() {
6860
	            var l, u, t;
6861
	            return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), 
6862
	            null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6863
	            l = il)) : (qt = l, l = il), l;
6864
	        }
6865
	        function F() {
6866
	            var l, u, t;
6867
	            return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), 
6868
	            null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6869
	            l = il)) : (qt = l, l = il), l;
6870
	        }
6871
	        function Q() {
6872
	            var l, u, t, r, o;
6873
	            if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), 
6874
	            null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), 
6875
	            null === t && (t = al), null !== t) {
6876
	                for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), 
6877
	                null === o && (o = U());
6878
	                null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), 
6879
	                null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
6880
	                l = il)) : (qt = l, l = il);
6881
	            } else qt = l, l = il; else qt = l, l = il;
6882
	            return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l;
6883
	        }
6884
	        function S() {
6885
	            var l, u, t, r;
6886
	            return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, 
6887
	            0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, 
6888
	            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, 
6889
	            null === l && (u = null, 0 === Wt && e(du)), l;
6890
	        }
6891
	        function U() {
6892
	            var n, l;
6893
	            return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), 
6894
	            n;
6895
	        }
6896
	        function E() {
6897
	            var l, u;
6898
	            return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), 
6899
	            null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l;
6900
	        }
6901
	        function G() {
6902
	            var n;
6903
	            return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), 
6904
	            null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), 
6905
	            null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), 
6906
	            null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), 
6907
	            null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n;
6908
	        }
6909
	        function B() {
6910
	            var n;
6911
	            return n = j(), null === n && (n = q(), null === n && (n = $())), n;
6912
	        }
6913
	        function j() {
6914
	            var l, u;
6915
	            return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), 
6916
	            null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l;
6917
	        }
6918
	        function $() {
6919
	            var l, u;
6920
	            return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 
6921
	            0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, 
6922
	            Wt--, null === l && (u = null, 0 === Wt && e(yu)), l;
6923
	        }
6924
	        function q() {
6925
	            var n;
6926
	            return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), 
6927
	            null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), 
6928
	            null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), 
6929
	            null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), 
6930
	            null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), 
6931
	            n;
6932
	        }
6933
	        function L() {
6934
	            var l, u;
6935
	            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), 
6936
	            null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l;
6937
	        }
6938
	        function M() {
6939
	            var l, u;
6940
	            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), 
6941
	            null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l;
6942
	        }
6943
	        function D() {
6944
	            var l, u;
6945
	            return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), 
6946
	            null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l;
6947
	        }
6948
	        function H() {
6949
	            var l, u;
6950
	            return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), 
6951
	            null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l;
6952
	        }
6953
	        function O() {
6954
	            var l, u;
6955
	            return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), 
6956
	            null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l;
6957
	        }
6958
	        function W() {
6959
	            var l, u;
6960
	            return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), 
6961
	            null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l;
6962
	        }
6963
	        function z() {
6964
	            var l, u;
6965
	            return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), 
6966
	            null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l;
6967
	        }
6968
	        function I() {
6969
	            var l, u;
6970
	            return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), 
6971
	            null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l;
6972
	        }
6973
	        function J() {
6974
	            var l, u;
6975
	            return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), 
6976
	            null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l;
6977
	        }
6978
	        function K() {
6979
	            var l, u;
6980
	            return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), 
6981
	            null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l;
6982
	        }
6983
	        function N() {
6984
	            var l, u;
6985
	            return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), 
6986
	            null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l;
6987
	        }
6988
	        function P() {
6989
	            var l, u;
6990
	            return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), 
6991
	            null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l;
6992
	        }
6993
	        function V() {
6994
	            var l, u;
6995
	            return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), 
6996
	            null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l;
6997
	        }
6998
	        function X() {
6999
	            var l, u;
7000
	            return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), 
7001
	            null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l;
7002
	        }
7003
	        function Y() {
7004
	            var l, u, t;
7005
	            return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), 
7006
	            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), 
7007
	            null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
7008
	            l = il)) : (qt = l, l = il), l;
7009
	        }
7010
	        function Z() {
7011
	            var l, u, t;
7012
	            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), 
7013
	            null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), 
7014
	            null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
7015
	            l = il)) : (qt = l, l = il), l;
7016
	        }
7017
	        function _() {
7018
	            var l, u, t, r;
7019
	            if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), 
7020
	            null !== u) {
7021
	                if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), 
7022
	                null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), 
7023
	                qt++) : (r = null, 0 === Wt && e(mt)); else t = il;
7024
	                null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
7025
	                l = il);
7026
	            } else qt = l, l = il;
7027
	            return l;
7028
	        }
7029
	        function nl() {
7030
	            var l, u, t, r;
7031
	            if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), 
7032
	            null !== u) {
7033
	                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), 
7034
	                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), 
7035
	                qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;
7036
	                null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
7037
	                l = il);
7038
	            } else qt = l, l = il;
7039
	            return l;
7040
	        }
7041
	        function ll() {
7042
	            var l, u, t, r;
7043
	            if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), 
7044
	            null !== u) {
7045
	                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), 
7046
	                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), 
7047
	                qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;
7048
	                null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
7049
	                l = il);
7050
	            } else qt = l, l = il;
7051
	            return l;
7052
	        }
7053
	        function ul() {
7054
	            var l, u;
7055
	            return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), 
7056
	            null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l;
7057
	        }
7058
	        function tl() {
7059
	            var l, u, t;
7060
	            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), 
7061
	            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), 
7062
	            null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, 
7063
	            l = il)) : (qt = l, l = il), l;
7064
	        }
7065
	        var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = {
7066
	            regexp: c
7067
	        }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) {
7068
	            return l ? new Alternate(n, l[1]) : n;
7069
	        }, dl = function(n, l, u) {
7070
	            return new Match([ n ].concat(l).concat([ u ]));
7071
	        }, pl = "^", vl = '"^"', wl = function() {
7072
	            return new Token("start");
7073
	        }, Al = "$", Cl = '"$"', gl = function() {
7074
	            return new Token("end");
7075
	        }, bl = function(n, l) {
7076
	            return new Quantified(n, l);
7077
	        }, kl = "Quantifier", Tl = function(n, l) {
7078
	            return l && (n.greedy = !1), n;
7079
	        }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) {
7080
	            return new Quantifier(n, l);
7081
	        }, Ul = ",}", El = '",}"', Gl = function(n) {
7082
	            return new Quantifier(n, 1/0);
7083
	        }, Bl = function(n) {
7084
	            return new Quantifier(n, n);
7085
	        }, jl = "+", $l = '"+"', ql = function() {
7086
	            return new Quantifier(1, 1/0);
7087
	        }, Ll = "*", Ml = '"*"', Dl = function() {
7088
	            return new Quantifier(0, 1/0);
7089
	        }, Hl = "?", Ol = '"?"', Wl = function() {
7090
	            return new Quantifier(0, 1);
7091
	        }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) {
7092
	            return +n.join("");
7093
	        }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) {
7094
	            return n;
7095
	        }, Yl = function(n) {
7096
	            return new CaptureGroup(n);
7097
	        }, Zl = "?:", _l = '"?:"', nu = function(n) {
7098
	            return new Group("non-capture-group", n);
7099
	        }, lu = "?=", uu = '"?="', tu = function(n) {
7100
	            return new Group("positive-lookahead", n);
7101
	        }, ru = "?!", eu = '"?!"', ou = function(n) {
7102
	            return new Group("negative-lookahead", n);
7103
	        }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) {
7104
	            return new CharSet(!!n, l);
7105
	        }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) {
7106
	            return new CharacterRange(n, l);
7107
	        }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) {
7108
	            return new Literal(n);
7109
	        }, ku = ".", Tu = '"."', xu = function() {
7110
	            return new Token("any-character");
7111
	        }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() {
7112
	            return new Token("backspace");
7113
	        }, Uu = function() {
7114
	            return new Token("word-boundary");
7115
	        }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() {
7116
	            return new Token("non-word-boundary");
7117
	        }, ju = "\\d", $u = '"\\\\d"', qu = function() {
7118
	            return new Token("digit");
7119
	        }, Lu = "\\D", Mu = '"\\\\D"', Du = function() {
7120
	            return new Token("non-digit");
7121
	        }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() {
7122
	            return new Token("form-feed");
7123
	        }, zu = "\\n", Iu = '"\\\\n"', Ju = function() {
7124
	            return new Token("line-feed");
7125
	        }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() {
7126
	            return new Token("carriage-return");
7127
	        }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() {
7128
	            return new Token("white-space");
7129
	        }, Zu = "\\S", _u = '"\\\\S"', nt = function() {
7130
	            return new Token("non-white-space");
7131
	        }, lt = "\\t", ut = '"\\\\t"', tt = function() {
7132
	            return new Token("tab");
7133
	        }, rt = "\\v", et = '"\\\\v"', ot = function() {
7134
	            return new Token("vertical-tab");
7135
	        }, ct = "\\w", it = '"\\\\w"', at = function() {
7136
	            return new Token("word");
7137
	        }, ft = "\\W", st = '"\\\\W"', ht = function() {
7138
	            return new Token("non-word");
7139
	        }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) {
7140
	            return new ControlCharacter(n);
7141
	        }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) {
7142
	            return new BackReference(n);
7143
	        }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) {
7144
	            return new Octal(n.join(""));
7145
	        }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) {
7146
	            return new Hex(n.join(""));
7147
	        }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) {
7148
	            return new Unicode(n.join(""));
7149
	        }, $t = function() {
7150
	            return new Token("null-character");
7151
	        }, qt = 0, Lt = 0, Mt = 0, Dt = {
7152
	            line: 1,
7153
	            column: 1,
7154
	            seenCR: !1
7155
	        }, Ht = 0, Ot = [], Wt = 0;
7156
	        if ("startRule" in el) {
7157
	            if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".');
7158
	            cl = ol[el.startRule];
7159
	        }
7160
	        if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl;
7161
	        throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column);
7162
	    }
7163
	    return n(l, Error), {
7164
	        SyntaxError: l,
7165
	        parse: u
7166
	    };
7167
	}(), index = 1, cgs = {};
7168
7169
	module.exports = parser
7170
7171
/***/ },
7172
/* 22 */
7173
/***/ function(module, exports, __webpack_require__) {
7174
7175
	/*
7176
	    ## RegExp Handler
7177
7178
	    https://github.com/ForbesLindesay/regexp
7179
	    https://github.com/dmajda/pegjs
7180
	    http://www.regexper.com/
7181
7182
	    每个节点的结构
7183
	        {
7184
	            type: '',
7185
	            offset: number,
7186
	            text: '',
7187
	            body: {},
7188
	            escaped: true/false
7189
	        }
7190
7191
	    type 可选值
7192
	        alternate             |         选择
7193
	        match                 匹配
7194
	        capture-group         ()        捕获组
7195
	        non-capture-group     (?:...)   非捕获组
7196
	        positive-lookahead    (?=p)     零宽正向先行断言
7197
	        negative-lookahead    (?!p)     零宽负向先行断言
7198
	        quantified            a*        重复节点
7199
	        quantifier            *         量词
7200
	        charset               []        字符集
7201
	        range                 {m, n}    范围
7202
	        literal               a         直接量字符
7203
	        unicode               \uxxxx    Unicode
7204
	        hex                   \x        十六进制
7205
	        octal                 八进制
7206
	        back-reference        \n        反向引用
7207
	        control-character     \cX       控制字符
7208
7209
	        // Token
7210
	        start               ^       开头
7211
	        end                 $       结尾
7212
	        any-character       .       任意字符
7213
	        backspace           [\b]    退格直接量
7214
	        word-boundary       \b      单词边界
7215
	        non-word-boundary   \B      非单词边界
7216
	        digit               \d      ASCII 数字,[0-9]
7217
	        non-digit           \D      非 ASCII 数字,[^0-9]
7218
	        form-feed           \f      换页符
7219
	        line-feed           \n      换行符
7220
	        carriage-return     \r      回车符
7221
	        white-space         \s      空白符
7222
	        non-white-space     \S      非空白符
7223
	        tab                 \t      制表符
7224
	        vertical-tab        \v      垂直制表符
7225
	        word                \w      ASCII 字符,[a-zA-Z0-9]
7226
	        non-word            \W      非 ASCII 字符,[^a-zA-Z0-9]
7227
	        null-character      \o      NUL 字符
7228
	 */
7229
7230
	var Util = __webpack_require__(3)
7231
	var Random = __webpack_require__(5)
7232
	    /*
7233
	        
7234
	    */
7235
	var Handler = {
7236
	    extend: Util.extend
7237
	}
7238
7239
	// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart
7240
	/*var ASCII_CONTROL_CODE_CHART = {
7241
	    '@': ['\u0000'],
7242
	    A: ['\u0001'],
7243
	    B: ['\u0002'],
7244
	    C: ['\u0003'],
7245
	    D: ['\u0004'],
7246
	    E: ['\u0005'],
7247
	    F: ['\u0006'],
7248
	    G: ['\u0007', '\a'],
7249
	    H: ['\u0008', '\b'],
7250
	    I: ['\u0009', '\t'],
7251
	    J: ['\u000A', '\n'],
7252
	    K: ['\u000B', '\v'],
7253
	    L: ['\u000C', '\f'],
7254
	    M: ['\u000D', '\r'],
7255
	    N: ['\u000E'],
7256
	    O: ['\u000F'],
7257
	    P: ['\u0010'],
7258
	    Q: ['\u0011'],
7259
	    R: ['\u0012'],
7260
	    S: ['\u0013'],
7261
	    T: ['\u0014'],
7262
	    U: ['\u0015'],
7263
	    V: ['\u0016'],
7264
	    W: ['\u0017'],
7265
	    X: ['\u0018'],
7266
	    Y: ['\u0019'],
7267
	    Z: ['\u001A'],
7268
	    '[': ['\u001B', '\e'],
7269
	    '\\': ['\u001C'],
7270
	    ']': ['\u001D'],
7271
	    '^': ['\u001E'],
7272
	    '_': ['\u001F']
7273
	}*/
7274
7275
	// ASCII printable code chart
7276
	// var LOWER = 'abcdefghijklmnopqrstuvwxyz'
7277
	// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
7278
	// var NUMBER = '0123456789'
7279
	// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~'
7280
	var LOWER = ascii(97, 122)
7281
	var UPPER = ascii(65, 90)
7282
	var NUMBER = ascii(48, 57)
7283
	var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96)
7284
	var PRINTABLE = ascii(32, 126)
7285
	var SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'
7286
	var CHARACTER_CLASSES = {
7287
	    '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95)
7288
	    '\\W': OTHER.replace('_', ''),
7289
	    '\\s': SPACE,
7290
	    '\\S': function() {
7291
	        var result = PRINTABLE
7292
	        for (var i = 0; i < SPACE.length; i++) {
7293
	            result = result.replace(SPACE[i], '')
7294
	        }
7295
	        return result
7296
	    }(),
7297
	    '\\d': NUMBER,
7298
	    '\\D': LOWER + UPPER + OTHER
7299
	}
7300
7301
	function ascii(from, to) {
7302
	    var result = ''
7303
	    for (var i = from; i <= to; i++) {
7304
	        result += String.fromCharCode(i)
7305
	    }
7306
	    return result
7307
	}
7308
7309
	// var ast = RegExpParser.parse(regexp.source)
7310
	Handler.gen = function(node, result, cache) {
7311
	    cache = cache || {
7312
	        guid: 1
7313
	    }
7314
	    return Handler[node.type] ? Handler[node.type](node, result, cache) :
7315
	        Handler.token(node, result, cache)
7316
	}
7317
7318
	Handler.extend({
7319
	    /* jshint unused:false */
7320
	    token: function(node, result, cache) {
7321
	        switch (node.type) {
7322
	            case 'start':
7323
	            case 'end':
7324
	                return ''
7325
	            case 'any-character':
7326
	                return Random.character()
7327
	            case 'backspace':
7328
	                return ''
7329
	            case 'word-boundary': // TODO
7330
	                return ''
7331
	            case 'non-word-boundary': // TODO
7332
	                break
7333
	            case 'digit':
7334
	                return Random.pick(
7335
	                    NUMBER.split('')
7336
	                )
7337
	            case 'non-digit':
7338
	                return Random.pick(
7339
	                    (LOWER + UPPER + OTHER).split('')
7340
	                )
7341
	            case 'form-feed':
7342
	                break
7343
	            case 'line-feed':
7344
	                return node.body || node.text
7345
	            case 'carriage-return':
7346
	                break
7347
	            case 'white-space':
7348
	                return Random.pick(
7349
	                    SPACE.split('')
7350
	                )
7351
	            case 'non-white-space':
7352
	                return Random.pick(
7353
	                    (LOWER + UPPER + NUMBER).split('')
7354
	                )
7355
	            case 'tab':
7356
	                break
7357
	            case 'vertical-tab':
7358
	                break
7359
	            case 'word': // \w [a-zA-Z0-9]
7360
	                return Random.pick(
7361
	                    (LOWER + UPPER + NUMBER).split('')
7362
	                )
7363
	            case 'non-word': // \W [^a-zA-Z0-9]
7364
	                return Random.pick(
7365
	                    OTHER.replace('_', '').split('')
7366
	                )
7367
	            case 'null-character':
7368
	                break
7369
	        }
7370
	        return node.body || node.text
7371
	    },
7372
	    /*
7373
	        {
7374
	            type: 'alternate',
7375
	            offset: 0,
7376
	            text: '',
7377
	            left: {
7378
	                boyd: []
7379
	            },
7380
	            right: {
7381
	                boyd: []
7382
	            }
7383
	        }
7384
	    */
7385
	    alternate: function(node, result, cache) {
7386
	        // node.left/right {}
7387
	        return this.gen(
7388
	            Random.boolean() ? node.left : node.right,
7389
	            result,
7390
	            cache
7391
	        )
7392
	    },
7393
	    /*
7394
	        {
7395
	            type: 'match',
7396
	            offset: 0,
7397
	            text: '',
7398
	            body: []
7399
	        }
7400
	    */
7401
	    match: function(node, result, cache) {
7402
	        result = ''
7403
	            // node.body []
7404
	        for (var i = 0; i < node.body.length; i++) {
7405
	            result += this.gen(node.body[i], result, cache)
7406
	        }
7407
	        return result
7408
	    },
7409
	    // ()
7410
	    'capture-group': function(node, result, cache) {
7411
	        // node.body {}
7412
	        result = this.gen(node.body, result, cache)
7413
	        cache[cache.guid++] = result
7414
	        return result
7415
	    },
7416
	    // (?:...)
7417
	    'non-capture-group': function(node, result, cache) {
7418
	        // node.body {}
7419
	        return this.gen(node.body, result, cache)
7420
	    },
7421
	    // (?=p)
7422
	    'positive-lookahead': function(node, result, cache) {
7423
	        // node.body
7424
	        return this.gen(node.body, result, cache)
7425
	    },
7426
	    // (?!p)
7427
	    'negative-lookahead': function(node, result, cache) {
7428
	        // node.body
7429
	        return ''
7430
	    },
7431
	    /*
7432
	        {
7433
	            type: 'quantified',
7434
	            offset: 3,
7435
	            text: 'c*',
7436
	            body: {
7437
	                type: 'literal',
7438
	                offset: 3,
7439
	                text: 'c',
7440
	                body: 'c',
7441
	                escaped: false
7442
	            },
7443
	            quantifier: {
7444
	                type: 'quantifier',
7445
	                offset: 4,
7446
	                text: '*',
7447
	                min: 0,
7448
	                max: Infinity,
7449
	                greedy: true
7450
	            }
7451
	        }
7452
	    */
7453
	    quantified: function(node, result, cache) {
7454
	        result = ''
7455
	            // node.quantifier {}
7456
	        var count = this.quantifier(node.quantifier);
7457
	        // node.body {}
7458
	        for (var i = 0; i < count; i++) {
7459
	            result += this.gen(node.body, result, cache)
7460
	        }
7461
	        return result
7462
	    },
7463
	    /*
7464
	        quantifier: {
7465
	            type: 'quantifier',
7466
	            offset: 4,
7467
	            text: '*',
7468
	            min: 0,
7469
	            max: Infinity,
7470
	            greedy: true
7471
	        }
7472
	    */
7473
	    quantifier: function(node, result, cache) {
7474
	        var min = Math.max(node.min, 0)
7475
	        var max = isFinite(node.max) ? node.max :
7476
	            min + Random.integer(3, 7)
7477
	        return Random.integer(min, max)
7478
	    },
7479
	    /*
7480
	        
7481
	    */
7482
	    charset: function(node, result, cache) {
7483
	        // node.invert
7484
	        if (node.invert) return this['invert-charset'](node, result, cache)
7485
7486
	        // node.body []
7487
	        var literal = Random.pick(node.body)
7488
	        return this.gen(literal, result, cache)
7489
	    },
7490
	    'invert-charset': function(node, result, cache) {
7491
	        var pool = PRINTABLE
7492
	        for (var i = 0, item; i < node.body.length; i++) {
7493
	            item = node.body[i]
7494
	            switch (item.type) {
7495
	                case 'literal':
7496
	                    pool = pool.replace(item.body, '')
7497
	                    break
7498
	                case 'range':
7499
	                    var min = this.gen(item.start, result, cache).charCodeAt()
7500
	                    var max = this.gen(item.end, result, cache).charCodeAt()
7501
	                    for (var ii = min; ii <= max; ii++) {
7502
	                        pool = pool.replace(String.fromCharCode(ii), '')
7503
	                    }
7504
	                    /* falls through */
7505
	                default:
7506
	                    var characters = CHARACTER_CLASSES[item.text]
7507
	                    if (characters) {
7508
	                        for (var iii = 0; iii <= characters.length; iii++) {
7509
	                            pool = pool.replace(characters[iii], '')
7510
	                        }
7511
	                    }
7512
	            }
7513
	        }
7514
	        return Random.pick(pool.split(''))
7515
	    },
7516
	    range: function(node, result, cache) {
7517
	        // node.start, node.end
7518
	        var min = this.gen(node.start, result, cache).charCodeAt()
7519
	        var max = this.gen(node.end, result, cache).charCodeAt()
7520
	        return String.fromCharCode(
7521
	            Random.integer(min, max)
7522
	        )
7523
	    },
7524
	    literal: function(node, result, cache) {
7525
	        return node.escaped ? node.body : node.text
7526
	    },
7527
	    // Unicode \u
7528
	    unicode: function(node, result, cache) {
7529
	        return String.fromCharCode(
7530
	            parseInt(node.code, 16)
7531
	        )
7532
	    },
7533
	    // 十六进制 \xFF
7534
	    hex: function(node, result, cache) {
7535
	        return String.fromCharCode(
7536
	            parseInt(node.code, 16)
7537
	        )
7538
	    },
7539
	    // 八进制 \0
7540
	    octal: function(node, result, cache) {
7541
	        return String.fromCharCode(
7542
	            parseInt(node.code, 8)
7543
	        )
7544
	    },
7545
	    // 反向引用
7546
	    'back-reference': function(node, result, cache) {
7547
	        return cache[node.code] || ''
7548
	    },
7549
	    /*
7550
	        http://en.wikipedia.org/wiki/C0_and_C1_control_codes
7551
	    */
7552
	    CONTROL_CHARACTER_MAP: function() {
7553
	        var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' ')
7554
	        var CONTROL_CHARACTER_UNICODE = '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split(' ')
7555
	        var map = {}
7556
	        for (var i = 0; i < CONTROL_CHARACTER.length; i++) {
7557
	            map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]
7558
	        }
7559
	        return map
7560
	    }(),
7561
	    'control-character': function(node, result, cache) {
7562
	        return this.CONTROL_CHARACTER_MAP[node.code]
7563
	    }
7564
	})
7565
7566
	module.exports = Handler
7567
7568
/***/ },
7569
/* 23 */
7570
/***/ function(module, exports, __webpack_require__) {
7571
7572
	module.exports = __webpack_require__(24)
7573
7574
/***/ },
7575
/* 24 */
7576
/***/ function(module, exports, __webpack_require__) {
7577
7578
	/*
7579
	    ## toJSONSchema
7580
7581
	    把 Mock.js 风格的数据模板转换成 JSON Schema。
7582
7583
	    > [JSON Schema](http://json-schema.org/)
7584
	 */
7585
	var Constant = __webpack_require__(2)
7586
	var Util = __webpack_require__(3)
7587
	var Parser = __webpack_require__(4)
7588
7589
	function toJSONSchema(template, name, path /* Internal Use Only */ ) {
7590
	    // type rule properties items
7591
	    path = path || []
7592
	    var result = {
7593
	        name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name,
7594
	        template: template,
7595
	        type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] }
7596
	        rule: Parser.parse(name)
7597
	    }
7598
	    result.path = path.slice(0)
7599
	    result.path.push(name === undefined ? 'ROOT' : result.name)
7600
7601
	    switch (result.type) {
7602
	        case 'array':
7603
	            result.items = []
7604
	            Util.each(template, function(value, index) {
7605
	                result.items.push(
7606
	                    toJSONSchema(value, index, result.path)
7607
	                )
7608
	            })
7609
	            break
7610
	        case 'object':
7611
	            result.properties = []
7612
	            Util.each(template, function(value, name) {
7613
	                result.properties.push(
7614
	                    toJSONSchema(value, name, result.path)
7615
	                )
7616
	            })
7617
	            break
7618
	    }
7619
7620
	    return result
7621
7622
	}
7623
7624
	module.exports = toJSONSchema
7625
7626
7627
/***/ },
7628
/* 25 */
7629
/***/ function(module, exports, __webpack_require__) {
7630
7631
	module.exports = __webpack_require__(26)
7632
7633
/***/ },
7634
/* 26 */
7635
/***/ function(module, exports, __webpack_require__) {
7636
7637
	/*
7638
	    ## valid(template, data)
7639
7640
	    校验真实数据 data 是否与数据模板 template 匹配。
7641
	    
7642
	    实现思路:
7643
	    1. 解析规则。
7644
	        先把数据模板 template 解析为更方便机器解析的 JSON-Schame
7645
	        name               属性名 
7646
	        type               属性值类型
7647
	        template           属性值模板
7648
	        properties         对象属性数组
7649
	        items              数组元素数组
7650
	        rule               属性值生成规则
7651
	    2. 递归验证规则。
7652
	        然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。
7653
7654
	    提示信息 
7655
	    https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties
7656
	    [JSON-Schama validator](http://json-schema-validator.herokuapp.com/)
7657
	    [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/)
7658
	*/
7659
	var Constant = __webpack_require__(2)
7660
	var Util = __webpack_require__(3)
7661
	var toJSONSchema = __webpack_require__(23)
7662
7663
	function valid(template, data) {
7664
	    var schema = toJSONSchema(template)
7665
	    var result = Diff.diff(schema, data)
7666
	    for (var i = 0; i < result.length; i++) {
7667
	        // console.log(template, data)
7668
	        // console.warn(Assert.message(result[i]))
7669
	    }
7670
	    return result
7671
	}
7672
7673
	/*
7674
	    ## name
7675
	        有生成规则:比较解析后的 name
7676
	        无生成规则:直接比较
7677
	    ## type
7678
	        无类型转换:直接比较
7679
	        有类型转换:先试着解析 template,然后再检查?
7680
	    ## value vs. template
7681
	        基本类型
7682
	            无生成规则:直接比较
7683
	            有生成规则:
7684
	                number
7685
	                    min-max.dmin-dmax
7686
	                    min-max.dcount
7687
	                    count.dmin-dmax
7688
	                    count.dcount
7689
	                    +step
7690
	                    整数部分
7691
	                    小数部分
7692
	                boolean 
7693
	                string  
7694
	                    min-max
7695
	                    count
7696
	    ## properties
7697
	        对象
7698
	            有生成规则:检测期望的属性个数,继续递归
7699
	            无生成规则:检测全部的属性个数,继续递归
7700
	    ## items
7701
	        数组
7702
	            有生成规则:
7703
	                `'name|1': [{}, {} ...]`            其中之一,继续递归
7704
	                `'name|+1': [{}, {} ...]`           顺序检测,继续递归
7705
	                `'name|min-max': [{}, {} ...]`      检测个数,继续递归
7706
	                `'name|count': [{}, {} ...]`        检测个数,继续递归
7707
	            无生成规则:检测全部的元素个数,继续递归
7708
	*/
7709
	var Diff = {
7710
	    diff: function diff(schema, data, name /* Internal Use Only */ ) {
7711
	        var result = []
7712
7713
	        // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测
7714
	        if (
7715
	            this.name(schema, data, name, result) &&
7716
	            this.type(schema, data, name, result)
7717
	        ) {
7718
	            this.value(schema, data, name, result)
7719
	            this.properties(schema, data, name, result)
7720
	            this.items(schema, data, name, result)
7721
	        }
7722
7723
	        return result
7724
	    },
7725
	    /* jshint unused:false */
7726
	    name: function(schema, data, name, result) {
7727
	        var length = result.length
7728
7729
	        Assert.equal('name', schema.path, name + '', schema.name + '', result)
7730
7731
	        return result.length === length
7732
	    },
7733
	    type: function(schema, data, name, result) {
7734
	        var length = result.length
7735
7736
	        switch (schema.type) {
7737
	            case 'string':
7738
	                // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值
7739
	                if (schema.template.match(Constant.RE_PLACEHOLDER)) return true
7740
	                break
7741
	            case 'array':
7742
	                if (schema.rule.parameters) {
7743
	                    // name|count: array
7744
	                    if (schema.rule.min !== undefined && schema.rule.max === undefined) {
7745
	                        // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致
7746
	                        if (schema.rule.count === 1) return true
7747
	                    }
7748
	                    // 跳过 name|+inc: array
7749
	                    if (schema.rule.parameters[2]) return true
7750
	                }
7751
	                break
7752
	            case 'function':
7753
	                // 跳过 `'name': function`,因为函数可以返回任何类型的值。
7754
	                return true
7755
	        }
7756
7757
	        Assert.equal('type', schema.path, Util.type(data), schema.type, result)
7758
7759
	        return result.length === length
7760
	    },
7761
	    value: function(schema, data, name, result) {
7762
	        var length = result.length
7763
7764
	        var rule = schema.rule
7765
	        var templateType = schema.type
7766
	        if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true
7767
7768
	        // 无生成规则
7769
	        if (!rule.parameters) {
7770
	            switch (templateType) {
7771
	                case 'regexp':
7772
	                    Assert.match('value', schema.path, data, schema.template, result)
7773
	                    return result.length === length
7774
	                case 'string':
7775
	                    // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致
7776
	                    if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length
7777
	                    break
7778
	            }
7779
	            Assert.equal('value', schema.path, data, schema.template, result)
7780
	            return result.length === length
7781
	        }
7782
7783
	        // 有生成规则
7784
	        var actualRepeatCount
7785
	        switch (templateType) {
7786
	            case 'number':
7787
	                var parts = (data + '').split('.')
7788
	                parts[0] = +parts[0]
7789
7790
	                // 整数部分
7791
	                // |min-max
7792
	                if (rule.min !== undefined && rule.max !== undefined) {
7793
	                    Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result)
7794
	                        // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})')
7795
	                    Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result)
7796
	                }
7797
	                // |count
7798
	                if (rule.min !== undefined && rule.max === undefined) {
7799
	                    Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name)
7800
	                }
7801
7802
	                // 小数部分
7803
	                if (rule.decimal) {
7804
	                    // |dmin-dmax
7805
	                    if (rule.dmin !== undefined && rule.dmax !== undefined) {
7806
	                        Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result)
7807
	                        Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result)
7808
	                    }
7809
	                    // |dcount
7810
	                    if (rule.dmin !== undefined && rule.dmax === undefined) {
7811
	                        Assert.equal('value', schema.path, parts[1].length, rule.dmin, result)
7812
	                    }
7813
	                }
7814
7815
	                break
7816
7817
	            case 'boolean':
7818
	                break
7819
7820
	            case 'string':
7821
	                // 'aaa'.match(/a/g)
7822
	                actualRepeatCount = data.match(new RegExp(schema.template, 'g'))
7823
	                actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0
7824
7825
	                // |min-max
7826
	                if (rule.min !== undefined && rule.max !== undefined) {
7827
	                    Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)
7828
	                    Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)
7829
	                }
7830
	                // |count
7831
	                if (rule.min !== undefined && rule.max === undefined) {
7832
	                    Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)
7833
	                }
7834
7835
	                break
7836
7837
	            case 'regexp':
7838
	                actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g'))
7839
	                actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0
7840
7841
	                // |min-max
7842
	                if (rule.min !== undefined && rule.max !== undefined) {
7843
	                    Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)
7844
	                    Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)
7845
	                }
7846
	                // |count
7847
	                if (rule.min !== undefined && rule.max === undefined) {
7848
	                    Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)
7849
	                }
7850
	                break
7851
	        }
7852
7853
	        return result.length === length
7854
	    },
7855
	    properties: function(schema, data, name, result) {
7856
	        var length = result.length
7857
7858
	        var rule = schema.rule
7859
	        var keys = Util.keys(data)
7860
	        if (!schema.properties) return
7861
7862
	        // 无生成规则
7863
	        if (!schema.rule.parameters) {
7864
	            Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result)
7865
	        } else {
7866
	            // 有生成规则
7867
	            // |min-max
7868
	            if (rule.min !== undefined && rule.max !== undefined) {
7869
	                Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result)
7870
	                Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result)
7871
	            }
7872
	            // |count
7873
	            if (rule.min !== undefined && rule.max === undefined) {
7874
	                // |1, |>1
7875
	                if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result)
7876
	            }
7877
	        }
7878
7879
	        if (result.length !== length) return false
7880
7881
	        for (var i = 0; i < keys.length; i++) {
7882
	            result.push.apply(
7883
	                result,
7884
	                this.diff(
7885
	                    function() {
7886
	                        var property
7887
	                        Util.each(schema.properties, function(item /*, index*/ ) {
7888
	                            if (item.name === keys[i]) property = item
7889
	                        })
7890
	                        return property || schema.properties[i]
7891
	                    }(),
7892
	                    data[keys[i]],
7893
	                    keys[i]
7894
	                )
7895
	            )
7896
	        }
7897
7898
	        return result.length === length
7899
	    },
7900
	    items: function(schema, data, name, result) {
7901
	        var length = result.length
7902
7903
	        if (!schema.items) return
7904
7905
	        var rule = schema.rule
7906
7907
	        // 无生成规则
7908
	        if (!schema.rule.parameters) {
7909
	            Assert.equal('items length', schema.path, data.length, schema.items.length, result)
7910
	        } else {
7911
	            // 有生成规则
7912
	            // |min-max
7913
	            if (rule.min !== undefined && rule.max !== undefined) {
7914
	                Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result,
7915
	                    '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements')
7916
	                Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result,
7917
	                    '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements')
7918
	            }
7919
	            // |count
7920
	            if (rule.min !== undefined && rule.max === undefined) {
7921
	                // |1, |>1
7922
	                if (rule.count === 1) return result.length === length
7923
	                else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result)
7924
	            }
7925
	            // |+inc
7926
	            if (rule.parameters[2]) return result.length === length
7927
	        }
7928
7929
	        if (result.length !== length) return false
7930
7931
	        for (var i = 0; i < data.length; i++) {
7932
	            result.push.apply(
7933
	                result,
7934
	                this.diff(
7935
	                    schema.items[i % schema.items.length],
7936
	                    data[i],
7937
	                    i % schema.items.length
7938
	                )
7939
	            )
7940
	        }
7941
7942
	        return result.length === length
7943
	    }
7944
	}
7945
7946
	/*
7947
	    完善、友好的提示信息
7948
	    
7949
	    Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to
7950
	    路径 验证类型 描述 
7951
7952
	    Expect path.name is less than or equal to expected, but path.name is actual.
7953
7954
	    Expect path.name is less than or equal to expected, but path.name is actual.
7955
	    Expect path.name is greater than or equal to expected, but path.name is actual.
7956
7957
	*/
7958
	var Assert = {
7959
	    message: function(item) {
7960
	        return (item.message ||
7961
	                '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}')
7962
	            .replace('{utype}', item.type.toUpperCase())
7963
	            .replace('{ltype}', item.type.toLowerCase())
7964
	            .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path)
7965
	            .replace('{action}', item.action)
7966
	            .replace('{expected}', item.expected)
7967
	            .replace('{actual}', item.actual)
7968
	    },
7969
	    equal: function(type, path, actual, expected, result, message) {
7970
	        if (actual === expected) return true
7971
	        switch (type) {
7972
	            case 'type':
7973
	                // 正则模板 === 字符串最终值
7974
	                if (expected === 'regexp' && actual === 'string') return true
7975
	                break
7976
	        }
7977
7978
	        var item = {
7979
	            path: path,
7980
	            type: type,
7981
	            actual: actual,
7982
	            expected: expected,
7983
	            action: 'is equal to',
7984
	            message: message
7985
	        }
7986
	        item.message = Assert.message(item)
7987
	        result.push(item)
7988
	        return false
7989
	    },
7990
	    // actual matches expected
7991
	    match: function(type, path, actual, expected, result, message) {
7992
	        if (expected.test(actual)) return true
7993
7994
	        var item = {
7995
	            path: path,
7996
	            type: type,
7997
	            actual: actual,
7998
	            expected: expected,
7999
	            action: 'matches',
8000
	            message: message
8001
	        }
8002
	        item.message = Assert.message(item)
8003
	        result.push(item)
8004
	        return false
8005
	    },
8006
	    notEqual: function(type, path, actual, expected, result, message) {
8007
	        if (actual !== expected) return true
8008
	        var item = {
8009
	            path: path,
8010
	            type: type,
8011
	            actual: actual,
8012
	            expected: expected,
8013
	            action: 'is not equal to',
8014
	            message: message
8015
	        }
8016
	        item.message = Assert.message(item)
8017
	        result.push(item)
8018
	        return false
8019
	    },
8020
	    greaterThan: function(type, path, actual, expected, result, message) {
8021
	        if (actual > expected) return true
8022
	        var item = {
8023
	            path: path,
8024
	            type: type,
8025
	            actual: actual,
8026
	            expected: expected,
8027
	            action: 'is greater than',
8028
	            message: message
8029
	        }
8030
	        item.message = Assert.message(item)
8031
	        result.push(item)
8032
	        return false
8033
	    },
8034
	    lessThan: function(type, path, actual, expected, result, message) {
8035
	        if (actual < expected) return true
8036
	        var item = {
8037
	            path: path,
8038
	            type: type,
8039
	            actual: actual,
8040
	            expected: expected,
8041
	            action: 'is less to',
8042
	            message: message
8043
	        }
8044
	        item.message = Assert.message(item)
8045
	        result.push(item)
8046
	        return false
8047
	    },
8048
	    greaterThanOrEqualTo: function(type, path, actual, expected, result, message) {
8049
	        if (actual >= expected) return true
8050
	        var item = {
8051
	            path: path,
8052
	            type: type,
8053
	            actual: actual,
8054
	            expected: expected,
8055
	            action: 'is greater than or equal to',
8056
	            message: message
8057
	        }
8058
	        item.message = Assert.message(item)
8059
	        result.push(item)
8060
	        return false
8061
	    },
8062
	    lessThanOrEqualTo: function(type, path, actual, expected, result, message) {
8063
	        if (actual <= expected) return true
8064
	        var item = {
8065
	            path: path,
8066
	            type: type,
8067
	            actual: actual,
8068
	            expected: expected,
8069
	            action: 'is less than or equal to',
8070
	            message: message
8071
	        }
8072
	        item.message = Assert.message(item)
8073
	        result.push(item)
8074
	        return false
8075
	    }
8076
	}
8077
8078
	valid.Diff = Diff
8079
	valid.Assert = Assert
8080
8081
	module.exports = valid
8082
8083
/***/ },
8084
/* 27 */
8085
/***/ function(module, exports, __webpack_require__) {
8086
8087
	module.exports = __webpack_require__(28)
8088
8089
/***/ },
8090
/* 28 */
8091
/***/ function(module, exports, __webpack_require__) {
8092
8093
	/* global window, document, location, Event, setTimeout */
8094
	/*
8095
	    ## MockXMLHttpRequest
8096
8097
	    期望的功能:
8098
	    1. 完整地覆盖原生 XHR 的行为
8099
	    2. 完整地模拟原生 XHR 的行为
8100
	    3. 在发起请求时,自动检测是否需要拦截
8101
	    4. 如果不必拦截,则执行原生 XHR 的行为
8102
	    5. 如果需要拦截,则执行虚拟 XHR 的行为
8103
	    6. 兼容 XMLHttpRequest 和 ActiveXObject
8104
	        new window.XMLHttpRequest()
8105
	        new window.ActiveXObject("Microsoft.XMLHTTP")
8106
8107
	    关键方法的逻辑:
8108
	    * new   此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。
8109
	    * open  此时可以取到 URL,可以决定是否进行拦截。
8110
	    * send  此时已经确定了请求方式。
8111
8112
	    规范:
8113
	    http://xhr.spec.whatwg.org/
8114
	    http://www.w3.org/TR/XMLHttpRequest2/
8115
8116
	    参考实现:
8117
	    https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js
8118
	    https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js
8119
	    https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js
8120
	    https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js
8121
	    https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js
8122
8123
	    **需不需要全面重写 XMLHttpRequest?**
8124
	        http://xhr.spec.whatwg.org/#interface-xmlhttprequest
8125
	        关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。
8126
	        因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。
8127
8128
	    // Event handlers
8129
	    onloadstart         loadstart
8130
	    onprogress          progress
8131
	    onabort             abort
8132
	    onerror             error
8133
	    onload              load
8134
	    ontimeout           timeout
8135
	    onloadend           loadend
8136
	    onreadystatechange  readystatechange
8137
	 */
8138
8139
	var Util = __webpack_require__(3)
8140
8141
	// 备份原生 XMLHttpRequest
8142
	window._XMLHttpRequest = window.XMLHttpRequest
8143
	window._ActiveXObject = window.ActiveXObject
8144
8145
	/*
8146
	    PhantomJS
8147
	    TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")')
8148
8149
	    https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18
8150
	    https://github.com/ariya/phantomjs/issues/11289
8151
	*/
8152
	try {
8153
	    new window.Event('custom')
8154
	} catch (exception) {
8155
	    window.Event = function(type, bubbles, cancelable, detail) {
8156
	        var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent'
8157
	        event.initCustomEvent(type, bubbles, cancelable, detail)
8158
	        return event
8159
	    }
8160
	}
8161
8162
	var XHR_STATES = {
8163
	    // The object has been constructed.
8164
	    UNSENT: 0,
8165
	    // The open() method has been successfully invoked.
8166
	    OPENED: 1,
8167
	    // All redirects (if any) have been followed and all HTTP headers of the response have been received.
8168
	    HEADERS_RECEIVED: 2,
8169
	    // The response's body is being received.
8170
	    LOADING: 3,
8171
	    // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects).
8172
	    DONE: 4
8173
	}
8174
8175
	var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ')
8176
	var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ')
8177
	var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ')
8178
8179
	// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32
8180
	var HTTP_STATUS_CODES = {
8181
	    100: "Continue",
8182
	    101: "Switching Protocols",
8183
	    200: "OK",
8184
	    201: "Created",
8185
	    202: "Accepted",
8186
	    203: "Non-Authoritative Information",
8187
	    204: "No Content",
8188
	    205: "Reset Content",
8189
	    206: "Partial Content",
8190
	    300: "Multiple Choice",
8191
	    301: "Moved Permanently",
8192
	    302: "Found",
8193
	    303: "See Other",
8194
	    304: "Not Modified",
8195
	    305: "Use Proxy",
8196
	    307: "Temporary Redirect",
8197
	    400: "Bad Request",
8198
	    401: "Unauthorized",
8199
	    402: "Payment Required",
8200
	    403: "Forbidden",
8201
	    404: "Not Found",
8202
	    405: "Method Not Allowed",
8203
	    406: "Not Acceptable",
8204
	    407: "Proxy Authentication Required",
8205
	    408: "Request Timeout",
8206
	    409: "Conflict",
8207
	    410: "Gone",
8208
	    411: "Length Required",
8209
	    412: "Precondition Failed",
8210
	    413: "Request Entity Too Large",
8211
	    414: "Request-URI Too Long",
8212
	    415: "Unsupported Media Type",
8213
	    416: "Requested Range Not Satisfiable",
8214
	    417: "Expectation Failed",
8215
	    422: "Unprocessable Entity",
8216
	    500: "Internal Server Error",
8217
	    501: "Not Implemented",
8218
	    502: "Bad Gateway",
8219
	    503: "Service Unavailable",
8220
	    504: "Gateway Timeout",
8221
	    505: "HTTP Version Not Supported"
8222
	}
8223
8224
	/*
8225
	    MockXMLHttpRequest
8226
	*/
8227
8228
	function MockXMLHttpRequest() {
8229
	    // 初始化 custom 对象,用于存储自定义属性
8230
	    this.custom = {
8231
	        events: {},
8232
	        requestHeaders: {},
8233
	        responseHeaders: {}
8234
	    }
8235
	}
8236
8237
	MockXMLHttpRequest._settings = {
8238
	    timeout: '10-100',
8239
	    /*
8240
	        timeout: 50,
8241
	        timeout: '10-100',
8242
	     */
8243
	}
8244
8245
	MockXMLHttpRequest.setup = function(settings) {
8246
	    Util.extend(MockXMLHttpRequest._settings, settings)
8247
	    return MockXMLHttpRequest._settings
8248
	}
8249
8250
	Util.extend(MockXMLHttpRequest, XHR_STATES)
8251
	Util.extend(MockXMLHttpRequest.prototype, XHR_STATES)
8252
8253
	// 标记当前对象为 MockXMLHttpRequest
8254
	MockXMLHttpRequest.prototype.mock = true
8255
8256
	// 是否拦截 Ajax 请求
8257
	MockXMLHttpRequest.prototype.match = false
8258
8259
	// 初始化 Request 相关的属性和方法
8260
	Util.extend(MockXMLHttpRequest.prototype, {
8261
	    // https://xhr.spec.whatwg.org/#the-open()-method
8262
	    // Sets the request method, request URL, and synchronous flag.
8263
	    open: function(method, url, async, username, password) {
8264
	        var that = this
8265
8266
	        Util.extend(this.custom, {
8267
	            method: method,
8268
	            url: url,
8269
	            async: typeof async === 'boolean' ? async : true,
8270
	            username: username,
8271
	            password: password,
8272
	            options: {
8273
	                url: url,
8274
	                type: method
8275
	            }
8276
	        })
8277
8278
	        this.custom.timeout = function(timeout) {
8279
	            if (typeof timeout === 'number') return timeout
8280
	            if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10)
8281
	            if (typeof timeout === 'string' && ~timeout.indexOf('-')) {
8282
	                var tmp = timeout.split('-')
8283
	                var min = parseInt(tmp[0], 10)
8284
	                var max = parseInt(tmp[1], 10)
8285
	                return Math.round(Math.random() * (max - min)) + min
8286
	            }
8287
	        }(MockXMLHttpRequest._settings.timeout)
8288
8289
	        // 查找与请求参数匹配的数据模板
8290
	        var item = find(this.custom.options)
8291
8292
	        function handle(event) {
8293
	            // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest
8294
	            for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) {
8295
	                try {
8296
	                    that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]
8297
	                } catch (e) {}
8298
	            }
8299
	            // 触发 MockXMLHttpRequest 上的同名事件
8300
	            that.dispatchEvent(new Event(event.type /*, false, false, that*/ ))
8301
	        }
8302
8303
	        // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。
8304
	        if (!item) {
8305
	            // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件
8306
	            var xhr = createNativeXMLHttpRequest()
8307
	            this.custom.xhr = xhr
8308
8309
	            // 初始化所有事件,用于监听原生 XHR 对象的事件
8310
	            for (var i = 0; i < XHR_EVENTS.length; i++) {
8311
	                xhr.addEventListener(XHR_EVENTS[i], handle)
8312
	            }
8313
8314
	            // xhr.open()
8315
	            if (username) xhr.open(method, url, async, username, password)
8316
	            else xhr.open(method, url, async)
8317
8318
	            // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest
8319
	            for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) {
8320
	                try {
8321
	                    xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]
8322
	                } catch (e) {}
8323
	            }
8324
8325
	            return
8326
	        }
8327
8328
	        // 找到了匹配的数据模板,开始拦截 XHR 请求
8329
	        this.match = true
8330
	        this.custom.template = item
8331
	        this.readyState = MockXMLHttpRequest.OPENED
8332
	        this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ ))
8333
	    },
8334
	    // https://xhr.spec.whatwg.org/#the-setrequestheader()-method
8335
	    // Combines a header in author request headers.
8336
	    setRequestHeader: function(name, value) {
8337
	        // 原生 XHR
8338
	        if (!this.match) {
8339
	            this.custom.xhr.setRequestHeader(name, value)
8340
	            return
8341
	        }
8342
8343
	        // 拦截 XHR
8344
	        var requestHeaders = this.custom.requestHeaders
8345
	        if (requestHeaders[name]) requestHeaders[name] += ',' + value
8346
	        else requestHeaders[name] = value
8347
	    },
8348
	    timeout: 0,
8349
	    withCredentials: false,
8350
	    upload: {},
8351
	    // https://xhr.spec.whatwg.org/#the-send()-method
8352
	    // Initiates the request.
8353
	    send: function send(data) {
8354
	        var that = this
8355
	        this.custom.options.body = data
8356
8357
	        // 原生 XHR
8358
	        if (!this.match) {
8359
	            this.custom.xhr.send(data)
8360
	            return
8361
	        }
8362
8363
	        // 拦截 XHR
8364
8365
	        // X-Requested-With header
8366
	        this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest')
8367
8368
	        // loadstart The fetch initiates.
8369
	        this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ ))
8370
8371
	        if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步
8372
	        else done() // 同步
8373
8374
	        function done() {
8375
	            that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED
8376
	            that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))
8377
	            that.readyState = MockXMLHttpRequest.LOADING
8378
	            that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))
8379
8380
	            that.status = 200
8381
	            that.statusText = HTTP_STATUS_CODES[200]
8382
8383
	            // fix #92 #93 by @qddegtya
8384
	            that.response = that.responseText = JSON.stringify(
8385
	                convert(that.custom.template, that.custom.options),
8386
	                null, 4
8387
	            )
8388
8389
	            that.readyState = MockXMLHttpRequest.DONE
8390
	            that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))
8391
	            that.dispatchEvent(new Event('load' /*, false, false, that*/ ));
8392
	            that.dispatchEvent(new Event('loadend' /*, false, false, that*/ ));
8393
	        }
8394
	    },
8395
	    // https://xhr.spec.whatwg.org/#the-abort()-method
8396
	    // Cancels any network activity.
8397
	    abort: function abort() {
8398
	        // 原生 XHR
8399
	        if (!this.match) {
8400
	            this.custom.xhr.abort()
8401
	            return
8402
	        }
8403
8404
	        // 拦截 XHR
8405
	        this.readyState = MockXMLHttpRequest.UNSENT
8406
	        this.dispatchEvent(new Event('abort', false, false, this))
8407
	        this.dispatchEvent(new Event('error', false, false, this))
8408
	    }
8409
	})
8410
8411
	// 初始化 Response 相关的属性和方法
8412
	Util.extend(MockXMLHttpRequest.prototype, {
8413
	    responseURL: '',
8414
	    status: MockXMLHttpRequest.UNSENT,
8415
	    statusText: '',
8416
	    // https://xhr.spec.whatwg.org/#the-getresponseheader()-method
8417
	    getResponseHeader: function(name) {
8418
	        // 原生 XHR
8419
	        if (!this.match) {
8420
	            return this.custom.xhr.getResponseHeader(name)
8421
	        }
8422
8423
	        // 拦截 XHR
8424
	        return this.custom.responseHeaders[name.toLowerCase()]
8425
	    },
8426
	    // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method
8427
	    // http://www.utf8-chartable.de/
8428
	    getAllResponseHeaders: function() {
8429
	        // 原生 XHR
8430
	        if (!this.match) {
8431
	            return this.custom.xhr.getAllResponseHeaders()
8432
	        }
8433
8434
	        // 拦截 XHR
8435
	        var responseHeaders = this.custom.responseHeaders
8436
	        var headers = ''
8437
	        for (var h in responseHeaders) {
8438
	            if (!responseHeaders.hasOwnProperty(h)) continue
8439
	            headers += h + ': ' + responseHeaders[h] + '\r\n'
8440
	        }
8441
	        return headers
8442
	    },
8443
	    overrideMimeType: function( /*mime*/ ) {},
8444
	    responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json'
8445
	    response: null,
8446
	    responseText: '',
8447
	    responseXML: null
8448
	})
8449
8450
	// EventTarget
8451
	Util.extend(MockXMLHttpRequest.prototype, {
8452
	    addEventListener: function addEventListener(type, handle) {
8453
	        var events = this.custom.events
8454
	        if (!events[type]) events[type] = []
8455
	        events[type].push(handle)
8456
	    },
8457
	    removeEventListener: function removeEventListener(type, handle) {
8458
	        var handles = this.custom.events[type] || []
8459
	        for (var i = 0; i < handles.length; i++) {
8460
	            if (handles[i] === handle) {
8461
	                handles.splice(i--, 1)
8462
	            }
8463
	        }
8464
	    },
8465
	    dispatchEvent: function dispatchEvent(event) {
8466
	        var handles = this.custom.events[event.type] || []
8467
	        for (var i = 0; i < handles.length; i++) {
8468
	            handles[i].call(this, event)
8469
	        }
8470
8471
	        var ontype = 'on' + event.type
8472
	        if (this[ontype]) this[ontype](event)
8473
	    }
8474
	})
8475
8476
	// Inspired by jQuery
8477
	function createNativeXMLHttpRequest() {
8478
	    var isLocal = function() {
8479
	        var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/
8480
	        var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/
8481
	        var ajaxLocation = location.href
8482
	        var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []
8483
	        return rlocalProtocol.test(ajaxLocParts[1])
8484
	    }()
8485
8486
	    return window.ActiveXObject ?
8487
	        (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR()
8488
8489
	    function createStandardXHR() {
8490
	        try {
8491
	            return new window._XMLHttpRequest();
8492
	        } catch (e) {}
8493
	    }
8494
8495
	    function createActiveXHR() {
8496
	        try {
8497
	            return new window._ActiveXObject("Microsoft.XMLHTTP");
8498
	        } catch (e) {}
8499
	    }
8500
	}
8501
8502
8503
	// 查找与请求参数匹配的数据模板:URL,Type
8504
	function find(options) {
8505
8506
	    for (var sUrlType in MockXMLHttpRequest.Mock._mocked) {
8507
	        var item = MockXMLHttpRequest.Mock._mocked[sUrlType]
8508
	        if (
8509
	            (!item.rurl || match(item.rurl, options.url)) &&
8510
	            (!item.rtype || match(item.rtype, options.type.toLowerCase()))
8511
	        ) {
8512
	            // console.log('[mock]', options.url, '>', item.rurl)
8513
	            return item
8514
	        }
8515
	    }
8516
8517
	    function match(expected, actual) {
8518
	        if (Util.type(expected) === 'string') {
8519
	            return expected === actual
8520
	        }
8521
	        if (Util.type(expected) === 'regexp') {
8522
	            return expected.test(actual)
8523
	        }
8524
	    }
8525
8526
	}
8527
8528
	// 数据模板 => 响应数据
8529
	function convert(item, options) {
8530
	    return Util.isFunction(item.template) ?
8531
	        item.template(options) : MockXMLHttpRequest.Mock.mock(item.template)
8532
	}
8533
8534
	module.exports = MockXMLHttpRequest
8535
8536
/***/ }
8537
/******/ ])
8538
});
8539
;