From 321dc4c3c580b8e3f8c43f6bd02c3a73dad7c4ca Mon Sep 17 00:00:00 2001 From: primakov Date: Tue, 1 Aug 2023 13:14:02 +0300 Subject: [PATCH] init from origin + update --- .eslintrc.js | 45 + .gitignore | 3 + .npmrc | 1 + .serverrc.js | 5 + .vscode/launch.json | 26 + Dockerfile | 14 + Jenkinsfile | 37 + d-scripts/rerun.sh | 6 + docker-compose.yaml | 21 + package-lock.json | 4670 +++++++++++++++++ package.json | 52 + server/error.js | 12 + server/index.js | 64 + server/io.js | 13 + server/root.js | 17 + server/routers/basket/auth.js | 34 + server/routers/basket/categories.js | 25 + server/routers/basket/controller.js | 510 ++ server/routers/basket/dashboard.js | 54 + server/routers/basket/index.js | 9 + server/routers/basket/json/auth/sign-in.json | 10 + .../basket/json/categories/add/success.json | 23 + .../json/categories/current/success.json | 18 + .../basket/json/dashboard/common/error.json | 3 + .../basket/json/dashboard/common/success.json | 8 + .../basket/json/dashboard/list/empty.json | 4 + .../basket/json/dashboard/list/error.json | 4 + .../basket/json/dashboard/list/success.json | 23 + server/routers/basket/json/landing/error.json | 4 + .../routers/basket/json/landing/success.json | 80 + .../basket/json/listItem/item/error.json | 3 + .../basket/json/listItem/item/success.json | 15 + .../json/listItem/shoppingList/error.json | 4 + .../json/listItem/shoppingList/success.json | 34 + server/routers/basket/key.js | 5 + server/routers/basket/landing.js | 7 + server/routers/basket/listItem.js | 67 + server/routers/bushou/episodes/success.json | 162 + .../images/60px-%E4%B8%80-bigseal.svg.png | Bin 0 -> 377 bytes .../images/60px-%E4%B8%80-bronze.svg.png | Bin 0 -> 470 bytes .../images/60px-%E4%B8%80-clerical.svg.png | Bin 0 -> 578 bytes .../images/60px-%E4%B8%80-oracle.svg.png | Bin 0 -> 481 bytes .../bushou/images/60px-%E4%B8%80-seal.svg.png | Bin 0 -> 368 bytes .../bushou/images/60px-%E4%B8%80-silk.svg.png | Bin 0 -> 593 bytes .../bushou/images/60px-%E4%B8%80-slip.svg.png | Bin 0 -> 539 bytes .../images/60px-%E4%B8%A8-bigseal.svg.png | Bin 0 -> 414 bytes .../bushou/images/60px-%E4%B8%A8-seal.svg.png | Bin 0 -> 414 bytes .../images/60px-%E4%B8%B6-bronze.svg.png | Bin 0 -> 739 bytes .../bushou/images/60px-%E4%B8%B6-seal.svg.png | Bin 0 -> 686 bytes .../images/60px-%E4%B8%BF-bigseal.svg.png | Bin 0 -> 750 bytes .../bushou/images/60px-%E4%B8%BF-seal.svg.png | Bin 0 -> 687 bytes .../images/60px-%E4%B9%99-bigseal.svg.png | Bin 0 -> 706 bytes .../images/60px-%E4%B9%99-bronze.svg.png | Bin 0 -> 776 bytes .../images/60px-%E4%B9%99-oracle.svg.png | Bin 0 -> 628 bytes .../bushou/images/60px-%E4%B9%99-seal.svg.png | Bin 0 -> 742 bytes .../bushou/images/60px-%E4%B9%99-silk.svg.png | Bin 0 -> 853 bytes .../bushou/images/60px-%E4%BA%85-seal.svg.png | Bin 0 -> 911 bytes .../images/60px-%E4%BA%8C-bigseal.svg.png | Bin 0 -> 601 bytes .../images/60px-%E4%BA%8C-bronze.svg.png | Bin 0 -> 648 bytes .../images/60px-%E4%BA%8C-oracle.svg.png | Bin 0 -> 709 bytes .../bushou/images/60px-%E4%BA%8C-seal.svg.png | Bin 0 -> 442 bytes .../bushou/images/60px-%E4%BA%8C-silk.svg.png | Bin 0 -> 858 bytes .../bushou/images/60px-%E4%BA%8C-slip.svg.png | Bin 0 -> 718 bytes .../bushou/images/60px-%E4%BA%A0-seal.svg.png | Bin 0 -> 1015 bytes .../images/60px-%E4%BA%BA-bigseal.svg.png | Bin 0 -> 1075 bytes .../60px-%E4%BA%BA-bronze-shang.svg.png | Bin 0 -> 811 bytes .../60px-%E4%BA%BA-bronze-spring.svg.png | Bin 0 -> 872 bytes .../60px-%E4%BA%BA-bronze-warring.svg.png | Bin 0 -> 659 bytes .../images/60px-%E4%BA%BA-bronze.svg.png | Bin 0 -> 767 bytes .../images/60px-%E4%BA%BA-oracle.svg.png | Bin 0 -> 719 bytes .../bushou/images/60px-%E4%BA%BA-seal.svg.png | Bin 0 -> 1052 bytes .../bushou/images/60px-%E4%BA%BA-silk.svg.png | Bin 0 -> 812 bytes .../bushou/images/60px-%E4%BA%BA-slip.svg.png | Bin 0 -> 760 bytes .../images/60px-%E4%BB%8C-bigseal.svg.png | Bin 0 -> 1296 bytes .../images/60px-%E4%BB%8C-bronze.svg.png | Bin 0 -> 1165 bytes .../images/60px-%E4%BB%8C-oracle.svg.png | Bin 0 -> 955 bytes .../bushou/images/60px-%E4%BB%8C-seal.svg.png | Bin 0 -> 908 bytes .../images/60px-%E5%84%BF-bigseal.svg.png | Bin 0 -> 2074 bytes .../60px-%E5%84%BF-bronze-shang.svg.png | Bin 0 -> 1107 bytes .../images/60px-%E5%84%BF-bronze.svg.png | Bin 0 -> 1065 bytes .../images/60px-%E5%84%BF-oracle.svg.png | Bin 0 -> 1016 bytes .../bushou/images/60px-%E5%84%BF-seal.svg.png | Bin 0 -> 997 bytes .../images/60px-%E5%85%A5-bigseal.svg.png | Bin 0 -> 856 bytes .../images/60px-%E5%85%A5-bronze.svg.png | Bin 0 -> 693 bytes .../images/60px-%E5%85%A5-oracle.svg.png | Bin 0 -> 711 bytes .../bushou/images/60px-%E5%85%A5-seal.svg.png | Bin 0 -> 766 bytes .../bushou/images/60px-%E5%85%A5-silk.svg.png | Bin 0 -> 952 bytes .../images/60px-%E5%85%AB-bigseal.svg.png | Bin 0 -> 1151 bytes .../images/60px-%E5%85%AB-bronze.svg.png | Bin 0 -> 843 bytes .../images/60px-%E5%85%AB-oracle.svg.png | Bin 0 -> 951 bytes .../bushou/images/60px-%E5%85%AB-seal.svg.png | Bin 0 -> 967 bytes .../bushou/images/60px-%E5%85%AB-silk.svg.png | Bin 0 -> 923 bytes .../bushou/images/60px-%E5%85%AB-slip.svg.png | Bin 0 -> 725 bytes .../images/60px-%E5%86%82-bigseal.svg.png | Bin 0 -> 935 bytes .../images/60px-%E5%86%82-bronze.svg.png | Bin 0 -> 820 bytes .../bushou/images/60px-%E5%86%82-seal.svg.png | Bin 0 -> 841 bytes .../60px-%E5%86%88-bronze-shang.svg.png | Bin 0 -> 1616 bytes .../60px-%E5%86%88-bronze-spring.svg.png | Bin 0 -> 1718 bytes .../60px-%E5%86%88-bronze-warring.svg.png | Bin 0 -> 1514 bytes .../images/60px-%E5%86%88-bronze.svg.png | Bin 0 -> 1435 bytes .../60px-%E5%86%8E-bronze-shang.svg.png | Bin 0 -> 1173 bytes .../images/60px-%E5%86%8E-oracle.svg.png | Bin 0 -> 1006 bytes .../images/60px-%E5%86%96-bronze.svg.png | Bin 0 -> 949 bytes .../images/60px-%E5%86%96-oracle.svg.png | Bin 0 -> 2007 bytes .../bushou/images/60px-%E5%86%96-seal.svg.png | Bin 0 -> 930 bytes .../images/60px-%E5%87%A0-bigseal.svg.png | Bin 0 -> 1100 bytes .../bushou/images/60px-%E5%87%A0-seal.svg.png | Bin 0 -> 782 bytes .../bushou/images/60px-%E5%87%A0-silk.svg.png | Bin 0 -> 1237 bytes .../images/60px-%E5%87%B5-bigseal.svg.png | Bin 0 -> 855 bytes .../images/60px-%E5%87%B5-oracle.svg.png | Bin 0 -> 2529 bytes .../bushou/images/60px-%E5%87%B5-seal.svg.png | Bin 0 -> 809 bytes .../bushou/images/60px-%E5%87%B5-silk.svg.png | Bin 0 -> 1041 bytes .../images/60px-%E5%88%80-bigseal.svg.png | Bin 0 -> 1101 bytes .../60px-%E5%88%80-bronze-shang.svg.png | Bin 0 -> 837 bytes .../images/60px-%E5%88%80-bronze.svg.png | Bin 0 -> 1113 bytes .../images/60px-%E5%88%80-oracle.svg.png | Bin 0 -> 760 bytes .../bushou/images/60px-%E5%88%80-seal.svg.png | Bin 0 -> 1020 bytes .../bushou/images/60px-%E5%88%80-silk.svg.png | Bin 0 -> 1015 bytes .../images/60px-%E5%8A%9B-bigseal.svg.png | Bin 0 -> 1156 bytes .../60px-%E5%8A%9B-bronze-spring.svg.png | Bin 0 -> 1166 bytes .../60px-%E5%8A%9B-bronze-warring.svg.png | Bin 0 -> 758 bytes .../images/60px-%E5%8A%9B-bronze.svg.png | Bin 0 -> 1466 bytes .../images/60px-%E5%8A%9B-oracle.svg.png | Bin 0 -> 771 bytes .../bushou/images/60px-%E5%8A%9B-seal.svg.png | Bin 0 -> 1176 bytes .../bushou/images/60px-%E5%8A%9B-silk.svg.png | Bin 0 -> 1088 bytes .../bushou/images/60px-%E5%8A%9B-slip.svg.png | Bin 0 -> 1035 bytes .../images/60px-%E5%8B%B9-bronze.svg.png | Bin 0 -> 1395 bytes .../images/60px-%E5%8B%B9-oracle.svg.png | Bin 0 -> 836 bytes .../bushou/images/60px-%E5%8B%B9-seal.svg.png | Bin 0 -> 909 bytes .../images/60px-%E5%8C%95-bigseal.svg.png | Bin 0 -> 1224 bytes .../60px-%E5%8C%95-bronze-shang.svg.png | Bin 0 -> 854 bytes .../images/60px-%E5%8C%95-bronze.svg.png | Bin 0 -> 809 bytes .../images/60px-%E5%8C%95-oracle.svg.png | Bin 0 -> 761 bytes .../bushou/images/60px-%E5%8C%95-seal.svg.png | Bin 0 -> 1017 bytes .../bushou/images/60px-%E5%8C%95-silk.svg.png | Bin 0 -> 954 bytes .../images/60px-%E5%8C%9A-bigseal.svg.png | Bin 0 -> 1327 bytes .../images/60px-%E5%8C%9A-bronze.svg.png | Bin 0 -> 1291 bytes .../images/60px-%E5%8C%9A-oracle.svg.png | Bin 0 -> 1133 bytes .../bushou/images/60px-%E5%8C%9A-seal.svg.png | Bin 0 -> 790 bytes .../images/60px-%E5%8C%B8-bigseal.svg.png | Bin 0 -> 2394 bytes .../images/60px-%E5%8C%B8-bronze.svg.png | Bin 0 -> 2402 bytes .../images/60px-%E5%8C%B8-oracle.svg.png | Bin 0 -> 1509 bytes .../bushou/images/60px-%E5%8C%B8-seal.svg.png | Bin 0 -> 737 bytes .../bushou/images/60px-%E5%8C%B8-silk.svg.png | Bin 0 -> 2177 bytes .../images/60px-%E5%8D%81-bigseal.svg.png | Bin 0 -> 763 bytes .../60px-%E5%8D%81-bronze-shang.svg.png | Bin 0 -> 505 bytes .../60px-%E5%8D%81-bronze-spring.svg.png | Bin 0 -> 556 bytes .../60px-%E5%8D%81-bronze-warring.svg.png | Bin 0 -> 537 bytes .../images/60px-%E5%8D%81-bronze.svg.png | Bin 0 -> 646 bytes .../images/60px-%E5%8D%81-oracle.svg.png | Bin 0 -> 405 bytes .../bushou/images/60px-%E5%8D%81-seal.svg.png | Bin 0 -> 516 bytes .../bushou/images/60px-%E5%8D%81-silk.svg.png | Bin 0 -> 671 bytes .../bushou/images/60px-%E5%8D%81-slip.svg.png | Bin 0 -> 756 bytes .../images/60px-%E5%8D%9C-bigseal.svg.png | Bin 0 -> 877 bytes .../images/60px-%E5%8D%9C-bronze.svg.png | Bin 0 -> 528 bytes .../images/60px-%E5%8D%9C-oracle.svg.png | Bin 0 -> 671 bytes .../bushou/images/60px-%E5%8D%9C-seal.svg.png | Bin 0 -> 487 bytes .../bushou/images/60px-%E5%8D%9C-silk.svg.png | Bin 0 -> 1042 bytes .../bushou/images/60px-%E5%8D%9C-slip.svg.png | Bin 0 -> 856 bytes .../images/60px-%E5%8D%A9-bronze.svg.png | Bin 0 -> 1270 bytes .../images/60px-%E5%8D%A9-oracle.svg.png | Bin 0 -> 871 bytes .../bushou/images/60px-%E5%8D%A9-seal.svg.png | Bin 0 -> 841 bytes .../images/60px-%E5%8E%82-bigseal.svg.png | Bin 0 -> 722 bytes .../images/60px-%E5%8E%82-bronze.svg.png | Bin 0 -> 608 bytes .../images/60px-%E5%8E%82-oracle.svg.png | Bin 0 -> 735 bytes .../bushou/images/60px-%E5%8E%82-seal.svg.png | Bin 0 -> 650 bytes .../images/60px-%E5%8E%B6-bigseal.svg.png | Bin 0 -> 1103 bytes .../60px-%E5%8E%B6-bronze-warring.svg.png | Bin 0 -> 979 bytes .../bushou/images/60px-%E5%8E%B6-seal.svg.png | Bin 0 -> 909 bytes .../bushou/images/60px-%E5%8E%B6-silk.svg.png | Bin 0 -> 985 bytes .../images/60px-%E5%8F%88-bigseal.svg.png | Bin 0 -> 990 bytes .../images/60px-%E5%8F%88-bronze.svg.png | Bin 0 -> 957 bytes .../images/60px-%E5%8F%88-oracle.svg.png | Bin 0 -> 927 bytes .../bushou/images/60px-%E5%8F%88-seal.svg.png | Bin 0 -> 962 bytes .../bushou/images/60px-%E5%8F%88-silk.svg.png | Bin 0 -> 1086 bytes .../images/60px-%E5%8F%A3-bigseal.svg.png | Bin 0 -> 917 bytes .../60px-%E5%8F%A3-bronze-shang.svg.png | Bin 0 -> 1034 bytes .../images/60px-%E5%8F%A3-bronze.svg.png | Bin 0 -> 1211 bytes .../images/60px-%E5%8F%A3-oracle.svg.png | Bin 0 -> 850 bytes .../bushou/images/60px-%E5%8F%A3-seal.svg.png | Bin 0 -> 810 bytes .../bushou/images/60px-%E5%8F%A3-silk.svg.png | Bin 0 -> 1099 bytes .../images/60px-%E5%9B%97-bigseal.svg.png | Bin 0 -> 1083 bytes .../images/60px-%E5%9B%97-bronze.svg.png | Bin 0 -> 1028 bytes .../images/60px-%E5%9B%97-oracle.svg.png | Bin 0 -> 1641 bytes .../bushou/images/60px-%E5%9B%97-seal.svg.png | Bin 0 -> 1007 bytes .../images/60px-%E5%9C%9F-bigseal.svg.png | Bin 0 -> 560 bytes .../60px-%E5%9C%9F-bronze-spring.svg.png | Bin 0 -> 890 bytes .../images/60px-%E5%9C%9F-bronze.svg.png | Bin 0 -> 855 bytes .../images/60px-%E5%9C%9F-oracle.svg.png | Bin 0 -> 1009 bytes .../bushou/images/60px-%E5%9C%9F-seal.svg.png | Bin 0 -> 627 bytes .../bushou/images/60px-%E5%9C%9F-silk.svg.png | Bin 0 -> 879 bytes .../bushou/images/60px-%E5%9C%9F-slip.svg.png | Bin 0 -> 904 bytes .../images/60px-%E5%A3%AB-bigseal.svg.png | Bin 0 -> 1167 bytes .../images/60px-%E5%A3%AB-bronze.svg.png | Bin 0 -> 850 bytes .../bushou/images/60px-%E5%A3%AB-seal.svg.png | Bin 0 -> 717 bytes .../bushou/images/60px-%E5%A3%AB-silk.svg.png | Bin 0 -> 922 bytes .../bushou/images/60px-%E5%A3%AB-slip.svg.png | Bin 0 -> 810 bytes .../bushou/images/60px-%E5%A4%82-seal.svg.png | Bin 0 -> 892 bytes .../images/60px-%E5%A4%8A-oracle.svg.png | Bin 0 -> 1108 bytes .../bushou/images/60px-%E5%A4%8A-seal.svg.png | Bin 0 -> 1061 bytes .../images/60px-%E5%A4%95-bigseal.svg.png | Bin 0 -> 1059 bytes .../images/60px-%E5%A4%95-bronze.svg.png | Bin 0 -> 1024 bytes .../images/60px-%E5%A4%95-oracle.svg.png | Bin 0 -> 846 bytes .../bushou/images/60px-%E5%A4%95-seal.svg.png | Bin 0 -> 1137 bytes .../bushou/images/60px-%E5%A4%95-silk.svg.png | Bin 0 -> 1114 bytes .../images/60px-%E5%A4%A7-bigseal.svg.png | Bin 0 -> 1175 bytes .../60px-%E5%A4%A7-bronze-shang.svg.png | Bin 0 -> 889 bytes .../60px-%E5%A4%A7-bronze-warring.svg.png | Bin 0 -> 789 bytes .../images/60px-%E5%A4%A7-bronze.svg.png | Bin 0 -> 967 bytes .../images/60px-%E5%A4%A7-oracle.svg.png | Bin 0 -> 933 bytes .../bushou/images/60px-%E5%A4%A7-seal.svg.png | Bin 0 -> 1000 bytes .../bushou/images/60px-%E5%A4%A7-silk.svg.png | Bin 0 -> 968 bytes .../bushou/images/60px-%E5%A4%A7-slip.svg.png | Bin 0 -> 1032 bytes .../bushou/images/60px-%E5%A4%A7-zhou.svg.png | Bin 0 -> 918 bytes .../images/60px-%E5%A4%B6-ancient.svg.png | Bin 0 -> 1199 bytes .../images/60px-%E5%A5%B3-bigseal.svg.png | Bin 0 -> 1138 bytes .../images/60px-%E5%A5%B3-bronze.svg.png | Bin 0 -> 946 bytes .../images/60px-%E5%A5%B3-oracle.svg.png | Bin 0 -> 894 bytes .../bushou/images/60px-%E5%A5%B3-seal.svg.png | Bin 0 -> 1249 bytes .../bushou/images/60px-%E5%A5%B3-silk.svg.png | Bin 0 -> 1344 bytes .../images/60px-%E5%AD%90-bigseal.svg.png | Bin 0 -> 1092 bytes .../images/60px-%E5%AD%90-bronze.svg.png | Bin 0 -> 1017 bytes .../images/60px-%E5%AD%90-oracle.svg.png | Bin 0 -> 968 bytes .../bushou/images/60px-%E5%AD%90-seal.svg.png | Bin 0 -> 1167 bytes .../bushou/images/60px-%E5%AD%90-silk.svg.png | Bin 0 -> 1099 bytes .../images/60px-%E5%AE%80-bigseal.svg.png | Bin 0 -> 834 bytes .../images/60px-%E5%AE%80-bronze.svg.png | Bin 0 -> 876 bytes .../images/60px-%E5%AE%80-oracle.svg.png | Bin 0 -> 957 bytes .../bushou/images/60px-%E5%AE%80-seal.svg.png | Bin 0 -> 790 bytes .../images/60px-%E5%AF%B8-bigseal.svg.png | Bin 0 -> 1067 bytes .../images/60px-%E5%AF%B8-bronze.svg.png | Bin 0 -> 1645 bytes .../bushou/images/60px-%E5%AF%B8-seal.svg.png | Bin 0 -> 1019 bytes .../bushou/images/60px-%E5%AF%B8-slip.svg.png | Bin 0 -> 957 bytes .../images/60px-%E5%B0%8F-bigseal.svg.png | Bin 0 -> 1112 bytes .../images/60px-%E5%B0%8F-bronze.svg.png | Bin 0 -> 950 bytes .../images/60px-%E5%B0%8F-oracle.svg.png | Bin 0 -> 823 bytes .../bushou/images/60px-%E5%B0%8F-seal.svg.png | Bin 0 -> 882 bytes .../bushou/images/60px-%E5%B0%8F-slip.svg.png | Bin 0 -> 1003 bytes .../images/60px-%E5%B0%A2-ancient.svg.png | Bin 0 -> 1225 bytes .../images/60px-%E5%B0%A2-bronze.svg.png | Bin 0 -> 941 bytes .../images/60px-%E5%B0%A2-oracle.svg.png | Bin 0 -> 781 bytes .../bushou/images/60px-%E5%B0%A2-seal.svg.png | Bin 0 -> 1143 bytes .../images/60px-%E5%B0%B8-bigseal.svg.png | Bin 0 -> 914 bytes .../60px-%E5%B0%B8-bronze-shang.svg.png | Bin 0 -> 773 bytes .../images/60px-%E5%B0%B8-bronze.svg.png | Bin 0 -> 871 bytes .../images/60px-%E5%B0%B8-oracle.svg.png | Bin 0 -> 763 bytes .../bushou/images/60px-%E5%B0%B8-seal.svg.png | Bin 0 -> 641 bytes .../bushou/images/60px-%E5%B0%B8-slip.svg.png | Bin 0 -> 828 bytes .../images/60px-%E5%B1%AE-bigseal.svg.png | Bin 0 -> 882 bytes .../images/60px-%E5%B1%AE-bronze.svg.png | Bin 0 -> 705 bytes .../bushou/images/60px-%E5%B1%AE-seal.svg.png | Bin 0 -> 843 bytes .../bushou/images/60px-%E5%B1%AE-silk.svg.png | Bin 0 -> 896 bytes .../images/60px-%E5%B1%B1-bigseal.svg.png | Bin 0 -> 1260 bytes .../images/60px-%E5%B1%B1-bronze.svg.png | Bin 0 -> 1147 bytes .../images/60px-%E5%B1%B1-oracle.svg.png | Bin 0 -> 1328 bytes .../bushou/images/60px-%E5%B1%B1-seal.svg.png | Bin 0 -> 998 bytes .../bushou/images/60px-%E5%B1%B1-silk.svg.png | Bin 0 -> 867 bytes .../60px-%E5%B7%9D-bronze-warring.svg.png | Bin 0 -> 1123 bytes .../images/60px-%E5%B7%9D-bronze.svg.png | Bin 0 -> 1216 bytes .../images/60px-%E5%B7%9D-oracle.svg.png | Bin 0 -> 1064 bytes .../bushou/images/60px-%E5%B7%9D-seal.svg.png | Bin 0 -> 1276 bytes .../bushou/images/60px-%E5%B7%9D-silk.svg.png | Bin 0 -> 1372 bytes .../images/60px-%E5%B7%A5-ancient.svg.png | Bin 0 -> 1109 bytes .../images/60px-%E5%B7%A5-bigseal.svg.png | Bin 0 -> 953 bytes .../images/60px-%E5%B7%A5-bronze.svg.png | Bin 0 -> 765 bytes .../images/60px-%E5%B7%A5-oracle.svg.png | Bin 0 -> 772 bytes .../bushou/images/60px-%E5%B7%A5-seal.svg.png | Bin 0 -> 587 bytes .../bushou/images/60px-%E5%B7%A5-silk.svg.png | Bin 0 -> 1017 bytes .../images/60px-%E5%B7%B1-bigseal.svg.png | Bin 0 -> 1014 bytes .../images/60px-%E5%B7%B1-bronze.svg.png | Bin 0 -> 922 bytes .../images/60px-%E5%B7%B1-oracle.svg.png | Bin 0 -> 926 bytes .../bushou/images/60px-%E5%B7%B1-seal.svg.png | Bin 0 -> 914 bytes .../bushou/images/60px-%E5%B7%B1-silk.svg.png | Bin 0 -> 1155 bytes .../images/60px-%E5%B7%BE-bigseal.svg.png | Bin 0 -> 1053 bytes .../images/60px-%E5%B7%BE-bronze.svg.png | Bin 0 -> 898 bytes .../images/60px-%E5%B7%BE-oracle.svg.png | Bin 0 -> 872 bytes .../bushou/images/60px-%E5%B7%BE-seal.svg.png | Bin 0 -> 856 bytes .../images/60px-%E5%B9%B2-bigseal.svg.png | Bin 0 -> 815 bytes .../images/60px-%E5%B9%B2-bronze.svg.png | Bin 0 -> 788 bytes .../images/60px-%E5%B9%B2-oracle.svg.png | Bin 0 -> 910 bytes .../bushou/images/60px-%E5%B9%B2-seal.svg.png | Bin 0 -> 872 bytes .../bushou/images/60px-%E5%B9%B2-silk.svg.png | Bin 0 -> 966 bytes .../images/60px-%E5%B9%BA-bronze.svg.png | Bin 0 -> 1055 bytes .../bushou/images/60px-%E5%B9%BA-seal.svg.png | Bin 0 -> 1147 bytes .../images/60px-%E5%B9%BF-bigseal.svg.png | Bin 0 -> 802 bytes .../images/60px-%E5%B9%BF-bronze.svg.png | Bin 0 -> 1362 bytes .../bushou/images/60px-%E5%B9%BF-seal.svg.png | Bin 0 -> 645 bytes .../images/60px-%E5%BB%B4-bigseal.svg.png | Bin 0 -> 1025 bytes .../bushou/images/60px-%E5%BB%B4-seal.svg.png | Bin 0 -> 1027 bytes .../images/60px-%E5%BB%BE-bigseal.svg.png | Bin 0 -> 1589 bytes .../images/60px-%E5%BB%BE-bronze.svg.png | Bin 0 -> 1062 bytes .../images/60px-%E5%BB%BE-oracle.svg.png | Bin 0 -> 1278 bytes .../bushou/images/60px-%E5%BB%BE-seal.svg.png | Bin 0 -> 1228 bytes .../images/60px-%E5%BC%8B-bigseal.svg.png | Bin 0 -> 962 bytes .../images/60px-%E5%BC%8B-bronze.svg.png | Bin 0 -> 781 bytes .../images/60px-%E5%BC%8B-oracle.svg.png | Bin 0 -> 873 bytes .../bushou/images/60px-%E5%BC%8B-seal.svg.png | Bin 0 -> 1073 bytes .../bushou/images/60px-%E5%BC%8B-silk.svg.png | Bin 0 -> 1042 bytes .../images/60px-%E5%BC%8C-ancient.svg.png | Bin 0 -> 960 bytes .../images/60px-%E5%BC%8D-ancient.svg.png | Bin 0 -> 968 bytes .../images/60px-%E5%BC%93-bigseal.svg.png | Bin 0 -> 958 bytes .../images/60px-%E5%BC%93-bronze.svg.png | Bin 0 -> 967 bytes .../images/60px-%E5%BC%93-oracle.svg.png | Bin 0 -> 929 bytes .../bushou/images/60px-%E5%BC%93-seal.svg.png | Bin 0 -> 903 bytes .../bushou/images/60px-%E5%BC%93-silk.svg.png | Bin 0 -> 1074 bytes .../bushou/images/60px-%E5%BD%90-seal.svg.png | Bin 0 -> 828 bytes .../images/60px-%E5%BD%A1-bigseal.svg.png | Bin 0 -> 1042 bytes .../bushou/images/60px-%E5%BD%A1-seal.svg.png | Bin 0 -> 1005 bytes .../images/60px-%E5%BD%B3-bigseal.svg.png | Bin 0 -> 1031 bytes .../images/60px-%E5%BD%B3-bronze.svg.png | Bin 0 -> 1259 bytes .../bushou/images/60px-%E5%BD%B3-seal.svg.png | Bin 0 -> 1063 bytes .../images/60px-%E5%BF%83-bigseal.svg.png | Bin 0 -> 1422 bytes .../60px-%E5%BF%83-bronze-shang.svg.png | Bin 0 -> 1199 bytes .../images/60px-%E5%BF%83-bronze.svg.png | Bin 0 -> 1307 bytes .../images/60px-%E5%BF%83-oracle.svg.png | Bin 0 -> 1248 bytes .../bushou/images/60px-%E5%BF%83-seal.svg.png | Bin 0 -> 1135 bytes .../bushou/images/60px-%E5%BF%83-silk.svg.png | Bin 0 -> 1388 bytes .../images/60px-%E6%88%88-bronze.svg.png | Bin 0 -> 924 bytes .../images/60px-%E6%88%88-oracle.svg.png | Bin 0 -> 772 bytes .../bushou/images/60px-%E6%88%88-seal.svg.png | Bin 0 -> 1041 bytes .../bushou/images/60px-%E6%88%88-silk.svg.png | Bin 0 -> 1026 bytes .../images/60px-%E6%88%B6-bigseal.svg.png | Bin 0 -> 962 bytes .../images/60px-%E6%88%B6-bronze.svg.png | Bin 0 -> 1244 bytes .../images/60px-%E6%88%B6-oracle.svg.png | Bin 0 -> 935 bytes .../bushou/images/60px-%E6%88%B6-seal.svg.png | Bin 0 -> 951 bytes .../bushou/images/60px-%E6%88%B6-silk.svg.png | Bin 0 -> 1117 bytes .../images/60px-%E6%89%8B-ancient.svg.png | Bin 0 -> 1178 bytes .../images/60px-%E6%89%8B-bigseal.svg.png | Bin 0 -> 1065 bytes .../images/60px-%E6%89%8B-bronze.svg.png | Bin 0 -> 998 bytes .../bushou/images/60px-%E6%89%8B-seal.svg.png | Bin 0 -> 953 bytes .../bushou/images/60px-%E6%89%8B-silk.svg.png | Bin 0 -> 1300 bytes .../bushou/images/60px-%E6%89%8B-slip.svg.png | Bin 0 -> 916 bytes .../images/60px-%E6%94%AF-bigseal.svg.png | Bin 0 -> 1225 bytes .../bushou/images/60px-%E6%94%AF-seal.svg.png | Bin 0 -> 1223 bytes .../bushou/images/60px-%E6%94%AF-silk.svg.png | Bin 0 -> 1131 bytes .../images/60px-%E6%94%B4-bigseal.svg.png | Bin 0 -> 1142 bytes .../images/60px-%E6%94%B4-oracle.svg.png | Bin 0 -> 789 bytes .../bushou/images/60px-%E6%94%B4-seal.svg.png | Bin 0 -> 965 bytes .../images/60px-%E6%96%87-bigseal.svg.png | Bin 0 -> 1263 bytes .../images/60px-%E6%96%87-bronze.svg.png | Bin 0 -> 1123 bytes .../images/60px-%E6%96%87-oracle.svg.png | Bin 0 -> 1037 bytes .../bushou/images/60px-%E6%96%87-seal.svg.png | Bin 0 -> 1111 bytes .../bushou/images/60px-%E6%96%87-silk.svg.png | Bin 0 -> 1225 bytes .../images/60px-%E6%96%97-bigseal.svg.png | Bin 0 -> 1309 bytes .../60px-%E6%96%97-bronze-spring.svg.png | Bin 0 -> 949 bytes .../60px-%E6%96%97-bronze-warring.svg.png | Bin 0 -> 1085 bytes .../images/60px-%E6%96%97-oracle.svg.png | Bin 0 -> 720 bytes .../bushou/images/60px-%E6%96%97-seal.svg.png | Bin 0 -> 1042 bytes .../bushou/images/60px-%E6%96%97-slip.svg.png | Bin 0 -> 1182 bytes .../images/60px-%E6%96%A4-bigseal.svg.png | Bin 0 -> 1201 bytes .../images/60px-%E6%96%A4-bronze.svg.png | Bin 0 -> 956 bytes .../images/60px-%E6%96%A4-oracle.svg.png | Bin 0 -> 892 bytes .../bushou/images/60px-%E6%96%A4-seal.svg.png | Bin 0 -> 1149 bytes .../bushou/images/60px-%E6%96%A4-silk.svg.png | Bin 0 -> 1166 bytes .../images/60px-%E6%96%B9-bigseal.svg.png | Bin 0 -> 1095 bytes .../images/60px-%E6%96%B9-bronze.svg.png | Bin 0 -> 1162 bytes .../images/60px-%E6%96%B9-oracle.svg.png | Bin 0 -> 876 bytes .../bushou/images/60px-%E6%96%B9-seal.svg.png | Bin 0 -> 1060 bytes .../bushou/images/60px-%E6%96%B9-silk.svg.png | Bin 0 -> 1289 bytes .../images/60px-%E6%97%A0-bigseal.svg.png | Bin 0 -> 1222 bytes .../images/60px-%E6%97%A0-bronze.svg.png | Bin 0 -> 1261 bytes .../images/60px-%E6%97%A5-bigseal.svg.png | Bin 0 -> 1316 bytes .../images/60px-%E6%97%A5-bronze.svg.png | Bin 0 -> 1075 bytes .../images/60px-%E6%97%A5-oracle.svg.png | Bin 0 -> 1055 bytes .../bushou/images/60px-%E6%97%A5-seal.svg.png | Bin 0 -> 936 bytes .../bushou/images/60px-%E6%97%A5-silk.svg.png | Bin 0 -> 1253 bytes .../images/60px-%E6%9B%B0-bigseal.svg.png | Bin 0 -> 1235 bytes .../images/60px-%E6%9B%B0-bronze.svg.png | Bin 0 -> 1224 bytes .../images/60px-%E6%9B%B0-clerical.svg.png | Bin 0 -> 922 bytes .../images/60px-%E6%9B%B0-oracle.svg.png | Bin 0 -> 1182 bytes .../bushou/images/60px-%E6%9B%B0-seal.svg.png | Bin 0 -> 1145 bytes .../bushou/images/60px-%E6%9B%B0-silk.svg.png | Bin 0 -> 1210 bytes .../images/60px-%E6%9C%88-bigseal.svg.png | Bin 0 -> 942 bytes .../images/60px-%E6%9C%88-bronze.svg.png | Bin 0 -> 1275 bytes .../images/60px-%E6%9C%88-oracle.svg.png | Bin 0 -> 780 bytes .../bushou/images/60px-%E6%9C%88-seal.svg.png | Bin 0 -> 1191 bytes .../bushou/images/60px-%E6%9C%88-silk.svg.png | Bin 0 -> 1258 bytes .../images/60px-%E6%9C%A8-bigseal.svg.png | Bin 0 -> 1397 bytes .../images/60px-%E6%9C%A8-bronze.svg.png | Bin 0 -> 911 bytes .../images/60px-%E6%9C%A8-oracle.svg.png | Bin 0 -> 901 bytes .../bushou/images/60px-%E6%9C%A8-seal.svg.png | Bin 0 -> 1004 bytes .../bushou/images/60px-%E6%9C%A8-silk.svg.png | Bin 0 -> 1007 bytes .../bushou/images/60px-%E6%9D%B8-silk.svg.png | Bin 0 -> 1272 bytes .../images/60px-%E6%AC%A0-bigseal.svg.png | Bin 0 -> 1464 bytes .../bushou/images/60px-%E6%AC%A0-seal.svg.png | Bin 0 -> 1188 bytes .../images/60px-%E6%AD%A2-bigseal.svg.png | Bin 0 -> 1060 bytes .../60px-%E6%AD%A2-bronze-shang.svg.png | Bin 0 -> 903 bytes .../images/60px-%E6%AD%A2-bronze.svg.png | Bin 0 -> 1166 bytes .../images/60px-%E6%AD%A2-oracle.svg.png | Bin 0 -> 936 bytes .../bushou/images/60px-%E6%AD%A2-seal.svg.png | Bin 0 -> 934 bytes .../bushou/images/60px-%E6%AD%A2-silk.svg.png | Bin 0 -> 884 bytes .../bushou/images/60px-%E6%AD%A2-slip.svg.png | Bin 0 -> 1161 bytes .../images/60px-%E6%AD%B9-bigseal.svg.png | Bin 0 -> 997 bytes .../images/60px-%E6%AD%B9-oracle.svg.png | Bin 0 -> 835 bytes .../bushou/images/60px-%E6%AD%B9-seal.svg.png | Bin 0 -> 839 bytes .../images/60px-%E6%AE%B3-bigseal.svg.png | Bin 0 -> 1354 bytes .../images/60px-%E6%AE%B3-bronze.svg.png | Bin 0 -> 1025 bytes .../images/60px-%E6%AE%B3-oracle.svg.png | Bin 0 -> 869 bytes .../bushou/images/60px-%E6%AE%B3-seal.svg.png | Bin 0 -> 1146 bytes .../bushou/images/60px-%E6%AE%B3-slip.svg.png | Bin 0 -> 1171 bytes .../images/60px-%E6%AF%8B-bigseal.svg.png | Bin 0 -> 1464 bytes .../images/60px-%E6%AF%8B-bronze.svg.png | Bin 0 -> 1237 bytes .../bushou/images/60px-%E6%AF%8B-seal.svg.png | Bin 0 -> 1355 bytes .../images/60px-%E6%AF%94-bigseal.svg.png | Bin 0 -> 1140 bytes .../images/60px-%E6%AF%94-bronze.svg.png | Bin 0 -> 1123 bytes .../images/60px-%E6%AF%94-oracle.svg.png | Bin 0 -> 956 bytes .../bushou/images/60px-%E6%AF%94-seal.svg.png | Bin 0 -> 1339 bytes .../bushou/images/60px-%E6%AF%94-silk.svg.png | Bin 0 -> 1309 bytes .../images/60px-%E6%AF%9B-bigseal.svg.png | Bin 0 -> 1212 bytes .../images/60px-%E6%AF%9B-bronze.svg.png | Bin 0 -> 1141 bytes .../bushou/images/60px-%E6%AF%9B-seal.svg.png | Bin 0 -> 1168 bytes .../bushou/images/60px-%E6%AF%9B-silk.svg.png | Bin 0 -> 1252 bytes .../images/60px-%E6%B0%8F-bigseal.svg.png | Bin 0 -> 1282 bytes .../images/60px-%E6%B0%8F-bronze.svg.png | Bin 0 -> 972 bytes .../images/60px-%E6%B0%8F-oracle.svg.png | Bin 0 -> 805 bytes .../bushou/images/60px-%E6%B0%8F-seal.svg.png | Bin 0 -> 1063 bytes .../bushou/images/60px-%E6%B0%8F-silk.svg.png | Bin 0 -> 1205 bytes .../images/60px-%E6%B0%94-bigseal.svg.png | Bin 0 -> 998 bytes .../60px-%E6%B0%94-bronze-spring.svg.png | Bin 0 -> 1098 bytes .../images/60px-%E6%B0%94-bronze.svg.png | Bin 0 -> 803 bytes .../images/60px-%E6%B0%94-oracle.svg.png | Bin 0 -> 717 bytes .../bushou/images/60px-%E6%B0%94-seal.svg.png | Bin 0 -> 869 bytes .../bushou/images/60px-%E6%B0%94-silk.svg.png | Bin 0 -> 1589 bytes .../bushou/images/60px-%E6%B0%94-slip.svg.png | Bin 0 -> 1190 bytes .../images/60px-%E6%B0%B4-bigseal.svg.png | Bin 0 -> 890 bytes .../60px-%E6%B0%B4-bronze-warring.svg.png | Bin 0 -> 877 bytes .../images/60px-%E6%B0%B4-bronze.svg.png | Bin 0 -> 1004 bytes .../images/60px-%E6%B0%B4-oracle.svg.png | Bin 0 -> 1011 bytes .../bushou/images/60px-%E6%B0%B4-seal.svg.png | Bin 0 -> 1210 bytes .../bushou/images/60px-%E6%B0%B4-silk.svg.png | Bin 0 -> 1141 bytes .../bushou/images/60px-%E6%B0%B4-slip.svg.png | Bin 0 -> 1240 bytes .../images/60px-%E7%81%AB-bigseal.svg.png | Bin 0 -> 1351 bytes .../60px-%E7%81%AB-bronze-spring.svg.png | Bin 0 -> 1484 bytes .../images/60px-%E7%81%AB-bronze.svg.png | Bin 0 -> 1280 bytes .../images/60px-%E7%81%AB-oracle.svg.png | Bin 0 -> 1393 bytes .../bushou/images/60px-%E7%81%AB-seal.svg.png | Bin 0 -> 1036 bytes .../bushou/images/60px-%E7%81%AB-silk.svg.png | Bin 0 -> 1278 bytes .../bushou/images/60px-%E7%81%AB-slip.svg.png | Bin 0 -> 1139 bytes .../bushou/images/60px-%E7%84%A1-seal.svg.png | Bin 0 -> 1867 bytes .../images/60px-%E7%88%AA-bigseal.svg.png | Bin 0 -> 1079 bytes .../images/60px-%E7%88%AA-bronze.svg.png | Bin 0 -> 1140 bytes .../images/60px-%E7%88%AA-oracle.svg.png | Bin 0 -> 925 bytes .../bushou/images/60px-%E7%88%AA-seal.svg.png | Bin 0 -> 1210 bytes .../images/60px-%E7%88%B6-bigseal.svg.png | Bin 0 -> 1013 bytes .../images/60px-%E7%88%B6-bronze.svg.png | Bin 0 -> 1120 bytes .../images/60px-%E7%88%B6-oracle.svg.png | Bin 0 -> 933 bytes .../bushou/images/60px-%E7%88%B6-seal.svg.png | Bin 0 -> 961 bytes .../bushou/images/60px-%E7%88%B6-silk.svg.png | Bin 0 -> 1147 bytes .../images/60px-%E7%88%BB-bigseal.svg.png | Bin 0 -> 1265 bytes .../images/60px-%E7%88%BB-bronze.svg.png | Bin 0 -> 1207 bytes .../images/60px-%E7%88%BB-oracle.svg.png | Bin 0 -> 916 bytes .../bushou/images/60px-%E7%88%BB-seal.svg.png | Bin 0 -> 1144 bytes .../60px-%E7%88%BF-bronze-shang.svg.png | Bin 0 -> 1188 bytes .../images/60px-%E7%88%BF-oracle.svg.png | Bin 0 -> 752 bytes .../60px-%E7%89%80-bronze-warring.svg.png | Bin 0 -> 1016 bytes .../bushou/images/60px-%E7%89%80-silk.svg.png | Bin 0 -> 1508 bytes .../bushou/images/60px-%E7%89%80-slip.svg.png | Bin 0 -> 1325 bytes .../images/60px-%E7%89%87-bigseal.svg.png | Bin 0 -> 1041 bytes .../bushou/images/60px-%E7%89%87-seal.svg.png | Bin 0 -> 843 bytes .../images/60px-%E7%89%99-bigseal.svg.png | Bin 0 -> 1091 bytes .../images/60px-%E7%89%99-bronze.svg.png | Bin 0 -> 1099 bytes .../bushou/images/60px-%E7%89%99-seal.svg.png | Bin 0 -> 1038 bytes .../images/60px-%E7%89%9B-bigseal.svg.png | Bin 0 -> 1065 bytes .../images/60px-%E7%89%9B-bronze.svg.png | Bin 0 -> 1042 bytes .../images/60px-%E7%89%9B-oracle.svg.png | Bin 0 -> 1015 bytes .../bushou/images/60px-%E7%89%9B-seal.svg.png | Bin 0 -> 794 bytes .../bushou/images/60px-%E7%89%9B-silk.svg.png | Bin 0 -> 1213 bytes .../images/60px-%E7%8A%AC-bigseal.svg.png | Bin 0 -> 1021 bytes .../60px-%E7%8A%AC-bronze-shang.svg.png | Bin 0 -> 993 bytes .../images/60px-%E7%8A%AC-bronze.svg.png | Bin 0 -> 994 bytes .../images/60px-%E7%8A%AC-oracle.svg.png | Bin 0 -> 1085 bytes .../bushou/images/60px-%E7%8A%AC-seal.svg.png | Bin 0 -> 1134 bytes .../bushou/images/60px-%E7%8A%AC-silk.svg.png | Bin 0 -> 1293 bytes .../images/60px-%E7%8E%84-bigseal.svg.png | Bin 0 -> 1218 bytes .../images/60px-%E7%8E%84-bronze.svg.png | Bin 0 -> 905 bytes .../bushou/images/60px-%E7%8E%84-seal.svg.png | Bin 0 -> 1145 bytes .../images/60px-%E7%8E%89-ancient.svg.png | Bin 0 -> 1171 bytes .../images/60px-%E7%8E%89-bigseal.svg.png | Bin 0 -> 944 bytes .../60px-%E7%8E%89-bronze-shang.svg.png | Bin 0 -> 886 bytes .../60px-%E7%8E%89-bronze-spring.svg.png | Bin 0 -> 884 bytes .../60px-%E7%8E%89-bronze-warring.svg.png | Bin 0 -> 832 bytes .../images/60px-%E7%8E%89-bronze.svg.png | Bin 0 -> 889 bytes .../images/60px-%E7%8E%89-clerical.svg.png | Bin 0 -> 970 bytes .../images/60px-%E7%8E%89-oracle.svg.png | Bin 0 -> 740 bytes .../bushou/images/60px-%E7%8E%89-seal.svg.png | Bin 0 -> 664 bytes .../bushou/images/60px-%E7%8E%89-silk.svg.png | Bin 0 -> 1321 bytes .../bushou/images/60px-%E7%8E%89-slip.svg.png | Bin 0 -> 852 bytes .../images/60px-%E7%93%9C-bigseal.svg.png | Bin 0 -> 1548 bytes .../60px-%E7%93%9C-bronze-warring.svg.png | Bin 0 -> 1297 bytes .../bushou/images/60px-%E7%93%9C-seal.svg.png | Bin 0 -> 1452 bytes .../images/60px-%E7%93%A6-bigseal.svg.png | Bin 0 -> 1153 bytes .../bushou/images/60px-%E7%93%A6-seal.svg.png | Bin 0 -> 991 bytes .../bushou/images/60px-%E7%93%A6-silk.svg.png | Bin 0 -> 1102 bytes .../images/60px-%E7%94%98-bigseal.svg.png | Bin 0 -> 909 bytes .../images/60px-%E7%94%98-bronze.svg.png | Bin 0 -> 985 bytes .../images/60px-%E7%94%98-oracle.svg.png | Bin 0 -> 1393 bytes .../bushou/images/60px-%E7%94%98-seal.svg.png | Bin 0 -> 1069 bytes .../images/60px-%E7%94%9F-bigseal.svg.png | Bin 0 -> 974 bytes .../images/60px-%E7%94%9F-bronze.svg.png | Bin 0 -> 1025 bytes .../images/60px-%E7%94%9F-oracle.svg.png | Bin 0 -> 921 bytes .../bushou/images/60px-%E7%94%9F-seal.svg.png | Bin 0 -> 1081 bytes .../images/60px-%E7%94%A8-ancient.svg.png | Bin 0 -> 1288 bytes .../images/60px-%E7%94%A8-bigseal.svg.png | Bin 0 -> 1381 bytes .../60px-%E7%94%A8-bronze-spring.svg.png | Bin 0 -> 1387 bytes .../60px-%E7%94%A8-bronze-warring.svg.png | Bin 0 -> 1051 bytes .../images/60px-%E7%94%A8-bronze.svg.png | Bin 0 -> 1258 bytes .../images/60px-%E7%94%A8-oracle.svg.png | Bin 0 -> 1247 bytes .../bushou/images/60px-%E7%94%A8-seal.svg.png | Bin 0 -> 1212 bytes .../bushou/images/60px-%E7%94%A8-silk.svg.png | Bin 0 -> 1282 bytes .../bushou/images/60px-%E7%94%A8-slip.svg.png | Bin 0 -> 1236 bytes .../images/60px-%E7%94%B0-bigseal.svg.png | Bin 0 -> 1426 bytes .../60px-%E7%94%B0-bronze-shang.svg.png | Bin 0 -> 769 bytes .../images/60px-%E7%94%B0-bronze.svg.png | Bin 0 -> 1264 bytes .../images/60px-%E7%94%B0-oracle.svg.png | Bin 0 -> 1073 bytes .../bushou/images/60px-%E7%94%B0-seal.svg.png | Bin 0 -> 1214 bytes .../bushou/images/60px-%E7%94%B0-silk.svg.png | Bin 0 -> 1143 bytes .../images/60px-%E7%96%8B-bigseal.svg.png | Bin 0 -> 1104 bytes .../bushou/images/60px-%E7%96%8B-seal.svg.png | Bin 0 -> 1149 bytes .../images/60px-%E7%96%92-bronze.svg.png | Bin 0 -> 906 bytes .../images/60px-%E7%96%92-oracle.svg.png | Bin 0 -> 1106 bytes .../bushou/images/60px-%E7%96%92-seal.svg.png | Bin 0 -> 842 bytes .../bushou/images/60px-%E7%99%B6-seal.svg.png | Bin 0 -> 1431 bytes .../images/60px-%E7%99%BD-bigseal.svg.png | Bin 0 -> 1032 bytes .../images/60px-%E7%99%BD-bronze.svg.png | Bin 0 -> 1217 bytes .../images/60px-%E7%99%BD-oracle.svg.png | Bin 0 -> 1059 bytes .../bushou/images/60px-%E7%99%BD-seal.svg.png | Bin 0 -> 1030 bytes .../images/60px-%E7%9A%AE-bigseal.svg.png | Bin 0 -> 1448 bytes .../images/60px-%E7%9A%AE-bronze.svg.png | Bin 0 -> 1243 bytes .../bushou/images/60px-%E7%9A%AE-seal.svg.png | Bin 0 -> 1560 bytes .../images/60px-%E7%9A%BF-bigseal.svg.png | Bin 0 -> 1349 bytes .../images/60px-%E7%9A%BF-bronze.svg.png | Bin 0 -> 1186 bytes .../images/60px-%E7%9A%BF-oracle.svg.png | Bin 0 -> 1045 bytes .../bushou/images/60px-%E7%9A%BF-seal.svg.png | Bin 0 -> 1183 bytes .../images/60px-%E7%9B%AE-ancient.svg.png | Bin 0 -> 1499 bytes .../images/60px-%E7%9B%AE-bigseal.svg.png | Bin 0 -> 1189 bytes .../images/60px-%E7%9B%AE-bronze.svg.png | Bin 0 -> 1133 bytes .../images/60px-%E7%9B%AE-oracle.svg.png | Bin 0 -> 1156 bytes .../bushou/images/60px-%E7%9B%AE-seal.svg.png | Bin 0 -> 1025 bytes .../bushou/images/60px-%E7%9B%AE-slip.svg.png | Bin 0 -> 1098 bytes .../images/60px-%E7%9F%9B-bigseal.svg.png | Bin 0 -> 1103 bytes .../images/60px-%E7%9F%9B-bronze.svg.png | Bin 0 -> 1084 bytes .../bushou/images/60px-%E7%9F%9B-seal.svg.png | Bin 0 -> 1266 bytes .../images/60px-%E7%9F%A2-bigseal.svg.png | Bin 0 -> 827 bytes .../images/60px-%E7%9F%A2-bronze.svg.png | Bin 0 -> 828 bytes .../images/60px-%E7%9F%A2-oracle.svg.png | Bin 0 -> 856 bytes .../bushou/images/60px-%E7%9F%A2-seal.svg.png | Bin 0 -> 1206 bytes .../images/60px-%E7%9F%B3-bigseal.svg.png | Bin 0 -> 1187 bytes .../images/60px-%E7%9F%B3-bronze.svg.png | Bin 0 -> 1126 bytes .../images/60px-%E7%9F%B3-oracle.svg.png | Bin 0 -> 1218 bytes .../bushou/images/60px-%E7%9F%B3-seal.svg.png | Bin 0 -> 974 bytes .../bushou/images/60px-%E7%9F%B3-silk.svg.png | Bin 0 -> 1705 bytes .../images/60px-%E7%A4%BA-ancient.svg.png | Bin 0 -> 1313 bytes .../images/60px-%E7%A4%BA-bigseal.svg.png | Bin 0 -> 1027 bytes .../60px-%E7%A4%BA-bronze-shang.svg.png | Bin 0 -> 724 bytes .../images/60px-%E7%A4%BA-oracle.svg.png | Bin 0 -> 457 bytes .../bushou/images/60px-%E7%A4%BA-seal.svg.png | Bin 0 -> 946 bytes .../bushou/images/60px-%E7%A4%BA-silk.svg.png | Bin 0 -> 1295 bytes .../bushou/images/60px-%E7%A6%B8-seal.svg.png | Bin 0 -> 1369 bytes .../images/60px-%E7%A6%BE-bigseal.svg.png | Bin 0 -> 1086 bytes .../images/60px-%E7%A6%BE-bronze.svg.png | Bin 0 -> 1032 bytes .../images/60px-%E7%A6%BE-oracle.svg.png | Bin 0 -> 819 bytes .../bushou/images/60px-%E7%A6%BE-seal.svg.png | Bin 0 -> 1133 bytes .../images/60px-%E7%A9%B4-bigseal.svg.png | Bin 0 -> 1263 bytes .../bushou/images/60px-%E7%A9%B4-seal.svg.png | Bin 0 -> 1062 bytes .../images/60px-%E7%AB%8B-bronze.svg.png | Bin 0 -> 1114 bytes .../images/60px-%E7%AB%8B-oracle.svg.png | Bin 0 -> 1014 bytes .../bushou/images/60px-%E7%AB%8B-seal.svg.png | Bin 0 -> 1133 bytes .../images/60px-%E7%AB%B9-bigseal.svg.png | Bin 0 -> 1025 bytes .../60px-%E7%AB%B9-bronze-shang.svg.png | Bin 0 -> 995 bytes .../60px-%E7%AB%B9-bronze-warring.svg.png | Bin 0 -> 946 bytes .../images/60px-%E7%AB%B9-bronze.svg.png | Bin 0 -> 1017 bytes .../images/60px-%E7%AB%B9-oracle.svg.png | Bin 0 -> 1233 bytes .../bushou/images/60px-%E7%AB%B9-seal.svg.png | Bin 0 -> 1105 bytes .../bushou/images/60px-%E7%AB%B9-silk.svg.png | Bin 0 -> 1355 bytes .../bushou/images/60px-%E7%AB%B9-slip.svg.png | Bin 0 -> 1090 bytes .../images/60px-%E7%B1%B3-bigseal.svg.png | Bin 0 -> 1696 bytes .../images/60px-%E7%B1%B3-bronze.svg.png | Bin 0 -> 1275 bytes .../images/60px-%E7%B1%B3-oracle.svg.png | Bin 0 -> 1181 bytes .../bushou/images/60px-%E7%B1%B3-seal.svg.png | Bin 0 -> 1025 bytes .../bushou/images/60px-%E7%B1%B3-silk.svg.png | Bin 0 -> 1314 bytes .../bushou/images/60px-%E7%B1%B3-slip.svg.png | Bin 0 -> 1026 bytes .../images/60px-%E7%B3%B8-ancient.svg.png | Bin 0 -> 806 bytes .../60px-%E7%B3%B8-bronze-shang.svg.png | Bin 0 -> 928 bytes .../images/60px-%E7%B3%B8-bronze.svg.png | Bin 0 -> 933 bytes .../images/60px-%E7%B3%B8-oracle.svg.png | Bin 0 -> 944 bytes .../bushou/images/60px-%E7%B3%B8-seal.svg.png | Bin 0 -> 1034 bytes .../images/60px-%E7%BC%B6-bigseal.svg.png | Bin 0 -> 1326 bytes .../60px-%E7%BC%B6-bronze-spring.svg.png | Bin 0 -> 817 bytes .../images/60px-%E7%BC%B6-oracle.svg.png | Bin 0 -> 1032 bytes .../bushou/images/60px-%E7%BC%B6-seal.svg.png | Bin 0 -> 1164 bytes .../images/60px-%E7%BD%91-oracle.svg.png | Bin 0 -> 1221 bytes .../bushou/images/60px-%E7%BD%91-seal.svg.png | Bin 0 -> 1162 bytes .../bushou/images/60px-%E7%BD%91-zhou.svg.png | Bin 0 -> 1289 bytes .../images/60px-%E7%BD%94-ancient.svg.png | Bin 0 -> 1387 bytes .../bushou/images/60px-%E7%BD%94-silk.svg.png | Bin 0 -> 1291 bytes .../bushou/images/60px-%E7%BD%94-slip.svg.png | Bin 0 -> 1479 bytes .../images/60px-%E7%BE%8A-bigseal.svg.png | Bin 0 -> 972 bytes .../images/60px-%E7%BE%8A-bronze.svg.png | Bin 0 -> 1478 bytes .../images/60px-%E7%BE%8A-oracle.svg.png | Bin 0 -> 1019 bytes .../bushou/images/60px-%E7%BE%8A-seal.svg.png | Bin 0 -> 1016 bytes .../images/60px-%E7%BE%BD-bigseal.svg.png | Bin 0 -> 1266 bytes .../images/60px-%E7%BE%BD-bronze.svg.png | Bin 0 -> 1267 bytes .../images/60px-%E7%BE%BD-oracle.svg.png | Bin 0 -> 1144 bytes .../bushou/images/60px-%E7%BE%BD-seal.svg.png | Bin 0 -> 1755 bytes .../images/60px-%E8%80%81-bigseal.svg.png | Bin 0 -> 1537 bytes .../images/60px-%E8%80%81-bronze.svg.png | Bin 0 -> 1145 bytes .../images/60px-%E8%80%81-oracle.svg.png | Bin 0 -> 1062 bytes .../bushou/images/60px-%E8%80%81-seal.svg.png | Bin 0 -> 1374 bytes .../bushou/images/60px-%E8%80%81-silk.svg.png | Bin 0 -> 1725 bytes .../images/60px-%E8%80%8C-bigseal.svg.png | Bin 0 -> 1250 bytes .../images/60px-%E8%80%8C-bronze.svg.png | Bin 0 -> 1354 bytes .../images/60px-%E8%80%8C-oracle.svg.png | Bin 0 -> 1381 bytes .../bushou/images/60px-%E8%80%8C-seal.svg.png | Bin 0 -> 1156 bytes .../images/60px-%E8%80%92-bigseal.svg.png | Bin 0 -> 1234 bytes .../bushou/images/60px-%E8%80%92-seal.svg.png | Bin 0 -> 1315 bytes .../images/60px-%E8%80%B3-bigseal.svg.png | Bin 0 -> 1061 bytes .../60px-%E8%80%B3-bronze-shang.svg.png | Bin 0 -> 1260 bytes .../images/60px-%E8%80%B3-bronze.svg.png | Bin 0 -> 1090 bytes .../images/60px-%E8%80%B3-oracle.svg.png | Bin 0 -> 995 bytes .../bushou/images/60px-%E8%80%B3-seal.svg.png | Bin 0 -> 845 bytes .../bushou/images/60px-%E8%80%B3-silk.svg.png | Bin 0 -> 1353 bytes .../bushou/images/60px-%E8%80%B3-slip.svg.png | Bin 0 -> 979 bytes .../images/60px-%E8%81%BF-bigseal.svg.png | Bin 0 -> 1288 bytes .../images/60px-%E8%81%BF-bronze.svg.png | Bin 0 -> 1217 bytes .../images/60px-%E8%81%BF-oracle.svg.png | Bin 0 -> 918 bytes .../bushou/images/60px-%E8%81%BF-seal.svg.png | Bin 0 -> 1407 bytes .../images/60px-%E8%82%89-bigseal.svg.png | Bin 0 -> 1067 bytes .../images/60px-%E8%82%89-bronze.svg.png | Bin 0 -> 1515 bytes .../images/60px-%E8%82%89-clerical.svg.png | Bin 0 -> 1420 bytes .../images/60px-%E8%82%89-oracle.svg.png | Bin 0 -> 789 bytes .../bushou/images/60px-%E8%82%89-seal.svg.png | Bin 0 -> 1241 bytes .../bushou/images/60px-%E8%82%89-silk.svg.png | Bin 0 -> 1117 bytes .../bushou/images/60px-%E8%82%89-slip.svg.png | Bin 0 -> 1102 bytes .../images/60px-%E8%87%A3-bronze.svg.png | Bin 0 -> 1152 bytes .../images/60px-%E8%87%A3-oracle.svg.png | Bin 0 -> 870 bytes .../bushou/images/60px-%E8%87%A3-seal.svg.png | Bin 0 -> 1172 bytes .../bushou/images/60px-%E8%87%A3-silk.svg.png | Bin 0 -> 1290 bytes .../images/60px-%E8%87%AA-ancient.svg.png | Bin 0 -> 1260 bytes .../images/60px-%E8%87%AA-bigseal.svg.png | Bin 0 -> 1340 bytes .../images/60px-%E8%87%AA-bronze.svg.png | Bin 0 -> 1255 bytes .../images/60px-%E8%87%AA-oracle.svg.png | Bin 0 -> 1206 bytes .../bushou/images/60px-%E8%87%AA-seal.svg.png | Bin 0 -> 1232 bytes .../bushou/images/60px-%E8%87%AA-silk.svg.png | Bin 0 -> 1362 bytes .../images/60px-%E8%87%B3-bigseal.svg.png | Bin 0 -> 1351 bytes .../images/60px-%E8%87%B3-bronze.svg.png | Bin 0 -> 1141 bytes .../images/60px-%E8%87%B3-oracle.svg.png | Bin 0 -> 936 bytes .../bushou/images/60px-%E8%87%B3-seal.svg.png | Bin 0 -> 1365 bytes .../bushou/images/60px-%E8%87%BC-seal.svg.png | Bin 0 -> 1459 bytes .../images/60px-%E8%88%8C-bigseal.svg.png | Bin 0 -> 1125 bytes .../images/60px-%E8%88%8C-oracle.svg.png | Bin 0 -> 1057 bytes .../bushou/images/60px-%E8%88%8C-seal.svg.png | Bin 0 -> 1199 bytes .../images/60px-%E8%88%9B-bigseal.svg.png | Bin 0 -> 1433 bytes .../bushou/images/60px-%E8%88%9B-seal.svg.png | Bin 0 -> 1292 bytes .../images/60px-%E8%88%9F-bigseal.svg.png | Bin 0 -> 1359 bytes .../images/60px-%E8%88%9F-bronze.svg.png | Bin 0 -> 1198 bytes .../images/60px-%E8%88%9F-oracle.svg.png | Bin 0 -> 970 bytes .../bushou/images/60px-%E8%88%9F-seal.svg.png | Bin 0 -> 1338 bytes .../images/60px-%E8%89%AE-bigseal.svg.png | Bin 0 -> 1034 bytes .../images/60px-%E8%89%AE-bronze.svg.png | Bin 0 -> 1065 bytes .../bushou/images/60px-%E8%89%AE-seal.svg.png | Bin 0 -> 1124 bytes .../images/60px-%E8%89%B2-ancient.svg.png | Bin 0 -> 1767 bytes .../images/60px-%E8%89%B2-bigseal.svg.png | Bin 0 -> 1181 bytes .../60px-%E8%89%B2-bronze-spring.svg.png | Bin 0 -> 829 bytes .../bushou/images/60px-%E8%89%B2-seal.svg.png | Bin 0 -> 1084 bytes .../bushou/images/60px-%E8%89%B2-silk.svg.png | Bin 0 -> 1125 bytes .../bushou/images/60px-%E8%89%B2-slip.svg.png | Bin 0 -> 994 bytes .../bushou/images/60px-%E8%89%B8-seal.svg.png | Bin 0 -> 1107 bytes .../images/60px-%E8%99%8D-bigseal.svg.png | Bin 0 -> 1401 bytes .../images/60px-%E8%99%8D-bronze.svg.png | Bin 0 -> 1251 bytes .../images/60px-%E8%99%8D-oracle.svg.png | Bin 0 -> 896 bytes .../bushou/images/60px-%E8%99%8D-seal.svg.png | Bin 0 -> 1282 bytes .../images/60px-%E8%99%AB-bronze.svg.png | Bin 0 -> 1011 bytes .../images/60px-%E8%99%AB-oracle.svg.png | Bin 0 -> 880 bytes .../bushou/images/60px-%E8%99%AB-seal.svg.png | Bin 0 -> 1115 bytes .../images/60px-%E8%A1%80-bigseal.svg.png | Bin 0 -> 1210 bytes .../images/60px-%E8%A1%80-oracle.svg.png | Bin 0 -> 1277 bytes .../bushou/images/60px-%E8%A1%80-seal.svg.png | Bin 0 -> 1213 bytes .../bushou/images/60px-%E8%A1%80-silk.svg.png | Bin 0 -> 1413 bytes .../bushou/images/60px-%E8%A1%80-slip.svg.png | Bin 0 -> 1335 bytes .../images/60px-%E8%A1%8C-bigseal.svg.png | Bin 0 -> 1419 bytes .../60px-%E8%A1%8C-bronze-spring.svg.png | Bin 0 -> 1322 bytes .../60px-%E8%A1%8C-bronze-warring.svg.png | Bin 0 -> 1156 bytes .../images/60px-%E8%A1%8C-bronze.svg.png | Bin 0 -> 1223 bytes .../images/60px-%E8%A1%8C-clerical.svg.png | Bin 0 -> 1078 bytes .../images/60px-%E8%A1%8C-oracle.svg.png | Bin 0 -> 1083 bytes .../bushou/images/60px-%E8%A1%8C-seal.svg.png | Bin 0 -> 1429 bytes .../bushou/images/60px-%E8%A1%8C-silk.svg.png | Bin 0 -> 1269 bytes .../bushou/images/60px-%E8%A1%8C-slip.svg.png | Bin 0 -> 1337 bytes .../images/60px-%E8%A1%A3-bigseal.svg.png | Bin 0 -> 1309 bytes .../images/60px-%E8%A1%A3-bronze.svg.png | Bin 0 -> 1153 bytes .../images/60px-%E8%A1%A3-oracle.svg.png | Bin 0 -> 1096 bytes .../bushou/images/60px-%E8%A1%A3-seal.svg.png | Bin 0 -> 1253 bytes .../images/60px-%E8%A5%BE-bigseal.svg.png | Bin 0 -> 1318 bytes .../bushou/images/60px-%E8%A5%BE-seal.svg.png | Bin 0 -> 1184 bytes .../images/60px-%E8%A6%8B-bigseal.svg.png | Bin 0 -> 1263 bytes .../images/60px-%E8%A6%8B-bronze.svg.png | Bin 0 -> 1164 bytes .../images/60px-%E8%A6%8B-oracle.svg.png | Bin 0 -> 1118 bytes .../bushou/images/60px-%E8%A6%8B-seal.svg.png | Bin 0 -> 1250 bytes .../bushou/images/60px-%E8%A6%8B-silk.svg.png | Bin 0 -> 1117 bytes .../images/60px-%E8%A7%92-bigseal.svg.png | Bin 0 -> 1561 bytes .../images/60px-%E8%A7%92-bronze.svg.png | Bin 0 -> 1411 bytes .../images/60px-%E8%A7%92-oracle.svg.png | Bin 0 -> 1202 bytes .../bushou/images/60px-%E8%A7%92-seal.svg.png | Bin 0 -> 1381 bytes .../images/60px-%E8%A8%80-bigseal.svg.png | Bin 0 -> 1238 bytes .../images/60px-%E8%A8%80-bronze.svg.png | Bin 0 -> 1149 bytes .../images/60px-%E8%A8%80-oracle.svg.png | Bin 0 -> 1338 bytes .../bushou/images/60px-%E8%A8%80-seal.svg.png | Bin 0 -> 1289 bytes .../images/60px-%E8%B0%B7-bigseal.svg.png | Bin 0 -> 1513 bytes .../images/60px-%E8%B0%B7-bronze.svg.png | Bin 0 -> 1063 bytes .../images/60px-%E8%B0%B7-oracle.svg.png | Bin 0 -> 988 bytes .../bushou/images/60px-%E8%B0%B7-seal.svg.png | Bin 0 -> 1276 bytes .../images/60px-%E8%B1%86-bigseal.svg.png | Bin 0 -> 1179 bytes .../images/60px-%E8%B1%86-bronze.svg.png | Bin 0 -> 1398 bytes .../images/60px-%E8%B1%86-oracle.svg.png | Bin 0 -> 1121 bytes .../bushou/images/60px-%E8%B1%86-seal.svg.png | Bin 0 -> 1060 bytes .../images/60px-%E8%B1%95-bigseal.svg.png | Bin 0 -> 1344 bytes .../images/60px-%E8%B1%95-bronze.svg.png | Bin 0 -> 1084 bytes .../images/60px-%E8%B1%95-oracle.svg.png | Bin 0 -> 981 bytes .../bushou/images/60px-%E8%B1%95-seal.svg.png | Bin 0 -> 1512 bytes .../images/60px-%E8%B1%B8-bigseal.svg.png | Bin 0 -> 1244 bytes .../images/60px-%E8%B1%B8-bronze.svg.png | Bin 0 -> 1286 bytes .../images/60px-%E8%B1%B8-oracle.svg.png | Bin 0 -> 958 bytes .../bushou/images/60px-%E8%B1%B8-seal.svg.png | Bin 0 -> 1286 bytes .../bushou/images/60px-%E8%B1%B8-slip.svg.png | Bin 0 -> 1290 bytes .../images/60px-%E8%B2%9D-bigseal.svg.png | Bin 0 -> 1402 bytes .../images/60px-%E8%B2%9D-bronze.svg.png | Bin 0 -> 1400 bytes .../images/60px-%E8%B2%9D-oracle.svg.png | Bin 0 -> 1342 bytes .../bushou/images/60px-%E8%B2%9D-seal.svg.png | Bin 0 -> 1183 bytes .../bushou/images/60px-%E8%B2%9D-silk.svg.png | Bin 0 -> 1158 bytes .../images/60px-%E8%B5%A4-ancient.svg.png | Bin 0 -> 1430 bytes .../images/60px-%E8%B5%A4-bigseal.svg.png | Bin 0 -> 1553 bytes .../60px-%E8%B5%A4-bronze-spring.svg.png | Bin 0 -> 1234 bytes .../images/60px-%E8%B5%A4-bronze.svg.png | Bin 0 -> 1083 bytes .../images/60px-%E8%B5%A4-oracle.svg.png | Bin 0 -> 897 bytes .../bushou/images/60px-%E8%B5%A4-seal.svg.png | Bin 0 -> 1341 bytes .../bushou/images/60px-%E8%B5%A4-silk.svg.png | Bin 0 -> 1489 bytes .../bushou/images/60px-%E8%B5%A4-slip.svg.png | Bin 0 -> 1262 bytes .../images/60px-%E8%B5%B0-bigseal.svg.png | Bin 0 -> 1280 bytes .../60px-%E8%B5%B0-bronze-spring.svg.png | Bin 0 -> 1100 bytes .../60px-%E8%B5%B0-bronze-warring.svg.png | Bin 0 -> 835 bytes .../images/60px-%E8%B5%B0-bronze.svg.png | Bin 0 -> 1016 bytes .../images/60px-%E8%B5%B0-oracle.svg.png | Bin 0 -> 925 bytes .../bushou/images/60px-%E8%B5%B0-seal.svg.png | Bin 0 -> 1240 bytes .../bushou/images/60px-%E8%B5%B0-silk.svg.png | Bin 0 -> 1219 bytes .../bushou/images/60px-%E8%B5%B0-slip.svg.png | Bin 0 -> 1317 bytes .../bushou/images/60px-%E8%B6%B3-seal.svg.png | Bin 0 -> 1193 bytes .../images/60px-%E8%BA%AB-bigseal.svg.png | Bin 0 -> 1262 bytes .../images/60px-%E8%BA%AB-bronze.svg.png | Bin 0 -> 1093 bytes .../bushou/images/60px-%E8%BA%AB-seal.svg.png | Bin 0 -> 1425 bytes .../images/60px-%E8%BB%8A-bigseal.svg.png | Bin 0 -> 1620 bytes .../60px-%E8%BB%8A-bronze-shang.svg.png | Bin 0 -> 1283 bytes .../60px-%E8%BB%8A-bronze-spring.svg.png | Bin 0 -> 1083 bytes .../60px-%E8%BB%8A-bronze-warring.svg.png | Bin 0 -> 1092 bytes .../images/60px-%E8%BB%8A-bronze.svg.png | Bin 0 -> 1585 bytes .../images/60px-%E8%BB%8A-oracle.svg.png | Bin 0 -> 1566 bytes .../bushou/images/60px-%E8%BB%8A-seal.svg.png | Bin 0 -> 1146 bytes .../bushou/images/60px-%E8%BB%8A-silk.svg.png | Bin 0 -> 1337 bytes .../bushou/images/60px-%E8%BB%8A-slip.svg.png | Bin 0 -> 1103 bytes .../bushou/images/60px-%E8%BB%8A-zhou.svg.png | Bin 0 -> 1577 bytes .../bushou/images/60px-%E8%BE%9B-seal.svg.png | Bin 0 -> 1152 bytes .../images/60px-%E8%BE%B0-bigseal.svg.png | Bin 0 -> 1382 bytes .../images/60px-%E8%BE%B0-bronze.svg.png | Bin 0 -> 1312 bytes .../images/60px-%E8%BE%B0-oracle.svg.png | Bin 0 -> 1510 bytes .../bushou/images/60px-%E8%BE%B0-seal.svg.png | Bin 0 -> 1402 bytes .../bushou/images/60px-%E8%BE%B5-seal.svg.png | Bin 0 -> 1132 bytes .../images/60px-%E9%82%91-bigseal.svg.png | Bin 0 -> 1027 bytes .../images/60px-%E9%82%91-bronze.svg.png | Bin 0 -> 1105 bytes .../images/60px-%E9%82%91-oracle.svg.png | Bin 0 -> 858 bytes .../bushou/images/60px-%E9%82%91-seal.svg.png | Bin 0 -> 917 bytes .../images/60px-%E9%85%89-ancient.svg.png | Bin 0 -> 1129 bytes .../images/60px-%E9%85%89-bigseal.svg.png | Bin 0 -> 1244 bytes .../60px-%E9%85%89-bronze-shang.svg.png | Bin 0 -> 1359 bytes .../60px-%E9%85%89-bronze-spring.svg.png | Bin 0 -> 1196 bytes .../60px-%E9%85%89-bronze-warring.svg.png | Bin 0 -> 1344 bytes .../images/60px-%E9%85%89-bronze.svg.png | Bin 0 -> 1368 bytes .../images/60px-%E9%85%89-oracle.svg.png | Bin 0 -> 1108 bytes .../bushou/images/60px-%E9%85%89-seal.svg.png | Bin 0 -> 1416 bytes .../bushou/images/60px-%E9%85%89-silk.svg.png | Bin 0 -> 1494 bytes .../bushou/images/60px-%E9%85%89-slip.svg.png | Bin 0 -> 1164 bytes .../images/60px-%E9%87%86-bigseal.svg.png | Bin 0 -> 1429 bytes .../images/60px-%E9%87%86-bronze.svg.png | Bin 0 -> 1100 bytes .../images/60px-%E9%87%86-oracle.svg.png | Bin 0 -> 1141 bytes .../bushou/images/60px-%E9%87%86-seal.svg.png | Bin 0 -> 1217 bytes .../bushou/images/60px-%E9%87%8C-seal.svg.png | Bin 0 -> 1260 bytes .../images/60px-%E9%87%91-bigseal.svg.png | Bin 0 -> 1834 bytes .../images/60px-%E9%87%91-bronze.svg.png | Bin 0 -> 1092 bytes .../bushou/images/60px-%E9%87%91-seal.svg.png | Bin 0 -> 1332 bytes .../bushou/images/60px-%E9%95%B7-seal.svg.png | Bin 0 -> 1326 bytes .../images/60px-%E9%96%80-bigseal.svg.png | Bin 0 -> 1070 bytes .../60px-%E9%96%80-bronze-shang.svg.png | Bin 0 -> 1223 bytes .../images/60px-%E9%96%80-bronze.svg.png | Bin 0 -> 1136 bytes .../images/60px-%E9%96%80-oracle.svg.png | Bin 0 -> 1016 bytes .../bushou/images/60px-%E9%96%80-seal.svg.png | Bin 0 -> 1052 bytes .../bushou/images/60px-%E9%96%80-silk.svg.png | Bin 0 -> 1437 bytes .../bushou/images/60px-%E9%96%80-slip.svg.png | Bin 0 -> 1390 bytes .../images/60px-%E9%98%9C-bigseal.svg.png | Bin 0 -> 1175 bytes .../images/60px-%E9%98%9C-oracle.svg.png | Bin 0 -> 962 bytes .../bushou/images/60px-%E9%98%9C-seal.svg.png | Bin 0 -> 1198 bytes .../bushou/images/60px-%E9%9A%B6-seal.svg.png | Bin 0 -> 1063 bytes .../images/60px-%E9%9A%B9-bigseal.svg.png | Bin 0 -> 1233 bytes .../images/60px-%E9%9A%B9-bronze.svg.png | Bin 0 -> 1224 bytes .../images/60px-%E9%9A%B9-oracle.svg.png | Bin 0 -> 1155 bytes .../bushou/images/60px-%E9%9A%B9-seal.svg.png | Bin 0 -> 1263 bytes .../images/60px-%E9%9B%A8-ancient.svg.png | Bin 0 -> 1677 bytes .../images/60px-%E9%9B%A8-bigseal.svg.png | Bin 0 -> 1492 bytes .../images/60px-%E9%9B%A8-bronze.svg.png | Bin 0 -> 1296 bytes .../images/60px-%E9%9B%A8-oracle.svg.png | Bin 0 -> 739 bytes .../bushou/images/60px-%E9%9B%A8-seal.svg.png | Bin 0 -> 1074 bytes .../bushou/images/60px-%E9%9B%A8-silk.svg.png | Bin 0 -> 1412 bytes .../bushou/images/60px-%E9%9B%A8-slip.svg.png | Bin 0 -> 1526 bytes .../bushou/images/60px-%E9%9D%9E-seal.svg.png | Bin 0 -> 1266 bytes .../images/60px-%E9%9D%A2-oracle.svg.png | Bin 0 -> 1403 bytes .../bushou/images/60px-%E9%9D%A2-seal.svg.png | Bin 0 -> 1576 bytes .../bushou/images/60px-%E9%9D%A9-seal.svg.png | Bin 0 -> 1183 bytes .../images/60px-%E9%9F%8B-bigseal.svg.png | Bin 0 -> 1371 bytes .../60px-%E9%9F%8B-bronze-shang.svg.png | Bin 0 -> 1326 bytes .../60px-%E9%9F%8B-bronze-spring.svg.png | Bin 0 -> 993 bytes .../images/60px-%E9%9F%8B-bronze.svg.png | Bin 0 -> 923 bytes .../images/60px-%E9%9F%8B-oracle.svg.png | Bin 0 -> 1054 bytes .../bushou/images/60px-%E9%9F%8B-seal.svg.png | Bin 0 -> 1045 bytes .../bushou/images/60px-%E9%9F%8B-silk.svg.png | Bin 0 -> 1181 bytes .../bushou/images/60px-%E9%9F%8B-slip.svg.png | Bin 0 -> 1034 bytes .../bushou/images/60px-%E9%9F%AD-seal.svg.png | Bin 0 -> 1506 bytes .../images/60px-%E9%9F%B3-bigseal.svg.png | Bin 0 -> 1498 bytes .../images/60px-%E9%9F%B3-bronze.svg.png | Bin 0 -> 1257 bytes .../bushou/images/60px-%E9%9F%B3-seal.svg.png | Bin 0 -> 1413 bytes .../bushou/images/60px-%E9%9F%B3-silk.svg.png | Bin 0 -> 1410 bytes .../images/60px-%E9%A0%81-bigseal.svg.png | Bin 0 -> 1235 bytes .../images/60px-%E9%A0%81-bronze.svg.png | Bin 0 -> 1013 bytes .../images/60px-%E9%A0%81-oracle.svg.png | Bin 0 -> 1109 bytes .../bushou/images/60px-%E9%A0%81-seal.svg.png | Bin 0 -> 1208 bytes .../bushou/images/60px-%E9%A0%81-silk.svg.png | Bin 0 -> 1188 bytes .../images/60px-%E9%A2%A8-ancient.svg.png | Bin 0 -> 1453 bytes .../images/60px-%E9%A2%A8-bigseal.svg.png | Bin 0 -> 1683 bytes .../bushou/images/60px-%E9%A2%A8-seal.svg.png | Bin 0 -> 1491 bytes .../bushou/images/60px-%E9%A2%A8-silk.svg.png | Bin 0 -> 1501 bytes .../bushou/images/60px-%E9%A2%A8-slip.svg.png | Bin 0 -> 1413 bytes .../images/60px-%E9%A3%9B-bigseal.svg.png | Bin 0 -> 1563 bytes .../images/60px-%E9%A3%9B-oracle.svg.png | Bin 0 -> 1084 bytes .../bushou/images/60px-%E9%A3%9B-seal.svg.png | Bin 0 -> 1527 bytes .../bushou/images/60px-%E9%A3%9B-silk.svg.png | Bin 0 -> 1697 bytes .../images/60px-%E9%A3%9F-bigseal.svg.png | Bin 0 -> 1423 bytes .../60px-%E9%A3%9F-bronze-spring.svg.png | Bin 0 -> 1062 bytes .../60px-%E9%A3%9F-bronze-warring.svg.png | Bin 0 -> 1040 bytes .../images/60px-%E9%A3%9F-bronze.svg.png | Bin 0 -> 1540 bytes .../images/60px-%E9%A3%9F-oracle.svg.png | Bin 0 -> 1091 bytes .../bushou/images/60px-%E9%A3%9F-seal.svg.png | Bin 0 -> 1216 bytes .../bushou/images/60px-%E9%A3%9F-silk.svg.png | Bin 0 -> 1307 bytes .../bushou/images/60px-%E9%A3%9F-slip.svg.png | Bin 0 -> 1461 bytes .../images/60px-%E9%A6%96-bigseal.svg.png | Bin 0 -> 1671 bytes .../images/60px-%E9%A6%96-bronze.svg.png | Bin 0 -> 1468 bytes .../images/60px-%E9%A6%96-oracle.svg.png | Bin 0 -> 1617 bytes .../bushou/images/60px-%E9%A6%96-seal.svg.png | Bin 0 -> 1438 bytes .../images/60px-%E9%A6%99-bigseal.svg.png | Bin 0 -> 1586 bytes .../images/60px-%E9%A6%99-bronze.svg.png | Bin 0 -> 1344 bytes .../images/60px-%E9%A6%99-oracle.svg.png | Bin 0 -> 1239 bytes .../bushou/images/60px-%E9%A6%99-seal.svg.png | Bin 0 -> 1623 bytes .../images/60px-%E9%A6%AC-ancient.svg.png | Bin 0 -> 1339 bytes .../images/60px-%E9%A6%AC-bigseal.svg.png | Bin 0 -> 1370 bytes .../60px-%E9%A6%AC-bronze-shang.svg.png | Bin 0 -> 1007 bytes .../60px-%E9%A6%AC-bronze-spring.svg.png | Bin 0 -> 1061 bytes .../60px-%E9%A6%AC-bronze-warring.svg.png | Bin 0 -> 1145 bytes .../images/60px-%E9%A6%AC-bronze.svg.png | Bin 0 -> 1251 bytes .../images/60px-%E9%A6%AC-clerical.svg.png | Bin 0 -> 1264 bytes .../images/60px-%E9%A6%AC-oracle.svg.png | Bin 0 -> 1505 bytes .../bushou/images/60px-%E9%A6%AC-seal.svg.png | Bin 0 -> 1298 bytes .../bushou/images/60px-%E9%A6%AC-silk.svg.png | Bin 0 -> 1277 bytes .../bushou/images/60px-%E9%A6%AC-slip.svg.png | Bin 0 -> 1398 bytes .../bushou/images/60px-%E9%A6%AC-zhou.svg.png | Bin 0 -> 1381 bytes .../images/60px-%E9%AA%A8-bigseal.svg.png | Bin 0 -> 1607 bytes .../bushou/images/60px-%E9%AA%A8-seal.svg.png | Bin 0 -> 1374 bytes .../bushou/images/60px-%E9%AA%A8-silk.svg.png | Bin 0 -> 1254 bytes .../bushou/images/60px-%E9%AA%A8-slip.svg.png | Bin 0 -> 1292 bytes .../images/60px-%E9%AB%98-bigseal.svg.png | Bin 0 -> 1459 bytes .../60px-%E9%AB%98-bronze-shang.svg.png | Bin 0 -> 1225 bytes .../60px-%E9%AB%98-bronze-spring.svg.png | Bin 0 -> 1288 bytes .../60px-%E9%AB%98-bronze-warring.svg.png | Bin 0 -> 1301 bytes .../images/60px-%E9%AB%98-bronze.svg.png | Bin 0 -> 1263 bytes .../images/60px-%E9%AB%98-oracle.svg.png | Bin 0 -> 1106 bytes .../bushou/images/60px-%E9%AB%98-seal.svg.png | Bin 0 -> 1180 bytes .../bushou/images/60px-%E9%AB%98-silk.svg.png | Bin 0 -> 1520 bytes .../bushou/images/60px-%E9%AB%98-slip.svg.png | Bin 0 -> 1290 bytes .../60px-%E9%AB%9F-bronze-shang.svg.png | Bin 0 -> 1026 bytes .../bushou/images/60px-%E9%AB%9F-seal.svg.png | Bin 0 -> 1500 bytes .../bushou/images/60px-%E9%AB%9F-silk.svg.png | Bin 0 -> 1092 bytes .../images/60px-%E9%AC%A5-bigseal.svg.png | Bin 0 -> 1668 bytes .../images/60px-%E9%AC%A5-oracle.svg.png | Bin 0 -> 1333 bytes .../bushou/images/60px-%E9%AC%A5-seal.svg.png | Bin 0 -> 1541 bytes .../images/60px-%E9%AC%AF-bigseal.svg.png | Bin 0 -> 1496 bytes .../images/60px-%E9%AC%AF-bronze.svg.png | Bin 0 -> 1556 bytes .../images/60px-%E9%AC%AF-oracle.svg.png | Bin 0 -> 1409 bytes .../bushou/images/60px-%E9%AC%AF-seal.svg.png | Bin 0 -> 1512 bytes .../images/60px-%E9%AC%B2-bigseal.svg.png | Bin 0 -> 2007 bytes .../images/60px-%E9%AC%B2-bronze.svg.png | Bin 0 -> 2611 bytes .../images/60px-%E9%AC%B2-oracle.svg.png | Bin 0 -> 2471 bytes .../bushou/images/60px-%E9%AC%B2-seal.svg.png | Bin 0 -> 1278 bytes .../images/60px-%E9%AC%BC-bigseal.svg.png | Bin 0 -> 1318 bytes .../images/60px-%E9%AC%BC-bronze.svg.png | Bin 0 -> 884 bytes .../images/60px-%E9%AC%BC-oracle.svg.png | Bin 0 -> 1032 bytes .../bushou/images/60px-%E9%AC%BC-seal.svg.png | Bin 0 -> 1507 bytes .../images/60px-%E9%AD%9A-bigseal.svg.png | Bin 0 -> 1557 bytes .../images/60px-%E9%AD%9A-bronze.svg.png | Bin 0 -> 1877 bytes .../images/60px-%E9%AD%9A-oracle.svg.png | Bin 0 -> 1566 bytes .../bushou/images/60px-%E9%AD%9A-seal.svg.png | Bin 0 -> 1643 bytes .../images/60px-%E9%B3%A5-bronze.svg.png | Bin 0 -> 1183 bytes .../images/60px-%E9%B3%A5-oracle.svg.png | Bin 0 -> 1071 bytes .../bushou/images/60px-%E9%B3%A5-seal.svg.png | Bin 0 -> 1500 bytes .../images/60px-%E9%B3%B3-bronze.svg.png | Bin 0 -> 1497 bytes .../images/60px-%E9%B3%B3-oracle.svg.png | Bin 0 -> 1247 bytes .../images/60px-%E9%B9%B5-bigseal.svg.png | Bin 0 -> 1591 bytes .../images/60px-%E9%B9%B5-bronze.svg.png | Bin 0 -> 1468 bytes .../images/60px-%E9%B9%B5-oracle.svg.png | Bin 0 -> 1316 bytes .../bushou/images/60px-%E9%B9%B5-seal.svg.png | Bin 0 -> 1395 bytes .../images/60px-%E9%B9%BF-bigseal.svg.png | Bin 0 -> 1761 bytes .../images/60px-%E9%B9%BF-bronze.svg.png | Bin 0 -> 1528 bytes .../images/60px-%E9%B9%BF-oracle.svg.png | Bin 0 -> 1529 bytes .../bushou/images/60px-%E9%B9%BF-seal.svg.png | Bin 0 -> 1809 bytes .../images/60px-%E9%BA%A5-bigseal.svg.png | Bin 0 -> 1666 bytes .../images/60px-%E9%BA%A5-bronze.svg.png | Bin 0 -> 1276 bytes .../images/60px-%E9%BA%A5-oracle.svg.png | Bin 0 -> 1122 bytes .../bushou/images/60px-%E9%BA%A5-seal.svg.png | Bin 0 -> 1329 bytes .../images/60px-%E9%BA%BB-bigseal.svg.png | Bin 0 -> 1728 bytes .../images/60px-%E9%BA%BB-bronze.svg.png | Bin 0 -> 1696 bytes .../bushou/images/60px-%E9%BA%BB-seal.svg.png | Bin 0 -> 1562 bytes .../images/60px-%E9%BB%83-bigseal.svg.png | Bin 0 -> 1814 bytes .../images/60px-%E9%BB%83-bronze.svg.png | Bin 0 -> 1570 bytes .../images/60px-%E9%BB%83-oracle.svg.png | Bin 0 -> 1301 bytes .../bushou/images/60px-%E9%BB%83-seal.svg.png | Bin 0 -> 1567 bytes .../images/60px-%E9%BB%8D-bigseal.svg.png | Bin 0 -> 1789 bytes .../images/60px-%E9%BB%8D-bronze.svg.png | Bin 0 -> 1498 bytes .../images/60px-%E9%BB%8D-oracle.svg.png | Bin 0 -> 1124 bytes .../bushou/images/60px-%E9%BB%8D-seal.svg.png | Bin 0 -> 1555 bytes .../60px-%E9%BB%91-bronze-spring.svg.png | Bin 0 -> 1283 bytes .../images/60px-%E9%BB%91-bronze.svg.png | Bin 0 -> 1034 bytes .../images/60px-%E9%BB%91-oracle.svg.png | Bin 0 -> 1025 bytes .../bushou/images/60px-%E9%BB%91-seal.svg.png | Bin 0 -> 1511 bytes .../bushou/images/60px-%E9%BB%91-slip.svg.png | Bin 0 -> 1380 bytes .../images/60px-%E9%BB%92-bigseal.svg.png | Bin 0 -> 1297 bytes .../bushou/images/60px-%E9%BB%92-silk.svg.png | Bin 0 -> 1183 bytes .../images/60px-%E9%BB%B9-bigseal.svg.png | Bin 0 -> 1617 bytes .../images/60px-%E9%BB%B9-bronze.svg.png | Bin 0 -> 1710 bytes .../images/60px-%E9%BB%B9-oracle.svg.png | Bin 0 -> 1314 bytes .../bushou/images/60px-%E9%BB%B9-seal.svg.png | Bin 0 -> 1241 bytes .../bushou/images/60px-%E9%BB%BD-seal.svg.png | Bin 0 -> 1573 bytes .../images/60px-%E9%BC%8E-bigseal.svg.png | Bin 0 -> 1487 bytes .../images/60px-%E9%BC%8E-bronze.svg.png | Bin 0 -> 1708 bytes .../images/60px-%E9%BC%8E-oracle.svg.png | Bin 0 -> 1319 bytes .../bushou/images/60px-%E9%BC%8E-seal.svg.png | Bin 0 -> 1388 bytes .../images/60px-%E9%BC%93-bigseal.svg.png | Bin 0 -> 1798 bytes .../images/60px-%E9%BC%93-bronze.svg.png | Bin 0 -> 1749 bytes .../images/60px-%E9%BC%93-oracle.svg.png | Bin 0 -> 1515 bytes .../bushou/images/60px-%E9%BC%93-seal.svg.png | Bin 0 -> 1618 bytes .../images/60px-%E9%BC%A0-bigseal.svg.png | Bin 0 -> 1571 bytes .../images/60px-%E9%BC%A0-oracle.svg.png | Bin 0 -> 1133 bytes .../bushou/images/60px-%E9%BC%A0-seal.svg.png | Bin 0 -> 1415 bytes .../bushou/images/60px-%E9%BC%BB-seal.svg.png | Bin 0 -> 1337 bytes .../bushou/images/60px-%E9%BD%8A-seal.svg.png | Bin 0 -> 1122 bytes .../images/60px-%E9%BD%92-bigseal.svg.png | Bin 0 -> 1630 bytes .../images/60px-%E9%BD%92-bronze.svg.png | Bin 0 -> 1199 bytes .../images/60px-%E9%BD%92-oracle.svg.png | Bin 0 -> 1389 bytes .../images/60px-%E9%BE%8D-bigseal.svg.png | Bin 0 -> 1721 bytes .../60px-%E9%BE%8D-bronze-shang.svg.png | Bin 0 -> 1256 bytes .../60px-%E9%BE%8D-bronze-spring.svg.png | Bin 0 -> 1245 bytes .../images/60px-%E9%BE%8D-bronze.svg.png | Bin 0 -> 1171 bytes .../images/60px-%E9%BE%8D-oracle.svg.png | Bin 0 -> 1095 bytes .../bushou/images/60px-%E9%BE%8D-seal.svg.png | Bin 0 -> 1554 bytes .../bushou/images/60px-%E9%BE%8D-silk.svg.png | Bin 0 -> 1613 bytes .../bushou/images/60px-%E9%BE%8D-slip.svg.png | Bin 0 -> 1588 bytes .../images/60px-%E9%BE%9C-bigseal.svg.png | Bin 0 -> 1591 bytes .../images/60px-%E9%BE%9C-bronze.svg.png | Bin 0 -> 1419 bytes .../images/60px-%E9%BE%9C-oracle.svg.png | Bin 0 -> 1302 bytes .../bushou/images/60px-%E9%BE%9C-seal.svg.png | Bin 0 -> 1379 bytes .../images/60px-%E9%BE%A0-bigseal.svg.png | Bin 0 -> 1920 bytes .../images/60px-%E9%BE%A0-bronze.svg.png | Bin 0 -> 1538 bytes .../images/60px-%E9%BE%A0-oracle.svg.png | Bin 0 -> 1385 bytes .../bushou/images/60px-%E9%BE%A0-seal.svg.png | Bin 0 -> 1683 bytes .../images/60px-%F0%A5%83%A9-silk.svg.png | Bin 0 -> 1322 bytes .../bushou/images/60px-ACC-B00002.svg.png | Bin 0 -> 605 bytes .../bushou/images/60px-ACC-B00014.svg.png | Bin 0 -> 467 bytes .../bushou/images/60px-ACC-B00015.svg.png | Bin 0 -> 432 bytes .../bushou/images/60px-ACC-b00945.svg.png | Bin 0 -> 812 bytes .../bushou/images/60px-ACC-b18623.svg.png | Bin 0 -> 645 bytes .../bushou/images/60px-ACC-b18626.svg.png | Bin 0 -> 595 bytes .../60px-Shuowen_Seal_Radical_038.svg.png | Bin 0 -> 1514 bytes server/routers/bushou/index.js | 13 + server/routers/bushou/radicals/success.json | 3941 ++++++++++++++ server/routers/bushou/tokenize/success.json | 1 + server/routers/car-wash/auth/index.js | 9 + server/routers/car-wash/auth/login/error.json | 3 + server/routers/car-wash/auth/login/index.js | 16 + .../routers/car-wash/auth/login/success.json | 3 + .../routers/car-wash/auth/logrec/error.json | 3 + server/routers/car-wash/auth/logrec/index.js | 40 + .../routers/car-wash/auth/logrec/success.json | 3 + .../routers/car-wash/auth/passrec/error.json | 3 + server/routers/car-wash/auth/passrec/index.js | 44 + .../car-wash/auth/passrec/success.json | 3 + .../car-wash/auth/registration/dooble.json | 3 + .../auth/registration/dooblephone.json | 3 + .../car-wash/auth/registration/error.json | 3 + .../car-wash/auth/registration/index.js | 26 + .../car-wash/auth/registration/success.json | 3 + .../car-wash/carousel/carousel-en.json | 40 + .../car-wash/carousel/carousel-ru.json | 40 + server/routers/car-wash/carousel/index.js | 23 + server/routers/car-wash/index.js | 9 + server/routers/car-wash/map/index.js | 23 + server/routers/car-wash/map/map-info-en.json | 37 + server/routers/car-wash/map/map-info-ru.json | 37 + server/routers/car-wash/prices/index.js | 22 + server/routers/car-wash/prices/prices-en.json | 59 + server/routers/car-wash/prices/prices-ru.json | 59 + server/routers/coder/catalog/cardData.json | 136 + server/routers/coder/catalog/error.json | 3 + server/routers/coder/catalog/index.js | 15 + server/routers/coder/controllers.js | 424 ++ server/routers/coder/forum/categories.json | 49 + server/routers/coder/forum/error.json | 3 + server/routers/coder/forum/index.js | 96 + .../routers/coder/forum/topic-comments.json | 29 + server/routers/coder/forum/topic-list.json | 235 + server/routers/coder/forum/topic-tags.json | 107 + server/routers/coder/forum/topic.json | 20 + server/routers/coder/forum/users.json | 6 + server/routers/coder/index.js | 8 + .../coder/topic/dynamic-programming.json | 27 + .../arrays-and-strings.json | 10 + .../dynamic-programming.json | 10 + .../dynamic-programming/linked-list.json | 8 + .../topic/dynamic-programming/overview.json | 8 + server/routers/coder/topic/error.json | 3 + server/routers/coder/topic/index.js | 30 + server/routers/easy-project/auth.js | 48 + server/routers/easy-project/constants.js | 30 + server/routers/easy-project/db.js | 410 ++ server/routers/easy-project/index.js | 15 + .../middlewares/auth-middleware.js | 0 server/routers/easy-project/projects.js | 116 + server/routers/easy-project/tasks.js | 137 + server/routers/easy-project/users.js | 21 + server/routers/easy-project/utils.js | 49 + server/routers/example/index.js | 19 + server/routers/hub-video/index.js | 11 + server/routers/music-learn/index.js | 51 + .../music-learn/mocks/courses/1/success.json | 5 + .../music-learn/mocks/courses/success.json | 77 + .../music-learn/mocks/notes/success.json | 13 + .../mocks/user/courses/add/success.json | 3 + .../mocks/user/courses/success.json | 37 + .../music-learn/mocks/user/login/success.json | 3 + .../mocks/user/logout/success.json | 3 + .../music-learn/mocks/user/notes/success.json | 7 + .../music-learn/mocks/user/success.json | 6 + server/routers/neptunium/index.js | 226 + server/routers/publicium/index.js | 42 + server/routers/publicium/mocks/games.json | 17 + .../publicium/mocks/games/trending.json | 22 + .../routers/publicium/mocks/maps/by/id.json | 20 + .../publicium/mocks/maps/trending.json | 26 + server/routers/publicium/mocks/search.json | 28 + server/routers/publicium/mocks/users/12.json | 5 + .../publicium/mocks/users/12/collection.json | 40 + .../publicium/mocks/users/top-load.json | 22 + server/routers/stc-21-03/controllers.js | 107 + server/routers/stc-21-03/index.js | 94 + server/routers/stc-22-24/controller.js | 198 + server/routers/stc-22-24/data/dishdata.json | 116 + server/routers/stc-22-24/data/tabs.json | 137 + server/routers/stc-22-24/index.js | 8 + .../midlewares/checkRequired.midleware.js | 12 + server/routers/stc-22-24/routes/auth.js | 47 + server/routers/stc-22-24/routes/dish.js | 33 + server/routers/stc-22-24/routes/key.js | 7 + server/routers/stc-22-24/routes/order.js | 8 + .../routers/stc-22-24/routes/reservation.js | 32 + server/routers/stc-22-24/utils/common.js | 34 + server/routers/stc/controllers.js | 107 + server/routers/stc/index.js | 94 + .../sugarbun/collections/adminstats.json | 15 + .../sugarbun/collections/cakeitem.json | 229 + .../sugarbun/collections/cakeshape.json | 22 + .../sugarbun/collections/cakesweight.json | 30 + .../sugarbun/collections/ingredients.json | 74 + server/routers/sugarbun/controller.js | 107 + server/routers/sugarbun/index.js | 44 + server/routers/task-boss/auth.js | 22 + server/routers/task-boss/constants.js | 5 + server/routers/task-boss/controllers.js | 288 + server/routers/task-boss/index.js | 162 + server/routers/task-boss/stubs/depts.json | 119 + server/routers/task-boss/stubs/error.json | 6 + .../task-boss/stubs/peoples/success.json | 30 + .../routers/task-boss/stubs/tasks/delete.json | 8 + .../routers/task-boss/stubs/tasks/tasks.json | 165 + server/routers/uryndyklar/index.js | 41 + .../uryndyklar/mocks/cart_get/empty.json | 4 + .../uryndyklar/mocks/cart_get/error.json | 4 + .../uryndyklar/mocks/cart_get/success.json | 18 + .../uryndyklar/mocks/cart_post/error.json | 4 + .../uryndyklar/mocks/cart_post/success.json | 3 + .../uryndyklar/mocks/search_get/empty.json | 4 + .../uryndyklar/mocks/search_get/error.json | 4 + .../uryndyklar/mocks/search_get/ikea.json | 21 + .../mocks/search_get/ikea_multicolor.json | 13 + .../uryndyklar/mocks/search_get/modelH.json | 13 + .../uryndyklar/mocks/search_get/success.json | 67 + server/routers/zoom-bar/index.js | 97 + server/utils/common.js | 35 + server/utils/mongo.js | 34 + 1109 files changed, 16019 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .serverrc.js create mode 100644 .vscode/launch.json create mode 100644 Dockerfile create mode 100644 Jenkinsfile create mode 100644 d-scripts/rerun.sh create mode 100644 docker-compose.yaml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server/error.js create mode 100644 server/index.js create mode 100644 server/io.js create mode 100644 server/root.js create mode 100644 server/routers/basket/auth.js create mode 100644 server/routers/basket/categories.js create mode 100644 server/routers/basket/controller.js create mode 100644 server/routers/basket/dashboard.js create mode 100644 server/routers/basket/index.js create mode 100644 server/routers/basket/json/auth/sign-in.json create mode 100644 server/routers/basket/json/categories/add/success.json create mode 100644 server/routers/basket/json/categories/current/success.json create mode 100644 server/routers/basket/json/dashboard/common/error.json create mode 100644 server/routers/basket/json/dashboard/common/success.json create mode 100644 server/routers/basket/json/dashboard/list/empty.json create mode 100644 server/routers/basket/json/dashboard/list/error.json create mode 100644 server/routers/basket/json/dashboard/list/success.json create mode 100644 server/routers/basket/json/landing/error.json create mode 100644 server/routers/basket/json/landing/success.json create mode 100644 server/routers/basket/json/listItem/item/error.json create mode 100644 server/routers/basket/json/listItem/item/success.json create mode 100644 server/routers/basket/json/listItem/shoppingList/error.json create mode 100644 server/routers/basket/json/listItem/shoppingList/success.json create mode 100644 server/routers/basket/key.js create mode 100644 server/routers/basket/landing.js create mode 100644 server/routers/basket/listItem.js create mode 100644 server/routers/bushou/episodes/success.json create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-clerical.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%80-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%A8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%A8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%B6-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%BF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B8%BF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B9%99-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B9%99-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B9%99-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B9%99-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%B9%99-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%85-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%8C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%8C-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%8C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%8C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%8C-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%8C-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%A0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BA%BA-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BB%8C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BB%8C-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BB%8C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E4%BB%8C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%84%BF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%84%BF-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%84%BF-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%84%BF-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%84%BF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%A5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%A5-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%A5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%A5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%A5-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%AB-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%AB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%AB-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%AB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%AB-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%85%AB-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%82-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%82-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%82-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%88-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%88-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%88-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%88-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%8E-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%8E-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%96-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%96-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%86%96-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%A0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%A0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%A0-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%B5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%B5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%B5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%87%B5-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%88%80-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%88%80-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%88%80-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%88%80-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%88%80-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%88%80-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8A%9B-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8B%B9-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8B%B9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8B%B9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%95-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%95-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%95-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%95-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%95-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%95-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%9A-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%9A-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%9A-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%9A-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%B8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%B8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%B8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8C%B8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%81-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%9C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%9C-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%9C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%9C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%9C-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%9C-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%A9-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%A9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8D%A9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%82-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%82-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%82-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%82-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%B6-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%B6-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8E%B6-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%88-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%88-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%88-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%88-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%88-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%A3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%A3-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%A3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%A3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%A3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%8F%A3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9B%97-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9B%97-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9B%97-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9B%97-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%9C%9F-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A3%AB-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A3%AB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A3%AB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A3%AB-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A3%AB-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%82-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%8A-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%8A-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%95-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%95-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%95-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%95-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%95-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%A7-zhou.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A4%B6-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A5%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A5%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A5%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A5%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%A5%B3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AD%90-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AD%90-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AD%90-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AD%90-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AD%90-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AE%80-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AE%80-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AE%80-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AE%80-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AF%B8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AF%B8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AF%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%AF%B8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%8F-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%8F-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%8F-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%8F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%8F-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%A2-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%A2-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%A2-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%A2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%B8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%B8-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%B8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%B8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B0%B8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%AE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%AE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%AE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%AE-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%B1-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%B1-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%B1-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%B1-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B1%B1-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%9D-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%9D-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%9D-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%9D-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%9D-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%A5-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%A5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%A5-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%A5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%A5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%A5-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%B1-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%B1-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%B1-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%B1-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%B1-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%BE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%BE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%BE-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B7%BE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%B2-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%B2-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%B2-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%B2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%B2-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%BA-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%BA-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%BF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%BF-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%B9%BF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BB%B4-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BB%B4-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BB%BE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BB%BE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BB%BE-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BB%BE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8C-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%8D-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%93-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%93-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%93-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%93-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BC%93-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BD%90-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BD%A1-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BD%A1-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BD%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BD%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BD%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BF%83-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BF%83-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BF%83-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BF%83-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BF%83-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E5%BF%83-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%88-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%88-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%88-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%88-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%B6-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%B6-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%B6-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%88%B6-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%89%8B-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%89%8B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%89%8B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%89%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%89%8B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%89%8B-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%94%AF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%94%AF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%94%AF-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%94%B4-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%94%B4-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%94%B4-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%87-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%87-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%87-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%87-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%87-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%97-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%97-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%97-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%97-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%97-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%97-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%A4-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%A4-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%A4-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%A4-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%A4-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%B9-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%B9-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%B9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%B9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%96%B9-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A0-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A5-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%97%A5-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9B%B0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9B%B0-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9B%B0-clerical.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9B%B0-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9B%B0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9B%B0-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%88-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%88-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%88-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%88-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%88-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%A8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%A8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%A8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%A8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9C%A8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%9D%B8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AC%A0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AC%A0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%A2-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%B9-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%B9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AD%B9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AE%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AE%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AE%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AE%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AE%B3-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%8B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%8B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%94-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%94-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%94-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%94-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%94-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%9B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%9B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%AF%9B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%8F-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%8F-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%8F-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%8F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%8F-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%94-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E6%B0%B4-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%81%AB-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%84%A1-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%AA-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%AA-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%AA-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%AA-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%B6-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%B6-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%B6-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%B6-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%BB-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%BB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%BB-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%BB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%BF-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%88%BF-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%80-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%80-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%80-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%87-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%87-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%99-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%99-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%99-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%9B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%9B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%9B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%89%9B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8A%AC-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8A%AC-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8A%AC-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8A%AC-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8A%AC-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8A%AC-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%84-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%84-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%84-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-clerical.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%8E%89-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%93%9C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%93%9C-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%93%9C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%93%A6-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%93%A6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%93%A6-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%98-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%98-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%98-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%98-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%9F-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%9F-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%9F-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%9F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%A8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%B0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%B0-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%B0-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%B0-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%B0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%94%B0-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%96%8B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%96%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%96%92-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%96%92-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%96%92-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%99%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%99%BD-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%99%BD-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%99%BD-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%99%BD-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%AE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%AE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%AE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%BF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%BF-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%BF-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9A%BF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9B%AE-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9B%AE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9B%AE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9B%AE-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9B%AE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9B%AE-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%9B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%9B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%A2-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%A2-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%A2-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%A2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%9F%B3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A4%BA-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A4%BA-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A4%BA-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A4%BA-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A4%BA-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A4%BA-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A6%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A6%BE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A6%BE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A6%BE-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A6%BE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A9%B4-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%A9%B4-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%8B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%8B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%AB%B9-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B1%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B1%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B1%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B1%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B1%B3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B1%B3-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B3%B8-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B3%B8-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B3%B8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B3%B8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%B3%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BC%B6-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BC%B6-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BC%B6-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BC%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BD%91-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BD%91-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BD%91-zhou.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BD%94-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BD%94-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BD%94-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%8A-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%8A-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%8A-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%8A-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%BD-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%BD-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%BD-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E7%BE%BD-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%81-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%81-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%81-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%81-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%81-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%8C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%8C-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%8C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%8C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%92-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%92-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%80%B3-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%81%BF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%81%BF-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%81%BF-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%81%BF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-clerical.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%82%89-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%A3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%A3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%A3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%A3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%AA-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%AA-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%AA-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%AA-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%AA-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%AA-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%87%BC-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%8C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%8C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%8C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%9B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%9F-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%9F-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%9F-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%88%9F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%AE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%AE-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%AE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B2-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B2-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B2-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B2-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B2-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%89%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%8D-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%8D-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%8D-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%8D-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%AB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%AB-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%99%AB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%80-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%80-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%80-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%80-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%80-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-clerical.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%8C-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%A3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%A3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%A3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A1%A3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A5%BE-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A5%BE-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A6%8B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A6%8B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A6%8B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A6%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A6%8B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A7%92-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A7%92-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A7%92-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A7%92-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A8%80-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A8%80-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A8%80-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%A8%80-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B0%B7-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B0%B7-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B0%B7-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B0%B7-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%86-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%86-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%86-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%86-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%95-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%95-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%95-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%95-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%B8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%B8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%B8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%B8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B1%B8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B2%9D-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B2%9D-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B2%9D-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B2%9D-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B2%9D-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%A4-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B5%B0-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%B6%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BA%AB-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BA%AB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BA%AB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BB%8A-zhou.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BE%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BE%B0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BE%B0-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BE%B0-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BE%B0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E8%BE%B5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%82%91-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%82%91-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%82%91-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%82%91-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%85%89-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%86-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%86-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%86-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%86-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%8C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%91-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%91-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%87%91-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%95%B7-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%96%80-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%98%9C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%98%9C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%98%9C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9A%B6-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9A%B9-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9A%B9-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9A%B9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9A%B9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9B%A8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9D%9E-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9D%A2-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9D%A2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9D%A9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%8B-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%AD-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%B3-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%B3-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%9F%B3-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A0%81-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A0%81-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A0%81-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A0%81-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A0%81-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A2%A8-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A2%A8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A2%A8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A2%A8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A2%A8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9B-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9B-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9B-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9B-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A3%9F-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%96-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%96-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%96-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%96-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%99-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%99-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%99-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%99-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-ancient.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-clerical.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%A6%AC-zhou.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AA%A8-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AA%A8-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AA%A8-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AA%A8-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-bronze-warring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%98-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%9F-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%9F-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AB%9F-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%A5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%A5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%A5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%AF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%AF-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%AF-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%AF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%B2-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%B2-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%B2-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%B2-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%BC-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%BC-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%BC-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AC%BC-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AD%9A-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AD%9A-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AD%9A-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%AD%9A-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B3%A5-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B3%A5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B3%A5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B3%B3-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B3%B3-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%B5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%B5-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%B5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%B5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%BF-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%BF-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%BF-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%B9%BF-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%A5-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%A5-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%A5-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%A5-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%BB-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%BB-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BA%BB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%83-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%83-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%83-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%83-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%8D-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%8D-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%8D-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%8D-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%91-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%91-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%91-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%91-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%91-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%92-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%92-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%B9-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%B9-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%B9-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%B9-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BB%BD-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%8E-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%8E-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%8E-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%8E-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%93-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%93-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%93-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%93-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%A0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%A0-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%A0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BC%BB-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BD%8A-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BD%92-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BD%92-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BD%92-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-bronze-shang.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-bronze-spring.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-silk.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%8D-slip.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%9C-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%9C-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%9C-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%9C-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%A0-bigseal.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%A0-bronze.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%A0-oracle.svg.png create mode 100644 server/routers/bushou/images/60px-%E9%BE%A0-seal.svg.png create mode 100644 server/routers/bushou/images/60px-%F0%A5%83%A9-silk.svg.png create mode 100644 server/routers/bushou/images/60px-ACC-B00002.svg.png create mode 100644 server/routers/bushou/images/60px-ACC-B00014.svg.png create mode 100644 server/routers/bushou/images/60px-ACC-B00015.svg.png create mode 100644 server/routers/bushou/images/60px-ACC-b00945.svg.png create mode 100644 server/routers/bushou/images/60px-ACC-b18623.svg.png create mode 100644 server/routers/bushou/images/60px-ACC-b18626.svg.png create mode 100644 server/routers/bushou/images/60px-Shuowen_Seal_Radical_038.svg.png create mode 100644 server/routers/bushou/index.js create mode 100644 server/routers/bushou/radicals/success.json create mode 100644 server/routers/bushou/tokenize/success.json create mode 100644 server/routers/car-wash/auth/index.js create mode 100644 server/routers/car-wash/auth/login/error.json create mode 100644 server/routers/car-wash/auth/login/index.js create mode 100644 server/routers/car-wash/auth/login/success.json create mode 100644 server/routers/car-wash/auth/logrec/error.json create mode 100644 server/routers/car-wash/auth/logrec/index.js create mode 100644 server/routers/car-wash/auth/logrec/success.json create mode 100644 server/routers/car-wash/auth/passrec/error.json create mode 100644 server/routers/car-wash/auth/passrec/index.js create mode 100644 server/routers/car-wash/auth/passrec/success.json create mode 100644 server/routers/car-wash/auth/registration/dooble.json create mode 100644 server/routers/car-wash/auth/registration/dooblephone.json create mode 100644 server/routers/car-wash/auth/registration/error.json create mode 100644 server/routers/car-wash/auth/registration/index.js create mode 100644 server/routers/car-wash/auth/registration/success.json create mode 100644 server/routers/car-wash/carousel/carousel-en.json create mode 100644 server/routers/car-wash/carousel/carousel-ru.json create mode 100644 server/routers/car-wash/carousel/index.js create mode 100644 server/routers/car-wash/index.js create mode 100644 server/routers/car-wash/map/index.js create mode 100644 server/routers/car-wash/map/map-info-en.json create mode 100644 server/routers/car-wash/map/map-info-ru.json create mode 100644 server/routers/car-wash/prices/index.js create mode 100644 server/routers/car-wash/prices/prices-en.json create mode 100644 server/routers/car-wash/prices/prices-ru.json create mode 100644 server/routers/coder/catalog/cardData.json create mode 100644 server/routers/coder/catalog/error.json create mode 100644 server/routers/coder/catalog/index.js create mode 100644 server/routers/coder/controllers.js create mode 100644 server/routers/coder/forum/categories.json create mode 100644 server/routers/coder/forum/error.json create mode 100644 server/routers/coder/forum/index.js create mode 100644 server/routers/coder/forum/topic-comments.json create mode 100644 server/routers/coder/forum/topic-list.json create mode 100644 server/routers/coder/forum/topic-tags.json create mode 100644 server/routers/coder/forum/topic.json create mode 100644 server/routers/coder/forum/users.json create mode 100644 server/routers/coder/index.js create mode 100644 server/routers/coder/topic/dynamic-programming.json create mode 100644 server/routers/coder/topic/dynamic-programming/arrays-and-strings.json create mode 100644 server/routers/coder/topic/dynamic-programming/dynamic-programming.json create mode 100644 server/routers/coder/topic/dynamic-programming/linked-list.json create mode 100644 server/routers/coder/topic/dynamic-programming/overview.json create mode 100644 server/routers/coder/topic/error.json create mode 100644 server/routers/coder/topic/index.js create mode 100644 server/routers/easy-project/auth.js create mode 100644 server/routers/easy-project/constants.js create mode 100644 server/routers/easy-project/db.js create mode 100644 server/routers/easy-project/index.js create mode 100644 server/routers/easy-project/middlewares/auth-middleware.js create mode 100644 server/routers/easy-project/projects.js create mode 100644 server/routers/easy-project/tasks.js create mode 100644 server/routers/easy-project/users.js create mode 100644 server/routers/easy-project/utils.js create mode 100644 server/routers/example/index.js create mode 100644 server/routers/hub-video/index.js create mode 100644 server/routers/music-learn/index.js create mode 100644 server/routers/music-learn/mocks/courses/1/success.json create mode 100644 server/routers/music-learn/mocks/courses/success.json create mode 100644 server/routers/music-learn/mocks/notes/success.json create mode 100644 server/routers/music-learn/mocks/user/courses/add/success.json create mode 100644 server/routers/music-learn/mocks/user/courses/success.json create mode 100644 server/routers/music-learn/mocks/user/login/success.json create mode 100644 server/routers/music-learn/mocks/user/logout/success.json create mode 100644 server/routers/music-learn/mocks/user/notes/success.json create mode 100644 server/routers/music-learn/mocks/user/success.json create mode 100644 server/routers/neptunium/index.js create mode 100644 server/routers/publicium/index.js create mode 100644 server/routers/publicium/mocks/games.json create mode 100644 server/routers/publicium/mocks/games/trending.json create mode 100644 server/routers/publicium/mocks/maps/by/id.json create mode 100644 server/routers/publicium/mocks/maps/trending.json create mode 100644 server/routers/publicium/mocks/search.json create mode 100644 server/routers/publicium/mocks/users/12.json create mode 100644 server/routers/publicium/mocks/users/12/collection.json create mode 100644 server/routers/publicium/mocks/users/top-load.json create mode 100644 server/routers/stc-21-03/controllers.js create mode 100644 server/routers/stc-21-03/index.js create mode 100644 server/routers/stc-22-24/controller.js create mode 100644 server/routers/stc-22-24/data/dishdata.json create mode 100644 server/routers/stc-22-24/data/tabs.json create mode 100644 server/routers/stc-22-24/index.js create mode 100644 server/routers/stc-22-24/midlewares/checkRequired.midleware.js create mode 100644 server/routers/stc-22-24/routes/auth.js create mode 100644 server/routers/stc-22-24/routes/dish.js create mode 100644 server/routers/stc-22-24/routes/key.js create mode 100644 server/routers/stc-22-24/routes/order.js create mode 100644 server/routers/stc-22-24/routes/reservation.js create mode 100644 server/routers/stc-22-24/utils/common.js create mode 100644 server/routers/stc/controllers.js create mode 100644 server/routers/stc/index.js create mode 100644 server/routers/sugarbun/collections/adminstats.json create mode 100644 server/routers/sugarbun/collections/cakeitem.json create mode 100644 server/routers/sugarbun/collections/cakeshape.json create mode 100644 server/routers/sugarbun/collections/cakesweight.json create mode 100644 server/routers/sugarbun/collections/ingredients.json create mode 100644 server/routers/sugarbun/controller.js create mode 100644 server/routers/sugarbun/index.js create mode 100644 server/routers/task-boss/auth.js create mode 100644 server/routers/task-boss/constants.js create mode 100644 server/routers/task-boss/controllers.js create mode 100644 server/routers/task-boss/index.js create mode 100644 server/routers/task-boss/stubs/depts.json create mode 100644 server/routers/task-boss/stubs/error.json create mode 100644 server/routers/task-boss/stubs/peoples/success.json create mode 100644 server/routers/task-boss/stubs/tasks/delete.json create mode 100644 server/routers/task-boss/stubs/tasks/tasks.json create mode 100644 server/routers/uryndyklar/index.js create mode 100644 server/routers/uryndyklar/mocks/cart_get/empty.json create mode 100644 server/routers/uryndyklar/mocks/cart_get/error.json create mode 100644 server/routers/uryndyklar/mocks/cart_get/success.json create mode 100644 server/routers/uryndyklar/mocks/cart_post/error.json create mode 100644 server/routers/uryndyklar/mocks/cart_post/success.json create mode 100644 server/routers/uryndyklar/mocks/search_get/empty.json create mode 100644 server/routers/uryndyklar/mocks/search_get/error.json create mode 100644 server/routers/uryndyklar/mocks/search_get/ikea.json create mode 100644 server/routers/uryndyklar/mocks/search_get/ikea_multicolor.json create mode 100644 server/routers/uryndyklar/mocks/search_get/modelH.json create mode 100644 server/routers/uryndyklar/mocks/search_get/success.json create mode 100644 server/routers/zoom-bar/index.js create mode 100644 server/utils/common.js create mode 100644 server/utils/mongo.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..9fb5f01 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,45 @@ +module.exports = { + env: { + browser: true, + commonjs: true, + es2021: true, + }, + extends: [ + 'airbnb-base', + ], + parserOptions: { + ecmaVersion: 12, + }, + rules: { + indent: ['error', 4], + semi: ['warn', 'never'], + 'object-curly-newline': ['warn', { + ObjectExpression: 'always', + ObjectPattern: { + multiline: true, + }, + ImportDeclaration: 'never', + ExportDeclaration: { + multiline: true, minProperties: 3, + }, + }], + 'consistent-return': [0], + 'prefer-const': [0], + 'no-unused-vars': [0], + 'no-console': [0], + 'global-require': [0], + 'no-plusplus': [0], + 'no-underscore-dangle': [0], + 'import/no-dynamic-require': [0], + 'no-shadow': ['warn'], + 'no-restricted-syntax': ['warn'], + 'max-len': ['warn'], + 'linebreak-style': [0], + 'prefer-destructuring': [0], + 'imoprt-order': [0], + 'no-param-reassign': [1], + 'no-await-in-loop': [1], + 'no-return-assign': [1], + 'spaced-comment': [1], + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a90bea0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.env +.idea \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..cafe685 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=true diff --git a/.serverrc.js b/.serverrc.js new file mode 100644 index 0000000..16e5b53 --- /dev/null +++ b/.serverrc.js @@ -0,0 +1,5 @@ +module.exports = { + port: 8044, + mongoAddr: process.env.MONGO_ADDR || 'localhost', + mongoPort: 27017, +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..60cc5a1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/server/index.js" + }, + { + "name": "attach", + "type": "pwa-node", + "request": "attach", + "skipFiles": [ + "/**" + ], + "processId": "${command:PickProcess}" + } + ] +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..733d86a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM 'node:18' + +RUN mkdir -p /usr/src/app/server/ +WORKDIR /usr/src/app/ + +COPY ./server /usr/src/app/server +COPY ./package.json /usr/src/app/package.json +COPY ./.serverrc.js /usr/src/app/.serverrc.js +# COPY ./.env /usr/src/app/.env + +RUN npm ci --only=prod +EXPOSE 8044 + +CMD ["npm", "run", "up:prod"] diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..6e46f25 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,37 @@ +pipeline { + agent { + docker { + image 'node:16' + } + } + + stages { + stage('install') { + steps { + sh 'node -v' + sh 'npm -v' + sh 'npm install' + } + } + + stage('eslint') { + steps { + sh 'npm run eslint' + } + } + + stage('test') { + steps { + sh 'npm run test:start' + } + } + + stage('clean-all') { + steps { + sh 'rm -rf .[!.]*' + sh 'rm -rf ./*' + sh 'ls -a' + } + } + } +} \ No newline at end of file diff --git a/d-scripts/rerun.sh b/d-scripts/rerun.sh new file mode 100644 index 0000000..b001f65 --- /dev/null +++ b/d-scripts/rerun.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +docker stop ms-mongo +docker volume remove ms_volume +docker volume create ms_volume +docker run --rm -v ms_volume:/data/db --name ms-mongo -p 27017:27017 -d mongo:4.4.13 diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..7219d7a --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,21 @@ +version: "3" + +volumes: + ms_volume: + +services: + mongoDb: + image: mongo:4.4.13 + volumes: + - ms_volume:/data/db + restart: always + # ports: + # - 27017:27017 + multy-stubs: + build: . + restart: always + ports: + - 8044:8044 + environment: + - TZ=Europe/Moscow + - MONGO_ADDR=mongodb \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..231cd2b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4670 @@ +{ + "name": "multi-stub", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "multi-stub", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "bcrypt": "^5.1.0", + "body-parser": "^1.19.0", + "cookie-parser": "^1.4.5", + "cors": "^2.8.5", + "cross-env": "^7.0.3", + "crypto-js": "^4.1.1", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "express-jwt": "^8.4.1", + "express-session": "^1.17.3", + "jsonwebtoken": "^8.5.1", + "mongodb": "^3.6.8", + "mysql": "^2.18.1", + "pbkdf2-password": "^1.2.1", + "socket.io": "^4.7.1", + "start-server-and-test": "^1.13.1", + "uuid": "^9.0.0" + }, + "devDependencies": { + "@types/node": "18.17.1", + "eslint": "8.46.0", + "eslint-config-airbnb-base": "15.0.0", + "eslint-plugin-import": "2.28.0", + "nodemon": "3.0.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", + "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "18.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz", + "integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", + "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.1.0", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", + "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", + "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.1", + "@eslint/js": "^8.46.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.2", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.12.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-jwt": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-8.4.1.tgz", + "integrity": "sha512-IZoZiDv2yZJAb3QrbaSATVtTCYT11OcqgFGoTN4iKVyN6NBkBkhtVIixww5fmakF0Upt5HfOxJuS6ZmJVeOtTQ==", + "dependencies": { + "@types/jsonwebtoken": "^9", + "express-unless": "^2.1.3", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/express-jwt/node_modules/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/express-jwt/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "dependencies": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-unless": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-2.1.3.tgz", + "integrity": "sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==" + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastfall": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz", + "integrity": "sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q==", + "dependencies": { + "reusify": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/joi": { + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", + "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", + "dependencies": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.1.8", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "saslprep": "^1.0.0" + }, + "peerDependenciesMeta": { + "aws4": { + "optional": true + }, + "bson-ext": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "mongodb-extjson": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "dependencies": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/mysql/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optional-require": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", + "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", + "dependencies": { + "require-at": "^1.0.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pbkdf2-password": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pbkdf2-password/-/pbkdf2-password-1.2.1.tgz", + "integrity": "sha512-I6ZiUi82uhYN47lOzi8P7O69e70LRopgS4TIkq0ecDAPHrlxABWOHxLEsTzCuogkxTofFJDj0eEbOALgrrxhKg==", + "dependencies": { + "fastfall": "^1.2.3" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-at": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", + "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", + "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.12.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/socket.io": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", + "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/start-server-and-test": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.15.4.tgz", + "integrity": "sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==", + "dependencies": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.4", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "7.0.1" + }, + "bin": { + "server-test": "src/bin/start.js", + "start-server-and-test": "src/bin/start.js", + "start-test": "src/bin/start.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/start-server-and-test/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/start-server-and-test/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wait-on": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", + "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", + "dependencies": { + "axios": "^0.27.2", + "joi": "^17.7.0", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "rxjs": "^7.8.0" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bc9f0bc --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "multi-stub", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "npx nodemon ./server", + "up:prod": "cross-env NODE_ENV=\"production\" node ./server", + "deploy:d:stop": "docker-compose down", + "deploy:d:build": "docker-compose build", + "deploy:d:up": "docker-compose up -d", + "redeploy": "npm run deploy:d:stop && npm run deploy:d:build && npm run deploy:d:up", + "eslint": "npx eslint ./server", + "eslint:fix": "npx eslint ./server --fix", + "test": "echo \"test complete\"", + "test:start": "start-server-and-test up:prod 8043 test" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@bitbucket.org/online-mentor/multi-stub.git" + }, + "keywords": [], + "author": "", + "license": "MIT", + "homepage": "https://bitbucket.org/online-mentor/multi-stub#readme", + "dependencies": { + "bcrypt": "^5.1.0", + "body-parser": "^1.19.0", + "cookie-parser": "^1.4.5", + "cors": "^2.8.5", + "cross-env": "^7.0.3", + "crypto-js": "^4.1.1", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "express-jwt": "^8.4.1", + "express-session": "^1.17.3", + "jsonwebtoken": "^8.5.1", + "mongodb": "^3.6.8", + "mysql": "^2.18.1", + "pbkdf2-password": "^1.2.1", + "socket.io": "^4.7.1", + "start-server-and-test": "^1.13.1", + "uuid": "^9.0.0" + }, + "devDependencies": { + "@types/node": "18.17.1", + "eslint": "8.46.0", + "eslint-config-airbnb-base": "15.0.0", + "eslint-plugin-import": "2.28.0", + "nodemon": "3.0.1" + } +} diff --git a/server/error.js b/server/error.js new file mode 100644 index 0000000..c68abfd --- /dev/null +++ b/server/error.js @@ -0,0 +1,12 @@ +const noToken = 'No authorization token was found' + +module.exports = (err, req, res, next) => { + if (err.message === noToken) { + res.status(400).send({ + success: false, error: 'Токен авторизации не найден', + }) + } + res.status(400).send({ + success: false, error: err.message || 'Что-то пошло не так', + }) +} diff --git a/server/index.js b/server/index.js new file mode 100644 index 0000000..96f61f7 --- /dev/null +++ b/server/index.js @@ -0,0 +1,64 @@ +const express = require('express') +const bodyParser = require('body-parser') +const cookieParser = require('cookie-parser') +const session = require('express-session') + +const app = express() +const cors = require('cors') +require('dotenv').config() + +const config = require('../.serverrc') +const { setIo } = require('./io') + +app.use(cookieParser()) +app.options('*', cors()) +app.use(cors()) +const server = setIo(app) + +const sess = { + secret: 'super-secret-key', + resave: true, + saveUninitialized: true, + cookie: { + }, +} +if (app.get('env') === 'production') { + app.set('trust proxy', 1) + sess.cookie.secure = true +} +app.use(session(sess)) + +app.use(bodyParser.json({ + limit: '50mb', +})) +app.use(bodyParser.urlencoded({ + limit: '50mb', + extended: true, +})) +app.use(require('./root')) + +/** + * Добавляйте сюда свои routers. + */ +app.use('/example', require('./routers/example')) +// app.use('/coder', require('./routers/coder')) +app.use('/stc-21-03', require('./routers/stc-21-03')) +app.use('/stc-21', require('./routers/stc')) +app.use('/stc-22-24', require('./routers/stc-22-24')) +// app.use('/bushou-api', require('./routers/bushou')) + +// app.use('/uryndyklar-api', require('./routers/uryndyklar')) +// app.use('/neptunium', require('./routers/neptunium')) +// app.use('/music-learn', require('./routers/music-learn')) +// app.use('/publicium', require('./routers/publicium')) +// app.use('/task-boss', require('./routers/task-boss')) +// app.use('/car-wash', require('./routers/car-wash')) +app.use('/zoom-bar', require('./routers/zoom-bar')) +app.use('/basket', require('./routers/basket')) +app.use('/easy-project', require('./routers/easy-project')) +app.use('/sugarbun', require('./routers/sugarbun')) +require('./routers/hub-video') + +app.use(require('./error')) + +server.listen(config.port, () => console.log(`Listening on http://localhost:${config.port}`)) diff --git a/server/io.js b/server/io.js new file mode 100644 index 0000000..8df2c10 --- /dev/null +++ b/server/io.js @@ -0,0 +1,13 @@ +const { Server } = require('socket.io') +const { createServer } = require('http') + +let io = null + +module.exports.setIo = (app) => { + const server = createServer(app) + io = new Server(server, {}) + + return server +} + +module.exports.getIo = () => io diff --git a/server/root.js b/server/root.js new file mode 100644 index 0000000..9330a66 --- /dev/null +++ b/server/root.js @@ -0,0 +1,17 @@ +const router = require('express').Router() +const fs = require('fs') +const path = require('path') + +const folderPath = path.resolve(__dirname, './routers') +const folders = fs.readdirSync(folderPath) + +router.get('/', (req, res) => { + res.send(` +

multy stub is working

+
    + ${folders.map((f) => `
  • ${f}
  • `).join('')} +
+ `) +}) + +module.exports = router diff --git a/server/routers/basket/auth.js b/server/routers/basket/auth.js new file mode 100644 index 0000000..5459c12 --- /dev/null +++ b/server/routers/basket/auth.js @@ -0,0 +1,34 @@ +const router = require('express').Router() +const checkPwd = require('pbkdf2-password')() +const jwt = require('jsonwebtoken') +const { BASKET_JWT_TOKEN } = require('./key') + +const { getResponse, signUp, getUser, _idToId, requiredFields } = require('./controller') + +router.post('/sign-in', requiredFields(['email', 'password']), async (req, res) => { + try { + const user = await getUser(req.body) + // eslint-disable-next-line max-len + checkPwd({ password: req.body.password, salt: user.salt }, async (err, pass, salt, hash) => { + if (err) throw new Error(err) + + if (user.pwd === hash) { + const { pwd, salt: _salt, ...rest } = user + const token = jwt.sign(_idToId(rest), BASKET_JWT_TOKEN) + res.send(getResponse(null, { token, user: _idToId(rest) })) + } else { + res.status(400).send(getResponse('Неправильный email или пароль')) + } + }) + } catch (e) { + res.status(400).send(getResponse(e.message)) + } +}) + +router.post('/sign-up', requiredFields(['email', 'login', 'password']), async (req, res) => { + let error = null + const data = await signUp(req.body).catch((e) => error = e.message) + res.status(error ? 400 : 200).send(getResponse(error, data)) +}) + +module.exports = router diff --git a/server/routers/basket/categories.js b/server/routers/basket/categories.js new file mode 100644 index 0000000..3b61e47 --- /dev/null +++ b/server/routers/basket/categories.js @@ -0,0 +1,25 @@ +const router = require('express').Router() +const { expressjwt } = require('express-jwt') +const ObjectId = require('mongodb').ObjectID + +const { BASKET_JWT_TOKEN } = require('./key') + +const { getResponse, getCategory, postCategory } = require('./controller') + +router.use(expressjwt({ secret: BASKET_JWT_TOKEN, algorithms: ['HS256'] })) + +router.get('/', async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + const categoryData = await getCategory({ userId }).catch((e) => error = e.message) + res.send(getResponse(error, categoryData)) +}) + +router.post('/', async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + const categoryData = await postCategory({ userId, ...req.body }).catch((e) => error = e.message) + res.send(getResponse(error, categoryData)) +}) + +module.exports = router diff --git a/server/routers/basket/controller.js b/server/routers/basket/controller.js new file mode 100644 index 0000000..e98424d --- /dev/null +++ b/server/routers/basket/controller.js @@ -0,0 +1,510 @@ +const ObjectId = require('mongodb').ObjectID +const getHash = require('pbkdf2-password')() + +const { getDB } = require('../../utils/mongo') + +const USERS_COLLECTION = 'users' +const LISTS_COLLECTION = 'lists' +const CATEGORY_COLLECTION = 'default_categories' +const USER_CATEGROY_COLLECTION = 'user_categories' +const ITEM_COLLECTION = 'items' +const fakeUserId = 'fakeUserId' + +let db = null + +const connect = async () => { + db = await getDB('basket') +} + +const init = async () => { + await connect() + const categoriesCollection = db.collection(CATEGORY_COLLECTION) + const findData = await categoriesCollection.find({ + }).toArray() + if (findData.length === 0) { + await categoriesCollection.insertMany([ + { + name: 'Продукты', + color: '#08AE0F', + }, + { + name: 'Одежда', + color: '#9D79B9', + }, + { + name: 'Бытовая химия', + color: '#B11F1F', + }, + { + name: 'Лекарства', + color: '#3414F5', + }, + ]) + } +} + +init() + +const _idToId = (data) => { + const { _id, ...rest } = data + + return { + id: _id, + ...rest, + } +} + +const _idToIdArray = (data) => { + const _idToIdMap = data.map((item) => _idToId(item)) + + return _idToIdMap +} + +const getResponse = (error, data, success = true) => { + if (error) { + return { + success: false, + error, + } + } + + return { + success, + data, + } +} + +const signUp = async ({ email, login, password }) => { + if (db === null) throw new Error('no db connection') + + try { + const usersCollection = db.collection(USERS_COLLECTION) + const userData = await usersCollection.findOne({ + $or: [{ + login, + }, { + email, + }], + }) + + if (userData?.login === login) { + throw new Error('Логин занят') + } + if (userData?.email === email) { + throw new Error('Email занят') + } + + getHash({ password }, async (err, pass, salt, hash) => { + if (err) throw new Error(err) + // eslint-disable-next-line max-len + const { insertedCount } = await usersCollection.insertOne({ email, login, pwd: hash, salt }) + if (!insertedCount) throw new Error('insert error') + }) + + return {} + } catch (e) { + throw new Error(e) + } +} + +const getUser = async ({ email }) => { + if (db === null) throw new Error('no db connection') + + try { + const usersCollection = db.collection(USERS_COLLECTION) + const userData = await usersCollection.findOne( + { + email, + }, + ) + if (userData) return userData + throw new Error('Неправильный email или пароль') + } catch (e) { + throw new Error(e) + } +} + +const addList = async ({ userId = fakeUserId, ...data }) => { + if (db === null) throw new Error('no db connection') + + try { + const listsCollection = db.collection(LISTS_COLLECTION) + const insertData = await listsCollection.insertOne({ + userId, + timeStamp: Date.now(), + ...data, + }) + + const { insertedCount, ops } = insertData + if (insertedCount) { return _idToId(ops[0]) } + throw new Error('insert error') + } catch (e) { + throw new Error(e) + } +} + +const getLists = async ({ userId = fakeUserId }) => { + if (db === null) throw new Error('no db connection') + + try { + const listsCollection = db.collection(LISTS_COLLECTION) + const itemsCollection = db.collection(ITEM_COLLECTION) + let newLists = [] + + const data = await listsCollection.find({ + userId, + }).toArray() + + await Promise.all(data.map(async (element) => { + const total = await itemsCollection.countDocuments({ + parentId: element._id, + }) + const purchased = await itemsCollection.countDocuments({ + parentId: element._id, + bought: true, + }) + + newLists.push({ + ...element, total, purchased, + }) + })) + + newLists.sort((a, b) => (b.timeStamp - a.timeStamp)) + + return _idToIdArray(newLists) + } catch (e) { + throw new Error(e) + } +} + +/* добавил логику рекурсивного удаления дочерних документов */ +const deleteDoc = async ({ id, tag = false }) => { + if (db === null) throw new Error('no db connection') + + try { + const listsCollection = db.collection(LISTS_COLLECTION) + const itemsCollection = db.collection(ITEM_COLLECTION) + + const findData = await itemsCollection.find({ + parentId: new ObjectId(id), + }).toArray() + + findData.forEach(async (element) => { + await deleteDoc({ + id: element._id, + tag: true, + }) + }) + + let delData = null + if (tag) { + delData = await itemsCollection.deleteOne({ + _id: new ObjectId(id), + }) + } else { + delData = await listsCollection.deleteOne({ + _id: new ObjectId(id), + }) + } + + const { deletedCount } = delData + if (deletedCount) { + return { + } + } throw new Error('no data to delete') + } catch (e) { + throw new Error(e) + } +} + +const renameList = async ({ id, listName }) => { + if (db === null) throw new Error('no db connection') + + try { + const listsCollection = db.collection(LISTS_COLLECTION) + const data = await listsCollection.updateOne({ + _id: new ObjectId(id), + }, + { + $set: { + listName, + }, + }) + + const { matchedCount } = data + if (matchedCount) { + const findData = await listsCollection.findOne({ + _id: new ObjectId(id), + }) + return _idToId(findData) + } throw new Error('no data to rename') + } catch (e) { + throw new Error(e) + } +} + +const duplicateList = async ({ id, parentId = null }) => { + if (db === null) throw new Error('no db connection') + + try { + const listsCollection = db.collection(LISTS_COLLECTION) + const itemsCollection = db.collection(ITEM_COLLECTION) + + let addListData = null + let newId = null + + if (parentId) { + const findData = await itemsCollection.findOne( + { + _id: new ObjectId(id), + }, + ) + + const { _id, ...item } = findData + item.parentId = parentId + const insertData = await itemsCollection.insertOne({ + ...item, + }) + const { insertedCount } = insertData + if (!insertedCount) throw new Error('insert new item error') + } else { + const findData = await listsCollection.findOne( + { + _id: new ObjectId(id), + }, + ) + + const { _id, timeStamp, ...item } = findData + item.listName = `(КОПИЯ) ${item.listName}` + addListData = await addList({ + ...item, + }) + newId = addListData.id + } + + const childData = await itemsCollection.find({ + parentId: new ObjectId(id), + }).toArray() + + childData.forEach(async (element) => { + await duplicateList({ + id: element._id, parentId: newId, + }) + }) + + if (addListData) return _idToId(addListData) + } catch (e) { + throw new Error(e) + } +} + +const getCategory = async ({ userId }) => { + if (db === null) throw new Error('no db connection') + + try { + const categoriesCollection = db.collection(CATEGORY_COLLECTION) + const defaultCategories = await categoriesCollection.find({ + }).toArray() + const defaultCategoriesData = _idToIdArray(defaultCategories).map((dc) => ({ + ...dc, userId, + })) + + const userCollection = db.collection(USER_CATEGROY_COLLECTION) + const userCategoriesFilter = {} + + if (userId) { + userCategoriesFilter.userId = userId + } + const userFindData = await userCollection.find(userCategoriesFilter).toArray() + + return [...defaultCategoriesData, ..._idToIdArray(userFindData)] + } catch (e) { + throw new Error(e) + } +} + +const postCategory = async ({ userId = fakeUserId, ...categoryData }) => { + if (db === null) throw new Error('no db connection') + + try { + const userCollection = db.collection(USER_CATEGROY_COLLECTION) + const insertData = await userCollection.insertOne({ + userId, ...categoryData, + }) + + // const {insertedCount, ops} = insertData + // if (insertedCount) + // _idToId(ops[0]) + // else + // throw new Error('insert error') + const userFindData = await userCollection.find({ + userId, + }).toArray() + return _idToIdArray(userFindData) + } catch (e) { + throw new Error(e) + } +} + +const getShoppingList = async ({ userId = fakeUserId, id }) => { + if (db === null) throw new Error('no db connection') + + try { + const listsCollection = db.collection(ITEM_COLLECTION) + const itemsList = await listsCollection.find({ + parentId: new ObjectId(id), + }).toArray() + const categoryList = await getCategory({ }) + const coloredItemsList = itemsList.map((item) => ({ + ...item, + // eslint-disable-next-line max-len + color: categoryList.find((category) => String(category.id) === String(item.categoryId))?.color, + })) + + return _idToIdArray(coloredItemsList) + } catch (e) { + throw new Error(e) + } +} + +const addListItem = async ({ userId = fakeUserId, listId, categoryId, text }) => { + if (db === null) throw new Error('no db connection') + + try { + const dataToInsert = { + parentId: new ObjectId(listId), + categoryId: new ObjectId(categoryId), + text, + count: 1, + bought: false, + createdBy: userId, + createdDt: Date.now(), + modifiedBy: userId, + modifiedDt: Date.now(), + } + const itemCollection = db.collection(ITEM_COLLECTION) + await itemCollection.insertOne(dataToInsert) + + return _idToId(dataToInsert) + } catch (e) { + throw new Error(e) + } +} + +const boughtItem = async ({ userId = fakeUserId, itemId, bought }) => { + if (db === null) throw new Error('no db connection') + try { + const itemCollection = db.collection(ITEM_COLLECTION) + const chengedData = await itemCollection.findOneAndUpdate({ + _id: new ObjectId(itemId), + }, + [{ + $set: { + bought: { $eq: [false, '$bought'] }, + modifiedBy: userId, + modifiedDt: Date.now(), + }, + }]) + return _idToId(chengedData) + } catch (e) { + throw new Error(e) + } +} + +const incCountItem = async ({ userId = fakeUserId, itemId, count }) => { + if (db === null) throw new Error('no db connection') + + try { + const itemCollection = db.collection(ITEM_COLLECTION) + const chengedData = await itemCollection.findOneAndUpdate({ + _id: new ObjectId(itemId), + }, + { + $inc: { + count, + }, + }, + { + $set: { + modifiedBy: userId, + modifiedDt: Date.now(), + }, + }) + const chengeData = await itemCollection.findOneAndUpdate({ + _id: new ObjectId(itemId), + count: { + $lt: 1, + }, + }, + { + $set: { + count: 1, + modifiedBy: userId, + modifiedDt: Date.now(), + }, + }) + return _idToId(chengedData || chengeData) + } catch (e) { + throw new Error(e) + } +} + +const deleteItem = async ({ itemId }) => { + if (db === null) throw new Error('no db connection') + + try { + const itemCollection = db.collection(ITEM_COLLECTION) + const findItemData = await itemCollection.find({ + _id: new ObjectId(itemId), + }) + + findItemData.forEach((item) => { + deleteItem({ + id: item._id, + }) + }) + + const deleteItemData = await itemCollection.deleteOne({ + _id: new ObjectId(itemId), + }) + + const { deletedButton } = deleteItemData + if (deletedButton) { + return { + } + } + } catch (e) { + throw new Error(e) + } +} + +const requiredFields = (fields) => (req, res, next) => { + // eslint-disable-next-line no-restricted-syntax + for (const fieldName of fields) { + if (!req.body[fieldName]) { + throw new Error(`Параметр ${fieldName} не установлен`) + } + } + + next() +} + +module.exports = { + getResponse, + addList, + getLists, + deleteDoc, + renameList, + duplicateList, + getCategory, + postCategory, + getShoppingList, + addListItem, + boughtItem, + deleteItem, + incCountItem, + signUp, + getUser, + _idToId, + requiredFields, +} diff --git a/server/routers/basket/dashboard.js b/server/routers/basket/dashboard.js new file mode 100644 index 0000000..cfcdee7 --- /dev/null +++ b/server/routers/basket/dashboard.js @@ -0,0 +1,54 @@ +const router = require('express').Router() +const { expressjwt } = require('express-jwt') +const ObjectId = require('mongodb').ObjectID + +const { BASKET_JWT_TOKEN } = require('./key') + +const { + getResponse, addList, + getLists, deleteDoc, renameList, duplicateList, +} = require('./controller') + +const wait = (req, res, next) => setTimeout(next, 0) + +router.use(expressjwt({ secret: BASKET_JWT_TOKEN, algorithms: ['HS256'] })) + +/* получить списки покупок*/ +router.get('/list', wait, async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + const listData = await getLists({ userId }).catch((e) => error = e.message) + res.status(error ? 400 : 200).send(getResponse(error, listData)) +}) + +/* удалить список*/ +router.delete('/list', wait, async (req, res) => { + let error = null + const listData = await deleteDoc(req.body).catch((e) => error = e.message) + res.status(error ? 400 : 200).send(getResponse(error, listData)) +}) + +/* добавить новый список*/ +router.post('/list', wait, async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + // eslint-disable-next-line max-len + const listData = await addList({ userId, ...req.body }).catch((e) => error = e.message) + res.status(error ? 400 : 200).send(getResponse(error, listData)) +}) + +/* переименовать список*/ +router.put('/list', wait, async (req, res) => { + let error = null + const listData = await renameList(req.body).catch((e) => error = e.message) + res.status(error ? 400 : 200).send(getResponse(error, listData)) +}) + +/* дублировать список*/ +router.post('/list/duplicate', wait, async (req, res) => { + let error = null + const listData = await duplicateList(req.body).catch((e) => error = e.message) + res.status(error ? 400 : 200).send(getResponse(error, listData)) +}) + +module.exports = router diff --git a/server/routers/basket/index.js b/server/routers/basket/index.js new file mode 100644 index 0000000..c729f2c --- /dev/null +++ b/server/routers/basket/index.js @@ -0,0 +1,9 @@ +const router = require('express').Router() + +router.use('/dashboard', require('./dashboard')) +router.use('/landing', require('./landing')) +router.use('/categories', require('./categories')) +router.use('/shoppingList', require('./listItem')) +router.use('/auth', require('./auth')) + +module.exports = router diff --git a/server/routers/basket/json/auth/sign-in.json b/server/routers/basket/json/auth/sign-in.json new file mode 100644 index 0000000..2959ae3 --- /dev/null +++ b/server/routers/basket/json/auth/sign-in.json @@ -0,0 +1,10 @@ +{ + "data": { + "token": "qwert", + "user": { + "id": "1234", + "login": "eldar", + "email": "www@www.ru" + } + } +} \ No newline at end of file diff --git a/server/routers/basket/json/categories/add/success.json b/server/routers/basket/json/categories/add/success.json new file mode 100644 index 0000000..c51722a --- /dev/null +++ b/server/routers/basket/json/categories/add/success.json @@ -0,0 +1,23 @@ +{ + "success": true, + "data": + { + "category":[ + { + "id":1, + "name": "Продукты", + "color": "#08AE0F" + }, + { + "id":2, + "name": "Бытовая химия", + "color": "#3414F5" + }, + { + "id":3, + "name": "Одежда", + "color": "#FA8803" + } + ] + } +} \ No newline at end of file diff --git a/server/routers/basket/json/categories/current/success.json b/server/routers/basket/json/categories/current/success.json new file mode 100644 index 0000000..e36f420 --- /dev/null +++ b/server/routers/basket/json/categories/current/success.json @@ -0,0 +1,18 @@ +{ + "success": true, + "data": + { + "category":[ + { + "id":1, + "name": "Продукты", + "color": "#08AE0F" + }, + { + "id":2, + "name": "Бытовая химия", + "color": "#3414F5" + } + ] + } +} \ No newline at end of file diff --git a/server/routers/basket/json/dashboard/common/error.json b/server/routers/basket/json/dashboard/common/error.json new file mode 100644 index 0000000..b3b32b2 --- /dev/null +++ b/server/routers/basket/json/dashboard/common/error.json @@ -0,0 +1,3 @@ +{ + "error": "Не получилось..." +} \ No newline at end of file diff --git a/server/routers/basket/json/dashboard/common/success.json b/server/routers/basket/json/dashboard/common/success.json new file mode 100644 index 0000000..181c5af --- /dev/null +++ b/server/routers/basket/json/dashboard/common/success.json @@ -0,0 +1,8 @@ +{ + "data": { + "id": "vrgbtrgbtrbryn", + "listName": "2 список", + "purchased": 1, + "total": 5 + } +} \ No newline at end of file diff --git a/server/routers/basket/json/dashboard/list/empty.json b/server/routers/basket/json/dashboard/list/empty.json new file mode 100644 index 0000000..a965512 --- /dev/null +++ b/server/routers/basket/json/dashboard/list/empty.json @@ -0,0 +1,4 @@ +{ + "success": true, + "data": [] +} diff --git a/server/routers/basket/json/dashboard/list/error.json b/server/routers/basket/json/dashboard/list/error.json new file mode 100644 index 0000000..f8182d7 --- /dev/null +++ b/server/routers/basket/json/dashboard/list/error.json @@ -0,0 +1,4 @@ +{ + "success": false, + "error": "Список не загрузился" +} \ No newline at end of file diff --git a/server/routers/basket/json/dashboard/list/success.json b/server/routers/basket/json/dashboard/list/success.json new file mode 100644 index 0000000..56dc90e --- /dev/null +++ b/server/routers/basket/json/dashboard/list/success.json @@ -0,0 +1,23 @@ +{ + "success": true, + "data": [ + { + "id": "uuid1", + "listName": "Состоялась 94-я церемония вручения премии «Оскар»: награда за лучший фильм присуждена картине...", + "purchased": 0, + "total": 5 + }, + { + "id": "uuid2", + "listName": "Второй список", + "purchased": 1, + "total": 5 + }, + { + "id": "uuid3", + "listName": "Первый список", + "purchased": 5, + "total": 5 + } + ] +} diff --git a/server/routers/basket/json/landing/error.json b/server/routers/basket/json/landing/error.json new file mode 100644 index 0000000..33b19f1 --- /dev/null +++ b/server/routers/basket/json/landing/error.json @@ -0,0 +1,4 @@ +{ + "success": false, + "error": "Ошибка получения данных для Landing" +} \ No newline at end of file diff --git a/server/routers/basket/json/landing/success.json b/server/routers/basket/json/landing/success.json new file mode 100644 index 0000000..319f74a --- /dev/null +++ b/server/routers/basket/json/landing/success.json @@ -0,0 +1,80 @@ +{ + "success": true, + "data": [ + { + "features": [ + { + "id": "1", + "nameImg": "image-shopping-list.png", + "altImg": "image-shopping-list", + "title": "Список покупок", + "text": "Отличный интерфейс, удобно и понятно для использования. Удобно! Если нет нужного в списке, можно добавить и оно сохраниться." + }, + { + "id": "2", + "nameImg": "image-shared-access.png", + "altImg": "image-shared-access", + "title": "Общий доступ", + "text": "Делитесь списками покупок, чтобы планировать вместе с другими. Синхронизация для нескольких покупателей — это вещь!" + }, + { + "id": "3", + "nameImg": "image-messaging.png", + "altImg": "image-messaging", + "title": "Обмен сообщениями", + "text": "Хотите что-то обсудить при составление списка покупок, то есть возможность обмениваться сообщениями в режиме реального времени." + }, + { + "id": "4", + "nameImg": "image-share-photos.png", + "altImg": "mage-share-photos", + "title": "Делитесь фотографиями", + "text": "Не перепутайте товар при покупки — загружайте фотографии и обменивайтесь ими с другими пользователями. Это очень удобно!" + }, + { + "id": "5", + "nameImg": "image-prices.png", + "altImg": "image-prices", + "title": "Цены", + "text": "Расходы под контролем — вводите цены в спиок покупок. Приложение оценит стоимость и будет известно, чего ожидать на кассе." + }, + { + "id": "6", + "nameImg": "image-ecology.png", + "altImg": "image-ecology", + "title": "Экология", + "text": "Бумажные списки покупок — это деревья, которые могли бы еще расти. Вместо тысяч слов — возьми с собой приложение!" + }, + { + "id": "7", + "nameImg": "image-buy.png", + "altImg": "image-buy", + "title": "Покупайте", + "text": "97% пользователей поробывали приложение и теперь совершают меньше лишних и ненужных покупок. Покупайте нужное!" + } + ], + "helps": [ + { + "id": "1", + "title": "Как работает вМагазин?", + "text": "Задача организации, в особенности же консультация с широким активом обеспечивает широкому кругу специалистов новых принципов формирования материально-технической и кадровой базы." + }, + { + "id": "2", + "title": "Условия оплаты", + "text": "Задача организации, в особенности же консультация с широким активом обеспечивает широкому кругу специалистов новых принципов формирования материально-технической и кадровой базы." + }, + { + "id": "3", + "title": "Как с нами связаться", + "text": "Задача организации, в особенности же консультация с широким активом обеспечивает широкому кругу специалистов новых принципов формирования материально-технической и кадровой базы." + }, + { + "id": "4", + "title": "Текст", + "text": "Задача организации, в особенности же консультация с широким активом обеспечивает широкому кругу специалистов новых принципов формирования материально-технической и кадровой базы." + } + ] + } + ] +} \ No newline at end of file diff --git a/server/routers/basket/json/listItem/item/error.json b/server/routers/basket/json/listItem/item/error.json new file mode 100644 index 0000000..f7ffa40 --- /dev/null +++ b/server/routers/basket/json/listItem/item/error.json @@ -0,0 +1,3 @@ +{ + "error": "Не удалось изменить..." +} \ No newline at end of file diff --git a/server/routers/basket/json/listItem/item/success.json b/server/routers/basket/json/listItem/item/success.json new file mode 100644 index 0000000..d92dc66 --- /dev/null +++ b/server/routers/basket/json/listItem/item/success.json @@ -0,0 +1,15 @@ +{ + "success": true, + "data": + { + "id": 23, + "categoryId": 1, + "text": "Курица", + "count": 17, + "bought": false, + "createdBy": "", + "createdDt": "", + "modifiedBy": "", + "modifiedDt": "" + } +} \ No newline at end of file diff --git a/server/routers/basket/json/listItem/shoppingList/error.json b/server/routers/basket/json/listItem/shoppingList/error.json new file mode 100644 index 0000000..0341070 --- /dev/null +++ b/server/routers/basket/json/listItem/shoppingList/error.json @@ -0,0 +1,4 @@ +{ + "success": false, + "error": "Ошибка получения данных" +} \ No newline at end of file diff --git a/server/routers/basket/json/listItem/shoppingList/success.json b/server/routers/basket/json/listItem/shoppingList/success.json new file mode 100644 index 0000000..0d79924 --- /dev/null +++ b/server/routers/basket/json/listItem/shoppingList/success.json @@ -0,0 +1,34 @@ +{ + "success": true, + "data": + { + "id": 8, + "listName":"Мой список", + "data":[ + { + "id": 1, + "categoryId": 1, + "text": "Курица", + "count": 2, + "bought": true, + "delete":false + }, + { + "id": 2, + "categoryId":1, + "text": "Хлеб", + "count": 1, + "bought":false, + "delete":true + }, + { + "id": 3, + "categoryId": "3", + "text": "Шампунь", + "count": 1, + "bought":true, + "delete":false + } + ] + } +} \ No newline at end of file diff --git a/server/routers/basket/key.js b/server/routers/basket/key.js new file mode 100644 index 0000000..2b4e080 --- /dev/null +++ b/server/routers/basket/key.js @@ -0,0 +1,5 @@ +const BASKET_JWT_TOKEN = 'super super secret key' + +module.exports = { + BASKET_JWT_TOKEN, +} diff --git a/server/routers/basket/landing.js b/server/routers/basket/landing.js new file mode 100644 index 0000000..c0f3fe3 --- /dev/null +++ b/server/routers/basket/landing.js @@ -0,0 +1,7 @@ +const router = require('express').Router() + +router.get('/', (req, res) => { + res.send(require('./json/landing/success.json')) +}) + +module.exports = router diff --git a/server/routers/basket/listItem.js b/server/routers/basket/listItem.js new file mode 100644 index 0000000..4d7ee05 --- /dev/null +++ b/server/routers/basket/listItem.js @@ -0,0 +1,67 @@ +const router = require('express').Router() +const { expressjwt } = require('express-jwt') +const ObjectId = require('mongodb').ObjectID + +const { BASKET_JWT_TOKEN } = require('./key') + +const { getShoppingList, deleteItem, boughtItem, incCountItem, getResponse, addListItem } = require('./controller') + +router.use(expressjwt({ secret: BASKET_JWT_TOKEN, algorithms: ['HS256'] })) + +router.get('/:id', async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + // eslint-disable-next-line no-return-assign + const { id } = req.params + // eslint-disable-next-line no-return-assign + const listData = await getShoppingList({ userId, id }).catch((e) => error = e.message) + res.send(getResponse(error, listData)) +}) + +router.post('/item/:id', async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + // eslint-disable-next-line no-return-assign + const { id } = req.params + const { categoryId, text } = req.body + const shoppingListData = await addListItem({ + userId, listId: id, categoryId, text, + // eslint-disable-next-line no-return-assign + }).catch((e) => error = e.message) + res.send(getResponse(error, shoppingListData)) +}) + +router.patch('/item/:id', async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + // eslint-disable-next-line no-return-assign + const { id } = req.params + const { bought } = req.body.item + // eslint-disable-next-line no-return-assign + // eslint-disable-next-line max-len + const itemData = await boughtItem({ userId, itemId: id, bought }).catch((e) => error = e.message) + res.send(getResponse(error, itemData)) +}) + +router.put('/item/:id', async (req, res) => { + const userId = new ObjectId(req.auth.id) + let error = null + // eslint-disable-next-line no-return-assign + const { id } = req.params + const { count } = req.body + // eslint-disable-next-line no-return-assign + // eslint-disable-next-line max-len + const itemData = await incCountItem({ userId, itemId: id, count }).catch((e) => error = e.message) + res.send(getResponse(error, itemData)) +}) + +router.delete('/item/:id', async (req, res) => { + let error = null + // eslint-disable-next-line no-return-assign + const { id } = req.params + // eslint-disable-next-line no-return-assign + const itemData = await deleteItem({ itemId: id }).catch((e) => error = e.message) + res.send(getResponse(error, itemData)) +}) + +module.exports = router diff --git a/server/routers/bushou/episodes/success.json b/server/routers/bushou/episodes/success.json new file mode 100644 index 0000000..a1e78d0 --- /dev/null +++ b/server/routers/bushou/episodes/success.json @@ -0,0 +1,162 @@ +[ + { + "id": "6d6883d86aa44db784436894a0b30881", + "title": "听新闻学汉语 2021年03月31日", + "description": "中国-世卫组织新冠病毒溯源联合研究报告正式发布\n世界卫生组织30日在日内瓦正式发布中国-世卫组织新冠病毒溯源联合研究报告。报告认为,新冠病毒“极不可能”通过实验室传人。今年1月14日至2月10日,17名中方专家和17名外方专家组成联合专家组,分为流行病学、分子溯源、动物与环境3个小组,在武汉开展了为期28天的全球溯源研究中国部分工作,在此基础上撰写了研究报告。联合专家组评估了关于病毒引入人类的4个路径,认为新冠病毒“比较可能至非常可能”经中间宿主传人,“可能至比较可能”直接传人,“可能”通过冷链食品传人,“极不可能”通过实验室传人。报告提出了联合专家组下步研究的建议,包括建立全球统一的数据库,在全球更广范围内继续寻找可能的早期病例,由全球科学家在多国多地寻找可能成为病毒宿主的动物物种,进一步了解冷链和冷冻食品在病毒传播过程中的作用等。\n\n货轮搁浅6天终于脱困 苏伊士运河恢复通航\n苏伊士运河因“长赐”号货轮搁浅被堵多日,货轮解困进展牵动全球目光。经过了长达一周的救援,当地时间3月29日搁浅货轮已经完全脱困,苏伊士运河恢复通航。当地时间3月29日,救援队成功让搁浅在苏伊士运河长达一周的巨型货轮脱困。过去7天这艘搁浅货轮阻止了价值数十亿美元的货物通过苏伊士运河。苏伊士运河是世界上最繁忙的海运通道之一。受雇参与救援的荷兰宝斯卡利斯公司的总监皮特•伯尔道斯基表示,为了让货轮脱困,挖掘机挖走了3万立方米的泥沙,并动用了13艘拖船。\n\n威廉王子获评“世界最性感光头男人”\n上周六(3月27日),英国《太阳报》发布报道称威廉王子是“世界最性感的秃顶男人”,该报道基于提供植发服务的整容公司的一项调查。据《太阳报》报道,该调查是通过分析“博客、报道和谷歌搜索页面”中“性感”一词的出现频率来得出结果的。《太阳报》写道,调查发现,威廉王子的名字被提及1760万次。这篇文章还提到了调查结果中入选前十位的其他名人。迈克•泰森仅次于威廉王子,排在第二位,紧随其后的是《速度与激情》主演杰森•斯坦森、说唱歌手皮普保罗、迈克尔•乔丹、拳击手弗洛伊德•梅威瑟、约翰•特拉沃尔塔、布鲁斯•威利斯、“巨石”强森和范•迪塞尔。", + "pub_date_ms": 1617163200000, + "audio": "https://www.listennotes.com/e/p/6d6883d86aa44db784436894a0b30881/", + "audio_length_sec": 553, + "listennotes_url": "https://www.listennotes.com/e/6d6883d86aa44db784436894a0b30881/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/6d6883d86aa44db784436894a0b30881/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "b82bf190efbc59a11323fba954a88939" + }, + { + "id": "e8f2f82ac8b645c18ba3cc401cc3b9e0", + "title": "中国人的问候方式", + "description": "问候是交际中最常用的日常礼节,人与人之间的交际都是从互致问候开始的。由于习俗不同,各个国家,各个民族的问候方式差异很大。\n首先,在问候类别上,中国人的问候方式包括问好型、询问型、也有评论型。问好型最常用的是早、你早。中国人现在也越来越多用“你好”来打招呼。这种问候方式比较正式。汉语中还有“干吗去啊”“吃了吗”等询问型问候语,以表示对别人的关心,并不是打探隐私。\n其次,问候语涉及的话题也不同。汉语的问候语大多由包含信息的问句组成,并且大多涉及别人的起居寒暖,给人亲切关心的感觉。中国人往往会互相问起对方的年龄、收入、婚姻和健康等非常大众化的话题,并且问得越详细,越能体现出对别人的关心。\n除了语言问候方式,中国人的非语言问候方式也有自己的特点。中国人尤其是年轻人之间通常会点头或挥手表示问候,而在旧时,人们见面还要鞠躬以示问候。中国人的问候方式一般比较含蓄,即使是久别重逢,也仅仅是握握手,绝不会亲吻,一般男女之间连拥抱都很少有,最多握握手。", + "pub_date_ms": 1617076800000, + "audio": "https://www.listennotes.com/e/p/e8f2f82ac8b645c18ba3cc401cc3b9e0/", + "audio_length_sec": 945, + "listennotes_url": "https://www.listennotes.com/e/e8f2f82ac8b645c18ba3cc401cc3b9e0/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/e8f2f82ac8b645c18ba3cc401cc3b9e0/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "e0b0bedbc76befceae54d01abdfb4742" + }, + { + "id": "a7fa065d4f3e43f4af68b642f2ae7331", + "title": "不求有功,但求无过", + "description": "张路:大家好,我是张路。\n珺慧:大家好,我是珺慧。欢迎大家按时收听我们的节目。\n张路:珺慧,今天你给大家带来的俗语是哪一个呢?\n珺慧:今天我想给大家讲讲“不求有功,但求无过”这个俗语。\n张路:好啊,那么你先来说说它的意思吧。\n珺慧:“功”在这里是功绩、立功的意思,“过”是指错误、过错的意思,“求”是指要求、希望。所以“不求有功,但求无过”这个俗语的表面意思就是不要求立功,只希望没有错误。\n张路:我觉得这个俗语其实也反映了一些人对待事情的态度。\n珺慧:什么态度呢?\n张路:比如说我吧,我就非常希望成功,做事情的时候即使要冒险,我也不怕,只要能成功就行。可是我姐姐跟我就不一样,她就是那种“不求有功,但求无过”的人,她做事特别小心谨慎,不太追求成功,只要没有大的错误就行。\n珺慧:没错,所以这个俗语有时也比喻不求上进或安分守己的态度或做法。\n张路:好,下面我们就来听三段对话,一起来学习一下这个俗语的意思和用法。", + "pub_date_ms": 1616817600000, + "audio": "https://www.listennotes.com/e/p/a7fa065d4f3e43f4af68b642f2ae7331/", + "audio_length_sec": 404, + "listennotes_url": "https://www.listennotes.com/e/a7fa065d4f3e43f4af68b642f2ae7331/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/a7fa065d4f3e43f4af68b642f2ae7331/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "722cdf994f21362230a5081106b82a3a" + }, + { + "id": "94f99709224a4cd98f92ae4399ee1327", + "title": "听新闻学汉语 2021年03月26日", + "description": "83天!200亿件!快递业务量增长再提速\n国家邮政局实时监测数据显示,截至3月24日,今年我国快递业务量已突破200亿件,日均业务量超过2.4亿件,日均服务用户接近5亿人次,服务民生作用更加凸显。今年以来,邮政快递业继续保持高速增长态势,预计全年快递业务量将超过950亿件。值得注意的是,今年快递业务量突破200亿件用时仅83天,比2020年提前了45天,又一次刷新了我国快递业发展纪录。今年邮政快递业更贴近民生七件实事提出,要提高建制村快递服务通达率,东部地区基本实现快递服务直投到村,中、西部地区分别达到80%和60%。\n\n欧盟正式实施健康欧盟计划\n欧盟委员会26日宣布,2021年至2027年健康欧盟计划即日起正式实施,旨在增强欧盟有效应对未来卫生危机的能力。欧委会当天在一份声明中说,欧盟将为该计划拨付51亿欧元的财政预算,有助于新冠疫情后健全卫生系统,增强有效应对跨境健康威胁及未来卫生危机的能力,促进人口健康。根据声明,健康欧盟计划指导小组将与欧盟成员国协商后推出2021年第一个工作方案。健康欧盟计划将由新成立的健康和数字执行机构负责实施,该机构将于4月1日开始运行。欧盟委员会负责卫生和食品安全事务的委员基里亚基季斯表示,健康欧盟计划为欧盟在公共卫生领域进行长期性变革提供了手段,可以通过规模空前的财政预算进行有针对性的投资,以加强危机准备,建立更强大、更有韧性和更易获得的卫生系统。欧委会于去年5月提出2021年至2027年健康欧盟计划,旨在向欧盟成员国、卫生组织和非政府组织等提供资金支持,提高应对卫生领域各种威胁的能力。该计划于本月9日经欧洲议会表决通过,17日获欧洲理事会批准。\n\n研究:不爱运动的人更容易失眠\n日前,中国睡眠研究会发布了《2021年运动与睡眠白皮书》。数据显示,当下中国有超3亿人存在睡眠障碍,而运动人群失眠困扰比例仅为10%。运动人群中以广东运动人数最多,并且睡眠充足比例位列各省份第一。研究报告指出,新冠疫情期间,不运动人群和定期运动人群睡眠状态两极分化,旅行限制令使得久坐人群减少锻炼,作息更不规律。中国睡眠研究会理事、北京朝阳医院呼吸睡眠中心主任郭兮恒称,随着国内疫情得到控制,回归常规生活的重要一步就是多出门走走,定期锻炼,以解决日益普遍的睡眠问题。", + "pub_date_ms": 1616731200000, + "audio": "https://www.listennotes.com/e/p/94f99709224a4cd98f92ae4399ee1327/", + "audio_length_sec": 617, + "listennotes_url": "https://www.listennotes.com/e/94f99709224a4cd98f92ae4399ee1327/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/94f99709224a4cd98f92ae4399ee1327/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "7ed62a5606b169765dcc29d339b6e2d2" + }, + { + "id": "244fe98dbb8d47cdb090041db48db674", + "title": "我对摇滚乐不感兴趣", + "description": "林娜:音乐声太吵了,赶快关掉。\n表妹:这首歌多好听啊,听完再关吧。\n林娜:这有什么好听的?我真不明白你为什么这么喜欢摇滚乐。\n表妹:这有什么不明白的?原因很简单啊,我一听摇滚乐就特别兴奋。\n林娜:我对摇滚乐不感兴趣,完全没办法欣赏。拜托你下次听摇滚乐的时候,小声一点儿,不要影响别人。\n表妹:好吧好吧,我戴上耳机听,绝对不会影响到你,你放心吧。", + "pub_date_ms": 1616644800001, + "audio": "https://www.listennotes.com/e/p/244fe98dbb8d47cdb090041db48db674/", + "audio_length_sec": 910, + "listennotes_url": "https://www.listennotes.com/e/244fe98dbb8d47cdb090041db48db674/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/244fe98dbb8d47cdb090041db48db674/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "7bda2555f80feee77ea3c2f0b48d3034" + }, + { + "id": "38cef39a6f64477488fa0ff88bed6e17", + "title": "听新闻学汉语 2021年03月24日", + "description": "教育部印发《职业教育专业目录(2021年)》 共设置1349个专业\n记者22日从教育部获悉,其近日印发的《职业教育专业目录(2021年)》,专业设置对接现代产业体系,服务产业基础高级化、产业链现代化,共包含1349个专业。此次新版目录,面向集成电路技术、生物信息技术、新能源材料应用技术等9大重点领域,服务国家战略性新兴产业发展;此外回应社会民生关切,加强紧缺领域人才培养,如设置婴幼儿托育服务与管理、智慧健康养老服务与管理等专业。\n\n澳大利亚东部遭遇罕见暴雨洪灾\n澳大利亚官员21日说,东部沿海地带最近几天连降暴雨,部分区域遭遇50年来最严重洪灾,数以千计居民紧急疏散,数以百计房屋损毁。新南威尔士州有800万人口,是澳大利亚人口最多的州。州长格拉迪丝•贝雷吉克利安21日在一场新闻发布会上说,全州范围遭遇暴雨,情形比先前预期得更糟糕,州首府悉尼西北部地势低洼地区洪灾尤其严重。“我们昨天预期,将迎来20年一遇的洪灾,”她说,“但如今看来,这是50年一遇的洪灾。”贝雷吉克利安说,由于暴雨洪水摧毁房屋,不少居民20日夜间至21日凌晨紧急疏散,另有1000人21日晚些时候接到疏散令,今后几天可能还将有大约4000人接到疏散令。气象部门预测,澳大利亚东部地区暴雨还将持续数日。据法新社报道,自18日开始降雨以来,澳大利亚紧急情况应对部门已经接到7000多个求助电话。\n\n日本孩子长大后最想干啥?男孩:公司职员 女孩:糕点师\n据日本《朝日新闻》中文网报道,日本“第一生命保险”不久前公布了对小学3至6年级儿童询问“长大后最想成为什么?”的调查结果,发现男生首选“公司职员”,女生选择最多的是“糕点师”。根据调查结果,男生选择的第1位是“公司职员”,“油管主播”(YouTuber)以微弱之差位居其后。女生选择的第1位是“糕点师”,第2位是“教师”。该调查以日本全国的约1100人为对象,于2020年12月实施。此次是第32次。男生选择的第1位从上次的“足球选手”转为了“公司职员”。“第一生命保险”的负责人对这一结果解释称,“在因疫情而引入远程工作的情况下,或许是因为看到父母在家里工作的样子,而产生了一种亲近感吧”。", + "pub_date_ms": 1616558400002, + "audio": "https://www.listennotes.com/e/p/38cef39a6f64477488fa0ff88bed6e17/", + "audio_length_sec": 536, + "listennotes_url": "https://www.listennotes.com/e/38cef39a6f64477488fa0ff88bed6e17/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/38cef39a6f64477488fa0ff88bed6e17/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "f28e8823de7317903c9a994e562f02a6" + }, + { + "id": "5b8527abc26a47aea5d79849c1577bbe", + "title": "寒食节的传说(二)", + "description": "晋文公多次请介子推出来做官,可介子推每次都不愿意。晋文公很想念他,最后就想了一个办法:他想,介子推藏在山里,我怎么也找不到他。如果我在山里放火,他怕被火烧死,一定会跑出来,这样我就一定能见到他了。可是他没想到,介子推宁愿烧死也不愿意出来做官,晋文公放了火,介子推最后被大火烧死了。晋文公万万没想到他得到的是这样一个悲剧的结果。他因为想念自己的朋友而杀死了自己的朋友,又难过又后悔,生了一场大病,自己也差一点儿死了。\n晋文公为了纪念自己的好朋友介子推,下了一个命令:在每年的农历三月初三这一天,全国的老百姓都不能用火,甚至不能做饭,只能吃做好的食品。因为这一天是他放火烧死自己朋友的日子,他永远后悔这一天。因为法律不准用火,人们只能吃凉的东西,所以历史上这一天就被称作“寒食节”。", + "pub_date_ms": 1616472000003, + "audio": "https://www.listennotes.com/e/p/5b8527abc26a47aea5d79849c1577bbe/", + "audio_length_sec": 913, + "listennotes_url": "https://www.listennotes.com/e/5b8527abc26a47aea5d79849c1577bbe/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/5b8527abc26a47aea5d79849c1577bbe/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "f57e66faffeff030727d85932435c52e" + }, + { + "id": "8fdae88892734896b79395817c061221", + "title": "寒食节的传说(一)", + "description": "传说在中国古代有一个晋国。这个国家遇到了危险,国家的王子逃了出去。在王子的身边有一些很好的朋友和忠诚的读书人陪着他,这些人爱自己的国家,他们支持王子,希望他能努力奋斗,回去救自己的国家。他们在外边受了很多苦,一直逃亡了十九年。这就是历史上的晋文公。\n在国外逃亡期间,晋文公有一个最忠诚的朋友叫介子推。他是一个优秀的读书人,为了自己热爱的祖国,为了帮助晋文公重新回国做国王做了很多努力。他们成功以后,晋文公让伴随他逃亡的人都做了大官。可是没想到,他最好的朋友介子推却坚决拒绝他的邀请,这让晋文公感到很苦恼。无论他怎么劝说,介子推就是不肯出来做官。为了表示自己不愿意出来做官的决心,介子推背着自己的母亲到了山上去隐居。", + "pub_date_ms": 1616212800004, + "audio": "https://www.listennotes.com/e/p/8fdae88892734896b79395817c061221/", + "audio_length_sec": 863, + "listennotes_url": "https://www.listennotes.com/e/8fdae88892734896b79395817c061221/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/8fdae88892734896b79395817c061221/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "a2df1174ce43a2f18a71d288ecc646f7" + }, + { + "id": "0932fa791c6243f3a03ba42da3397369", + "title": "听新闻学汉语 2021年03月19日", + "description": "外交部:疫苗好不好要看是否安全可靠 反对搞疫苗民族主义\n3月15日,外交部发言人赵立坚主持外交部例行记者会。有记者提问:新加坡总理李显龙接受媒体采访时,针对日益政治化的新冠病毒疫苗问题,他表示疫苗不分国籍,没有任何依据可以凭生产国就断言中国疫苗必定好或者不好。他还表示,中国有非常优秀的科学家、生物医药和疫苗研究人员,相信他们有能力生产好的疫苗。中方有何回应?赵立坚表示,疫苗是抗击病毒的利器,是拯救生命的希望,应当服务全世界、造福全人类。无论是哪个国家的疫苗,只要安全可靠,就是好疫苗。中方将继续同各方一道,反对搞疫苗民族主义,不接受制造“免疫鸿沟”,努力推进疫苗在全球范围内的公平分配,携手各国共同战胜疫情。\n\n朝鲜宣布与马来西亚断交\n据朝中社19日报道,朝鲜外务省当天发表声明正式宣布完全断绝与马来西亚的外交关系。声明表示,马来西亚当局17日以涉嫌“非法洗钱”为由将一名无辜的朝鲜公民强行引渡至美国,彻底破坏了两国关系中相互尊重主权的基础,鉴于当前的严重事态,朝方因此决定断绝与“屈服美国强权而对朝鲜做出特大敌对行为”的马来西亚的外交关系。声明称,该朝鲜公民多年在新加坡从事合法对外贸易活动,其涉嫌洗钱是荒唐无稽的捏造和阴谋,马来西亚方面也从未提出过任何确凿证据。声明指出,马来西亚当局盲目追随美国不当的压力,甚至无视公认的国际法,把朝鲜公民当作美国敌视政策的牺牲品。从现在起,马来西亚将要对双方之间可能发生的任何后果负全部责任。声明还警告美国作为这起事件的幕后操纵者也将付出应有的代价。据悉,朝鲜和马来西亚1973年正式建交。\n\n20天逾4万次地震,冰岛人被震到失眠\n据外媒报道,自2月24日冰岛西南部的雷克雅内斯半岛发生5.6级地震以来,该地区余震不断。过去20天,已记录下4万多次地震活动。据路透社16日报道,自2月24日以来,雷克雅内斯半岛发生了40000多次地震,超过了2020年在那里记录的地震总数。冰岛气象局(IMO)火山灾害协调员萨拉•巴索蒂表示:“我们从未见过如此多的地震活动。”如此频繁的地震活动,严重影响了当地居民的睡眠。“这里的每个人都很累,”当地一位名叫古德蒙兹多蒂尔的教师说。“当我晚上上床睡觉的时候,我想的都是:我今晚能睡得着吗?”", + "pub_date_ms": 1616126400000, + "audio": "https://www.listennotes.com/e/p/0932fa791c6243f3a03ba42da3397369/", + "audio_length_sec": 580, + "listennotes_url": "https://www.listennotes.com/e/0932fa791c6243f3a03ba42da3397369/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/0932fa791c6243f3a03ba42da3397369/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "9563923aacc3c0ced1bde1af9c578a14" + }, + { + "id": "7ea1b07350204827a31c9b0995d9ce22", + "title": "我想预订一个双人间", + "description": "服务员:早上好。这里是假日酒店,很高兴为您服务。\n林 娜:早上好。我想预订一个双人间,你们有下周的空房吗?\n服务员:请稍等。让我查一下房间的预订情况。是的,我们有剩余的双人间。请问您要什么样的房间?\n林 娜:我想要一个能看到漂亮风景的房间。\n服务员:我们有一个带漂亮花园风景的房间,可以吗?\n林 娜:棒极了,我就要这间。多少钱?\n服务员:每晚880元,包含早餐。\n林 娜:好的,我们下周一下午两点左右入住,周四早上离开。\n服务员:知道了。请留下您的名字和电话号码。\n林 娜:林娜,一三九五八一六二五一二。", + "pub_date_ms": 1616040000000, + "audio": "https://www.listennotes.com/e/p/7ea1b07350204827a31c9b0995d9ce22/", + "audio_length_sec": 971, + "listennotes_url": "https://www.listennotes.com/e/7ea1b07350204827a31c9b0995d9ce22/", + "image": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "thumbnail": "https://cdn-images-1.listennotes.com/podcasts/learn-chinese-culture-imandarinpodcom-Ac3CZvRgnzL.300x300.jpg", + "maybe_audio_invalid": false, + "listennotes_edit_url": "https://www.listennotes.com/e/7ea1b07350204827a31c9b0995d9ce22/#edit", + "explicit_content": false, + "link": "http://www.imandarinpod.com?utm_source=listennotes.com&utm_campaign=Listen+Notes&utm_medium=website", + "guid_from_rss": "9a3124609346ebf3c52cafbe8d0d1b4a" + } +] diff --git a/server/routers/bushou/images/60px-%E4%B8%80-bigseal.svg.png b/server/routers/bushou/images/60px-%E4%B8%80-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9b97ed7b3f248ebea1b34ca9287cdaf3c0830fe8 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Y)RhkE)4%caKYZ?lNlHo^*mi1 zLoyoQUOn#>5-7v|!QXPJ;gu=7I>hp3EsegvZ14LA(jNL37MXK=WMzpzF!kqh1t-lV ztrJw<;Ldeqrx${nxSNBm0dTQ4t+m6(W`iY!TQh zs3W57=y=qdBZ-O4#Z~d*qn-!0#xo^1o%(&?_=XM7KYe;T$JPY~j(9|Gzb2iL$TNG@ z^XfCnl}jBL%TzFLOEfPFJ)gf-`0)IF{~5Oze9E7^?tRVdv%ChKi!EB3y%wCEWt!5U zJ@@^(rHo|{Sk67L68pF`_3p8GR?;tCtJ@yAw@PgapI^xQ<5p3Rh1We&%DW-#gU?#?`VO;7x9Z+b<;Z!h!ri7WeCU;WYDd(HO&tLg=3n^mtwpMBWb z{4;x{@DEGA^-1r{cPxuxd-v$0*0UEea}W4SpZV@&8Iv|8Z(YSzY1iO?H9K@P=k9KJ z?Dl(A)NMEWdu?`)Z2EqFwflX4#xdbJho_m|^M-|yi^~!F$J%cM^SyuaXGZ`diow&> K&t;ucLK6VZaoIQk literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B8%80-clerical.svg.png b/server/routers/bushou/images/60px-%E4%B8%80-clerical.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0629d7219feb06cfea34d9208e5d51d0fc2e86f3 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PgpoPWQF&5qyg<<^zw9Z42d}W_NuM-;RJyLAM3Z=dNsi$N4gFd>loYxV~!r|zu+n$vqn$Ps$>FRpOV%MvF=-H9kre^SzC_^H0v@xtTVSe zE^GO&lF5lfu|>eCBTaK%x?okOfD`*6jh4U*8O0}blY$N{@M+|#)QQ_zdGN@Q57&0| zYh3m*JZ5lEtoEKU8=K|46O$B=THbtrSTRYasQ<0AN|x_&&xD_sHc7p{8puCk(ec9v zyq27-cWX4d;5$J;OG?X1>+L+Y`XfwX3=ze-)n_He?-ZU^zNW8Qsx~vVPjdRwyXlL= zp5G{x5nI0I!vE!|Qi<(7&S#~cy}qnhukz$Z>Xwtf?@~I2wc<_XZ!B4DsCw_hm$|uH zrtKAOK4Ov3@49^T&Y0`px;X#Gt!MDe$?3|u`0)MYl^ah<7hd|rF9`PMBm18WPs4A| z+BY}G9T?E6C9V-ADTyViR>?)FK#IZ0z{o(?z(m);GQ_~b%E;2n&{EsLz{nC}Q!>*kacg)t>t-ZS1B0ilpUXO@geCwN%GQej literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B8%80-oracle.svg.png b/server/routers/bushou/images/60px-%E4%B8%80-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..21000e20358230d44f211dcd6b7d374939933566 GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k68H_`89Yt%rbyNFFjoxLn02pz2fV|Y$(F;V14Qm`z>>C2^MDZKRh>8{iBoI z(X9{MY?~`sHeL?Y5pDeyE}naI(KN25J1XKi_Owix-lEbX;KZTWB5){vYM4cEbfnhB zKbNZQ&C?QIl-@jIx^h~`D&4uqCYK#0X|B?aa0GD}j+e zHRoF!v>jRcG3xZa6xQF_e$_gviJRWC-s7>Al$5CaVz688e$J}Zo~Bn!>tsH@J2G+e z&8Mq&OnVsl&~4p?$=XkfYRmVlMXgzy7akt&9U6LmD)--?&$lRF4nOi<2<$YcANTDT z9>~pFaJ?)00MOH_C9V-ADTyViR>?)FK#IZ0z|cb1z*N`JB*ehb%Fxux#6a7?z{>%R$aB*Nu!$qUHv1JpLvQJ6rZfZ4o z=VW+xiRj{w?598b8r#SfKQvPCoTTCzCFFbNT}=A6;z_cSvikQ(tPV3_wx@Xn+@!q7y;d&TH+c} zl9E`GYL#4+3Zxi}3=A!F4NPh%8GA&@KF8FKZ? zhL!VN--LDc?swEVl4ocrts=%I>l1Wo1`{%{t;S#hnLb`{%!IG=IMR)=>e@l10;eYt?+al8sUfL+@O6d$cBS zLDI&q9Akfp?Yqn`9yXB{(N(^zbE{;5R$SVRM<P# thQ?M#CfWuDRt5&$cH6m8H00)|WTsW(*6=Hte>+eEgQu&X%Q~loCIDMn-g^K5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B8%80-slip.svg.png b/server/routers/bushou/images/60px-%E4%B8%80-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9d91bda7dc25b77aaa8149c6488c68016b3879 GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJ#8)8Rc%QDVf8-z^Lr$;usQf`0bVRUQB@^$3L!53*$-UT>4~@Ym-Ork;tdF zS@t^47TfEPFSyrf^@?d*J5*w}a40SGbTdg(N#FG1ypv3t0QbzSufJpTV%|M1IA>d+ z-vI_a+RxUjX>4?yD8hMQDf^xWjO$CB4GV+*-BOUWc=_QRJ727gmCfZRjnB$ElXEtm zJ~cmPZM$o;)%7bYlG^#V|NOH&FuDE9gJYgKVs2q?9z1-MU~p8%*vI{yV>8!RmHH4QnV<;t}taM=fE z!Q5>t_@ee6H|mcmJd^vx?Of2IBS%!^D~xMR`ED#1t@GQTKhNm(lgK5#XL+CBdHr8V z5C|q}>|;1rS^VzV?hOjS5L7L3jVMV;EJ?LWE=mPb3`Pcq7Pv#gs;UPSPHxXQV0C&1{<5nF7 zKkcH0#wK=BQAJh;%%WqH@j9}Gf*DAqQvcKfxCO3(y~H-7F{s`-&f9J z(H#@;2e4H)PFd{&pG?35uyO|2bPi*Ln>Tvs4B!Sn5#E6_fE)N&c>B%(Zr~%~g>HB$ zywJc4;i;EUOf3L!I|C$eVJTqiP0J0uBfQWJE4a|WYF>B1q0jJ!@VaZbJK)eOoxpUs z(h2Mi;GP%y3@fxk zFAw_d5%~7+TE?~VX{8T-HSQ`3P7vmA@_zksrDRPSo8RMu#qkMmAMiNzu!~PE43rFC zTPVffx4%1zr|gP5Tl?(O3HxLEZaw(xpU1RLt6<~De-EBmZ~N%jYwMS%C!K%oYSa5% zwpC0v7q{Mh%^c2ZvAV}z>#_P>={wg7t3HNFuydEk+>h6;{b%=CMMlsE=wj6p*NBpo z#FA92leK~!jg?V3$%6G0q@pF~m9S_MTx)KcH@U@nSUC?Z;=pyEYD5Jh}B z_XG5(cfWw*u^+&XAf5z45Iw0B6vc{Sr5N$0u7}BLTsCbs^ZU;vWgnPJll<~~n4Rr1 z6DTPu@nk>n5ts&cM(z@X+d$GBbHHfaI<~9;-tkX30bT<`F-uu8!T+-9xDl#AHPjb1 zxzy(GXM?r~#2_$F{tSNw211kwIl~u#wQXJ-0FH+!5mNZd60a|-%X$P@Apdes#~Ywx zT_n^DU+v(#wgGkfD)v->S1dle>6nVtQOZ#|lTCoH;xn88Pb2j8<{aJ0ro-favgIZ1`>1$P z(jpL5U>3g_ei6L22V?ljrem+VnAIhHMwD|}l=BxW;gh1AQ=%MG)&sxLT+$6-m9m`0 z3?IYoPAaGY2SizbjqnL^-VtS(h48pIZ%mvgWfSll&H7EpOJzaz43DDUm)e1QE|;Jd zJ}Axu*KwaROo`RO*ltyjQn&&f66UostO`;Jj{qBmd97?$1u2F12(z+mQ3WZ5W$P@5 zc4tzBQ3~%8W@YI~Vc9y%L3Wg?6kaFH%JM@Mq!hONoyK=nkWyH-&T?p|f|SBPg;`lX zsDhNjUxZm%-m8N8MfjO2NGWW!k30w5SA{8s9|^NsnZ!x=9Gh`>Q{`^QbWnpXxQR}7 z2Djzg(^PTm%~y5-x82(p4B^gqeS~iXZ|%u2@Rsgm9|9}GSN5llySo;VodveWD63)| z_u${@x}AtqQ_FRh-khIrzRw)hq1R$O0UiUNaBH&$tj0;s0C$0Fz=Hr?N=lX+e*iT* VTM81aR@(po002ovPDHLkV1iWoP{#lO literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B8%B6-seal.svg.png b/server/routers/bushou/images/60px-%E4%B8%B6-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..eec00113f4a13a3feaf5e50603035103768374bd GIT binary patch literal 686 zcmV;f0#W^mP)AjbT?hzP#>VbIK~Rg3Lj{wIYq7VOyUoTO z_q{i+%nyd+_IBR<|2uDnxtWDPAP@-LNEh(Zw+Kt-fIZ-Wb;ITjws;4;02Ztp_GS1@ z>+`**_DvZC{s0khgujPw#wxMdq)b~j?&Ik$c6?v{qw=h8wFv<i1An;MhY#%{Q@!i1Y)GnGAz+M5?PW$ z%kV>i7%J;&EyLoIjTBmjPX%H$1!APoGTab|aV8MMj0(5=TljY=)hyiv_6yWML8*r| z*U~!$>ej_nbf9VYOM$wd#Z(wlBYuCwb?jbZaO9%J2iy&BdQmDw75Gkmvpc|m7o~!X zkWyTCV!Zx#dsfx!Lb3dfns Ua(kmCEdT%j07*qoM6N<$f=3894*&oF literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B8%BF-bigseal.svg.png b/server/routers/bushou/images/60px-%E4%B8%BF-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2f42ace7d26d8065e2f1b558c2e2b6a87b6bcd7f GIT binary patch literal 750 zcmVzR z#6q;Ru+dtq1PifHY$Tv4L4>HmU=*=3M2wOs3GoqKi|cad-dTjvbN0-P`KmdAd-%V- zleu$e24*P)r-2W^1?wQ~;x*6!egZ3vv#3)6W^lp{V0)Iqb2JhuQw2H_^|CC3izvJx zs>iboE~4@iKG#8TiC zFoHjg$AI0Ip){xg7lF@s(FSmz@D8i+tOKqB-w8!0fFl(12B{@$fGea$f8c(AZo6o* zEC((D-v~t;z&&8IT{Ky$z*%6DwCDh^%Pg4!8-S;zMMr_dz+Ag%@*D@I2}Q?$|9!q; zE)`Cap4ID==z^4FAMT3V6nzKmH%+8SCvFSZlzl=;XSK;0yzC^f+BS|Zi-C`L;q$g} z^f`u?odLRR ziJZSHk~pQeC62G*wuq&s4?n{_##z+q!hf#t*f>jDIESCz1IAg}!Vpfjpa0-PPjH_w g43oaonk6s%0yYV+0XY^cL;wH)07*qoM6N<$f_1uC)&Kwi literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B8%BF-seal.svg.png b/server/routers/bushou/images/60px-%E4%B8%BF-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..91427b90410f8fb4c433d95b3c9f4f2bec20554a GIT binary patch literal 687 zcmV;g0#N;lP)Jrkg#?Kj5kYWb zzy+B20Y(R7LYP>LOfF7rnmGAG4FABvL;|>*I2cC31U=?Vb9*=$NglCjYwgJ3X z1z%JJiRm%(m?}6{;a)S#dd4bjSNNAII9B27X8x)QZWrM%s^D0KZ=3nEDmYf*VKaYl zX;BiLzz*3Sd;nZ^Z4{WhDnkDQ@|ei)A^le zp-}VyFUgCh$3w?na;^X`fS)v%ou?wt!M(t9V1wqO>6N+5tDu5zU>aBe4rwjA1 z$;IfNU#&3Md*KGK0^IQ|6_R=Kvg;I|Z!1F|#cgNGwNYRu$jdJJ)(Ov3^1|c3b&9C> zzmb3b-UdF2^Z%QW!b>E3Zd8O6UKVFdPzv8TJyI$!JYeQcVYUpV@GUd13$tY?h3$`R zKZMybl){5%uDr1QAKnsX%TNmUoB2SPEkh}6UvbJ_Vk=P!+s_nsh1oJf3RnJ=w!%@K z(n|Kp9t-!JyR<~L!k0*XY)?57<;qbB+bi^rC|6D>;mWUYpPBbXxpG3SaI{xwmGEUV zABuA2sD%HRIocQ5D&dc2UK8a;%>vnt$0O%1r7#BkCiyP1tv^>d52F3dETQRM5t-wxv#xp#?LtMf2*605Pllit_sudu&7o}4pVSZm_AvoC5>LZz;~?7 z3OXSx&@g-wExZL^F;J)_ja9<*bHmT(V~)j|cl7d%fYtx%&>@vFj;jq%9r8RUBVe`R zxkH{OWdy7?ykp4ot1=ZyEYQ4~K1=G-l^oH`(C3S_j5_l~7akNVt+lmsMwh7~8PIOs zTeWgVpMx5+_Z21sGUyh|$hP6twQ@$EevR2P#adE0D$KqW6W5sMhA@1%T1W=nVu3M; zzG5vY%+rkDnN=b(*V5Bk_m3iZS3;)Y_TKkeV$46tH2l7GzmpjA4>AqE7UQ=kF=jb$ zaIacKCYMDkr{$r4Cp+VDyLDfa9QPO5hTB`gj;JTms1HxC2wsu391yFn zjRmnw*dV&~>1rWabm6hsIi>H3tIDN4*d$C}D$ke(>Nx& z_HiBZnwo{D!t}mkEorP2b*GPFHP#XIi_-y5uvdq4?~P&-YiCDR)XK?Wx2E{^1^a8| oFE-- z{?B&LAAC2r+5h(F=jwguKmWC}ztL|ivb1NzDGT$J7Y_;633IT7y<8gQ`CUqeW693b ziL$ckO}xj0OM=!Ne!bKA)JMy88unGHu}fs@&lRfHH90Qde`(#>FJ^X|!FT~iKx{_UYRRsFxjw-oE8t<(Rm z_2It$>vogayA2!cqZw$BTf z3rGDhxj*;ax$n*zw z8`c|H4}IWSyVrXHDDkM4xJHzuB$lLFB^RXvDF!10LknF4LtO*&5CdZ?BLgcF6Kw+n mD+7a?rhlLWi_nmppOTqYiCY8jeYYJz4Gf;HelF{r5}E*JgHy%; literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B9%99-oracle.svg.png b/server/routers/bushou/images/60px-%E4%B9%99-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..29a8bb5aa4bece6882a34d2b1e861b4217ffe31a GIT binary patch literal 628 zcmV-)0*n2LP))KYINEhKQ6xTpWZ96>~HNAslpRl6L|?jkBa0GGfq&}r@>;T0i#3Cx+hNGJh&gz!J$xwnpnDY9K&GIx5MIAH=7$9GCEcIJbscxO#^5U7TA(EnG?K zu{gJeTKF`rm1|#hhq#2>#kn=q!qrQ;EY7vj1Dq2Fc+N9%DNDr7!-yl?@mJnY>!cyu zBD|AUi?D-Hvd5O5nY&160)7(0Gv+Qb-V(y{Gc6axgzyFM(A-7F1|co|@N$0nzf0?w zv4fO0;wEC-T|~(;@dSYEc}w^2*?HmtwWsDDGMb40Aokw$!h(W=|8fQPNMIVbC_NYe O0000j@$p5XMalFUtDXJ8;9ZyftHtt zTNku&+Qo1-e#zfjqTeKtx1?9W&2hI_<5o_2oB9RIocAe;x{E)W+nm~GRrCIk@$C11 z66}i4-6?*zQ`{!<>eTX8l`gyjf(!xznFqXk{ycugc)TU#hp$6x?x~!>w8^30F8^F0 zrsS7j;8OGGZ2cXNoLcikaWdUc-gBMXRHOaHUFzMh{>^)yiu#|7DYSQ13bt@llby;t8<+j>FHlXk<{en9TJeddYp9ynomoE@at~>A{YG%OJ z7QKaKlgwe-S&7+=|Z^+P0}-- zw*>FYP(NOry~NjYneZ*i{mEZ1cs@Fs3rq~EC9V-ADTyViR>?)FK#IZ0z|dUR0Eo;& w49u(yjI4|dwG9lc3=G_S8#qxk6{vy1)78&qol`;+02CxGxc~qF literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%B9%99-silk.svg.png b/server/routers/bushou/images/60px-%E4%B9%99-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd0cc4336f47912ecdfc3238af60eb28394cc7c GIT binary patch literal 853 zcmV-b1FHOqP)E# zq(af4H;Vs&2u4t1H`1jFO$ZYBGEnq-;Y}oH2qp!QilRB>ON73g2OuO_56N&ul=%~^-xmMP&C(Jj3zvXHvEI3I*j?qvKVJ@Z@AsT&-ff$unH~N z)Ft2veB*)PSi6Bk*nrkNGV4n#c4JU&*b8PlCfUg>^02Ds4E%A#SQPxDJm5! zh4pdl({f=(UCF4nbljO!R4QH*H+xnC-n-2>EpB*iMqSC+EN=EtPEn~?j9V(r{)s2^ z$x1_$c-CVOFJ;t~jCaJR@~1gPrQ&Jf>uIdn(;9H0-;AGBn*A5gXVjI99pY2DJEy2r zyddm2j5T{ic!)I=E#fKJzp)^ru4HTzpUQ9K6qSl+#6K_&XVjFG11in-p*^RlRCJ1O zo^8r0DkYz(Gk~J!??iU&LbP78gM=>WwfNrDB4#}`(B5cI( z#O)DU-XHIv$<$wr{h;_2rzSDZR9J!@bdBlnPZ8`Rl?#NYQUt2P+qkaswz@1)f?;bU z*q7>40#%FUY8TMFn=0_?DgnR7vkBrY!+y1kW!3@eu927)O z#pEEq6JCLj#d5O^+lBPcM5g;Cd@nrVU&q{3!itz8?ZU3ZBFr1^8^9mJPU3Guopnh` fNl8gbNrQ7Ax6_AK!guM?00000NkvXXu0mjfn6RR) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%85-seal.svg.png b/server/routers/bushou/images/60px-%E4%BA%85-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f2b93b32ad40e714cb447529887482fd8c0e88 GIT binary patch literal 911 zcmV;A191F_P)Gf z$BBnFiT%|;CSCP)6~jExhp(aEdS9xhtE;A zNRjQpPsYQJ25$6eN{e~G5b>}hz%8GqG`Wfy_A{{3rztI3F~eqo9X?HIQ31Tf41C(B zDNT-HhP?)q`81_PJupB#>=$5;Pg9zl!R+1RUL7e?3k(wv+Xs}pZfJ^Y!GvrEs>Qua z!0+^}q{DgQz55-Qq0vw%J=`Md>%b?ChC&IvP}H}*xJVKC!fN*FMwtfUVKbVIg)pS& ziu#piV<84E`W}|k&uh)bLI^xl)IT&E3n6e;)U}$8g%DVx>M4Z4@{4M=W@8})elO~! zURWiqURm)&`Y!$3SmeC+!OU4FD_E#0P!AvJ&Nyz*Gkwol--z(e}U59Oi~xp<07NYo8mN zZh4HkpS&WW);Xbb*M&jXT)+&xGojXe%n`H7fyXgi%)|Hd+>@Jfg^~ff#J$4_wbW?B z?BRJ}rAiz1&hy4(oPHJ?C^_4(lchy+)z+ z3z%l<(J2cs1Giaf$`w?rr5@mJNcUlGuWq%}>=*TFOFh8t@~}tLZ6y2R8YL&{W(%z` zTn4@)>N?!6YwKNzxD0#)vsXGS^n(9?_#^O8+}lL5?V57TxBO5NQxex(JeNgX2AoKs zvjKBM;YAWd+Eig4J<2lqBZFO-(_FB}4o_j4eL~?M4%_lP|J1!rcT@n+F-<=J7ESQ% zZt|a^b@nZ-#ahg*pAn+-&ON|Uq9IyGv`w@QxI*-n&)2)o&ueM0pZGE_$(04xr)}JZ zcFa@llevOh{1?I+;2Dz(ngdSyFzbp+;0W-BiNn4Hc4-+&`y6sPu!ZPtyo~5TOEvI; lXtmW%bUu1GWnU$VhQB~-E#ToR4l@7%002ovPDHLkV1l-hq^bY_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%8C-bigseal.svg.png b/server/routers/bushou/images/60px-%E4%BA%8C-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1be2bebe0f2b8c7a16ee90e8cb36c636e0ac934b GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k673l#4JuvZI)zUU`+IMaSVw#{PxCKKjA=;10Ut(m&#w8=49Tnd)AMQ<`Z`m z9Gz!w_>u9(PnJy&Sz~@EsqAUU`_TeyzyTJT6j!*gk7ljZ--GftkF^LzeD z%i_t^oJ|Tl^3U8Ydf!@ZW+FPrQ$^@_kou-O6N_ahylOs@FynsVKmGMvG>vy8%lvw@ z_?pVCMeob6{p}j04+s;R8-^^7_ZLa*qi*@+V>s9?(u4g2>cZNli0tXoVIA6{pCDou2%!TbJiQ3aY88 z*(IRIcQk+RtiZzkeO=Sjl>R0j|CZ4!U;TJuXsBpt>E~C|Z;RAVzpJw%R&v$!Y)y;e zqMgzgE>C=QO6KP?hiLPE&lNb{>F;MWVt*I?vE$uRVEC(+xJHzuB$lLFB^RXvDF!10 zLknF46I}!I5Ca1%BO@zQGi@Nlz+eH>Jy5(NH00)|WTsW()^IUC%?+r5!PC{xWt~$( F699z}@BIJ( literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%8C-bronze.svg.png b/server/routers/bushou/images/60px-%E4%BA%8C-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f65fe2c84e356a7fea4aa29f103f68f876e89394 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k67557)rqaTqT)(TuXp4~NnL#qeLy|H`9xkt>iy;&AxVL!>d`L7iYZQ z^5xCTtk*9xyx+dceCaLIkt!7>Wq0e(SFv|h@49miJ?{M)`0;V4c6}dzfW+_I`Qj_n z7w_u2eoal~c4&C;=ErNpR~?_f`N_ogY5y`_wz=qtd0#0y`*2%zRjBxy-D@Ywi=O2_ zf2FXLTm31@X&Va3rkmkb}COxafZ=@R$b#h3Z_%nsUex8(VXAHS~{m8xwm)Y$j@v&hw} z7fUMd2fzQSzRuU?XKZNrouXQcMaH3D6u$8>)pTv^i&(Yt|qdn#JYl0RkrDvpTLte>oNrv){~sA(={f^8c4Ul`qN*w zb-VHWv}bcJ>NGki2yn0@o#VN3YlCL;CAFRfow3n%d~O!f{XJ{ed^R#_f4*{_@vM8* zPgj=xKeYIi-fZLCb6X;(`$&69^tR8F-|JgiJE8b&6KiT}Yva;K?fiS4ZBs7Fn#YRs zn!IKY+q?Nm>(so5tL1iU7d!P!z51Auk+EX+%G)pYZn0W;Zg={g{LiwJdm|ov|C+by z?Uc_an8P2X|K4W0HRtxGWodWYd|#W@+Rv@6xn^-|U)v`!4i={6_kYQppJ9?=Y2o`& zuvm%Jbz)QHX0=D=*7vF&eO=IUJh}5+;FSN#%~#4!2Wd?V@LN*wBJjx}`)`ZB{}z@r zQx39ubTQ+R*@{(JH&5SN=r=pmNO}E|B}){h8nF6`W`~7_gw$-gymyuO-M+)(J7-v2 zw_Y_ZG*oBxs$bu>zb!c|eVDW5+nOUnvInF72M2H5|M%p!+D=ug2OC7#SE^=o*;n8k&R{m{^&ZTA7$=8yHv_7cptHiCr(#&`Z PPy>UftDnm{r-UW|dUzpf literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%8C-seal.svg.png b/server/routers/bushou/images/60px-%E4%BA%8C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdc9fc178c5ec7a6d0ea11303461635cd18ac09 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k67557|e_f&o2iG9rAQ>42d}W_J$)@lY_{ykNeeJw`?fh@|N%IF1O{Gw*T9s~*&e@eDw5n?ImF*_G`KC zZyeR@6cYStU9RxG=SGs)UO_QmvAUQh^kMk%6Iwu7QcJfq965k(Ggg pm8pp~kTfvhju1{k(U6;;l9^VCTSFD=>Ki}}44$rjF6*2UngGz0nYI7` literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%8C-silk.svg.png b/server/routers/bushou/images/60px-%E4%BA%8C-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..261d6baf84cb7d8b118c00000ce4b1e425e81f88 GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k674Q7{!y$O#<4=l;r8+7!q;#?ex=r!hsSE`@N1fv1#-PsxA$1>fDjBx+y?^ z?FA|E6K!+Z#PvG#1MVMa-L1CE;NsLy#iS3cCW?w~Joluk9ecK1^T?g*p>QoCdJT8h zqorGnFKe#;d^T;;&YGFV|KBz^C} z#h&}-_xq}8r+;h}GJkyF7~`6f&Ed!X@-a!PSB36B-Xv>n_GX5NUG|^aMJ{&^1kT~P z;J%@P&ImqI6Sq9E?bPQDeVctIX)6CY zqVl+FaiwsUWMWf^XJTJw&5f-(mV0Y7SN=IAB7S3SZRp#ZAv;g$wi$-35A_k9xG!~1 z?A74BkadQa=KNQ-lP_%E{Y0y7_e5I{k2e}i^4dfkFV#Qa$Z7ujSkEm< zSU6WqMPyH8V(XNWUf6eNTP9GrXRRp_gdFApBEtW&DpF0=Z`)a^&5a^@U4 zTBve#mxSlE%EPikUTloqa(j3#t#R1qG{eAA$;Cr+?#>>bM+d!^``qMrV&M>0Ix}fj z;(9stJR6ybS6i=h2s}__Jd|?PccyjWqeH&(w^M8G7N=Dn;$HORYTtINJv$06Ydg<) zXvjbFq2&FoE0X4){`SD8@XwruakoEJu3chuD)iT?&5RjJAt5uL+AZHY!^CUpxxMvm z^F-HO*k!tVWu2VJ6V4iwoVUx)9+Ke93pX?6Vqt1@P?&I1U&DoSfy}1~ptP-8;u=ws zl30>zm0Xkxq!^403@vmGOmq#*Lkvu;3=FM|jI|96tPBjgWhV%rXvob^$xN%nt>Kr0 R#u}go22WQ%mvv4FO#m1vU~&Ke literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%8C-slip.svg.png b/server/routers/bushou/images/60px-%E4%BA%8C-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d35675152d57b34d48fcc9f69cc1e77e4c6fbe GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k674Q7{!y$O#<4=c+JzrF(l&f+pA~2rvyqIdw9CvLt6d#f;LUnl{_gDN;%4& zxu;Suu5)F58?{aIMSsR~tELV!N9&1Mp<7lgS>el88{z9~oVDa}##xPRCkkA)NG=bX zcYkxG{kh_I-|x)%eussr(Lq6gBS+$umW=qu;FuUEm$?$NO!W6@Yc)jL_f)CG&Mw&8 z9JH(SwsxZTQEyGjf}`hO*{-;rf52Fk`}MlzLRU|HlV0gqu=3umxZbOK<+3z(%YXN} zHf7TL8Ro5PyOnRbZ0+jI6urJ9>DlLX>s9ycdD!f4HL?8s0>$~-UsgIE%9FiSYPrPu zh;Z}O+;tsxm4~|?w)3<6^Y_RR+U^}P+wJ0}iiD_>bM|<$vQAd>xvC~Jb;_ho{<~!# zh3YKLIJAQ^GBUn);^b+QH*eVXf$_M^#7mKd31P?P%<1XrpSL@|q*80H=^uZlNBO4j zzg&vkd*8JE`k!Y_J!=e;KY1EiO|cfFl*)-->K z+Frd~PitpB=}}BS^?aT49o6KxiVdsgzE)l5?&5jtw7?c{P_vjB>}NRs?XS&j!S_|b zNLMX!jVMV;EJ?LWE=mPb3`Pcq7PmdKI;Vst04K926aWAK literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%A0-seal.svg.png b/server/routers/bushou/images/60px-%E4%BA%A0-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef1186e6e2feaccbb38ab1e5168a94d0558651d GIT binary patch literal 1015 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~IpcjTzR#0dey*7>TcH@JTDyM;LHr( z*|kV!X{(FlPL9mP1Qy@M#(?go6=tnZoYFcrEO6Zsx+x=2u|;xfq}S3(R{*~~A* z4laD!mmq2*p1E{wQ@F*A#DmMHFu&>FQ+nB1UG~q$V&S(3&;CB)*0s*jYGwM|suV%q zFUMTn!tLYwBIfOzv8g|7na@J*(gx`_v2sRprQ(iG{Hi*AMT)lHs~yL!oeDq9&scUt zYFpRA84s&6Q=EIAx}Ezp<)p;xI-^O)*G;{Cz-dmL*0e7to{H#m{COTa&8EVA%5RPB z8lD%{&tQx5-k+Eq?xD@(C|;VP{`U2f&g?fPW*2Vpq?vIZ~aPkNwq^+D6m!sBf`zto>foe1apmU3eD)pETJB}Z1UvU8^--znJrbCUN5 zVV3O5O^Fqs+Ya6DuiN^dfKSLk#^VN4S<2BGaecc4m54K1tle*14(__uq5N{5!PKb2 zBg=x^#imDXn3gHFQSGyV;X<=VUtIprGFxYs)PD1$!l7AzLb>=Xecq!C8<`)MX5lF!N|bSLf61h*U%!w(A3J*(8|C-+rR)w{<~q(grXrg aKP5A*61Rr_)&@JE1_n=8KbLh*2~7aX6}<-l literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%BA-bigseal.svg.png b/server/routers/bushou/images/60px-%E4%BA%BA-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..16b344077bf344ba0370fb5440cb86ffe4cbf4a3 GIT binary patch literal 1075 zcmV-31kC%1P)x*KAqM#z8ZhS1< zbf;oLD1wWk>(-4f6m;Rjg`gl77j>bnBD7+q@ezs97PMkf7nasyYfNq9;> z9n32mHH<5oZX74D9gku~rxMJ;05)SUPHS&|3On&EZo}Cf$ut8)cnTlmZ|%*`;5a_O z7OZ!MyaB857~aRUe>XpaKd~Fn;{mMfK)y-o$9;HJxU0`)zHv-otMC!%sXpa&EEDeT z&tVsi_;2&y;&CibkwB;4y&eqXM%++8uEoV|uARU`n5-R%BVSbn^2T-l&h)l@<9v8HT?4>s4h1&PtR> z8G3MjbgZc7b5tlle>VH)=GFDr0imEdUP-1UxC9&V8a~Bu=2vk|Vl>kEGWy$4HK{L* z%kU;nnxDbOaR{&D?iRgYqH9){Nhs%%z78K^aE@z^;yZj(f1Sh^_^Hjcy|^ek?{t+| zpbtNoJ#+i84fhMnd?8%eqSaLu*Jj1!Ucr@%)EsWn9G&~}YMIbX?CnIFYjx=iuTe}a zRT;RUMfcJ&A~_0=*x+GdHzNfDE$35ZL~5FX>XBU(y>M*6dfE#KDBxar>s!awfgu zcsU;wOsAq2jZ5pMHXK(!2NG+?hP!5lhof;$!_#F&a?Wtd8y3YLR97tN9>t>L^Mu+B z{RUmJq(_9U8bWn7o=}_6j&0BtOFG_3oKUj#n}fJS?TRHGZ^!IPsM{c(;nI1hGTe*1 zqVt`JbYtQj%KowsaS!yBXVcA=}En%M9K8T9AP<(j`< zW^hNQI8R0~PAL{5mGV-QNb2w2n0s}>p4N!s>^__^)-{TTbH-{*kMQ-=NMN_To8x_o zPXxV?F;-hPMZu>P%gS7gMKSlQu={YUP|r4kKT}cMmlc=w`YM8s;@2qX4%PLU?@=`T zPVRt1_%RANrntG5o8^kF*3-BpSFk~$%NO@<+dWT}n{A4-JSIaIv|ngsH-d}{&r^1S zmH0!^^p?~?-i^dRF?Y|m3Z6Fm0o7!M$U4n(ZmUGkJT8)D!eh#@>Gx6wxLK%~yNN-3 tri**VIjG?Y;RbpH*LOCZC6=h1e*h_zHxVWkjH3Vm002ovPDHLkV1mUy3xNOt literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%BA-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E4%BA%BA-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f257df9eaab00db33f6e210128f1413e7e3f9ccd GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k68IQRM=Mj{|hvf$=K7yF(l&f+Z(A{;ry%&@?!aD_~I6hH2DE81}mZ7eRi@?PN3#Cp=`g8Xm zzEjv$vgbKxW!lFXrw#1i?R-DC`h4@>8^wk5QuA0C%N0~CHb>Wo|2V&&hgnhX*5Pc1 zm_>J`{w=%CVV-;aht{I`rMon?HFMAOy?ls8{LPDJJP{s33$Jw5J-Oi2!zTTMp*gao zi;qj^h0?oEw%qkjC(`bP@_abGFh1g9z}e*XI=6{WW9QBMqIY^x(dnIM^==(h_S?1i zw#I?Vqp7URFMlbWEhObCa8LNr)I*EKKIF0__C_tx+*>>6)7fc8{R&?)A|r!#9W}qR za&>jU{(h}Hdw;VtewQd=_qce5m{|U~qiQ<+lz0I+X@qy;+ZJl}-v}%u5wfZY_biV!G`*Yc^ zHFg2^YaV(r#Qmya|72cqM{XTMi)Xb3PmNL@zdZB3w`&AX>Yr-J5cm-IAUVKzo^peS zlFY_*Z-HrLx1K%|R!sP|zsbAdyyJn>9EMDt&n^4ve{bCW$lS>3wM=cR95DScsFt`! zl%ynbP0l+XkK!`V## literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%BA-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E4%BA%BA-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd555e4ae2ea96f222b1a8eac88a48f5146b467 GIT binary patch literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k68IQRM=Mj{|hvfsle04F(l&f+Z+BJVWBd|KK2{mS|V}Hhj)c)X42+~k+(YZ zTrY?T3FbDf;85Yn5zcG5rPg7x_KHH(t`niGiWXM01&efaHVOVuY3{k;(QEwJ;@0}3 zcl6#@-=BGu^?aqdU3uaAO0nLsv%#y?5abI2HJ}h5k@y;S~`ni|~ z(_=I*D*8xlIlM{c#ZM+ z@JmVNA~VFhza12+vC*xVFR*UvThU{uX0BcKs`p4;!M>dHzxV8TrF-8==)`kR*rH$6Y- zb2RovPIge!@`HO_4|)pUX9+CSU-JK0eM7pq@14nZh54r+`{;kN;1mi!_)u%t>$|Jv zemoKiJ}O#Lr6&8sT=+%y$Kwm`SuK&X;FKN!?(l`okpbc3h$U zQug?7#&PR+Og1pY}g=t*bi1M5j|IbF#AT{+8`6^`CN*XK!`w zkf}bgYT8fl8?!eR>zZ!uNl>t#A^0Z8eQw5fgJ>Q0&95}Sx0>IcSZQ&-ZEI+I%g!>M zm3E3e+mt`|A6nD<^Wb~#hwXoY)58N-{V=G1#@}L)9-UXvzS(KV+~vQnu9$vT^w9dR z({}eeRiEL0=<`m=I{$Y#NBpz*DeGqn9cujZqV9Uj%%!UwUv}*i?%SE#tIk`!rtFoy z-RGx1yKXD60h6O@iEBhjN@7W>RdP`(kYX@0FtpG$Fx53Q2{Ev+GB&d^Fw-_Lure@U h=4f7kq9HdwB{QuOw}zrnYZ;&h22WQ%mvv4FO#rxheJub0 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%BA-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E4%BA%BA-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee63cc466169ae9827c50c08b8789c3cb721a21 GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k68IQR5<+HFSs!bZg0lYavO= z$@AGah}19#av${C5Fn`H%GG@(ENQ7(Q%B2@L)>vqUS&CtcB~dIXg||4{qO3##&7EW z7(YKVPqyRh>M6@lnPx9}lf-Qzz`^p^Y~$uVTQ)RtR^L$a?G*L7dFUMb0;YpKyep2M zQeTts?svbs=|;|LqBG(yKaew<8Fu7y+Cj~2ni}p#Y6olI7~V`fv*58#>akmW%N9RL z6G^?npP2nC_^qqf0$#T#a}#DNp4!#7I72aDWBLASzS6!^Gj~+^=l5^m^}GGoA&V? zMQ?Tj(W+$s=j;#9H|&1A(v0(6*JSOuEb7+I6j_ z|1w_cziIMMt&_jOx_^H2n>x!P<28(ZI}_V=HrCC%$M7kjYTEl;;km$=Q!R0gC`m~y zNwrEYN(E93Mh1o!x(24Yh9)5f7FNb)Rt6T@1_o9J2Epb({-S8e%}>cptHiBADa!$v Qx)>NdUHx3vIVCg!0LFU@4FCWD literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%BA-bronze.svg.png b/server/routers/bushou/images/60px-%E4%BA%BA-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0cd5886fa05d1b62cecbd6d8c210f8fc6e3292 GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k63xdB-Ebfw>|>OvwONYhD02Gdt<+UaG=P6kNT{_u0k_9j(C^~2}>MVcyY%H zotBfcB%FC%8e4YEc#-hv*^@U<9wbNdJDvy!gyq*PJx-U45j|hw%GR?8iC;Cf)m} zE5hYEb$ZOC7Iuy7sD&Mcll?TSF0yHh$j@Br&BQlp^hi2(W*5ELJFDcB=SJZ_YZ|ww-01E*G;?}_`$?-;U;8S{TDCNYzL}NQ z9QrM-SV*OVP$gnVVAL5~KD1AGzq={`Ca^`%jmDh%oJ>1tkzZ=NCc8xDs@^a4R`b)odbh}&m=DoLm-P2~ir`bN> zsi-=i&Z7O%Rp*r+yn4GJ{_yL2r87gr`*$t+xnC)YM=$szd)uV=f`j@ye#}24`*!{< zn?29P=X~cr_p5Y=9rJ=G4|n{Qt(HE%V%J-TJ$DNysV?Z@FPs$`mf@~_R9~n}d!g&S z!dze~Q7v(eC`m~yNwrEYN(E93Mh1o!x(24YhQ=XAMpi~9R>tPq1_o9J1}B_veL>NX bo1c=IR*74~PPrrxpaup{S3j3^P6;usQf`0Wk*oZdj0V;}poX1AI7M%VB5h}hN9I`N3A zn~G2mTl2z=hEh60N`{df%^oT|W}P89JVMQUVr+|+xX%94wtDTi^qmXeZvFDga(SoS z?aE2t|30g%f4=8=Ip6B2i&YDr$H!m1bS2n!-Biz-n{&K43tTJKn%eKUJELIPnd5x( zOP;akfAifDp!8WZ@zSzC4|rD{x+*lYz2*J3C-ZNH1}c5FQ*4>_uV%lGMZYze8UMDkEd{IWtn~MsVYXB8 z`TNeP>T1hd%W0PbZOj7Yd!<+DuRroY%)KCe-e(c(%gx_knLm4I^IUh^GWPjLaxZ_L zleuLn+jc9pJ24N|I-8pQSkODKV)KF9jpZv39xqIuXdbY>*lDd{R>*Iq@`xK##cUK} zqMnrgT)FMa$*m!Czb#G_Uc;duWX@E5=hMc6$rh$N&K_mUH;-F-Pwrn?oRrwN=lMm^ zS6cS{c~EyT;OmmuXY++wl~oVaO8i}aV6TKW<2y~(xbBZa4=m42V>o~9;pzuZ9!R=y zeyGs=5WYsA@t>2idClp`J65y&C|-HQ^r}&3Wt^Jf_t`VAo-RCHciwDu)Xrb5-F9^f zk|u9A17lsa#5JNMC9x#cD!C{XNHG{07+UBWnCTjrh8UVznV49a8fqIDSQ!}jeQ@_g e(U6;;l9^VCTZ8@D|6hR`7(8A5T-G@yGywoA=Pu&_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BA%BA-seal.svg.png b/server/routers/bushou/images/60px-%E4%BA%BA-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b96e75868296ea3a24596070313a6c5e443dbf80 GIT binary patch literal 1052 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E4%BB%8C-oracle.svg.png b/server/routers/bushou/images/60px-%E4%BB%8C-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..88d2512ce42d7c6c8c5c7ddb2f963f5dbcf7ce0a GIT binary patch literal 955 zcmV;s14R6ZP)uFD2j?Q+eJu0w6h_wC@7-Bh!*`27+LgVStMyXEzS&c?>*OP#`~Q)&g27k zGv|Dt@9Vig=bZ1rEIDHn@ESM;%(bk=ICFpjAfC8lK-j7x!?cnzo4jrTr8Y&GViE8a z-EbVZ1{B+qW`+~^n@wKF?MahoGcZni!*O7*ErF7h1JBUS{RBRFej5R*?Z}j)8{O<6 zuo^h%({>Liv7%If{pf~112u{E2r%Z;=V;EA3a|nAh1XMcuki;X^>>KjPZa4gUt#8dEAj z1?mm#eQu)}#D-9Jf!B185v4+0BG?S768(7|2Ud!z6rv9OR(?qKOTZ}b$CIa1PNocD z;4S+1wrZOB4tR2n01E=E6r=d(ZzowX&s3cW#nIN&=8XeifK^r% z8KepSDq_s0C{sjG`(A#AXVA^w zM&B`sp#Nh!awk)U<)~V()5LJ%cRx;h`hFmf78k|9b@b8QmnLQf`eB!CW@XB89^Gtj z25~)}m~*BCN>Ybz_7$)&gV<`^Z|slE@R?VL)DEY!0$7tS$ip#D{1#b>vNWTQZgZA7 z!oWL6e5<5DNy^a=w{%Z4*Dgnn8zSlqa0Iv6_rSaW`7S2%JPj^Qo+aqh$Dqd*!l?Jb zn}B(YZ~?d3JE%&2P$H=2YN{KjL z5WmRI(i(8_s=`9=+!Boy&KDK;v|KdocqQQKHpP*JbrGxVDZWSn&k(6o@0?!m`uyHN zKha8ioAGD9iU0SW{mi$2Zsq;TdH+8jSo4pu^pYfR1w*^*w~gEd0@~htZR3n~%#sM$ zz~9GckS6aFlJH&i`P=5$C7H+GlXeM;|S2IkADWLG+7a-6bi#ZS%f! z7#cm4oP5X8V#%SyW}jsh?KV_hnqJ7Lm}j8Q^CoW-$Hys4*HSE_nSVas7x zA=j{+6b{29&lK$E^R=8PO1M>8`bGJZ3_qLo{C19yg_q7bwQjT*=6#Udvcs=6K1VlS z;1Or{@*}${OjMsvn>pv(Bq{qFYQ=r})glMIj!k&(n4K)Ng8b!zCFPwK*J$aFJF4DNk$S5rd~J`Sk)zaY`>pd5 zTPh4w`8LeuQIhsMz3Xy`(01FktFyU_-*8J+ci1@1(SKzr^`qwmyR~x0;)WB26}Li7 z_c&W@VQ;nV6*#<1dEUN)FG@0gtcGuQv}Fs{OgQ|mwZCb>9)N1 z(0sR9;QPN#5B+BB-@UNpgXg}YZ7S81A4N~RmL9h4D>n2OC7#SE^=o%R68XJZf8d;fI0FkzVft7&)@3+&SY=qE|o1c=IR*73f&FbQ9 PKn)C@u6{1-oD!M literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%84%BF-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%84%BF-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..238c361276a4c8a79e516695e4ef8b2f475e8d3f GIT binary patch literal 2074 zcmV+#2<7*QP)7%YG*%5Y5es{}v*$viHXIafkjfv@))!h|N)LijT9CH1 zC)nQ0?9SsKvj?+tvop_@Jvf^CCY#-P=KK3S-|x;d&)W=4U;-1kkRfk3uvjc!?l{h5 z0K+f_+uGWWHcC`3mzydgGb*{==H}*CmMvTMRwHuPWw=-@&UPGUy@;#;X8O-5rQQ;e z!@!V;99Bwg>+9>=*45SJ#^ufD^D9NQ$ z>wu?#ch`}BcOsFvGnGmWN0ADJ!a=3fwYo`_QqL--R%J4of7GD`0HY4>Ch9W_@bPlF zydaLGl-gTQQW05b7{>1I?(UX4_2?P4ZTn-uN9s)u^iG>L?N4!}p`oEQz~ewY&2*+| zn!nz$W5-4H2uf)3?x`c^%OdiiX_}9vQmOyw1ax$C^aFQiv)N0Unwn;p%jKMiEYt{X z>F@7f13aiJPU{}FZTkh_It^;6TrOYL-rjypS3r&WI)I;R(qEl5Yt|J@mo6>okYk&4 zu~=*Z=4w`MCX>laHMvn(QU~|4W5v2;F;_(P=kxirt_Xmx zt}es2?MFo9+nl-8PP(qU!m_OIrqk(X48zzQ5?UG@9DG5y9-S*ZxyGsHbUMAub=?)f z@xZxDMI>k2w!LZ7rYUiCD5a#OrDY@VIbZRMz@khhv)#vQ3yFQcv$OM5Tpc6Oxx%5% z#c`Z_0V;y#13e+Mwn>vF^%jdoGpde4q3|`O)O{nzBC%d4^KA&$@O05bB z|3jPyKVl6h5{YtHxrnUI=kr$sSeEsgWm#<^vK07ZfV#wW-J4>nSyTBgE2X~P+SB5LGZcX#)-hGFyqmxRT-uKQA)2R~vb9wJi9FqQf5 z&Ri~cTPBk^-D77mnSH=MT@eQl9$d9y!v^Iy3eer%-C~;NZs3Xt4Z;2+60uh}%5ViY znx?r!r*o=>uC6XOXtt-PXTE8gdx$Vw!JGBe)d<5Vr4~<~JbCBYnD(PkC@gSYcMov6 zueb!92+`MA!x8sz6-G=Ki^b*|lzG5WydmsUwes}z^n6e$^&~KTq)bHq>ALQcfq{WJ zK%bwVOeX8v74gc*J)olfWb`uaYql)4uGEI1ljWrBo`- zj`QG0?65R_`t;ZP`}?cPlu}idbaZqK0uKWZSMK3~fY2`k$w2C=E0atnyB)_l?7HsJ z_V)Hewe%>ZZuTFGNL_|?*Tes#df@+&Wm#X;tm7u&X-5CK!@ysFW59mkdqCv( zR7(9jQ2cqzvVN+mMSI8N4XO=K)r`9cc(g`6O~9hc?|Ukr862QAu;oS`y+C` zKX6=f9OqdLEvKPnSSj_Q|5!wR7ZY+du$k&U;soB-&04_5Yr_4bBH_~!d8@XGMWlD- z%9XFgXsLphVG;2g-fNoXwg~#gz*eezVFk1S{w>=<;9yAn`yz7td;U`*vNnPn3N6El zMB+){`%0;AB@&4{LdHfv9>D9F{n!rtHiR3tF%Y%-c@*!@dsRf1x3;$SMR3mvt_K`E zQU1^35Uzo@(g||cM^%u`X6J0#vSoS{=UhSXo;?K(^w!|d3*nw1Fd-Sw$S~T#NnlP5 z{<;wUSH@muW6*>*RtF7qM8rH3;2xmPNyPa?2cykyjo@E}_u$OWziW&&HWbfME&fdc z56lBt9pLZhEZ#;q*I3BttNVkPn8ySB`=aUN3qPb zaIF5sScz*i<}kWB$E}kEZ~Mj{QyfE$4aH{|ZCK|~>E9WB8{9rd8mmyxOD$ozIdJ?} z;9nYXzX%))kfVB|Z(L$8)mQ4PnsHO`9)|{7$IE!V{Hq)$07*qoM6N<$ Ef&+;S$p8QV literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%84%BF-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E5%84%BF-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5905d41001f17554d2d56ca0027fe42ca3df4c2c GIT binary patch literal 1107 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-^PtPBIs7#K4!Fh_g3IEF+VemgzWBP39wZT`+)}_d#v-aR z&2icVH&!K2SC!QNT3&${#gvq8>0D6CXkD=4h5K*6z@W59k(4Q-YmKc=&-I*b`B$P_ zB7JA__j{bL{+fQD^SzG$e);n`pJjjO&%NS$w_xV6t=B@r-`Y-Xn(F=V+3BUH++C;s zyMH<@Rv^8ml5^r>uZg|K-MxLRE;O<&sH-|JH?_@W|GXU49Ct7;xH+zr}AAo&9&N zU);Dc@lFB%^H0a$cyF$-Ot8DSitERX?@RO;di!>-WS`w^`RRAM{d?i`&ygy^Veg$5 zYb|9<*KTmX;>Xq3>byShOhJdsNtTGYUP)R^)hP|Xw`aX_uFleni+j0#{Z>!Y4Yyen ztcCA|hL-MoWPRaNgz1LQwhVWbewIzG{l)g}@~TGJQif?4C)Q|RUozwFp(?MvJ^jpI zq~z~~>hh9bVBAXLGtaiJ>$oZ zlvn@MPc3$3Y&-O{wwrCKdf5+~-o9U(R=vGA_Y>QqkY$Atj-MtqO4j=PdoFhW>{)B? zMfv(XB|+ZBZ>oD&avrkY{!7GaHP^xRbNh7uGDfgfOV->Ba|(?%k-{ zq9nkv=__ma_GH%eFBi&}*)cgrTmRY+cf&-6pZks!yZEo}0R8%z`4r2IC&9w0VnkE&fli5k;E zS>5etG9zv@$rwcaPEVh^srPa1g==wc1+Ke$czx2@-zgaDrG9^OuE~Akp^FpRm#mSk zVDsm!lP<}gT`0Ew@D^67G@D7%8yVxDr*zEJ_#bmjUO_QmvAUQh^kMk%6Iwu7Q!RfklX+ft9I+m5HUcfq|8Qf!2X#zzmF}AvZrIGp!Q0 UhUmF+DnJbkp00i_>zopr0JFQ{%>V!Z literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%84%BF-bronze.svg.png b/server/routers/bushou/images/60px-%E5%84%BF-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6d05ed2d5a8d38e52a937a4793f16ebf28cce84b GIT binary patch literal 1065 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4|$kbq*Sd|F4JIOU^eu0aSVw#{C1|lM~I`$@%^96{!UhXu}E^^5|PZX7m7M9 zO{~$EeHI^B5Uh1&snUvOfkp}0P0g}Rd_hT%mUbL)`u=>pYG07Up-T@?vLG>_vg>#-(#BnX}@RhlNVc_zq~$uN8?@-w^v1B z1#G8pH@}{ccjUtHbF*a*ev|psGigDVErUb$)5CWTT#}S2p2NM&wR+mrle%^5>=-9l zRlfe^)tdZco6QT4hfK>@ZZce2l2v=IEzm9lNTn2~yJ@?kGv*eyTo%!pnNfQrV z$_X!6{p^9(vIw(|&{u(6H@WePWM^%#}5fI~o@6l`F0ATBq`J2ZOMK z_!c9j6Mgv8d($UB-A>+yC%-(em>c7_|F8MF ziGT0Dns?Gd{X>a*tfA@6yW8CyUQIZYWO$4-W}U~`TPaJ9{nnRt*SxyUB{jhP$Cuco z+?CG+H@sTH`|fq>XU65xyIwL2-Ap+&?GP`|iLXy)`CEow4)ZtJaCFg<#|)nmL+|n| zxEgj$@XpK!KRf2`3i?>#$bS6VajRx74J(n^UlW{P?abk;;`DyK>dd9*f#F{xl{q}; zxW90IvM%b|B6*`HE8<>Hit|=%YFxhTh*!SuO-7wVUq82NzYIRcJ$ZA2mk0mcEz|!r ziHnGcEO#w?&%({)Ju&@E%f_~ONg>ky9W2b+$Cr7(3C^5jS>>f;7Tx`!cH;wep4AEc z9ywFD-JkwwLE4?hMUAHq8;W!-S;*>M`%KKR{g~^Stm@c*SKZ}icbZGBLMa8R;d>8{Lu&WZcZf)5Y$9^JTQpuK#D$8IaRoprtb!k-=b0-LMOzpCUp z^!?_ixX*4a2OBT#4t$`vBXS!zTlI~@AwT-AYNShT70|QbTPe+K_9o}?1Ho&xZ-jZ5 zz2H_~fB0w4o!y4(!WPeAeVCM39@g|i*8lO;j~eaYuRAO*OmAn;JHFv#(=8FlPvS`@ zIfM$U?oI>dC)EI#^F}12r&sy85}Sb4q9e07RDAQUCw| literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%84%BF-oracle.svg.png b/server/routers/bushou/images/60px-%E5%84%BF-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c1eea73dff53948eec6f3d1b7bd54d614d4a9529 GIT binary patch literal 1016 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4|$lG#l&=)=WSvp&E7+dBL0*6&dt?*BWL#k1V&@Xuw}wgouq_

3Omb)Vx4eC(&EJqIsF_vNhgDv8?UW3mop= z6tV8Tn>BBB!d8Cya2bx>DyQ#;h_AFhc%850?hZ~d*Lk_U%l|rMoO3z*H-+J4>bA}9 zM<%{-l+s-B!nnvsH21}f0A|lL@6S8|W}K^;-?`4={K2rsc~1CMVNu4}t&2kyn94R) zKX3`)6j=8_%DqWnT`P>Y$e*vti?NVD=f;AdHNmggrk`Ht|EYLuO7u^ilpAkKO8n>C zO}cuDqwZ?Xw5ff5w_J3-_SF1ps*b5P>SbiK-@7TjNM}XyC5Kg~ia%P-yj#Oky7A5B zkW~+qH)e8d+r^Ah;RKC9B&%dRWVM``GR`D$Txwf96?U-&*`+TvTUbU6>4s-P@*KV8~yW~^B znxx0=6-6r^3ATqxP1j&@tMHmWOY`Uw=KkJUUwuEy&Fd<6)Np?rrkXOj@usyz=1GhA zw3qWz{T22oIsO;e%jUS^D*wGc1&*t`4u*2%awvc1J(n@49}Qle;v5#Ve%*`=iUqE=bxsXXArq? zO1$;~Q=M7cQ=5z7m(`kcdbiE2`}UeyKeb9Hw|`yM9#3Rbx0FW2=h z=>xNeYKdz^NlIc#s#S7PDv)9@GB7mPH8j#SFb**=wlXpTB5eZ$D+2@Jpx^!0t&acz literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%84%BF-seal.svg.png b/server/routers/bushou/images/60px-%E5%84%BF-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e5daf2cd1b89a41d5e9594519893d2944339f735 GIT binary patch literal 997 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%85%A5-seal.svg.png b/server/routers/bushou/images/60px-%E5%85%A5-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..69de46bd3d2d28d37f373a5604cfbe6e9cdfea19 GIT binary patch literal 766 zcmVufxjfs{7s6$a(HP$gKplpYw0qelq0%Zfn z9!$B-?3ZZ;@PTmO{_ok1n+wap1#m8*FBMh*&k2VufRDh2WbPtU0d6vP*qNI%6wOR73#oS zVWa>~D`*|XzZgEmaLLm~;1zz@Yl@nu0(!$3Og4IO{YZ)rqW=crdO-Jvw(ej+w24jg z>H_Wr^v`Mu9t(&)!3_(o2(_>&;DCmh9N<3!R%-~&!xr42rtIaehERDTKSY9+uqFC| wZ!IrBfV~n@xQDw}XEL42FMJK`MnSuBC;$Ke07*qoM6N<$f;kUZEC2ui literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%85%A5-silk.svg.png b/server/routers/bushou/images/60px-%E5%85%A5-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0efd63579816fe3938abe81059f5e6f183b8ca GIT binary patch literal 952 zcmV;p14sOcP)=st@Rl!-9!tdgS``a%#h$~8n9fff`fLX&C?Qfsw zm%KdI<6it|c}BbKV3UGUaU%|3a>(&B!sen&yYv1-JkzYSW*NuRs(&FDYqymUJ1Q-_ zYp|)`@ET4=j_oO+cVsTbKdNR9;X!QfjC(UO=AIk^oBj=dB_!vr?aX~t*z6+&Oq&JYnB$$MAw+zLiG) z(rDpTaj}PR`Ve#M#Onj*SlA8=t9r3g#ui?z5qRqo=bIFYQRiyrYzq}ayGED4G|t9b zHKJY_VeXB%OSs$zZ9v|yo1p2kziq;84-2Klvkk;r*NL~Q^SVx`9hnv$y(VX` zu#gNovw!2N970kvsagx&-;U#!QUaS`0(S}z&Hhzy_JnZjSaIyY!}!SJCcEut+)zU7 zs7xDvm(v!?9j0+%39(J^rQwXu;!zp0kIQA)+tLMiNT|$N_#gHMq5O9S?+AsXu_uFT al;VHjAeQdSW^3AxT6*RA_0blG;+1R zD2fK9O4TZ;AZjbPPzV@BX?3CX0d87+fD|jZapR&3K@bt#il7S@iqIA-YNgZ%z70aF z)@mfwrbe+E3X3sR!l)+ku~ehd{x)ZUVC_iPSh4)&QRY3xEkgBc_GC1loXmKr3(wI14;+ z(5}QMz*oRhpihRs?*y8F2O*|?f#W3qqiNTFz>mO6OjGlr0oV`Z9ej(|$DW?A+2mnb zyjp>e9R2Dst;EM~pI?gQZ16NMUTr|m!EdXh{xeLAT7p|QO{EvG7B~Q0#q>|tq`z?R zYptNu2J8Y_fT_Sppe`i2tmL{37X#k{KLGz$2y{(G-2uq`Hjf#hvkY8sjj_N9!k+NB zl=>T$V^yO8)9mbkTQb(4EY$5psoD0>5V7b4P739BGuD48l-$~k9gjtSILYtqX|zK*^p`zK)< zzgqVT1NGFnNU}LESI}KyY5Kn6RGCCF*{A5te}@a&L9Zu`CcR21JBrS##h;iR!BSQ$ z=z7zDS(34z!V*P~J(l((%wm1Fu#RN1k1@NAS}YPgzERZAObuqADa!6$2@RMrq159c zy8qNnw2(};fZ1=-=7`|4C4x^XHNbfx2;UEdH?cHr2u@=K8Rbia(`mqXr}+#SiU zj5^F#if!Ib+lgq3&sV^9&t>XQ+!XLxQuJlguMIzH!v`kX&1eaw_yv& zlb>K}fm11lJ7O3LY)kQPC&B>sU5Z%;ZUQxeWBwFmYfgrd3JtoCy`5M*0z@JTNEJz>_U0F%^J$zM{Q>D;0!y28A3( z9cCF;mvXaG1I@V~#EtW851e_F;+GA>z-be5u8JmIfai2J-H5P7`nB|rx<*Iz~ zM7W(%isC7^v}A28Vk>w!pdDH!nt%xnqqA8l9yAbr)ebH$#I{bbC301 z@q63+uFv)2-@kmTKllF5^O`%)9Rh&h!vEz{>)ChDWMA{`;>Eai#Z$BvTOT)X`D}N9 z*GI`^%gj660xieuCY8%OR=BU#yx3%L@J>ax>zc=648C6^4rDW|SaOv8$2L1_-UqtB zV%{*@9MNF7y78QibZygeO{Rd3(sf0}uUTUpZ5h@l%{?7^n!AFvxaUFD^{6MzHk((> zJ7$%>Gi)*c2S0|kO4-*k#cOxHIqt5?%JOj2!QEmP?@xKynsjAttn7hFdz+lo>z+$< z9CAOb$F}3q0o|J$yk|NH=t=$kEwjT|dI!JbjAeIUoEO%ts1?gmPUbjtmBsM5=pBDO z+aE$r27bj&Gb(EWzRcWmBW&*deJzE@?@YTji?2r5QDUiLV$8hsuDVRUnO<8woBfwc z6p05*)f#1Hh&o$6dlhoiYWaipI-X)TRyXbrmfym^wY^a#QQ9Q5S#n#Fv8yd}S)_AT z#lq98G%r8AeAJ>TAZ4cRg80cLDxasnRhZ0isMy=J$Z6x=xU5fqYa9jcZGLzD*juY( z)=zBjF14yy?E0_uemv)`A1w-ZjPFXVi8>*CHt9%Ty!diujzh7!@BU<(HNPvaT)RYt zC1JMSf5xm+1(jzDZ_Q21f2pDSVxMwP!HypD=e9LvFK*3bE}Ef~J~RHAceQqZM@Pqt ze?Q%=+xMK$2FJ1e0(q88Hw7mzJhu&);#5mqBT7;dOH!?pi&B9UgOP!ug|302u7P=o wfr*u=iItIwwt<0_fx&Y>7bO%8x%nxXX_dG&OcVYy52%5`)78&qol`;+0FP~2?*IS* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%85%AB-oracle.svg.png b/server/routers/bushou/images/60px-%E5%85%AB-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b8da8ace8c01acd1651da10a1d586c1258a14cb7 GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k68Iwcubu#PR|6&@Aq_Z42d}Wc7}I`h@(K;{~Z_KsMwh$d=R~U+_h#ymj)ZB zl)QkTO~<3N(H~yK?y3C#=xnoj@kgyi9F`p!BBCxA*0_CK%gJ(ON1jl+@modTT+Pjw zukufI$l{AV9ro2cG}bow@_{*Lf-Kwr{cqG&Y&*2Eo_`+;Ypc8BGOJ!AGmhNoz{aLS zCZGO2DAd^F>X=e3;T7L~=GbSR|JxZf9`$hS>D{ub{)qp=1p%T*@2r13cal#|R|N-y zz{4F0>vXH;a4^;_J1%@|=B$+*%?AK~{nhl&bi;i=|vYifH!rECeWy@N& z)8{rk5WHk2trOnD+OK%=mRjK|K_;8tE`vv@YxXfWI6h#qGJ1RKpV*A`NwaiRbj79i z#7Gn>6kL_EvFEYy^Guud#Cd(8&YTTmR#!J(C^ITKvUSSJ%TLs^8=D%GFV%4ze4D|= znCE*l;^x)+J*tWazUF??y!`HS{`+SO9`w&Flb^BAE@hSQw>&@Lx@hUY2Q8~!_iXB& zs&;IO~zcOYTs6dlofzuouvMMNEtcpYZ7@sju+w}>c)4>#0qe(H#qIN0oS z|26lz@~Bkp4~q96NiA!N%-#~)Bc;9Js@)AHAzNS94UZdt^W1qp`PJJmJL;Ws^QPUI zqHZm{XY!WzMLdNC`nBGc4ZDN3dnNB|U%w{sRUzy18LQtos2(%@_PQfG^X($1pK7lc zGsvVq{d!EaX4?^*oj+BPN1F8>{C#5A z#~OBj{`(V~ul?AvqHxvg{-2E39A~K>Ox>ox>+QkP>C)47?mAKRQSNuh{%bG2WaPew zYuqf)jh$_eqw)&NtkCGJpGBALG3Ht?JwBPuVeT-?{c9>+|xT z3?d?NH?8NjI~^@}H&In}ieXFhw?0{kW1eSDzL_4sr|MEu{gOgCF(}Tt`}!r zBX6k9O5L*3_ic-Vc;jpi@mEGIi+UG$>=0gMzpyvuy+Ed~nV-_-(*Xjqa}uW*7jOL_ z!v1N_Z>#jYm96{Ve%?J#|N7@U-{03goc7QC){_~#FTD$|&D+BFBlh9nEx#9SSf3;9 zv*(q+PsGead0Qp9OAp*nIMFBaBl3f%?1$+OK8jTE*A=fjXD|1my};(_98tS7drU4D z{^0UgnZqC5-=E#MzWz<2v+I51E3Ea6qT5uhmfe&RzG^j1;(GK)=QN|#gO{Z=KU8FY z3T1Bpd?T`;SK{!`Sr1;>yh2phLL%vr@>cRcJ9|j8)o?4 zHaxc5_K0LcG`MI^?o3~pF zmKq=09`@DNt}I&QS?~9-Z__qhiE96S)!ND8^|qRm+|yc;PoHTBJ;(9TVcP@4@Rs?# zI@WpSGX$TlIepWg)3934bS)N+GuB*IGsE1<^Id@x$jT7 zx$s*a0;YD=64!{5l*E!$tK_0oAjM#0U}&LhV5Dnk7-D2-Wny7vXsm5uU}a$N=ZoM* e6b-rgDVb@NxHa^yT*(X6z~JfX=d#Wzp$P!XW~|`= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%85%AB-silk.svg.png b/server/routers/bushou/images/60px-%E5%85%AB-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e4314b23885998c5ab0ce3aee105319544e3020a GIT binary patch literal 923 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC?bcRRqpxhX?}Y7kj!mhD02GJHt04*iqnk{naf?U3-^ianvc)HE@a9x`^b5 z@^dZXXmaW3NIK{xda&8!;$r!Y0fKAg6&fEcRnR)p?4_^Op)s#o@auvVrZZOME>e4a z@Oa8)HGTc}y6+Y8{TlzI*XPf?Idg970VZx8gXv~>7rs;CoHilx%6opBey4>Mo=p?x zKS+I|v*i)*@r^jQAY+GWP?Wo2JF?5uJ`jen?A zpWA#uWQTNX(u^6s&z6Wi=U#Ro@mQcnQO@RzDXeo;bGT}+M;RS{v})GoTl4y7GsRC* zog8W!sJ7)(<_Wgcli_Bo7z0IT#>+2=S{tjpf0NlgPp%?{@>w_XL$VvgbEj_K+Lm~L zFDrBN^{|~?O-p~D%_+8A8(^9oo+Y_^@BBwW+xo7AlzT+vRkEsY`TNc4!u^d~;%B_( zog?2P>60 z)@{2FuA3mEn|1Z{$<{|(7aY&}@~P{Z{yXQ=s=OnssT;!@Vw<3s)bBIbP2Dx4SOQvhcO&bh+#8g`3Sn|E*4Q&*m)` zJf`!J+rKy==GW9oU$5Pc<+v227GAyPtL@|iT}qmZrXF4HvgN*my}d2#+8+mJuAF)A zr2Omm*=_G~YDF(}32u9_sLU?9KE}}Oy;;F#rCld_FUi)lPp!Y(c7L+oblbQWzqh&F zPMcI>Xzopr0Ar|+4gdfE literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%85%AB-slip.svg.png b/server/routers/bushou/images/60px-%E5%85%AB-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..056ec3c61437017c8c5f2fadb4b2731df88967c1 GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC?cH&A6@1C(dDDV7%+;;usQf`0aFi59vUeLt>)8wmel^)%v9{M6Y*eKYEU?B)LRyH;YqG)4f zrM-n(`U?Ys;Qt|(BG`#R3%x{;Xbizbb9%WXcNTkxmv=LleYA}|Ro1&BE{ z27!CPJD?V@Edvw4bKpEs=mfcD3;+)>N`)kl%5{TivONX1+63*ohOYrn zfX$ZvW#9v59nRF-LL2`Au&>?@0V6=q8go1Yu2{yC3O9f%?VorNcnn+w4qF7f7Ip!b zf%j|7d);%M7FcY4F>=gL~kX5>pw^nsG)MxCWf|8Q2q}ZQ>f$ zI@xS1?e@3v6ai+92~5?NFsOC%Av}xuAGe!$quBek4mN~)75gWPzM=6}vG342_$d6% zqHkzu4_#e`>z(kVVy|c&d7Q2Ngh%EIYbhPe8ZHU8Ma|h&;R@#cI0i`M z%9^t);aJicWWt#jtyl^c$ZC2iEUn?#70!GO$E0va2>-GUCp;u_Rn0lC3UASzUDt3- z3QGmbi|~5fmegZf8^Y4lik+~R!qU^qHDRf9>_yA#)H3#zmWr18VK1*KJ)k+~L1BsT ze}x-xRaiS7?FJ;mdo*Vkg{#CxSSngWnzM_-bHGZPhyp{}B1bf57s9h?qUiu6!Ur^G zmz0i;aEaE88$!8*mIuN$THoHbWA1jfAP*@GDb{hG2@gw-c}Qt6w`!9R3zrSyLv zyKoXk!RD-RE%En6>Tts2qhNDZIC%p2IdwSUAzf|}6}CZze>dEg(Lb(r6T2~car14w z@2-P2U+<4m-3DH;n(zwt7uZ*!)HKM;tfC8m6SS(_@|tM#1e*6a@2j~1@d|jDu=TkN z)c9#m6*%S@RA}@9W0+bq&g$PtS>qC>3SP)8tnet%=BRc<;V%lSR+7o}w`c$W002ov JPDHLkV1lait5W~~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%82-bronze.svg.png b/server/routers/bushou/images/60px-%E5%86%82-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4c4cf7c40c5e54a135019c7a679cf1b2849447dd GIT binary patch literal 820 zcmV-41Izr0P)~>9e*FRlT)6+AMNF)-8 zL?RXwp6yz|Dd0440yqk^fg^)5yXV-$z~tcf6mUqeWx%(gaXP>@unBa5Ent19ECG*z z&z@RDTEI2n{$Sv2%*q0At}d|`aAz{MD66ai2dauagA1qFVv3flnwUlb!8d^E0>_OD z=QZO#qwySYxjtV2=;0!!1AGT|aADXQ*eCd#^!8K!WFOazmf(4ySzwSpuna5$E5Ir) zgKppieHxTioX9dv<1&96I0l>qE&^ACVLcJPomf%^%HoPhtHETk>n&d3OZN>K6Xd4-?BUkOjoG)7Hr+4rH~pGJ)z!P@RTv&N5dW(NpJ&2 zSCtuFw>%1r6w;tfRu#e086Fis6`Sb0CfM2yiJi3iip@)~)*-m9mzZelfFOc*40~ua z!IP4qis0C2{)skCaO{=$?vp>0J)s`>zh@Zo zebAnhD+%5(-3d>ge;uuXC0KgM?h=0k0N_VX-FvNpC0N=DjlI3I%h#N`WvziFc(cSn zG05|y(z_*ThTjx&Cp=$r>RxIMd<8ESawj}_GrXiVumnpP??oYZ!jmUh-7mKUuL$)| z3b_-Ww?qH8F%qgJ__;91>k>|dHlWRq3#1nz;AW8E!eLezH`Q yv%o{#%IY2!KN<NF)-8G3F12!Y=4x8&u{10000{3bfYU3ckTpt?gSC^1$+b% zL?6P}@DY3m?;3&M4NEo+QW#G44Eyo+K*~A8{uv&6!)+I5HPW(%B@^`? zoNP0^Dq{Ld*;GIkh8w`RiG3*!DpjS_q%b_;II0Y1Yk0=Rstik(WxW)Jr(B#W!`Y0b zcPhh@?Hh&RX&0+9+yORB?DvWXlG^YF^_z^!R!f$KRoSg%%Q~Bqww;#R@MqJO>^ZA5 ztbUc)GaZWkDtRxhni^KJh9&2}6ow~FTQyUvWY2VDlVRJLs5AV*w2vaVU)5N;l4?Dx z(i_umA}H(JGyIBTVZYMZC@^ZcNqsd@o#8d=9oM-iFlu<5`oWXMAg`BRoA#L~OkvpS zZIIVXFHQS=6sB6@fno_Jd=|2Y?8e-MC@gB&P88-591ZLtYj}$Ko^jt&8h#dJZKdZf z_Ve!@RfD1zT|m%-ZliY;uct0S!_gxTUEmVMnz8zoWOWy~1-z#|gBoe1|6P9oQ@V>7 T>%Mw*00000NkvXXu0mjf^*ere literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%88-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E5%86%88-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ca80ce352a2ec80b499c972ddef0a357a2796211 GIT binary patch literal 1616 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%88-bronze.svg.png b/server/routers/bushou/images/60px-%E5%86%88-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3476482fd2a55792b32ea376e62260e8b9196a GIT binary patch literal 1435 zcmV;M1!Ve(P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re1_cfTA;tkdP5=M|qe(UTgnz&g{L`zcyU8g4$rd z=Lk<1o_Hz&0Rbx+R9NE1kT{^Ju++^$9MD496<`>_eBR@B7v8Oi0}e1Y&$M-%3}<%U z=OIHJaEgg}q+Q6rGV>HWwBI2PxX4p^AuVQ=nfFyY{8I{XKp%|*rY&KuGwV9*@PiEe zZrnblWB|0+vMuFt_F0$jWMDcwjbkg<aQl(5E7AK{K1Xm8@6 znqv>k!*Bmsw^ng^94O{ZLw$~E{iMB<-&FiA%6VSyO10w_f$KwLvDyLw-8|b5+DV*M zv70Fc=F0sI+I54#4T8<$qIvFjDb9-aVY*b*28IDpFG!Vk{!HKn3cb(#@__aBHF<3o zmsP|X1`D3RsQ`qo+!9GU&-_8}t9SI6pc8b!hXSu~rn-@RhWexpG`7@u zzD|)En=beRI%K8#CsWhFmuA8X%|=4t z923ok6K1~Pdq$BW;)Ddx26Jch8S%Taov96OIbcK zz$s#U2r2 zn3`Zz2HF>${hYiGMwXDjrB_jQzY32Q^UDm?AugHw6Wo~gyxhjDSORk;wF(a{+b=IK71cZYxha|3KdeHLR)IeUcf5P^SCuTU^ioo z$KDYCS%YONpdm$pY>(6y>1*~;(+VWImE$^Sh;mW&n}C4jk(|v`R%Y z*6Y=o*K@!~nnhX2TU)ccMHp-ikuHB;(K>Uiti<>>c`hqK@2c@W8Yu!c`n#vj6rEYc zQS-}ZXWhcoIBGoJ?yi$Nvm-hL{se$p$u#lvfx3P*ZIvm98#`!`@22rRW_0E~CK3K+ zwQyE8Qgxv2Rc)0;G8H~#+OAF}<UK|;##5|zVOf^Vw^WK8xg$Pq1{VG9?$m1hewK@ z`t+8e{e}^FKFz#U?VFeFB1qD1&nWA2vC(`@z*%0h@JvNK;|d*47gOa32%uIG*B0`q zyjV^#+p|1Y%A3uhiw-vCW$#|K|C9X(nSt`>d6ge70000bbVXQnWMOn=I%9HWVRU5x zGB7bYEig7MFf~*$G&(ReIx{mXFfckWFxajA?f?J)C3HntbYx+4WjbwdWNBu305UK! pIV~_YEig4yF*G_bG&(agD=;uRFfgg`MN$9&002ovPDHLkV1nXskb?jK literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%8E-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E5%86%8E-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ddd6f09dacf62b60e03ee00e67983b90ebfc76 GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-@FnN()vc~mnnFwgaLaSVw#{Psq4M`)@D`-k~`zQWI5OyMirn9;(fd_sF> zm+P_{tU)gpx@>4)BG<*G$)c&!BcgJKedU2IOFG`QF5z$1oH{dgMWn!t5VJnZN!xc? zTBUz|kT_%J=JPjy^L#1$_x$08>;Km0*IwWH@BXqTF0B;{nz*_WPAL4%>J4A*rfczX zHOo1te5qc!^v~0RUtG)ExhyfYRXS^yWZH}+3*)E%FG^;r-f?k(SM0r_m;b%1yLxvV zWU($0yOCX!{)plBeY2kz&Ue1`F>u=&6*_J9nzL-We3@D*aoL@^vs(GW#U;Ons?AED z8Q=0@;wqowQiq7hjCGq2WdB@th;w!9^jlYgomAH4Dy}N!Hs?1nx0=r{c}VW+OsQz? z7P(%@9g|z1EfN2`*6@0f?V*o7)_-T$xZ9sN5IgbM?~snBx073}#H*iY#A#K}|4^cN zC`WP648;$JoqqUoSO@Pg=S=j%uX|+CjH)15axBP!i8gV@FBAo zf^vs_EEBywzxf~fwq+vE=j9*5xUzdMWQyF-nq$6AV|yTn_NDOmmJjD>dmHGLJ5|{K zH*x3C7f;=<&?5P=(LGaKPWNDhPRq}|=YO|u{<$ZnBi5;VVWi)SV^ey*>@C>hzpBQA zW3}+k@E1a6DXSeXx6El1%0KM=*XwoNLf=}Z-_TBxgkGxJoy zr%072J_k1++SnttWdYY;WgEtK;(EJuo5Lp;1oYY-+I29l;2PKOfVTn9(xgf`qo1}| zvq}HBwkN78G{ewn@%3GMIR4aLFyH)#&049&b!P3Wt=%R&ja5pUbI*zY)-2Mzvr%kS z_j_Vcw%-mgEqWQ}rM&eD&a`G;2A zyZz2#jrnPh(6;Q-pw(h)qfCF_+JBSDe`|1iu~n(%^QOzYwpuR^Za-|duI4N#hiI*M zP=BocVNhDup2L-Cz`Uzk;u=wsl30>zm0Xkxq!^403@vmGjC2hwLkvu<42-Od&9n^+ ltPBk16)1?KXvob^$xN%nt>L}yjMYF544$rjF6*2UngAMy4;cUe literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%8E-oracle.svg.png b/server/routers/bushou/images/60px-%E5%86%8E-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4d954e1e77745be2c29f2f5a9fcd6c502e5e5188 GIT binary patch literal 1006 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k6BoG#N-OEKUoKq|K{o97!q;#?Tl!T5J!oI{ie|;jn4R-k=xc3(DLG7z;2JP zK}kZcQCczJ2(`pjhCqF3rrM<)zCh)!9Z7stE=ghxbCS7tW#aD?{Amo zfBs@tnN>Q^r}^!hjprEOKX;~Hc7~|0QTi$KtO(!L|Lnz_86GaED-dh?(8{q~eO}ff z6^0s>*KF=9(=`pNwpWQSijoigQTO|u?z{(uTzk$ja335+?xODyYbVhv1|L=uM}JJPtoQnm~=4nj8yJQ zyMGa0SG1a^o%yLO9%+A6)BNJ%cS1Ryjx&Tx*L)3dHoND!ucoEoo}I<@13xqsrwVT| z$T|4^qDS2f?=GvB>)#GaU->eV$`zHcdztms!5*zzWa%5eEg|MRJ8Lob1)7#IgKM{x=4vrzS#o=3cpE z>&W=}ZL{?b%ePS{oTa92nccJgtewTpV|zoDe(yZUaEL$6!AUY>jqUWG=AZZuOsfAU z|3KyM1HE4dpM2cX==|Nj?r%Z{vsL<`1x6Jo*8JiA#NBqi>_>Rqx_DrwP%UwdC`m~y zNwrEYN(E93Mh1qKx&|h?2Bsl~Mpi~fR>lU}1_o9J1{rDJZ=z_(%}>cptHiBA(%L^2 PsDZ)L)z4*}Q$iB}w3MjS literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%96-bronze.svg.png b/server/routers/bushou/images/60px-%E5%86%96-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e787f78ebd872b3892eb22e2c88bdf6cd70442ac GIT binary patch literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4>>r+SXEfFSIz>;@AY(X42d}WcE;&!VMm$c_L)gn%{({qPhI389nG;qGve&Z zij|9QIJY*v@ci&#AjM+ zN9Xa8H+f}hvnT&PtGGY4e*e!i$?4C`nH!lxmuo2g7JoP^N%@Z2$rjHH^X6kW1Qv62 zy)omIb1s1Gh3TN`@e-0eLkfL?{6J1d-}5RvPgOG z?4<3}&m6a!wM16kXNE=Lt&D}Ov8t(i%vSy`OkLws&pvmby?O4p#G8MTnC?AcuDF%b zb6VZ0FVjfmL{P#^8|?!!43S}ts&yAnTfW@ya&5`B@~IoG+_oP#-5uN+W%7F2`ArQw zxtfDk_4H_4=;xh_IxUuIzi0(xU1X)k-2NxNvti1Z^3!9ELE)hz9RkWuQ%qel zQ~NhnpTBT;&2_2%9~*@K|LwIl+wkUy@oVjffal_UTKHKdp^F z&r+**_0+`FMx98p6M+ipOPT+#YSjBRwdAAv+$VQ#S!=!iG5fU4vgsy&zf4@z%o}Gf zG;^t4;4Pa+&vwNZ%6xm8@Gs0$E$Lie`I6gHj@>-y>nWyfzI3MOOOpq;_a4}w^Lg>* z0A8=@(ROhjEjtuX-+fuvCjRAD4eRGCTHkyAs$In^1Je`T_I&-VMrvepVTGO==rXk4gYZ6C61kx`$6W+^ajtCqM%l%yn}eU1IrL2BP#<_D`PWl0|P4q14p}G>rpi1=BH$)RpQoQknAK3)WG2B L>gTe~DWM4fj%uBL literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%96-oracle.svg.png b/server/routers/bushou/images/60px-%E5%86%96-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..070f4aeab8f77f239188a2cf59cca24856fbca1f GIT binary patch literal 2007 zcmV;|2PpW7P)eKx zMp0X5#BsR`N+*mueMzTb>W6-4`=O?~dnLxE(@dtFY18S8Dbq|}jF?p8P!n4m4W<$u zq}T*7zyiDH^aE+e?UOc51mYHI2WXV0Gf%E-t_LjFXAtgNh`h|+Uk*t>UcZBr{^5GHl_Jl9I1$ecIaEN(u`LLt0yx%XJBWU0haCXlQ8op;kaaLBV;% z=q0ME=4EAN877>aojnTR6GK%)L&Fb@>enPsvpb0hndl$7rx4&7QzJ5EeYI1H*rvMgiKqD6nU*=#3m zHrv3=I=kKO92pt;YIk>cshN8e7Z?B2;c$FEJw5&DQ>RWXF%(S%&bbr7O|$yrrmn8; zBodfCS#{;*m5gwZYIkzce~v;y*1rN(uvzX?em2 z4<7XBO(N`edt||a1)nwYTe@`Vpq}tMm)q^WpyyX#U;m<>z02jgA}*^KtXj3ITPvWb zsOYU|J}XzQ?9uw%xnx=9n>KCwxt`zg7Gu1{)eDpwSRtE$RXRb@wx9Pt?W*Vos7v!bHn zjmpZ(XOQFyFJb5P>(_U5c6RPgOG_Ic8XC$5Fr{Y~2n0SSNzyw2z&Xd|%a<`YIEb>c zGB};ikA)Du+|<;xJyAVoN$P3s*s)_#Z*TA9>C>lsjckI!;87y-nFz-jV=J1Qo4beE(e0xas%w_j9m0?5#*z6Ibd0FS|VwlpD0Qnks}tMC$;oBTDG`+KFflfL|sd z?=Hf+G-GU1R4gr=^JSu9iF`|k1jf=LYNqO&GU$BF3oobw?7bpRF^8FJ3Q=lA=+B}yY8b{sal?w!Rsf69d2xf?fbd?y)A zdWh`O@htRX!Z~kkZ*LEaj0rrr319O2{ZY4m6Gd3U;c(bY!XLuimv(p16+OOo{N(W6IS=bT^QoL}qc=%@lP+aR1}Cl4Z5 zOR+ZEWX^dFfSTK%9U0jTe=3ezd_Lbb#9sNB;U5BG7$S6Enuyu}=xx-+!*4}sF+ym< zO-)U&MIw<30M7&Xk4ZO<>CcB>1<*D+I{G7#nzUGYT&k*S9uc_!WPjqOM2s;u7!HRA polfWAmMvR89sk(zkcT{Y{1@^l@}#JoG2H+F002ovPDHLkV1oFm>YV@p literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%86%96-seal.svg.png b/server/routers/bushou/images/60px-%E5%86%96-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a319248b9b19cf7fab778cbfc013c06fb8a79bf6 GIT binary patch literal 930 zcmV;T16}-yP)tGaJ|kmigE{`+n!0IhQ$S2C7u4vXrSwS$`|g33LG4fmWaiSd;sG1Q-Q| zfv-Rx@E&*vOr=~mZ|nfB0KLH6B0p2W3!n?w;%-U1(hL0|}& z1l9s8fDJ?~VJ}fjSUyj80_X-V12Z1$D{-8tdAcjq3!DSCm8sJR90INa1LR-z`$Q)w za}ER3M3ou`&furzGy%8BH{I<)SLPm3WoCe5Dd^uOHvA?9{jzaQ`A$muoy3M;sbaOo zizLzpH0R=nqE;dLOgyNHsfJrj{87{@#H@)2R58_XgNgr%TBVS=;nivdO5l%)f2m@s z;Slqpz1hgzaJ`Aw6fEVBQB^=SJZ|D;qE-@aAu*u}sfI009<}DXDVUPNY0 z6;KWTHgQA2QWb=1c+yKPN+tN`^up3BL zdeBN8ABNpPGJgZTBJsI+2!Y(ZeKzS3x0dn%=EHE!ykkYP)S9%655ulsjVG3>5PTSR zE178zS_@&<-15zh55q0Ri%8fFetE7}4c7webMb6aK@qn=S)~g3c(&yF@QA3Dgxl$m zr#{titBHq2tt8y`ti1D~8tyQ0npfDJ%>Am6YIvWCe~4O1IKu~2A=U716TcRGDng3kO}P)iGo=zG@YKXdQ_fY8lf*BZoK88{I^tKO z#)w{O3(ieq!6t!RJfmLPCQGxE2Ki)CE66I1Fi#~GpIwADpfM#KkjX{sK)+C7XSbN07*qoM6N<$ Ef|RPNqW}N^ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%87%A0-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%87%A0-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d099af527578da37519374e7a586fc32aab8dd01 GIT binary patch literal 1100 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC=tH`B+bc9Oh+UU=HzgaSVw#{C0-7hiIV0@%l2+(~B<1EfQ18m^dSFwSz}? zAot6S0Ybu`gxt1p+}g6DS8z)}ca(>;=aP)T5D5`Mm&hB=y>c#JiV{1gP0KYhm0#Za zysoeK{hghkcep$-@2;%5|MUOzIhOac6a1b%kw3*YOT*w!`ely^Pksn*U-ZLuZ}1+beJ8MDc9S`?BkfDcc4i>Dw-BN4MSA zE?ksoYY)Vli-l1KgSoNqXz zwCjrGw)pn)B#Go8^UdH|AFUKvXd9yv1?>MSu|E$_cfxqqLw;9i@PKuiS zm^|_MXJ4bf%H2~=FALWAcj1iGf3L>BOfl(~o_xH$Vb9s1r9V{kO~1HE6s*4RO>&jd z{3Q_w*0(M_aKWhlWA!=)-)WqN8nfp9yR7CR_(9Vre6^`Pr$y`5{;NMzJnM|SHR5Yi zFV#PqDfcLC#=7YF;zt*+;?sTZ(Xvdnn^V^4+E4!)PvPy+)7ZI=DumVv-@kg{xpLNL ziHURnHtpSZwUfDWVPb#Oi`D5zU&`_Qyz1UIXXTkoj|_r0pQzUSez^O%$(>^>Tn{bK z)V=rNmg6$ckT3u8C3`=0T|ORNv`65%x7C*EJbqrk=Jb`keAl@>W5PO#x05-I6t3{! z{cpVDf z!-X?@vL9W}%Lp#b$S61bwoNUs_;YXh>u;|cxgT}^+H=UeNu$KDY-QY9x#!N|uX1ib zy(D^nVL)5FsiA)9+Ok%*=|}u?XW!}wTI7A*Z~HtC#l;#;e)R^mE(;~fzScT#nwPcQ z@$-yzn;!+}-!|9%o6{xlc)+N{W|7ya>y|So|M&dI>>a8t QfEpM)UHx3vIVCg!05M1DN&o-= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%87%A0-seal.svg.png b/server/routers/bushou/images/60px-%E5%87%A0-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..885955ba927e371df1754fd19863747cf2615d19 GIT binary patch literal 782 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC;VSnK*hSpYj9c#XMacLn02ponh!7oG8*ZKW^m}ww?unovfU#Ev!lh&mQ^j zaAWRWnZKNU=W_lq{9`iM@Pa{2h>fE$sON?QlZWEM_}k|hRdfpO>)UQOSDB+W_uic4 z@2mGszWx4C?bek>jlT?+%}ALNS9PMmXL2pyjf7s;I+d@=_doO2pMI_`KdInP=lYZe zq3)c`{=yB%Qz}m~O#Z@baM(S1dw%AFl?J{g%}GtHHuEy0Kgi6}db~YLZbQrS-Ku8i zHRtJX+;zUfrq=7U2h)B<{xip3ePgIdWv^qLvq5gP_3ksrdFC+tvEF6fahNYgy!Of$ z(W?jeUI21m9Po|wS zdleIKWo1KlrfV%~pLe|TQGCU^4-Tq8l#m4Sf)@8wDq4Y~O#nQ4`{H8=)j9|dY)@O1TaS?83{1OULNJ2(IU literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%87%A0-silk.svg.png b/server/routers/bushou/images/60px-%E5%87%A0-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..dd17740dd04d3c4f9106932cf019c62619b6b15e GIT binary patch literal 1237 zcmV;`1S>w@!yQ5Oh%cR(L-UPcF!n{$f&?Bh6G^+MVFVt zC%Z!sK`%x(i*C|`^dJTzgPg~#~FKAN1FE8b7r4?zBA** z{9!%JnX}hrpYO81wLXRzVu-=auz_}<2cyx3-PqeKBQ4ERT!S{8hBGR15{|*B9^d%` zzo7%`@IGF|ul?$2Ne;p#cmiwCDSp9vWgBKS>df#)739!@Q*cp5&c=uab#~)h@v<5s z)sP;68JI18g(FMq`3WoWi5SZ5_+1R|KO1+mF%H3XcnLd|8>W9(o}YsW{p)^lreQI* zD;MN;EX6e#+t0q&&F#tsxd*S|TCs=?8b;tj|L&E2$!EA#`8mDca4cStA7nR{iPiak z$H{mIUy3B*U7R_f9`(UMWLkaEiiwzlNjO~O3#;)4ejYg2(lAEs-wW`u+N=K_ydXx_ zprH*jF(03zOZ}_WR;4W zbL^~5s9y`N#uqt;dXueUZnmX#q{0F9Kgxz9pH;X(!_7;7(NKI=c&J}y(6dWfKiRqZCIv<}}k<~?=sFS>D@_mzRRWU)7 zXtG1>*(Tb|D?%)2qP;3w@pQ(4F2$3HdU;HBz;l{pt5-&eiepbF9&eJZ6{=tEQBAT{ zllwA`bZERDon?gT!^etx6ckydi}HHr??Z7`Lj5ZGvWwQz#5M{uM)lmfH?fT;Gx~Qc zpOYt{BjeCp33ZReFB$#MCDdPv4gTxUmV~-9o?YL*`j-qrCo__FLhn|Bh`iYY0Bl*Ex19f z%)RCOyF}nSDzaU)RlCKnzh1On-xMX@vtd@L@N5lxJwNDQS)A6## zhHaPFdv6ghZog!#s1213vRmZ7a}AO^S*w(vlM8WT|GV56i`5tCcev9axGR~ZXW}tK zv?5OxNyWbXuTvD+H;MD^J7TXKVu&Gz=y(1BQEI;5HA;8700000NkvXXu0mjf8WLWs literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%87%B5-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%87%B5-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b0f8e822fd9492d8a91cbdeffc4f216f037f38 GIT binary patch literal 855 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%87%B5-seal.svg.png b/server/routers/bushou/images/60px-%E5%87%B5-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8c8f25445ba943e5a2677de6297774adfa391f GIT binary patch literal 809 zcmV+^1J?YBP)4aZcJi#-g-1CC_}y(~6I<-#B7nW+53K`)Ex zsJvAXQVmyVPv)Db*NG)BA=Plr#9u|dY2N=cH*r8*PL`u11}@(zsGea{eihidqQ>KK5&KpTI~to3~&p0Ol$vUe5?Zd zlw>`ocjLeUa5Ce+I-!;p3A^;-y&6-5VdE@tn9$<j#z5+}6_dVV=-k*c$OX?jcSM zy*U9qAk?a-(FNeDSCT1KEcOEDfK!A~(kx*-T#J4?u>`yZo&ryRN5FH>>wy9DJhmew+e~Fwf>n(00000NkvXXu0mjfX_%@sF`-trhE3A!4HyEe=>zS{$ks=T#9!ly1d> z8+R^5TvXf$f(u2|icqi=1rc0mQ9jM zCxxPtIfQfY9v)d}k}a5;ZUfkbZCKg5zT|9E(|Qv3EhNchnIzeE7*{8enT`$WH6FwI zg(Ny9Ui7C)WTvAVf2h}Z5Ub{!XiU7|2`o<}HWeS4t#jvm5}bj_NRpX$VM4Jfcv@WN z1I;G5Dks6rz>qhxw~L#_wI0QqW)f`8Nic;2>GihEa{MK(_q9gn*xlM#ki4&TeaZP3 zU+37i!ZAqRQs;oaREgkkvw|3j@y-zGk6ckz|kVQNJsbF#p8 zf?C1XL>%4`7UoNdvkGiSs1>{};;<*Vobp*+U>l%T@I?*ALF_9-QHflPGYjndsTF*F zgK@90%UDXp#-S|xs1@9}?dwaeW)Zlnz;+a0W-m;rpR;oJj~&Ws!YM@F9Q@i`lNNAP z(I%cy+?8L-3%sYn@&2-vwn!ItC@%JZf)mf>7|J+*B^*?BBJ1&m;$nwz`CN%!Xb9S) zv(AKj@w%|SFDiBnw=|P*joGJ$KPWzlD4TBK@p@nJ=6rfdT=kE6ds|&1;3rwP6)>-O`VFw?pQb8 z#)D1758@~MKK=I*@lS}(6-L$`Tq=At(<^+CvQWl_J^Kz};nWgccuxF1SG(ImJR|(W zlCue)wYk7i;d$PUwXGJ^>>#uWkKtjhb;Ba2gh%3g;S}K;e2ZTt+?&sL)Lka5O*aak zH?0+39$bL)aCRhSLin8MxNx_QO}8Oo5d1CEieAE1R8&+{{O|b>0+P;v9Mo#q00000 LNkvXXu0mjf1Z(+k literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%88%80-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%88%80-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..025bb9678324105bdcd55551de6db6c44be05896 GIT binary patch literal 1101 zcmV-T1hV^yP)D2? zMHH;kN?lka>Ov9m34)4sQ4rLfF2tP(J}49sA4S1UL2;!*b!B}8MMZ1{K@fav#m7Pg zMPp;z_)42}T$~vbl5>)od+t0e^My-h&dmM&fB)Qj9{)3!9zA;W=+UEV=wg0gII265UY;?llTLN@GV}!>jiUJl#Swjc3UxSKJQ!&^kZYt}6iN7Sr0sukJ5wy-$&FCkD5vsTkgqzN=-gwE_;fjs{(=ej(p?v%U$|1KWM9I`P3Ya0 z(D{6^6I(u<*SH_&MB1kX^IP#t6MCt+d(nj3!Bs+HbFapf1_qe~yCZs4Y|k~D%SK`F ziY2?PpyqmEpE{QCNT%N`hVf0rR28>p=x$GFexZXuEL8A*!q~$Zxcek zXz$L@EzEkMMvWPIL0+=(ctU#ur)Fw5%?9am@p<`u>k8qvjp^T&sogZ^;-`d}XXN!+ zI9+@muL`&LvP}J^xKh|_ikW#z{<5`#j}rRFa7m_qQ`{_U*T&53lD`1x6S_mH*w~e+ z-xPOB_oK7Ci6G=#&Aum0(Qg0rCWqscO~`aucH?qGM%?Q6cJIU^QTKfHSdO64Jh5zA71Xuw6F0|k;?p3x2C)O=WW82%_E+d zZPGlm>_PAi8J9=Frp=bN88SZv(tMmh(U(B!m!I*!^ zrFw?T-;c5{^^TfM-!+?c*^eV8`WCB8*L6)>D#p6*!G;q%kKNxl^-IsqQ=9Ca3l-0- zdwi<4>BOfgroRr&jhkGpGfncDvH9WKC%x)^WUBfFrwi=p@VaGkcG`o&RXog7Z*;1Z z-gqwR&d8rJz2%|yUkB5&JE9G-n;r&n9~L!ouq-<#)^Iz5cm2kKqi-$#%l=Vr`Mjy1 zQB{Fqm&(JtPc+&@%e@Y<|M(Mft7*5s%^^iQ8eV{r(~v8;?{8c^=xIJ1_n=8KbLh*2~7Ybr)rP@ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%88%80-bronze.svg.png b/server/routers/bushou/images/60px-%E5%88%80-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0cfabb30cbe49d976d7dceba05b82bfae281f7bf GIT binary patch literal 1113 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8A%9B-seal.svg.png b/server/routers/bushou/images/60px-%E5%8A%9B-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..773201ec544d221ed541b85c78723df396441ed2 GIT binary patch literal 1176 zcmV;J1ZVq+P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1qu@a1BF^qEC2ulph-kQR9M69*k6cMRTRhZkE5em zPHHqJX%;lG36g0v|>y!=Q*DQT+3gm;{D` zlxAf$jel@V9REx?!y)alU))z4qGc9xhphtY443Z!yC} zw;F7SY7AAS%Fvuwv+bVsW2zzEV6(W$&k3_qMSP82MuUC!Yw)|1BKwv!p#Br$kkx7fbGq@348(3TQhTZrTc#&$d5mv{@DOPSUC zg+uP?qAU@9?XulAcJ?8cr39Z4LaSE{$&}^7f$aJ*M}+XT5IvsF3)nCroEJi)rwziZ z!X8YvMF?liHdmyb=sSh*h}WDG!XYbc5E|{wrgw`Qu}CJ>o7UfyGOIog{E{l8zsV|8SDPk;@r5CVc2}gqJ|Kj7IdzpNlSHe9Z&Ss) zU1;cb62k%E-Gc8a_OJ723L%;`P0#t~spVe0xh zD7;tjUm%?BY>Rqf%Y;x@(5DLF{(` z05UK!I4v+WEio`uF*!OgGCD9bD=;uRFfdh-9tZ#c03~!qSaf7zbY(hiZ)9m^c>ppn qF*q$SH7zkPR53X^FfuwYGb=DKIxsLK%%-#e00006G>tESitSA|wF zM?ulOPn=x^0$EsvGA8PKifnOmnIPgJvMu1!ry!A}nU0D6l5CAZI}~=d?ugm@{Y$~~ zzVvr<0@szNy*c>brefOrGw0u*E8q9?+<`6sqL*Gi)U}c!Tv4M;es@*QoTS>X7Tlgw`!h=+grG6Qdt@o zObu4d4PJUqasksp&dI)V=eLGfm4&vo_a07W3ZJACdFJsl&MapJHO>5+hYNMvMK7${ z@}WJ!%i_gyvF)|4GO0aLNvut`AG4qT(Y37O=#fcIYL;!&6ZJXSydA|mUA&Z?mwY_l z$I-vMrEY2d;uvLSkEgAPd#>!W-8(Byc-v&AO!fT}(`Kpvadp0MO(BOpvhAly+mf4G z%M!O=7M|j_$;WK_lAp%k61>|w6zA^KP=dH zX*v5OuQ;ov;%Ao}s9u@2?n?gR3DyT1{=K>SYC_N{l>@FeDp9ZM6J+HXC9b#$=@!>G z)H}1wKe03Zde0zTb4l!LRvW(!5wk4>Z$$0h>U6BWmhV(R@73_4vQuv0tJ8 z_nh5j{bJYIzgNc0UAA6!Th%eK!zn_{Jprd<%QmOt4Bk3 z+wGI!R@}dDhR|E1wV^)ih0~u2u{7CTwwKeGFwe3yLf>7%XSYfG`F9`v8rLfe$Z$xl zbympOxWYRpkhMuJjXhNRpLhlr-z(K7Z^z{O9||tsJil6S%SY=KJ>5@CUi#IupK{&M zt{EWte5R1>w$FF0b=$x4S1;YKFZO9eH!z#2mbgZgq$HN4S|t~y0x1R~149d415;f? zgAgMFD5dtaSVw#{C0+~N2sI7@%r~me}+!f^YZlW-ls4{K(pDU zL*aI-icsW&#O{3^N{bZkDLs7KB;cqNE%Jp`Oi!zOQ;uMWlhn=jz`z+EGnbxUAC%vH z<=q+C+VA(u)uSrX%Ae2qIlnmlnf-H_8PhT^su=&%oYh~`_2J{iw@i^!CcnP%vSyZ{ z!3*_sckQiCa*Q2YHdQ`hGfUQqI{c)b zw=*~*x%w{+z)ZxB*>w+ZhRh^$E zb$;`9KYk$L#wXPyX74=>`u$w*Jo|X7dv56avezOTO3z$%|J!Mz;n>dk;QH@FtRfrc zK6zdHYTAVrJ=^D2%zdA|)8YRki$&aKbE|{rJiNPzw57aE2 z<9ukkSbk#prL{Y(rm8U3&EvjrtK2X0N@Sy*Lb2219R|gRq;ClAi*&FL>^Z+=vhJC< z%fi|AqADI$pILg%-Y3gG73vn56&Tbe`dF^SZtJv&`J3v3o{5=0-_gJI^rqFfTVq92 zmo9nxsx;~ZZ{|!prbLS!20;n-)h{M~TiwQ*_|}ix?Ec(C>mDq8@-uf+PUJq3H8P>R z7iE$i7VYyj%f0UPZr(=z*=LPk#_ARah@YDIT&y~clciP1&}G6+zJFJf+E{MHRkLOq z&S$-~UhU??lRLDIRv+|ZD)u(mnY^fWcTmd1Z5y&>(k`T2IKvhm+a$;N!|TVT&G}A0 znRmy0buH5QbM5%04{1A1F8ML1o+)u%y;SY`@#Bnl=gvvd(+XP-zmHKKr)+%3WMr_I5oftC>^ovVl)!w)*6z ze+yi$>)%_IVcfHv004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0~iM~I~-xYSpWb8dr3q=R9M69m~Cv6RTO}q+ZOgA zAgB?lI0F-gkT@sA55648)@*(y2A0Txp#l;UjKU9Nj0XKfV!#npmKbAH5Tesa+*r1E zgQCpDG2CRJFc3t*jR|aHbc1efk3aghwp-cWuJ5WpIQ`ML_nzD5p8KAA?l~83$bTjq z*vAr*;t&1_L1^QBro|WhI9&*W;G={G1a30 z5PM}TKG(qNY9zk$&s{!pby3J{^ zVprit@UR}M!IyFoL3k||Xd<5?2&bdUJ2oLmETLo~wFtr&jEQPohQ8P{2Zx=33!#C` zL5%fpysrlb9?QFA_aFYW&D!ogsS*7`5IjsAlEAIa(nJ%@8PPZV`(Uei=W(dK4nU@s z+o$Im>j79{EP@$6RYX-iDzEaC{__v-{G8K$jHu=jUeP?DoCnahvBdv&9qHg4=b0~Q%A$%FG=$Eaavs*FQAi=JW`vN9nrNbl);K`!vLl!j zxhdlnF)z>wz;JSSoBiP@K-6G$-Vhkz6K3#Du=?l@PT6oJ5e{yW zKx`gZj!18_CGy(~eS zWE!|6Su3jeUDLGt!`|}G05pZR9UNxcOJn71lWM1gOjavMRXuGt8J=WG1fLIp z3nj@#9D>GFMDL@ZP z9Y@T*eDNdlWT!sK7J0+!q>~iyb7~bcfZ~#g;V-T884f>0hgt z@qvsCY3OFB<-M@XV`#uoZnvydPfHq#lk%O~n%%?=`Txs5+%BjM^{Aa+0000bbVXQn zWMOn=I%9HWVRU5xGB7bXEif}JGBi{$H##*iIyE^fFfckWFtI(tivR!sC3HntbYx+4 zWjbwdWNBu305UK!I4v+UEiyDzFgH3iFgi6kD=;uRFfhPidN%+7002ovPDHLkV1nso Baq|EG literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8B%B9-oracle.svg.png b/server/routers/bushou/images/60px-%E5%8B%B9-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..21b45f9538485081869f44ffc1c1e927df638502 GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-KdC54Q8E_?vW`*^xIhD02GJHs|Z#8KpUeYNHL56XrIgCDsIi1LdDx;S=3 zMRi0-iMqaVIbz~iZN1T8MQdnKL}#zyB3~&}q4QoWu7@iP7q~G`cWByFy?S!Gu*-#+ zd#}#yar(F6=)3<1`@cU+e$IR5wSA!S@fS}uFCW?Sj4SuuL`l9&?i~VwkJzqDxXgGo z!8@aoyGKFe-DSte{qKLT6uS71ZP)DCEgZoyX@~XS#U-^xCWy~`YT(S_B$?u(#~ z19>jzbi8o8kt%)Lv6s_KQc2A4r1$L`#u{qEn=JbZ?!DvuC3HyQw$P(rKaXiu-;k-* zsM1u?+j8Su-`2_3tQPqxmHc|KsA|H_7jx>$k7zHSZBcgR)UT?#wr>Zc8`SL%%x*Nd zJK&mdg}p-cP__I6(UzL8jCumg?zX>O(RqU3;=Oiqe}ezgb3ad7D14Z_Q9!-?NS>GM z#IMYJwT+9nT<_R+ApVk>-nIkt>vkQU8~nlDnf;}RP1>84GEJv-w$*ya&flh#>3*}1 ziS2~(`uf28j3#R)`>Triw*ixyYKdz^NlIc#s#S7PDv)9@GBC8zH89pSG6^xXv@$Za rGPKY(Ft9Q(u>Sq!2#SW>{FKbJO57T}mibfwH86O(`njxgN@xNAN+DHR literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8B%B9-seal.svg.png b/server/routers/bushou/images/60px-%E5%8B%B9-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd7d1de941b844d67a72e64d48fefdb7eda5dde GIT binary patch literal 909 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-L+ES09{f4K{kpX%x27!q;#?Txe9A>kqnAL17oW~m%mACk-AA+}a5D#KgQ zWmiB{z@G!Yy9=MM3OPD;N72(`^^RHMTx(~qa|smCEqyHBq)@joz=X|^ZEDEbCFfoq z3QU@1RD8d7Zr}&L%`?l-|Jm{W?)Q6^?cX2EO8l0|1TX?`%I%^U(9v{4J(7n-5oIuQ6GW-L-ge z-i{|LgxyZ>DZTYKBVf@<-6sC@aQKHvqdhFjl^7Zdb#^=*lLlw?T_rA)x7Nxkc*5@6TFZ_=R_qXS^=a*^QkKlyTMTz+ zyH;I3#_x3X)-&@t-?|^^Zu`cwgTHxgLwaJJ_JfykrMqYG^l!~N>L1N&zhI;Lzq-xkNcYVt*elUCe>0Q$fRV|Mu!X%rkfF$WL2UnFdU= zswJ)wB`Jv|saDBFsX&Us$iUD-*T7iU$Rxzj#LCp%%GgBPz`)AD;L02uUK9Gh_Gnj0m$v!keVs@i3!I1Sud<3%i1R;S) zyr@S(PvYa^MLmcYAs0`g9s(v_M6X`-U_|kt5HH3&-9$xvY%rt9OlGFb!wl|Db5g)T4H@pt?yTE=hLMZ@q2-I0H8$dkHU2=#Tmst%H6ExOzyT zD(Kb%!`q6?IuJeMHk+J+bf=$Iy0cfKvbB(u7Z5OLsb?Gm)SuA4AKK^rw6bm1Fw*wV z$B$CLHFrB=uK}KB0n}#eI19+fivYuB)Cx49<^6i-GS+*TtqRl`8ehX@;3_Nj74TPB z^U5}C|1+cGYj|xwq-MjLH{;gvnESkVcp9!aUN`0!LHp}^4@-S!R`KvOoH=@!i}Bhw z%gr#!kg;KDS;x!mmgbTp7Sr&J07!l|VBt{QQ z*3|awOhI~+KyM(PhU*T)#-50H;ChE=+r#w+<2z_MW>lp$;mv2W`Ix#RTyHSGhHHS; z%SQ0bB_|xgnQ*6A1uG`#;Y%lg->l#cVBB$X6hfAVbJnqBR5ietR!l*%TcEip z5e(;+i@tpBh|LH!`x3#hx>lBgI+~A__EAt#JEQ<$@8ztbr}*wm^P5iTwx^9vknRfC z>`#DU^qJ-Sij$)m3!>oA>_}&U` zgydnFZk_>k zhvQi`pnn2{bN4XP?&kNxWNOF?dUg|s`|Lx%B~cBXx;26Ctk?*o5z8~BSIJdZ0MvCN z)$mJ=Kv3_j@O14>9dYo&b64Aay{q=AiazE&kvUZz1v~9 z1zfX)NfpZK?yJHcRQ4}*Vv8YJZ~hH@?T|bm&@3G30{gRk$m|8GLfyg;8a58Yj6iaq zOn3RBLI3P{jzhodDIDo7-2&cr$VM;CEGMd28l&tJofuWYI;babe-3dalkDq! mQkX7+$9cLqhD02Gd&AcwBv9nQ$9gNj$P}+YPTelEo7a=Bgo!>{ zrlc6PMPreIsF6mD$Y!ovCM>RjYn7t5YIHPZ1qWSlD@xXL;yt#&!E0jC8ks-)a-US5 zlP>*O@!jP?*OBd#hPSQBi-lj9=vz~|~!opIUg?ExtZi`wub|2NzdpI|#J|O?|{JraL$Xqqc+4}4ElbhLF<+iV^(U07C zTlBW)A+B>8I}W}(dR_5`W7nD+O2=6LXhex$EED%E{CbgZT|oH#w-1C$LvzfxW?h-{ zZsC{vDKSTbr`=B3qyI&#WKYUg)|hw(>#7^i4LAu zXG1O>k^aYE{rJp}wi7#&CjRacw>#%@x?MfBEr%kGK3 zE7wM|pIx(I#?g}sxAX6$wBJ3nV`gI2PT#q)k*S({j>cykm{{2{Idn5H@u`-$MwFx^ zmZVxG7o`Fz1|tJQ3ta;vT?5MyBSR}ABP%0wZ36=<1A|^Mo8u@Na`RI%(<*Um_~YGD Q4b;Hk>FVdQ&MBb@0Lid-MgRZ+ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8C%95-bronze.svg.png b/server/routers/bushou/images/60px-%E5%8C%95-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8733de2a4e57c764746ad4507e3c1d208593ee05 GIT binary patch literal 809 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~Ln6SaoX7J~aW#8+y7phD02GJHy{2Bv7P%e`d)hu_hrmsYMr+obG;MZ_+4I zoRYDXQ(U)cQCObPofeU;nWBy%I}EzYlrp$87kB8nG?@u)_zf(u?m|i@!Vm{!aCI+xG{zP#wWishg)~~Y*&_r_l2rwS+Y2O$k^ol zfni=!>-4Z2-e;^|_*ZFcZV0>de!(H@S-D%bP5PENKOm9Ow`h7(^Rpd^i%az%+pT?X znbmB2CY}9j#hE=8@A`EB^jD_v$uBlYywM*-@@0gN5&po8A;(%x12gal-YO$yfF!zsOtX?yRpn z=$bc)eU$`XmFhIMd&})!D{Z#9vOBB6rQ|`>SMPl{bki7KJSr>6{u6TjM^)gKxb79= zPZFjstLXnF?|RYXc?6r#o(1N!tiE}PZvSsubjI}a3NqPf+t-fJ5U zCR=@-S^q`#dxWdNr;?W4$27lMo6E#5?r*kH>OKCmK=k~IN8As6BWFEY@{23Gpzd;r zJIA@BODlBqKCJt%c6H|t5$~9;PHCCwRl(OD9FaeMiYG=)d`HmVqL>Ff$EIEU{i8#7 zTh#szdzS3G&9_6ZR-d)H_}X5PZSB`X8kb`V-=5!=YxDvgu@H$Mf*b)s19r9&!NMYq zg!KzcgYa8W2$sP6_^tl6aoQ+!eKuG3zQd~K1GPZAj^GIC!1n{~dVm8YN4p9v z)oA9&D#Gh@S4R6az&YSsquoJ)WA2y zH|kGtuU35eg%0vNlc#~YX{CTV@S8wgRVknj9C|SDLMdP!_zUiGB|{zfr&oR@?q43b z=9MSK{mTQFymIKQ9Tj!p6<+z7xPN)zm0tOtxPK}0NZuyOPgtNG;Xz<|TiN7(SQ&Vm zSH3Fj`wz;%Lv4Rg0k?&HoA8*{`aNsx5}kgMzmxW-ch@mWE9@;}7YSEzVZQ?#ja?*E rae>FIMHKYn-u`F(z_g&C;NSTT_5b(lqe_ca00000NkvXXu0mjf-S2At literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8C%95-seal.svg.png b/server/routers/bushou/images/60px-%E5%8C%95-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4a78516e3aaafad9ed69a2635faa18b0b75fee17 GIT binary patch literal 1017 zcmVu!T|d10slmGDupv zY7s&ILi>nTZK`dXAm|53wJZXwO%}B<11s#utKgL{%NAoap1C@A?wR|ZPu>RxyvI3b z&i9==ckZ3JP@%$tqN+sK%>b>yDxeL>0;_?RX?xrB--|;&W57+|0x;ovVIP7UfGt2f zfeTONhfdvm;|OgAD4@yX;wOccla0j@5lqSMNu{j_YFz;K32LU znsIRwbOXI}{C^DiDQq1;b*TLUI0K9l+!7tYMqo3r6WAd92Z7Iy`Kmcj^w<9i^aD#~ z@fj88KZvBXd=%};6!Ne_ zE4Yr}85?F8_z~kbF4|=yxYb}AvGDsO+GQg+Yp{K=@RMEow=xfFw1Q=K2D`_F6ueZK zhc!OBbk4$0cIifC9@c0DuQ1s17JhQja+)={pcUL;u*q4K3E8EalzCXA6>Pfq;vPv5 z72HUX*5+El^#+?wh2=e*!Q5L?r&JZ5AUc|_QRZTWR`4Q&%|g~F8;wfd9hM>w}x)r%t;iF3@5&TlLw<&V5LM!-}!KSHj zmf)SVH?)FH&)g(}pBZes9doflE7-I$N+S4)A;v!UbmA#>g$uw_VcUawQIZNiDx5Ug z$D-W?Y;{W~9v>A>`ho7D!M5Ka7b|>JxF%r?Sz&;^4!Kz2qryoAzaqL+>>=1Hkvj9C zO9R{$?P}nVL!4OVLxmwK7=rJ?siPHaTKl>PzDM+fS}(BNA=aGum|D6B&H;~vtqwTg z5Nl3+2zK2!a@$}#<`~NxT|~D#9C3`*L9qG?$0`8L>MTQOD{T6Z?ONdxqTRX%IO-VB zh>t-_GY`IMu$@xGOPzM2UHYUVUK7FWO~#b_w4CuVXlW|^1-NCfpHRe{!F&@8aLr)r zqjX!HXV5^j`wb{#RsqiqaeI_;0eyu{Ga+q-r+|wFd!I6HDl8+IPlqdUI)%9P1p7e3 zamPtv%dob>--%Wujn^}I;F7R4l;XA!2oG2JN=mWSWPo!7%e+k~ n#yt+aClH&%ecD=~!b0UQfN2lf>ZCOk00000NkvXXu0mjfmXzA? literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8C%95-silk.svg.png b/server/routers/bushou/images/60px-%E5%8C%95-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c25b8a2fd8ef061fa318d6ac804cc904882bdceb GIT binary patch literal 954 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4>>sagjqU7R%!s{4|%#chD02`d(+<|#8KwJ$Mw5srMXU9x;8>vFilfpqUhEX zvBpRb7C}b^4T(wZ3!DW?IzLQcXYPKrM8GA1!*L-?StrwB??|;NtJ@3K-hI>Gl=-6M z#`QOQzWTr2_Fmldz0v90bNP+)pPBEkiBPS`mnwJ6)MfT9t8_Fze!|aY_PHNS1y5c*W>b%tYw=^n#R_}# z%;WnR{?Bc{qVkM!%WF6JjUMe64#zB+e6jL}X4J_}lZhhiuTvS!8QyCuiIkdi>d)3# z(xAi@k+=JKI=73IG04sw|VkNak^;=bFKZ&A8KJIq-^%frA;jI zvfpZTbI;?QN82KlPQJVTH}}uxwxqjr{a!^)SDE9qblq|3HM1A`wXnO8`aiygD&AzRDnsZa1{&{u! z9m}D3jkL{Ie=GRUv9dlJx~nv|y|{hbPA?Va+Zx>N=lF~_70g^$JFTUd_s7g9MOlW6 zzA0LMW4L_mwEA|D-P8Ep>d$*@yt&8d#`Gl~t*5SU^U2xHvwN~&^W24QX~t{P4<+mm zR6SVrVuNZ;-8ReqU6#4k)vGg-TR*Sqmy`b0)_iX9(L380#_x2Pbvc8xy!XcviNyzB z{yF7p8M|#BTV}%4%^7T4x1Ct>V&S!$`AuA$U%Cc6P1aT8E$F?(qRtnX z%FW9YaYtqEokdn3-!Fc<{HV>h057(~ESv%h<~uI?x&IWu&(EpGPDRzm0Xkxq!^4049#^7EPyD)(8S8n(#pU@+rYrez~E!Sjy)(Ea`RI%(<*UmXwU^J O2Lex5KbLh*2~7ZW6P;}U literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8C%9A-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%8C%9A-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7f18c0d35ffe81ddc0afe0e35e945d9229003daa GIT binary patch literal 1327 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 M07*qoM6N<$f-p*rhyVZp literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8C%B8-bronze.svg.png b/server/routers/bushou/images/60px-%E5%8C%B8-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f47720f346d110f7b294953dd8f897de263ceb73 GIT binary patch literal 2402 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 LNkvXXu0mjf(-Wr{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8C%B8-seal.svg.png b/server/routers/bushou/images/60px-%E5%8C%B8-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..37930a9b20abda75ec7bfd96a5fc4a66c3b2e4c7 GIT binary patch literal 737 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9f38c6da9be15a119ad7f94efad37412892531f5 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66S+q~r}3IB762Ffw|&IEF+VetX?I?~sE?>qGkvj$jt|MT}ZjPG^~31TFQP z-#0bYbL9<2f5ldXM#md|k1be3ns=}p7E9kx`|?vJdKyn+UY(p|<^%I(F7J+OpHq*| z{J5}z{lM-;uQ)BEUtP=Toib<6!qTg2AEn%vs?%F%n{A=DPJh*r*w9CPTzMZ-xc?XD zM(+sA^Nrq7^=Z~m=HrSV=c?6dZ1-SYu4VCA#qeHeFPGh_Rd#c3_B`Cn<;PSLTk&3Y zPw2tjMYmTxkQdz(X8U-ndT9N0`AKti_v~8p!dqy$l!f-GxQN5`spmsK=&0VT%XLI;GEg!0=Hmag8WRNi0dVN-jzT zQVd20h8DU8Cb~vOAw~vPMrKyVhS~-ORt5%7wGMnm(U6;;l9^VCTf>y{3QwR022WQ% Jmvv4FO#r}gvm*ci literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8c03adad7bf52927ea44e0d5c97488c4b3d6e244 GIT binary patch literal 556 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66TnrKDV17br0>Fq(L}IEF+VetX^C`*46r`$KcxFqUrCmunPOSafbqey(>Z zaQd%>f4K7c*5&Q8;PCTnTF`M}VXxQaXJtErm`XQv+U`GecIW4_lZ(&&o$Mg#Eti{T z5pY0O=6%kydI#0#dn7V0ZEa^~c#~nICvwzi-HHbq3Kn4pmG_x$(BH<=XS!NypULkV zhXVsXEZ=ne;nXN5{?LN05;12@vs;7D-CW?-KYfw=$@|IO?srO5Vm72P-%pLO*VDbR zSn}G$O}l>_{VFZEaeKv&pYzL)%dD@m4t~WiB^H}k|cO+8<9f?lww) z%+j8G|KEu>%oA2UnDs2GCA8Y&=T1GB4LZq={q9;87Y{Yb^@nb--+ayc2G=_FDIYC% z^w{b)zvi;IIOpnx*>&v_hrb^XZnAjRE0(HL?ZdDmIMaKd;QM}HkgArrMwFx^mZVxG z7o`Fz1|tJQ3ta;fT_d9qLrW_oGa%A7Ft9Q(5Wjr!8j6P8{FKbJO57UK`ZBYC8W=oX L{an^LB{Ts5ovPNP literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..13f054d7a5347dadb77f57108407ce61c98de484 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66TnrKDV17br0>Fe-YwIEF+Vemi}m7jvM1tAAPYq9kpWCRZ=+YHRCy#}oc9 z(tqf_+``Lv@S6Vxkz0|R-dFCn$aYViu=NgmdD6GL;l3X&?(E$B#-`&Jd)0%P!TcX& z9$#es(-l~B=S`6igI@z5v#kZ|f)7m3FK$fRacjoMOYAWTc9P*|X>f<8UwSLK~Lmw0~?0QwJ{gm^thQ;Nk{0;YwgOmJETuXTDH2tHgyY$tm=RV$U zi+}9e`u6IEW7Ah%)!r2KcP-QOJ6B&-#~yROcfI#t!jeA=^fV27f-EmjRg*Zj_TNOS zV-XwPe=a{Y%eO?LLO*3EFYEKT2QMtF?&%h6pDOu$?dcmw3(ueaxKQ2VJCnZc0rn5+ z`^6f6pP4DN_3tl6W~Y?ya`Tmu!0=Noag8WRNi0dVN-jzTQVd20h8DU8Cb~vOA%>P# sMrJ^yZD3$!U?6_^;x!Zvx%nxXX_dG&r1fQH0W~mqy85}Sb4q9e088i4TL1t6 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-bronze.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee944414da270bd997ed5b9db2d5d73f496e6f8 GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66TnjFsb9?tWunVC?gBaSVw#{C389ufq-k$Lyt7KJs;8>6YtaKNz;=!CB{x z>HKz$=J$_Y7uvJ+<9;PE*5)Vyk+tn&+t;+W>^K>=VfWeXTyt$zK0AIpenw~aWLCFt z`Z@P`w{djpUhXdzdmzhjTTjWZ;RvU^H8Ue;qh{Hv)gKrtB2t^PFBabw-EnAb0i%%= zuU>^YTlvKFWxK@oKiznUWwrG+DgHe@O^>ElKFB(x{qex;Zwbb`yRVm6q*>nhDH66U zXny1>bCab<7^nZM zqwq^ip?JfQ*~`9uIJx5E>SZ+!MhEz3U3#|W)v{%Kb}-o&9Z28rQKyy=ANGH7_g&mS>Qy8(W*=Q`{9o*9iusHO@4wh7 z7YG;L&0+f8QLAU+aGozG&+$sI_{|5-9v*xCUnotx5#H|p@a2QM*9s0C+rHhhTdG~q zn#p>{`gIPAdOhtbq;%gTrqtix$FRqzFucgi&K4M1swJ)wB`Jv|saDBFsX&Us$iUD- z*T6*A$SB0n!phXp%Ggxfz`)AD;Lih@RVW&A^HVa@DsgM*-Md5#sDZ)L)z4*}Q$iB} DAE5t; literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-oracle.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1992e3572725314a1b3cc7a15a97ee09ac2f69d4 GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66UmIe0F2m4Sgz{Ip3Z8glbfGSez?Yp`X~(*tT?@O1TaS?83{ F1OPM8iMap( literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-seal.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bdc5a1c73b7864639d41715a1f914ce5499489 GIT binary patch literal 516 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66S6rMaBfhGsG_F!Ff1IEF+VemmVa>rjA5>;5DEn|?TpD_r#~<=({DyBPZU0el{8Y>P=>eALK@Z_BK2~=KQJp??78K=bA@{}4o&rpJfK&e5W=i7KkT{w)p?P*EA7}V!rD$h<2OC7#SE^=o*;l8X1Kcnp+u}TNxT?8yHv_7`$K6(ukrVH$NpatrE9} Ud0%a8ff^V*UHx3vIVCg!0O!fL`Tzg` literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-silk.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c05b4d2ea0b3320786bc5ad97ab1cab1eea77e GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66S+m>BFfUk7StT<+=O7!q;#?KDSkCP#@jd0pMb-C_0)9agNdT`y!<1FtL$ zcDb(ix2ewgIiKtIMYBt^Rz$nDxGq0(;)TG{nO%-SuSyE;=&0me{mJsTt#xK%x!k<+ z^7h6s(;V52&EZUc8XnC|m05N$dC%g2ImUTXdpn&Lp4gNjX0!5OSNI*ZgLj|ke3@|9 zb&lD*%E#AUeV@g0c$k#KX=_7U?n*R{kxQxfUj$v+=+z zIp6F5t-lrbD;;HFD3-Fx&)@j1{*H8Fi|RK{<`0X~dH?LR&km5jZIfx0+uVID@A3nd zn^}vt@t=ELduvCbVa{}s9Y1?m4;Zdo@z__qbkQu)RgBBO7@n}O(9C`_#Yn8f%Gd8$ z#KdWadV5lrvsm1ma*R*&vA^cyHB$=1PDQA^TCuOE+4+Dn)76u#wOdwge9bK}cio|B zZQhT8v8Y<&8c~vxSdwa$T$Bo=7>o=IEp!b`bd8Kcj0~&{jI0a{v<-j^gE^sBB~diw b=BH$)RpQq0mLqp5Py>UftDnm{r-UW|`92Lh literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%81-slip.svg.png b/server/routers/bushou/images/60px-%E5%8D%81-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5d904447151af832f3e61c99da450e37c33197 GIT binary patch literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k66TnrKDV17br0>F#hp$aSVw#{C39qY+*-{(_E+U7lq zx3*8O}|aJM4A1Lx?1<#MV-yfhpmDqJ*bg?{a}L<=f1a0<})tL z&0}Rtk9o}Ux#+>_uIba5;{$D?`Dz?Lp7Us2Zn^qLpNNI+D{n!u2%o}JA{ECT|DVJ( z|I?5AzK!*NK0mnpe{NFpNz;7```B2H+x|1vOPqY@nT(m4AVXbH>h$nE9LrzKOlzFB z`h(>!FP89}!g;4tPEJx^F1g&@ggxJ_X8-Z+Cnl(P&WcoHc3tk;c)Tijn(1N7imN+b zYl`=U$UJ0Zy`RCeT`&Hp(^RYKJBL=cK24jx=iT$?i_+aWb!O=i}RF@N)75 zEPP~qntPpR=uAZoKK2}+LQk$Yw!PhHBK3F|*}{svB=-bA6o` zviK#7?bCocQ<>C7a;zh+teF`6n%P!!!>+@(i)<(C(A;oq`<+S5^G#Ui1#o@yFG?sE z%YS7)tEu_)x{uZ@XCM8XfBv}8BC*GEs&=0Z4&0K+6D$z1_t7nFJ42@kei>9nO2EgLt0-Z P$OZ;aS3j3^P6lgNVuz#AX|J_DD5rBO3d<}SwU^fm}|#7wGILT<_TmcC8EEudMJ zjy_ERbJ~H!mi`XlBk)+1Q5~|4*|&71^+n7}jRs&CyW!D@dDTS7Z#V%SIL6ArqVRO| z34M+}@{H{YjF}6eRrQr;>^yK3_ycqT$AE5NBc`yGsVNZ z5X`*;9J2KH0v7~v0X74-XY`E&%YmPgz>@#IUmg7un71hjt(LwPU_0oUAR z5HpQVX#k1g5l8<*LCiE(O9N;a*1WE$w2SLd?u!OANuT7-YuCNYIv<@>|J2YTG=O=9BO!-XY55_%v!Onl-5kB;hml_?fsxGU`OcW zP{Vs1{gcR-Xu;Hh@1F4!8EDi@BW69zwma}VL!Bd-4KQO=h00000NkvXXu0mjf D+uDya literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%9C-bronze.svg.png b/server/routers/bushou/images/60px-%E5%8D%9C-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ecedae08d131610e1a0ecda603aca42f23d1dff5 GIT binary patch literal 528 zcmV+r0`L8aP)&dE}1!dCp+^?Cf^h{XTP&&W_EHH5{X0yR)9@lAn!)H zMFnU8>v=cw8+`)Jf~l(lZD$mQpG}<+Xgi}Y{A%h1&9s9-Vff9|L7*tmcS4ykWGM%Q zGGTxbfxZ*!goFDnRwvvq(03vk_JF;lqcChI9NivP=sTfa(hY&W6Y7LN1o}>-ggsy< z>|%Hf7OH;1Zbk*_^^~rzJfOlz=5O%Csi=2pj<0zME4g zyiAtRBrppsnE6j?z&UUV90O;3|KfsXmn_+K;|ACRHh`&aHm6Sbiz;vk904c5mEd## zgxc^uum$Xs?aQ8Ihvw2<%ej{p)EAFifxZ*!i$_#%ErTQ(_CU}VhLo@e(xDX+X%BlK zB^(k8!*y#O#i8{i(DX(!?15xBBou~g);x-T9_)nQ1^P}T!yc$w^C*_|3-Dm(Q6vo6 z>sg4%aK+SU3`du6bcU}@t+#zD2ULbHOs%zjs)rZ??ttOE8|fycycCyh literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%9C-oracle.svg.png b/server/routers/bushou/images/60px-%E5%8D%9C-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..06fae5fc918b4590b8a08dfd82668c866cb2e1c9 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^54k0nb(L85c5Y!{U|jC$;usQf`0X@X{pLWC1=WGkO8I5(p%N6hg?vDKRW>yBG6B>qiE4gYnJkwNck^VH*OSN6zTbF8sh<=5QI z+q70K>DY|4j@VCY8<~9@en%?#ifpjR37xFeG-1_i@zh?UCWR>;+v0lISrY$+&*$7$ zxpCq79K%;G;voVpJLU6gRZe`&a+Z%sy|MD!YNZp~FS(v5NKnmwD2UJCV#yW=V~b z-?Aq-&GR(>-oK9Dpfv8JP-(;;wz*HQuoKNe6owFD^^i|5rVmeYIxIa(Nje)zTXx7AayeUzU8!dK1>$z063j zG~$?;sPO}#B)2T_mOPWkeoWOtUMPjvoO)fD_?IbJA*3#XnF=6InLo}W-BC6=&tI2Eyki;3@w zj0p$Cm0S?!cwrq5h%0OzPDL!?o-oIYSi&2$#O>FfXi002ovPDHLkV1hw+&msT- literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%9C-silk.svg.png b/server/routers/bushou/images/60px-%E5%8D%9C-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f38240891770a90257e9fd47a5998f6922b970ac GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC@m*H53nP9R})TmhyCQ42d}Wc80GRmDro$AqZppL^US~O+Gk_@&?zfPm4=g;I`ocnrq zrSap*JBu?P-aJ$JUFMzn^F8I~ZNDGdB_Z@(>s#%YM-R9Dv^VQ?D7b9%!EbjYmdW z-C3TsSBw{)UU=W+=BkcmH?yJ{U7tL9Xf9iGQTk)L=*LAeA0IrmlC4Sdyvf3Sw8rO1^{pr%dxSk25=VGeqm>0{utJBtE)!TSTX?>OXSe%!PBV zt9Gn$t18i7@sVT6e6c;NCY}g*%)9I0ciju~ueeX~6F+^a%+GwsJ*I8`^H%0mmo%@| zo!@^v?XGri{MTz)4VFuLBfdSKATw=$?5~4$OMfnk@IQH9<;y~C-TAhwoS2L*YW`9_ z7jSFO*)a9znaV5V=d9miZx+2mxO#>9PV1W~m05u+<(5rbvmyE1{=b6HOsV41Dmj2>DT<^rbnEEN(UE#&m?G3Y% z6_~#Sq*>iE-|N9BGH`jF5#Jb{W4B$9BbHk;=#=P= zQ`eUEDGBU~-ZSBf*BaY}t(Sr}UDKQ!y6$h*`_45{yFeCNBafm$O?RPsS(w^x zrO5mphHbX~P4QNCe3l~X=j7a*9f6_CRUmJ5KeA;=O zscE0ffl>|@^GCnt1ge%cncX{i&HuuDjvZ_VgSV}FRI2@oZPo?RCATk%?wsu>U3Te` zf?A+iLF4nDN6HNeJyn+?r~h~S$F$(?od1VYWZnZaj%tZ(L`h0wNvc(HQ7VvPFfuT- z&^0j9H82Y?GPE)=urfB%HZZU~%Kn)C@u6{1-oD!M< D>E6JW literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%9C-slip.svg.png b/server/routers/bushou/images/60px-%E5%8D%9C-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..696f7792c066ed5f5a35243f237ad18b8f98b2ae GIT binary patch literal 856 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8D%A9-seal.svg.png b/server/routers/bushou/images/60px-%E5%8D%A9-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..95cb3e982167ca322e0ba8d79806852532500fa3 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k63xc6j)zq>+=ES13g_FLn02py>T|*CsE}1$NsX6ix*d2S7-}uy`h=dSgI_z zQD9=kPv(dXf;lQ?+x|7I^VpEmxHLoMh|`{9w--5Y@%7p2oE<0Eo#}FB%jL4F_oBac z&z}AK&hMJ{mfvljTYfiMKVwUR*K0BJoK0W)FABN_82rjsNx#sb=zOm-W5vbeuL8x= zYD8kU?=$Sbsi3Uen|505*tCp;VaE&a@h@3wlDXZ(ZM#{@+b@Q*rk4Z==&X~=Z~3Z}>i*}!ccyD@%>=574XQ?l9Ah|juJd$QfNEn4BOZ>!#1OWpfa z?0?u{wd=9$e=@dDBuj{1A-s+h=9A+UNfgZ*K{vmf_A&Qm>@`+Mur>u*9!jxFsx@uc^Z z@(E2T!)Lqq%vr-fufqC!-1|$fKbvqJzqzV!%fU&J7r7+oT5WlKK}%P4?NP1QYqsS* znzfy;QYu|-P3fUxM}w5=JDEF9q&j}sCPB6)pC=Y=}V_n7gpbWvM<5K>R;)8 zZ-F@;kDNbrJ_viPT5Kk*xm$VW&c1J4O}QVd|9D8oer(=Aqpa&C| z9Eh)7|9!f)D5u2>h>?+%v5}R5skVWEm4U(L)t@v_H00)|WTsW()^O;X*A$=z22WQ%mvv4FO#tea BZRG#} literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8E%82-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%8E%82-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5475a063c10e6ba2a4d3ae1e9e9e7efa69687414 GIT binary patch literal 722 zcmV;@0xkWCP)0a{s)rQ%EmuH3maRpwGf+FSZEOz9&Ccw)9~g!QyKleWn>Vwwy9YHjH8mxo5%IdCz;R#|A>fvv1<0-v&e6?hN402YCzya`7XM9uJPvujy< zhY`Ag5#8zQJ6JOvjJaK7Jq3O0+{Z1iyTBx{FQ%xFyv3UBV&-#YX#zV~!^?5y{Fx!) z`D3^X-#1~t;7ARZu6(72_o}EU5UF9mgp*&HrG`IyackgF2_ZGS<;BSxmeRuAbnL{H zQw;t_{yNBivTV84L}>9WSo@2>bWqq&FWLhQE68 zA%&d5&@k*%`Bl19Xc%sKvA=33g@)lH3ONcx!?1tfP5!Nigkj7o-M^O}kE$pzCveSf zqx;QB9cfAXqqz)x7v>C#)bNBCKNjW-j@0mZFMcGa8F-Ez-8WQxUw#g^oNvaJ6Q0|+uVzohl@peOm@oOehM&Zh6P~NMr2qf`07*qoM6N<$ Ef*w9iU;qFB literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8E%82-bronze.svg.png b/server/routers/bushou/images/60px-%E5%8E%82-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8456ad5dd53eca0ff2bda79d4403695ebd622a1e GIT binary patch literal 608 zcmV-m0-ybfP)8C zNF)*|FI|qu*MJ#d8W;x>par}D&%hh-pvn!PuIg`&{T8OE@C2{|ECWLYj&G8lfIHw( zl^bf`J@C%=$wKXGspFnh{Tw(3P74`WFaaC_A0^rLNJm-QSTBKOeyamh?T}q8ft+sJ z1bR&bZ13S+VE&hVb>ITHBE1hERNL1?m1PjLKYc z4+>LZ9S345JmMmJDVD+`roy_1`n6;bUziF%YT8~TgZRQ_NC!z2wqQUkg-2Y3`@~Xs z#ATKa5|>#zNaCbbb)v8Z!(u5sVk)eAQ_v$B#22Q*jlaJV1};PTUMz)2;-qCkkc$x) z;UJfrE|b=?WDsAtJeFFLL44sdq?=+XJYpkU&($mco7P9JUU}j7T>Vxuh%an}^Dnh4 zFP!H_EQLpGgkLk|gnzJ>e#(@C9L``ToLx%(3*oF}kT24pxbT^D5MS5`XRqpsbP!+I u2=A!R1lVXpmQu1rMgN2ri9{liGVlq+{M;Fty_o6%0000QB;O&p8KVlsPn zGqdyEIoZkl;1+Y{&OP5Z_c2eXsHo^=HhT+5K|iny_~I=jBz?en;1v)7_kHDr%3Z=n^pKs7uZc;5K%z&H`urr0F>hOkkUB07w0#Y1s-~CLXSq*#+R3n>sNE zfhX8To8_XLIw3XS0`a`;WHthhIBAqo1Fo^Q(PruQk*Oi8*$CLV;&3hr$T9X(TF_-E_FEOg)o2N)M*{E2Y|yy+-<>9_V6DgHVJHL zQ-5N)6pGUDtPvXm_O+=$BFyc=E$m@CW5kw#y&fV%4{3nyMyw8u3v;JNY4}Hmx;KS+ zGf_kjCwUG$5a!K<((p{mdPBtX*afBG`4n|VfqTN7nNb>ENKwcAVP9$Z=NkL(0*{3G z+&M@4TgWkBr=PU{D0}!`PbRiMirddkXv6Djg@!POSH6*)7Pp@p zwc$Bde*zs7x1XC3|1++9QTHrB`|FPV#63ObEySWPK$~xX(>Q)zsHoUL`~x#Y<){+k R`<(y)002ovPDHLkV1iU-O&S0I literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8E%82-seal.svg.png b/server/routers/bushou/images/60px-%E5%8E%82-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..09a11770faea2a67623d4cc7528d2d9408ea5912 GIT binary patch literal 650 zcmV;50(Jd~P)TEJ;K`RA_J5Ct>)OiIZ#TGbi23 zrqtrnTdY`-vpX&C=5S0@d3r& zaI~lm?+WyyW}ITty*GZ})SHe!iv+W6;7+~i45n&JzcTSA5wAz9*dkQ;ZOys3^9cA$ zVYbBxv@=v|=~cp;d>h>GcAg--PS^on*PD(%PYGuC@!PVIQ#R2jCjLO=cUKBtP*nG0 k-H8m7xxtrYGMS8)|6K#5*QR!{=Kufz07*qoM6N<$g3p&MXaE2J literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8E%B6-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%8E%B6-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfa25631212f427b3d72e535eeec812351a2b04 GIT binary patch literal 1103 zcmV-V1hD&wP)KX;Y!y5e;)UWiIiBL+n8-4#s?v9AqWWz;^jd!2tkvW#2boW@(?kiJ6?jWMjf~FaHiNE-LBJJ zUES@3`QWfKJ6-4h&vZ{!b#+05|2NGAY7YYz0QZ5;0)6B{8*mQ@fPaA5#oEc1(ZFq_ zSQEE^)*?-1MH6tG+G0(7TcEGZ_?VuHH8Hn1YyKGq+`(S(Pe8At4Ekml_F_%EUz9~%EBGqVrx=_5_=b4JnpjheO+UOz{IhG~CeTuZSs%2MtXLC!iZGj&SwI(V1wRF* z=5IM2r*JFQ#0lzXm|9A@Voj{i+qerQ;7|M%+zGsqul?kFg1v|iWFoQ+_)9tVmA|xy z0A-@hpGWSP3@yM>%kd`G^H}F~yZ3Y6rTiOM{LttXY-V-wu`y}H%OWQHX zrEV+wG{vsc)X)t4OtjfUF>)+MAGbI7Htx!2M4PN2Q_MK*v*ZbY#|d&}#(3m67G?54 zf?NZDYnEIAaFzn^sCofESj;^HMkUPIhJM4bHNAB=Rw%}{JLc6E44xr#^;{W?EVD+L zDg%QZbC-Y%mfQg{n;YbAKRMqkhBl|n|2A?aZ5m&s)QHUz#mEhyzXzQiiq3Q7i^-H$ z?9;~pSm{ZtA9}BSiHv*g{fdFBKyQzFA1HbO@To_=8m6HS8H+Q})fNIfk@3dRRjZIo^R0*>tpE8_a)W@oKwUO`x3Kw_)YO}1y3E=GDWBY%-B_k?$ka6tD&aS)(Z{lSkD8Sj zZNazpnoh`Njpzxromx-atN!hxd$@asJaIHRI+5}JLG^X`eMdFQF|-;qXwabk_z%++ VX>>(255oWe002ovPDHLkV1no62T}k4 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8E%B6-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E5%8E%B6-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a1dd0cac3a677f2b260ceef9698afc543231db3e GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k69TR*wv2-bC?35`+F#r;Jl zs&Cu(-?HW5QEcyjM_29r{_gX=yL-R?zRRC;b5rW+X^x^ZH^sG2*3#1OmKEP@_w}{8 zVL~GZ!~PC~eAXCOWxK48LCw>%Y%B^N8Hqm85j^D5VQ@0sspW@LhyA9WTM|!) z+iNFn580@;-qptM|D*H8Stgw4g3pNcT{^4VHuIG8G4pA!cJv6?nJ&6LCrxkd38@u_ zo2AY3vPT7a`2`=$&CSjEDPzrtZ2oALpE!`j;s~d7o57gR@H*Gxvt+{#G}ZYyZsI zDlO_P^v3pc?9DgRdgn{>Zae>E*O^6oN{Yhgei476^`hrQ$Z+V@g zxBYYf%Pci<+vG=%8|MR4zG{hUL`h0wNvc(HQ7VvPFfuT-)HN{GH82b@Ft9Q(w=%ZW l1~ClwT1VufXvob^$xN%nt>H}CgNr~744$rjF6*2UngGp=o)Z87 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8E%B6-seal.svg.png b/server/routers/bushou/images/60px-%E5%8E%B6-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..70f570b07bb994431b39f71cdcedd656b5849a39 GIT binary patch literal 909 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k6GE6xg|})?i2y#r+T_LhD02Gd&9RQG*yEA!+ncBOXE6|X;W(_v^3Ugq<%}B z=FuJ5s(WWg=FIM<1+IcBfi7D#yE61OL|JlOq9P_fP^fiqb?tG~QVV-L*Pw9LPUEWo zx_da1p8d7hx9h{sJ7+D=Tkik8Z~AAu^VK_qrswkfzODE7=|gds99{nNpSwGJpT4}B zc0^vRw0QD8zIB$5r1)npKfmr$a@>m~}ti9>?Yt5G#`6jAa(;scTrInOi z`J+%!ep>r)-;Tn~r!LR$h`4$4=-of}?mqbU>BIVjpG%wawfWz(U!U6EpPi6cIm2Xs z>qE!AE2g)vXRn{u{+_A*)ZyjR``(|{pBdl1W4B3ldz;0Lmrv*Vf8AX5q3-3!dzo%N zyI1N|PtAAP6FO~f>g*2Zxq8#*y3T*Aq_$S?B;U`NBU9A9Hf_JHo^)pMbD#fW=Oy=8 zypb{$yua(~oZ{0iHI;_H-XyBK)FeExKle>S@Z-dJSvR+;xg6GhzW1XLyUU&!)!kR( z7d@Q$|7=uV%$XhAwaT`wcd@yD=-nd4eV4;|_e37~Hm&Hs*vAmjob~rz&IWkj{M_3) ze|5w4&KsAC{z)snd$~`C&slo+A=!l5?;mt$WW1A#>b$)6Lf5;8t`@hB#T#cbT`%Lm zzF`ONj^i>u<^1vo7p%U$BEDAQwVWJl|JI8l2Onx_6~xxuDf;(XNp8&}&wHAFl{=Q+ zVQfG8{^}md$frvra$nwknynPKYL(9(^+)X9dK123OFt2bAkxyxth8*`%G%cH;yc5R!~A;AoHH}R zdBX>GF3$5jpPBDD-|zFBrKF^!q@<*zq@)-|`ke1#ti_r59SU#L_yjTdq4 z0Bb6QGqBmb(Pr9?TLx8No{Zvi?akKf9gGj6&^)*b`*d%%Uhm@S{+FDc+i_Snvo#&X zCTW!nHLLKC-ptnPPdtky{WQ@ntMQ-w%+_l+?&+VE&aA zZi6quj$rUvsWmK;+wgCorad^RQ_vB-9SB;}L%G>%&&FU~4|WRpOfX+gL#iq~bItV}ls{33AioV2Wp<`mqC zH}pOUJyIWddGO+G1sS|hnoK^2_hsveTWLROKO_ELXC+?1R(vYG3GBpaI2TK$=fzU# z=vuELXV1HsH+*C8;ziP=ai>3SgWNCR0lI`^$rsTJDhEa2>tzvBy zGVsB6!Mv(rTRLL!zd}*^3THKb1JP;5@uE+(7}Wnf1jXg4L(-hOWgonC2#U-@KVpOQ z`lc-#hM?H2n!#(hTNjg!8p|AC53WOaMLKq7-rpyOz(^}iOaJh)9@ok7b;<<39k97s z?8M7>R654iPJ}(vY-YOvH%N#0>v4^AG|Zb>X}YqjsvT0twiACBkPqDrsTWGE;J7qz z9+mdC^Kg2LYo?`n_5o=!aj^RLFXj#ImCoNKB_$;#B~|_hnedJ^Grt_Q00000NkvXX Hu0mjfVfN^r literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8F%88-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%8F%88-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..403ef6d6f56a6851a454f3d09a44cc6675bfa95d GIT binary patch literal 990 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 Eg1wIszW@LL literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8F%A3-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%8F%A3-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..335a47ca449ee4a77f9bb569182b081d04bae7a4 GIT binary patch literal 917 zcmV;G18V$RR913H%UZ6RA_d9F2LvO8fQp!uu~Nh7p(ey28jXfv z&ctH&%x3O+x!rlI7nmOmw{KwH`@hWW?(Ca@$K&yMJRXn7BT)rx2hIWyfIi?eaN~c9 zN`lqE6`&uO5ZX9U7scUn;5P6I=mxF>>-F@;rU|$Sj3FmlXoJA4D2`izyyavJ^H)vj zXpck{a1t1%bfS6S5wImrkfXq;;IsqCILVL3T;PtNBiwp`)4(#hLVzr=*423# z)Bx>5{6gyn4q{e-8cPGmQqql@fdsAzaVLOY;6Rdr>oAXfJMasjKB1UD2_g)G1VRlP) z!lyKx$6bnBf#*zpCm#atmoc^)^IBUJ{AMsar)JFiU)tb|V>TUqG4=kz<=(phoD11q zz%5__kPdze*9(K|Oz<0(E?}2~RuyW2ca+``Xtm2)qN^Rojsh38giOQJe-vk0QosPo z&v1jLU>EYhJ>W#Buan6o_zn0KTn{msz))!XaBy9R*+#ZlF$RE-jyhF2%+%Sq>)`7c z#k1S)Dlm-8JzOAX+4CHHy%hRhJNPR?BjNX!J>S8Xw3Es@_$xvq;UUX*Nm%+Qc;n!& z2#tjEmYsI+wNmJ-xP)z7?%{Pp-&+TNMQA1bBXsRD!<#L;9~g1)SA zWvk9EB(tO;UcyblVymxW6SkL~Exa6d3Vo^%EYM4M(6U#=@F5lDDt3lHS@wn)I`#|w z6+6Sdmc2LP_-()vp+6T#OewSy?y>CML_3RW75YX{DCs1{8swVws%gfhFstFaFuo%R zp;`xHSxnt2{G{E8`TFU^eDRE8YG`T9>0~3OaQC-k%{C=%iP3_oE^1UbzG4c070(&m zll_S)`OX+xF*6h=*(aEPVVH3=U=F>c6NGRZ2A%=uiT>`6MG}W#w*O|#cWxS(jd>z} r!4&7RnET%2@pwEQkH_QjR5-r@Q!+#jv5Ly}00000NkvXXu0mjftg5Q_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8F%A3-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E5%8F%A3-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..09bed19cc4782a7750bc0009b7dde9fab1fe8ce4 GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-?(dHI>%7=LA8U>5RpaSVw#{C0-7N2sI3@%m*yccsR0=WVYxJ#$8m#ZAA< z#OO%V1cfM8Coz_{hs$)ct|v?8MQzOpTzyDRWDAFuK#vd?&&C7MlVZ0XdaeC_i$~t` zGc$|l&RiV%pxoTJ{rB1THN|QF?wd1rf8)P#skPB=Y4@H3k3#|ypIvBjxF8~M`-DpH zmKi%r6a?;YwCFD2Z(QJiKb6y7fMeezVTKx}Mu!P%OI~j(JLbAUk>N*T+7#VYH$uL# zZ&yCxay|W4V)2Kv><@ZfGWrWS*PYvvwf5lGzOsdSJ8UjTnX5mji7kj+Cc0f@V$3(I zDkt$hMwd@1=ds>9W#pcJ%O+{X7N+-QU$-1gygqMR^kqNq*NxnoWnUiE>pwD@FS;&Y zHK*vS`j-Po?UIr02-+v`h=v`ydSnB~*%tckM>DV!!Q7k_X{R$M6ea{>M-&h^XN z8TU;{nj-R2GEisH1dhP0h=-rOIH!s|IlF7s+})Sg>HJu;Zr!u}^W-kD`kyt7uzvK> zl5Kyi#s}@I&Q~8z+P?dNS$>Crx{IhGSC31`hbVC!_dCZ@ue0?CsJiuN6ov(#lL|{^ ztWR+HF1uQlafYq3_{NFKF^jwv<+p!PUmjD`n_2y=;4-t_({is*v*sM};@$VW_WWk` zUk?&9)!TWeP5Kjg?{lF1oM)3wcR1?D?bk9+2EfA-~TRRIOET`8`pSe&*W*4ozhq5R%XbsL-$5(%68Rl#u=S4XE(5JyB%Y(r))x? z@(Y&mrkdF0S2NvhPne!wEp=aNO|sY%>syx3s-GDN3B1?!)Be3uWj^O56-lL&0)M|; z^5*w^cC#q*+@inv-?;aw-JVvQXd?v7Fsdc45hW>!C8<`)MX5lF!N|bSLf61Z*T5pg wz|zXl*vimU+rYrez~H;`!ekT;x%nxXX_dG&wAD%82WnvOboFyt=akR{0JXZimH+?% literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8F%A3-bronze.svg.png b/server/routers/bushou/images/60px-%E5%8F%A3-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..732f8d49153afd09ab1f84540ffa6b61a6914a9c GIT binary patch literal 1211 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~Ln6lqKdZpR|;Lf%&kfi(^Q{;kPqlGeX=&8uo{pcXo1ih9w_z^9@z$irSKq ze6f9-5G!|3%?0+4Cs%QBX?1N8F?`USA0*%66fd$wpl0I&4Y6F)fRK!py%MImB6r_R zn-OomJJPt;An)0oly`Hhi#K;vygNN}?#$0`EsejQnaTbB>D-BIyMA`w{K+2gxbVm1 zrawvEm90(-Z)jPo`5Np{bB~xAU!b*I_k8{e?RMt19#6z=Y}vy?D%-2{vYnaIO=~-U zUvQhZARvc_)h6_F#s1p|lH&OIf18RFEM&8LY*sMYte}qLLFTNzuk*71>|CbL$7thv zIons3VSdIhotvdUH+wLz)(E^ik;gxyKPKY-BhEgq_q`7^FCDW2SEci8-grBZzhL9C z?=uc^yJ|0%UG+DMS=Mj$#J%$TRSn)Idv9M$HY_+Szsjy?QnqEywC30KUwF2@D?GGk z=aS>~mR_A^e9U)d-4YL;?EOD>@}{bO_a$d})?NF;DA$*p?b{Xh`g_Fp9d~82YW=r& zu*ipKy)m24w@=t>-9LxRzt1G>RoE@hwc`+9jK(BSIooRotzGW%X>C>8aObL*$g;Cr z3fkTOxHs`lQt|x7roV}qzr%;Q^onIsWYhB!0d>DgEQOPnyioOS`)Bxf?Iz~sw*TrG z4U_c##(q*z$nrW^cQ7vK-L2VX`Rh!CHJj5uoaSWR-SSIQ+vT@b@QMXZULO~=KHA7) zFShiDT-}MSX~DidmRC0QEDd4%WS+~mz4L#$U-r??;&5%|>6;p&?3T0{d1)@`&s!uC z?7-Rj$frvA{%%>Ts?fDJge+FLhHP%BowasK^^{etJ2K~FSNUu%J(^vx+pNOj-us%< zx@WItrZ4}j_Hnm`QC}akb#rLc>qha2xT|GG>IM~yH6GZ$m-#Fq^twi~yzoPH`mU9c zlA9v8>}Fc?!%E;s%Z9?kX{Qv~cf_xm`qq7G_@QHZvprKwtS%H*9{e(8r^?YkQ&#NJ zxxfFq|LT74D#7ito6q0!(|xc#@P$gd#?~3phg^@JQM`7OeRbEhzzkRQYqj@+82Fh+w#s|eeM^jD*3MW z+;%F55;x5&xLn+~>7&Xowm6oCf5Iw9{8m1;(UiZSx34hd`D3l<^2<4lZy!h)A6hRY zUO2~{Ev0S#O}%wH=SiP<-?sX>cG%_#MIyE~i+lHHK2wX`GktsTKlaAEynGI6q8z{+ zu3F+6QIe8al4_M)lnSI6j0_AdbPWu34a`Ff%&d$}t&B{x4GgRd3>s1cL{K#3=BH$) XRpQq0(c;Alpaup{S3j3^P6xd$2}3jNs5aheCOU-)X;gDoC~U2@?^B?INFt8PZJ&&f(weFo;{5pB(-};33YsXDLM4!@`aYHriOvd^dH&R#qT7807Sb9g} z@*SxQKjm<|*=@R2|J`*z=5(v@!V8JMbA=i=zw4^K_)etxQRqdkY5n|je4{?D7Yp0| ztoBbZTim66?rU}^F`v)gublZI{PQwJ*81s<>09mRYIpXY z262l1Qm=W&tFQ5SUOsQ;Wf=uE>6ESoi~^!@#g-+3y+`{B?45o_MLbbVkDB{&Tj}d% zE}cTIRWFmR?PomZ-n{3LrT^@=`)6M>`_0>P^vJX`<`>>KYk@7+P2v8Cw~fY8x0>85lI?)aavV$jwj5OsmAL;e+9k$v_PZp00i_ I>zopr01QfGg8%>k literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8F%A3-seal.svg.png b/server/routers/bushou/images/60px-%E5%8F%A3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9952ac5de1e76450ac968fbd40b4ae46f5fd9db8 GIT binary patch literal 810 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k61X_&6$NK%4GoMjXYf(Ln02ponf0T5-8F(KPCOKn$TvkYzLO!S;w4MHhx^) zq0sSsQuT`|cW20SOHKfjxSjEs;GDGrayg)S?nIm8dxnTWn&g^=$tn-lW*BltH@%BW2HA=>$H6g z@%=h0`Mhe`I*yxnS4pWi@3wwgVOndIGKHZp$}#h|?0Spptuc@Lgk>!MZ46$?cQs`C z+y|*w3q#r5r5`W-^B}`=&B+IQvsUeA+Hk(IEGp=rsrrx2oAl$3&zN2xrOT5X#F>|% z)Ac};C)x6+eB+kduhj|r&C=E}d~kai^Fge^Sm=io!}_fyu}2K#I473!9Nw{{QQO3@ zuE-|+4(BY1WA1z3-#uh7>q_yFm}k*%w(I%3x>X47Piee;=E&WQ4PHLQ&C@@AKGv+W z)+RFaUGdj`w_lC^TV4t=J!W~c@RW*a*2h4bOR;&o%Jt8DXz@FLGVMCsdCTdgA5Rsr zSRc*oD{MJjfA)=;c1z2ah$RP^KG!62hkC6oU+C1jEqFhpLHEj1gTe~DWM4fT1`+1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%8F%A3-silk.svg.png b/server/routers/bushou/images/60px-%E5%8F%A3-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..550b2ffc4947d7f8c85206b80de9c001a50d2343 GIT binary patch literal 1099 zcmV-R1ho5!P)JqYn6wF2OlqLq#(R zj3smzn*&;aq2&h7lp7!rMwNIr1o*Dpz||_aHsbk4U|KnWt5xvRi06HQAJR-DEqqSz zcevOVR4%nJm_)qb%V{Un1Uv>l4irBFydqxo@<80ZP!F`_NwdJPKs;B77kn)cZ!c`` zL3}t6&sW3?PVHU3*n_kKm>hs-E^fhR0`PXjK;YjJ#6Jh%$^ef_a24DC!1MszZ?Pin3+u*XPQ>#%V5KpZ2B#H1YcWimR>3o3ep_XXrNM7VFUFxC&=`Ol zfV)Hwtt`+d0OyMs&VpSGz{@~nl87Uo;F+^O(C*;O0iD1|O+d?#9*?^RXBy&Z(1?h3 zApW zfc3zaz|@2>#%i1_f;GKo8PYXK?P>$C0^PeBhop@iiL|Bb$OL$n3oknOH&<)oYMd#I;dT<34_SB!mrciLlJl&R|slryh%7 z%MwuubRcD+SiDPupKF{ff~)-t-V=?JMR0qw(UkK_;v7;aIEB=k z2BpCJga97~4=adsNNM#GPn;hjUlLuM$F%`1t@1$Ww;q2VyEdU4A?G~tb;D-dE&Yc_ zz6RWd_#AQn$U~Q0eceisIg6%$OUY>xLV+lGIqgU0fWobxF3*MWCxG4M*kyI$ViWK%Mh7m~B zA`P)El)h4&IzB_{!6C(V8@DjOioz2^0;098X^;tD}k2jKA3Ilf` RWxN0Y002ovPDHLkV1lG#?gan< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9B%97-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%9B%97-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1688702129517b8a4ae4106648c5b8315c771b34 GIT binary patch literal 1083 zcmV-B1jPG^P)U-AP12RA_s z5~RCsB-ltqS+Ecr39+#xv8gpSY;0^qBg9g|#!6VSvJ!%@XhMDULsh@@>$T-s%zM$^ zcW&q0d2{c(mG?^~O{e#~bN=t%nKO6h6e?8suUO{kbJhZx~ zvcMQH2aEutz;M0|1%CDeAMfgNyilg_$6|lEKWdVNRa{M~H7isR9lI z_krJn|Kq+Lb_h;#z$|daw=)Z^n7cYZjvKz6JVX|J-nSzq_X2S|^6lUo#bV!M9<_21 z6#PbGq#bV=V2jZI05hJ_K(po|t>BiB{%1=2I0&ZHMvakHuyl6;UMub6V2#jMYctXc z-X!!5vTz}h2I_1Vlp^>`v{({hmF)tp;MGE3PqbJPp~iNBR`5!pZy;JMi6D*Z1!x6J zAJiKymUK|c9sc1nkfbO@aG%dW9B|s6TFPVCI$kBTf~8eVzl+0ivy|_!6I#Lbf!}9I z-zp0{=HcK9CXHf2ei9epnumv@$KoBQ_i&BiT8dLZ8U#zrT`L;F(i=z`1Uuon!#LzM z3OA%}*(sZmtKd;bJD*6ef-^QFjo@HP0+?3Vr4o%`>DVLdI}it)4$@p7=?OghsHmK6Og^p0VywN+e!75Ho*l7q|+xF4AKr%>OT& zp+>N@m6Awp#Uh05KU=GPG=gV^z6}byI0>6WyeuuHoV!h77bjtYt?L7g;4z_ZtHLf$ zqzyb(s?-RcqImY(j$>NzM3c~GeVjojI7{(4QXQ~Q;~*xa!@X{ep*Af^AJ(q4je}!C zUzbk@w<)gg=)-XVUm~Z3SaQHwpH5DMIO*`|L_s@dCJx4t#dE4`#Ox+Wjt=^C6vA>$ zdDOHJLk_qThtr!O&L)9tKpTEbm>Mvp!WS{+QDGH;V?;=kQBL48nCjKV>L(|GxB2UO zF-NL{m`%UJJM;u*1FjY$sv1*J+5~I{HexF6cA}e9&jGh0=!ircMnt*Gh6}ATE}`?; z0X#2*xZvDzi3FOXnZ00)3Qz;4VqY{aZ}3k&?hI1Ms} zDO=3)@3n3OBWwzDy3vEl_g$F6^bh&JSEx|I@E7JQm}urKfu{ff002ovPDHLkV1ieb B=rRBR literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9B%97-bronze.svg.png b/server/routers/bushou/images/60px-%E5%9B%97-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..855215a665892e2fddbd5b8de08f7f166a3b67d5 GIT binary patch literal 1028 zcmV+f1pE7mP) z(g^PJ?DIf3BC67;1lKC^`ht6z9%8{z@Keuzs|jL6I{%mn?gu8F{Y4YR7&F0>$mFE; zv&Kv?l)Ci{rJp65wOcK?*QHH=%~cHP7+$1t(hBZ(sj3?pGZ&bZHFK!oR;8acjaf5> zj^R~GKWj1%vCtM?t@N|N{|+!~;UQ!VZU<&6eJwE)`~!G~OcLvqzLuB?1`!OfIl$Kn zQ^EZ%t+Zf&44X|_P-@{V0lrog(xul2`diTO?<_({h11u|`M{b0|Ge~ZOI5p3GR08d=H4#fL1s_JYziokem+nJ8BtVW@DlvKaW7xcf$C$b?zbmkuyqL(EG3M3q zo@eifC?^jJ5q!t9w?>o`O5)j>4+dfc-}USkU`0e(A@~R3g$TY?_VcEQvO*XIzB_w7 zt5b~NL8czC6)iXczBzk1t5fXv>zPfUv|C%FAI!IH!@=;$X~jM z6Ny>KxJ{TktO}tOS@=`Y2MdU~*Nazvm8uZVdKI{C9IFl)MhSBFtJyf-Z<&YeSEr(P z8^${B#W`je=bv;@>e`P`oXRWM>BYEgP`;W&$op*qTp{195go{Sn*i4+-K?!R2ap&0 z1b6`)C2k9-9yo<8feCOCo8A+}THrRNvDS-JdTmDkI%M1E4DykZ00ZQ(VQ6_ld004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1{@6`H$E*c5dZ)MaY;l$R9M69SZ_>~RT%#r?ghEr zkbC0-3W<_3#K<{mLz^|I4;i-HXoStpTDfwIF)_tWK+Xgz%Vy@6R(%M!w!T!$)!b4D z! zpaSW*j!8t+z6d6{5kZ6i022rc{R;&C5YO6LA%r0O2xA;07{L&RF^oZsU;W}QLl)+J7Yk852uxK;OYjk|RQ z)hmQQx{j{eg<`JhqidwY(yU9ICb*6pdceswELG@uS~@JlIxz2v{zgv#T3N0M?AM_*>Lw4NM}f|Aw$>L4R%}7lyiNOQV*EL*74xxZ zF*&Z8|H13yVDtjnOx{2s4-yWWoJba5eK+#EP+1YBRl%5{u+7xl%+OY8tM zj?>&l8s|8n8z!8QJY7WtH|4hsfWF$ z!p>j^Jx1G6hF{c)FT5D9EAd};B-Q}4TGcKmQA$6(?W@Sic?p;8(FGnc2cD4|6J0g; zv?k-EgtpD~-)KRvs)xgZQRQ&_kR4!A;wB_2(r%?a^W7(BSS6b~9$(VSI%hm=4jhsJ z*X6TkZugOGv|F5fuW|SyATmax_tH7ODOzJkOm5B+Q8-q$g zVhru@BY*&A;8F?|9(a`!u}7BZYAA$abXf%k9>zZS(SeWTuUc-4UijdH52@VegHMUY zeb|jw!v`)Fn=+9PKQ8H8@c;BL(?6s(J4e9E9^?Q303~!qSaf7zbY(hYa%Ew3WdJfT zF*q$SHZ3wZR53F;Gc!6hG%GMLIxsL7b_baN001R)MObuXVRU6WZEs|0W_bWIFflkS nFg7hRI8-q+Ix{mmH8d+QFgh?WW-GrX00000NkvXXu0mjfy(;6v literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9B%97-seal.svg.png b/server/routers/bushou/images/60px-%E5%9B%97-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf5dae4b0bf47bcb828f6187f6dbaf4c2b2d3f8 GIT binary patch literal 1007 zcmVUkx4{BRA_sX1ff_ZI6@?t)t%=HYz-mYP3E;DD1JYm}unXu1 zHUd3BCr|>Kf%cT*i~|F}gOvO^(FmLdo&c4Azpua!ZKJhsxB<9_d8>0#0bT*mfMMVx z@D9`1X<#aH|ss%I9IiVG7N6a$tM(IP#m?(F+8fyjDi{NFY4=r*k>U1^s?a~vT_8O$% zwXVim!L8B%xYFJS*`wAV1}W2_Zyzn#jwwf;l2f{W3A9-9YAuzA>0zi^dIaXxkR73@3@=1m$$ zJfZQL5|^T2xtt8PJ?-eFb|BAWDj&?7Wuu73_TCkOFeRoJ_2hfUjWZgYXoPUD|o)q!nyWI=Yqi zK9odxG_h6!TEX@#D~~rUFVMcY8fyjHJK7TQK_mpZ2)13R4%nddp`k!r@OxJWTEQ|o zY^&0Th7RIw9&vTB6a`D1FXOd>heUb5(uW3b!CJOc&8C?J`U1s0NIYH28SNW>O!aQK z0Gv?zaiv$3L+6%ojq20>32X@v^SX$6H$c1?{h0aKHsCoX|1m4}VIHiFcRs^diJT># zZ#fQJAin(bp$9ky+`(iE**HT~^R9z)mAL2%CR_Fva1z+Y;`Ysbz+vDVa07TThhLke zt6uD+aYR!9E(2%g@izm!1m0q9E6SJ?$9Bw{DzUf|$U)3Qab9p_!Cv4I*(8Ne0T)qR zkN!;-hj5#KL%?oeC%P@E+ z_Pz#7-HUssUC$MwWUjx9?8r)fRG??6YW%1@WcA@wiIdCZ#I7A# zGWVct*kRdi0@scph%*mo@_awXEPbGB&1<22hR+-K7!|lxsIB99dXL%qKxkX(vSW#P+#58m8wIHB`5HVq!uMS_ zPg|?`0nbSvRGjxPZBUaw&lK8ued!0G!~pU6>fx&9bq#GVrmEyeK8kHRomulU`oO~- zEh-ab3K-Wc3pk^}by8C}*vHGGsDiOVVaL*g>L0XTt1Y~HyCpE!Kgr{q`Ul1>DrHYP58F5Nz`Yt8PKokm4(ncg3meMIi*tw~A0Hb1MVYd@IX{`Y6`e+FP&^cnlsFo$=P W&iuLg%QIjSVDNPHb6Mw<&;$TV1NcG! literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9C%9F-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E5%9C%9F-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7ade3175f51731ad8f2b3d573f99be758beb73 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-?aSsC7_PTB~RZ}N0;42d}Wc7|`ZaG*%rd^NR<+Yzd5BAmCPx+Wgsf8k~x zyFx+hN8=8$KdenkQ@UQPsz1;h`(e{q^`Vy~ zYHBk*t&6p86m!lomV7p|`uV-@^NJHM|I>V}de~w+=c%OI9*YAso^^OOx6zfW=1xPX#x~2(5&chPkNX5pOw}wnA>zAm$$`(yUMvodzaTZo$W^%L!O7lN z9~Wu<(qY$|xoD2ejr^`tMW?PNPwG$K;@NmUOyfGsUZV%nq6w{!6a%+!yt`yogQ)7d zU7fb4YC_jI1unR&`-YXvbR*YM-|`LDe};;`_6mCNcpq!XLalB5?r*wy*C?es*GYw} z3pQ){B6s)P>l<5K<0qHwG+eu9%IhRymOD`%^Is*@7hT|V3BJ18(JEuD>R`c^HW4-cFjV|?j>Wo_L1 zBBk3IOJ-zV-6J;Z#N={2!4?0yyiI1WJ2UA@)UC6P`@+;^qaJWF$1Gdj*mq--vdz}1 zncACp3=gP&TPObVxzb^?h0o0V?%(pO-a98@!kJkMv~~UM_qi=dd}p*`L1|VN62XXPWDOY|Px`u(?-NWZ{wSUra&|vd{J^`%Y5H zpOJEELTq(sLBou1t4k%OF1=i1@%{Vlc@Jf5TWWpOp3y$!-mq?z#GkcrhH|Z!{mcjO literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9C%9F-bronze.svg.png b/server/routers/bushou/images/60px-%E5%9C%9F-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b24c79e110b9cb8199616c2c98347dfb94cc452f GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~Ln66|}i$oN@=s$9uXshD02GJHs|Z#8KpUeW$o;+ttgHYgPs_sWr7WiHY4} z-Rd#X>tK*TwKcai_d|gkmWxigTQ*(vW3lz|DOzr+S|`A2sI<&LNNMK-*7uJicgU5$ zewTA+x4Gkq>J8gZ-+7mR|IC}}|B?}=-rJU~+pWKGy5VpAz5Pmu7=J&g=5V@HwEgTRv5Nnhd`*KtqmM)GP~rI~izMSm?0I{dK1@-IzLD1zn(%On?uVUH zYYdL3SwGO^kJypJT>V3T&4;_kEbf0|(ggZ;dz==IAK!$oT19~W%g>d#+u<;JdP?mK7ZP3_#FzU0%l?8fcwTUIw-Zx!=S zPd(uK<^tn$=l_8hJmvo$`=WRzqqp!zvwU`=_|Jr#`W4ex=Sx`a@^I2mUB;8U_{>Y! zHxsyfeyqu}<$ITtdUosmSmi3)^_t9ew`1c!7}plwc0b5obFpo~{#TbT#+n_Fox1g- z{Qk7;i)H)RqW_s+4DR3hX(v}ssrVBY(H}GJ#!k={EvTMyJ6Uie=QHi+%x88vC3d=U zo!LB1w`5bV+_qir?S*}xw??gFxyklO?*5B^Y8m}oE`RQ5RQMok)v>wL;^T?mj?1d# zG}zLekNDcod+zhWx_5=b={<@k{VqSLI=ir~G^a7#CcVk?-em6CSM#MA{+!T=+>~;* zXouLG&Ys_Hvv`tyez-ng|1W#}z6*PKX3kD(l;AVGHABtU%B5cK@H%O=lP23O*Qyq> z*=`UrUgBZolAi2%@66Rh7JH}sI3l8d;=?4>u($uW#ozSY5_YcD?>I2^sg}4#l%yn< zq*^5xr2;7iBLhPVT?0d11M?6Ab1P#bD-&aF0|P4qgFVleK19)wo1c=IR*74~**5Mm@yypw zOT>Dl107uj@4i^4q_->E_0|5Rt96zvvSww~Jo+jqpk>h_Ax*uWu(e)OM1CDtyPPs> z$;`(|dd_My%{|}T+5ReD?DIQIn|~^(f!)}>3*Gw*{e^@1OtYkW4ofn7b z-xr^z3e3}H{xeO$&TDO=>BIclpPK6h4_)s4Ca5TLqIa(^$LDpq5$^;KZF&8qQRn>e{^Lc(~W*MqcQ{67TyHTp#xES{`6_vIu)%tJCuPx?R`S*J&U8 z8^8O02;eKQpP})gE?Y?1@__LJm)T2?n@L;q+wmXc`m25+JNo%S<`qBpUHEUkWAWz) zy8{hl?S5#T+4`~nIa7V_KC^%K&pf(zPF|t;kkjoY&(j~q^eKOC@;L6Hom=3zqO5LJ zwpwBQ!g`PT3)&za-5)Z4!+wfF8k$S%BM-n{akE1x!jLW#lK2ftkGgWNcuHBafW z?{apUabmK$?)6f?Wrbmv|7Uw$>S$GMJ=!`=++FQ$Jd@p~d((I8G2VGxq5MVq>$X|h zUtR{5)_i5isC}S)C+ULk%ksyQvaWxc^QcTbe0OeG_FhJY4O355PW=*MxH{?98p-EpmRw6(E_N}mUh;E}tk(T!DEY74b7u8Ueqg>( zEpd$~Nl7e8wMs5Z1yT$~28I^828Ox@<{<{=R>nqFM#kC(237_JRUK>6P&DM`r(~v8 W;?}@@Rpb^>1B0ilpUXO@geCw$qr^r4 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9C%9F-seal.svg.png b/server/routers/bushou/images/60px-%E5%9C%9F-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f06883301d6daf2be165cdc0a9d3ec0d01e4af GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~Ln6Wd!%7X8~A@q_ z3UXLRc>FiYQ}ArSz9cx%`x|WP;hSYckB3l zHSG0>4B+?l;rOK!M|oc{}y?P>nATE`l_Di z+_Brq$`|@wIh*-%?cBaiD*kxR?^Xay-;Jf`xLO+p#o04H-pqgR{mC>b-@QFe;?=EtR0C9>z=pdPBT2&zqi74!HRtar(fpl1pk@4FqrLuY1K1rUzd25 z)fIJbY8PAs#*Au-YeY#(Vo9o1a#1RfVlXl=w9qv$)HN^vam8V*ETS)GBCLI h>_Q_NV{= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%9C%9F-silk.svg.png b/server/routers/bushou/images/60px-%E5%9C%9F-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7575b7814bf636d10dc9e15813373a216f0953f5 GIT binary patch literal 879 zcmV-#1CacQP)I`IVMeQ8Uey_rN zSX)uMwef_=@N_wib+txRGFRZ7^F^OfbN4QrubeNqiBlM@GpI7z;opLrn8X$p%_noJ zXe473Uh44td%TXZ8TXIi9sE&JT%~ch_8IP_d|p%#RV_;}l;hps3yY#;uEitRiJ$eC z-A`~$)q!_oE^fk8*oJp8q5m%2#6fJt#TDx4%3{1AoKzlht)+n{RXf~z<`u;WZQ>&= zs#L)&xeI3$C-~NC!|#t}coyUGi9I~C;xZ`Oc-$zmJ}R=c1`B(9_cIl2C@w0vzD8DB zxf0joy6pE+?fvsa!LbYk>+qZQU3ym)0aQ8lkKi>dxWMy6)rC?%!(xnfnzU}OExHoe zrL)){4Va_K!)D!=q|LQOS1=pIKDLwCw+yI_oGl|dd+aIU!}Dw#XHC)Ta4Rq3>NfX( z#jAKuxU+7|6K-y4R)&S&UX(qX$zS*>D-$@LU8B4so}2Ma%l|XtJbE|Y5a(Fa%okhB zRal7?VjsN%%dw<@c)k-uXKPs*Zs5U|#u}m4qz|k9^x&) zdfXw_*tNL4#P+5c!xvfEhY!Sjfno*E!EJZ|_Xry~zrgyZ`BSXh<5~Hk<+_1ix&@hs zA<;!25<-{ftgn?LqAMQs&!%KdSkSZmR@#r?g}4uo;eK4!Z{rzL*pE-~CBDYD;`>wK z^eT9@5P7c{kC)_V^N<)+B>%eC71j$FHF^_(L*TzghAoZfMy zrOLWg>%5&|!s=s}mDu(~KaRZd=s}gN_e!s_R}XicDwZ(LHAy_&bEe8NVP(U9PVO=l zsmACS9joL1k8}i|3)>y@oFd&U<~AenZuDQNMVm`fY|UpVM4Nrt?l-mT?PKrO6LZR@ zH?3995->X_Sz_D1(;!`Ik9^=g!^7S+ztT?GU-h$zc_74Ivb2}uey5zd#-9u{oB?cvEkPgJE71Y zJ46%Dt?0U|Rkv}?hGmhz%pZs!YYF7HSm;nM!ru4U?z~qQ^K8-5QwDLqJELz!-*nG@ z$i?#Qf*UNy zJ1cCg!J{R7a;yC%x8wCp{O&KG3fM=a_F7CxW7Xz0Nibg2qJBE~*bMEs@NE4?W_7>w=%Y{GBVRPFt9Q(u%9H%fubQdKP5A*61N7w^Q*T2H86O( L`njxgN@xNAQ1oqa literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A3%AB-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%A3%AB-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..23bbafe9c9a9c891adf4d04b503a9425a9786181 GIT binary patch literal 1167 zcmV;A1aSL_P)Z7sAlRJ0Nc z2`!qm7%-HTA<>1=06SKO1QzNB6Af`83E&5o z6r9T=9#Zflt2`Ib_YzsAhLyk;pc_~Xv;u8fz7=>GHUG8(>oFG_1z?JQIB*Mrht3E z1Ju(p28>2&DzceGjpoC^jmS0^8c^?N7x0FaI-=k7v=TUs*<(k7w;J~zF0zOkaK}7i{}l_JVDez2FzEav{O)HDHaeMuZe>50G&^ydM}sO+!PdMaC|m z$#2u-tfRaqi+qbYE%nCObfbFSUUb|+34dEf7H?6ajU$|vHlWL!S<=aua5QaIoe;soVU{k$5f<(-?7Tq9qa$&X#W&5 ztRr5DNdz}z4jPN7&AAIV1%CB9NsF6`NCbCcE)$2TZkj3Xofm*V1bzp#{9{3VKqlB8 zjR#|`${CLSUU8_SGa;x`h9u(AW|fCytxS4R;ahmB*D)m62a|OIh0`ikxtu7r&5cUmVEx@M3t5$hH;#j~m>I=RiqAj9C@LH?vy4A}{n706c#9UJ>bk^DQJIf@14qZ&sDdJ>Ajw} zd!6;{oso*)mqk_>zc?{x9-pLs)uXs5{n#6e=wSvnN41Gu$ym(*KDtx_U5e{ zFFu-?(arf!S30C=@1iS@xk|rVFBQu9Y%1Bma85{%_sQn1OAfqTlC)+uYxHV~J2yXB z%-Z73QoeYi+hXbN_YxuzS!x!ib&bAkx|yEcX_L%jESQqeE0CvM`{lB~y!Fd2n^z*! zA5~sI?0D{T&!Xk;I&Rq Xjs=qsFTZdkDY7PsFY+vxVQX}U)vcBVIG&igQ-CSv)A zREZ}=Dj{=O<0hw1li55Yu)%~0B8=i7M^ zX|qa;Z!UZ;ac$)uqy3fpf;}6ruV%S!^L<0mhU?Emf)b9(MSE7pcyi^eU9)ML;Nv3) zZmo*Wvc2-}UqY=xh5lonjn%D&?;dbiy1nRqca~TEVQl7)vzKOQ&EJ(-sN%4`cv92i z_nmxlrM-TeR5u*A^tUsU_@a|;%^Y*IWb0`q)h|b#~cvX_J;KMALwZAp(kQq&4ec&a6?5hW>!C8<`)MX5lF z!N|bSLf61p*U&7)(7?*Tz{=E88%P=$e9`$1RF9+~H$NpatrE9})(qK&h literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A3%AB-seal.svg.png b/server/routers/bushou/images/60px-%E5%A3%AB-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb0854921f243057d824b3e8480ba2994854c58 GIT binary patch literal 717 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%8A-oracle.svg.png b/server/routers/bushou/images/60px-%E5%A4%8A-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..92e917c080b4b7d1612bbb9675e3eb446d68fc35 GIT binary patch literal 1108 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k67fGgoJf36ax)lj`4JH42d}Wc80gdlt7UNd(*dxnUicUsB{T+M@3|`h=zP= zG7!?fy@iu2O5{t?EW>1A$!B&)5)q)Us$E;=t-qf?!s+G;gVta#6v z$JZy${C`f#MsLr5%jf&=&#`_!ulT*g{6FlIPJ7y2J|&p6m|fO^HR<0pSMJ%4vP~ZX z4{9%Jo_oleWnr5Q>vMNz>-Kn#L#1pJ7e8SAw$WJhcTY;f!lv}w$Id-6Z@SAT_~ParE=m_pX4x?r_~_Q>HU+O#Vr`gvCn(nId%|{=dDXkt_;;A!vR!q01N*(T z9Q?*LTaJg!&f%Wzzg+3m-!I~!x6kvLO+C-`Bkj^j?Q(&Zu;`Crvu5ovJMc-yF=I=! zuECAtj@3&T9V=3qttV_}v(Z2Ci`{X>R>pgI8^UGnrd%(&UHe93?U|dlMV?~cjO1dJ*TH4fVAl0?aSVw#{Psq4M`)_Vv5)g7C(k-nVxa9c(Pytm)2>wp zr?_>G3$FB7Vel$Rqm$3+#niM)K@L$D@wp3>gu1$3Bp5Eac<@LEPaw|}lSMWPmmAtI z7Fzp@=bBlayEG@V+F#tR{B?EQkM-|2-247l?D?1dmqVg`rMNx>Kf1b*L0^EqSMSUE z0?*n5k3*0AZT-h+9UCV9#cJcS3wKraT?^s=pj3F~2h;aFLGM@FZ}f}rI9#K=D>j(_ zOL$W9LTl$E;$IoIch9)A{(9E>jv3*06?5b^KAQ6J^WGKVM+!F{t$ez8zsPM~>&%>4 z^Ic0a&7;>>EU5Y5tdusVV2PNe#v|eIrmIQC^TV|r#Vxh&t+Mmo=6A&I`!%I?!iJmw zSk|lYWnO&3+3vC@`;MpJ>!YWiHj8&fr0(so-!fNdW5gRR`8$ht|GN35%GKLm@UknH z@g0WJjiG&AH{NY)nh~hf`i{ZmR#1I-y7YO`W3d`ZVU`yJ(tRr7)n%r_8?Tp% z|L`sAy6?ZjdGTJwMYsPPeEV)|`U|P)-7|t~vo<>)k=uS{_uai-t~DJe?bg=amj80{ zR_P_Fi;pYaUH&{<=eG3+cXs5P4Nq(RYVTgj*|<)tZ0%}kX4$lPxm#}@v+g~(?bk-G zKlfy2yPQ98`Dp!B8R@Lk)|+P;`NgmFn)&jW)|X=Qt8VSLRjq#Ka(LaiyzSK|x$hID zf9>G!j)=7T#%JHTBI0g7lWg8>i-2#UU+*8e@z^(*JNa36#mYC2uOvQ|^nV*wxMstG zD}li!-S5vm`xkKT>#EBf+h=98pY5IZ*(3U>-E_0Mo$IeF+sSpw2Wh+9xm;1OnKx-a zXRo{ehWMK7ipLj=zg|;soENFz@i_JFoO5~0>jkP~?p1tInY(DQ-F|WZ^*6O1&0Kin zW$L2x4dq>pru^@_&$)e_ub$PT`$&ATRR6qX-dp&O`knv!T+{ZJrD@cEhVWi%oi literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%95-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%A4%95-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9809ed1db7b5c1ecc2a87724fa131e9d81f74c GIT binary patch literal 1059 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%95-seal.svg.png b/server/routers/bushou/images/60px-%E5%A4%95-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..37eab1d5902ae7388e98e8fb94fd583745643302 GIT binary patch literal 1137 zcmV-%1djWOP)P6CLdJs}N<=P2IwzA;a};qN9CC>V zms6CKcoDfLxtte=+zOe8Lv9b`gd?Gh63K&bL@sgMw{2!TEYqyD{_DU0YySVW*B-n1 z)ULf-zyI2w@BUxbf35$9CYs1A3Uc_}-GNC!1yBZb0}8*jJppb5SAi42om>dIqARc! z_yE*ezRm%|av__PUxBCC2bEtbV6K1VcoYEZi5FCVE%NLhi!Edh@d3DnI9F21VG~Ih?)1t-w!iLLJT9jR-X&FGmj2nIzkVUxUUDrShhI>o?g4EPdvX@Ri`agP zK6_#geB7;i!zn`C@Ye~Yfl*q`d{pUY7X1#w9C(Wp>jcb1720N~X%0Ns>PjN|os2o~ z3@6qxDMTHHo&%jiYEPny4~gh|C+5Jt5?d!=swT5IL+u{y0~aF>dp&GbT+zbll1K`G z<9Ft@| z0X-t>?@9IV2*3F_jQQL>kX$)FeSt5M%Rg6D&Dab_4RRfIhV}=+uxVhRUrl%HMh#Q0wcj8Zc%M%}mz1JD7(1r5k0Ka0 zh5aIZqhke`57S))1Ml%E=#nDDuu>Ofoz~t4c#9hLGmY>8nJx1AbQRE2Yo9`J@7j#% zjh4EL)f3F;5xWvD)Wd1lOwbh7#0O%QV4do~+_~506Bh6#RquqnbB-2i6x0j(Yxn?^L4R zS#|a;;Cm0tHz5}gb78Oe4%|g-@E-Bst-PlIF%&J#wMY|9p2|# literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%95-silk.svg.png b/server/routers/bushou/images/60px-%E5%A4%95-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b71175f6a86d7b68e317f516312f1ad332cb43e6 GIT binary patch literal 1114 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 yWr%^1m8qqbk-4^kft7&)LuSC~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%A7-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E5%A4%A7-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..80fcfddd376c5ffb7a3969199fe10b270fef3e25 GIT binary patch literal 789 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-@_tff^C|EmPb%X+#vhD02GJHysT#8IM6p5+PO2PRJOEe;M2P7N-}%}3Z& zSTyuHRA$_8@YZSJ)8=0KVY$i1gWP zE54|ht-Qp1Z?paBa|Z-}zrLlp=HN8G0>!%D$D`G=oIXz0 z`FX^=LEGdNqx15bmD3G=oZe!xjbrlf9^r%P+MoZrveGtDV zJ-}hJ&m)0Y_NvG=pQ4zekFkjh&oTcqfx-US+M}87mOt0eT$i?Tv&GIFqbJ`U?K-2s zFM5xynsC}(QQJkToxdAmx$d&s`&Zt}DcF2PwS6D||LobBe`em%uy)=sKVNfQ%%gI( z_bYu4t~`G+TjQGL^^ceBP8=+i*9i7D0j3?*64!{5l*E!$tK_0oAjM#0U}&LhV5Dnc y8Dd~$Wol_bGSYxVZ)f25LoR|7CFf@LH)O z#D(9oN*od;50l{Ia_IwDfzkBWFyG)IS@u=#<^H;|5LaAvf5rD+_Q)oyuJh z)4$!j_KMjKw^ydy4m!P3-FEQ)Qob8({eSd7_^)infc%f|S7x`ey}UF_esOzCmDNe_cIEOjx*M$StxA*M%q{=H&(7aq zK7($})eD@)&2>FHvNj3t*LgcxRq*GV=PY+`ZP=gme1GoCTOrAr=dz|f-(>P;#r{sS zq%0l3>D{qMg|9YCxXWydi=20cd)HK%XI6^}RZB#^oOV$hP~n`X!NO)xy*D19TU zjhp41URXtU?D+=oNfM8Cl;7ZWk#)XvWCe5GJ?#&=$Cs>P%z9b4;CyA{U8g8Uw;Kx& zWf^OR&I@_U_H@~_W@oar%aR*%s+5bf4WYP@~Whn_f>Z6O6gymb#SRqQ#iAM9q)&hsLyN% zKPs6f1@+JTbBz1R6EBgK#xA>-6dSXxKlAf!h{q)!#t#Qoc4$5Ck4u!CQg~azLi6$0 z%Zs+!F*Q}IO-^dyY1*xtWvWz>QKc-P8dk);oBg2T?iXY)neN} zryrUDQ@d)3YeY#(Vo9o1a#1RfVlXl=G}kpW(ls&9nO2EgL%86QgFp=op00i_>zopr04}eak^lez literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%A7-oracle.svg.png b/server/routers/bushou/images/60px-%E5%A4%A7-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..799195c6415a91f11d152dc64ee2b7b11ecddd7a GIT binary patch literal 933 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k649S1eo?++|vn^U+d}O7!q;#?G4`*A*B+>Kc0^XUe|MdwP5+fLvd3)dhY2s zYAOk-91&pVYrTy#A$JAYxEe#utx_<)XG*MBFS zv(bHKa`w*53z^UA-7egZoO{3WSXDhM~?0dp@Gsbl+-^KXu_@lhFJ6?4KgP2PKETn6OE}ZO;@b>)VD4a{@SKuPt@u*#0KOgY%wp zORb&AA!~^brQ7}~{|Ziw4;FG0c`I<}_JV}no{DoetFUf6zan6h)O+s4;IB6}pW}MC zN^~xJy;jTK2eyiPLW{S&m>}@)i&y$a?I|tZHy3aA<&aLhl4GX#=i$zCiPf8SSH^CO zXI!7ZqWV_k!*FgZ)_W1fGyk)$&klf1^O$|Nd9y*?GISZ3)`( z@TAmpWyLjKwqn;MHs5QN{5b7o*@1H58^_iZu2Bp(p7>w;%yy@eU!8k5bFJfkSaMJD z$C`>%{ z$z}t$50`yf_0-e0H^Qv;dxt6=_?Gqirz1!7(GefnnY6>^AEr_e;&| zO?KF)-ft9Y`dzT|pzP5-TOL&IxK(nrHuIqCpF6w;bFvH8%?!x->a%vLf8vgl<_kVo zi3B(0YhFKkr`}}BU*3}k_Dh>yJ!0SYbME=8Th}J-SZUv~Q}f_qJ+rUpXPDiUstEJG zy0>rF%_I7eFE+66GXH8Gv*QVG(cKJLU|Lo!ag8WRNi0dVN-jzTQVd20h8DU8rn-if xAqFN^hGtd(U6;;l9^VCTZ3;~Yz|NZgQu&X%Q~loCIBqQraJ%t literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%A7-seal.svg.png b/server/routers/bushou/images/60px-%E5%A4%A7-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b29737918eaa14b9e3e2d68b757ac73c63235845 GIT binary patch literal 1000 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4|${+wWZg6W?Ti7|KRE37!q;#?G68qsi`8zKc4TgO3GR`xtAqK?62|SO}-Ig zqGyiziY;mM4G5gzk}+F@`%Vgn(9LzOxy>D0TmueHk&NijH9FzsIEzb`eX>*f9BbqK zV*7e{jm!Vt+4)^oslL4Ueet>9b?-mhJg+@xsXzUT{Drdj*|Ru52o~0_6*u>1zSB1Q z6uWt3hu6;sKhqwT{CwbghUW*@1><02IW74;B5U;Cd&a#I+%03Ip|opH?%OSLr#)BP z6=&mmaKeAO?lW_yn>l-%S)a_=8~3fN<9p8M&N#ulaix{D8(;qkaNvI-G4EzW#TJe& z>0JGJ`WY+vzvTVq%2;0Q7ICiY_`j`cvt@(}uN-^XcBe>QQY-D(1&!AY6*Wgr$ejP} ze8iFeTHo6OwOZo% zyPjCYwO)D`RlJPN&i>)7ElsD@K3K*5SGj2Qut$2z+<)~Cv=2V|bWq%Hsq|_6=lg{N zSBC4&+T$l;`FdK>^s0HQyYjV9v#yu1^9!HKy^mWoy&!()gR3vLNN1nXHr~S5y?m{K z%C+h3d;Pv-yDtB+z~)2PN6iYSFPYlxx8EFpxF~(ytdKK+b-i_k4=c`tuG*QM^>vo=UD-^^^yx6XXG(E0B>9QjSk zW@_ijo9?@zc`-CZwe-5w-=yO+wmo-wlX>KKquKt>{MA=ax}M&=^WKe{`-E&CZ%Oq2 zqg8eMMn~pLUBi^SJM6MUj|g(VZojLN^t`2Redmu2an`lViyysS_4b_W*-M&Vt&UH# zQ1jbSH7WJq`9(q5u|aq`Yg$tG)d!uR?QQiD`a(Q-L`1eKjTX!#+dEMSM^xs_b{muHo?4VlW8c~vxSdwa$ zT$Bo=7>o=I&2mdKI;Vst0DvRE`2YX_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%A7-silk.svg.png b/server/routers/bushou/images/60px-%E5%A4%A7-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e89095ab6b99c423aa7362a588c56d4749aa3c GIT binary patch literal 968 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4|${+wPg&ZPvHd0U+{Es42d}Wc80e{sG~%~{=BG&vdeF}Tqm)1ZtFO(fWz|= zSB_u?f0a(o(?#OCi^Bw6W-Bm>yLyV~t?5lr)Lq1`($poHw3J)bL}%rh+ozB3t?xGG z3Adj2?(rFi2le9L?LYrIcjo_pWLc#NA?wT5PQA_gJzMv_-jC*MPGtuVM@6TI+br5zvim{2W{!hq zqq0kI?+J%Vf0b4?U7qx6>cZUJ^Mq3bm8J{aWZ@LLBK^`^i}UyH;-|0Yp8j2a$3LTi zE9!BBTZPZLJBM{Tq-Xe9rsgCY-(2@K_{*iU*=-U}xs!W79nRiSaiCk{u|Vj$_wq|; z^I2ssZ};3UX4-vs&a#Py{j9kLg+HbWmA3L;UiLM}_<0_0uomFxk2i%3G zye-i@VZJVSg_m~7P3_Gu9|X>_Ji2MdCN0)?o9F(zqVZwE+r3pgf1RJLysWpe`4-Rb zw@sV3lzCdu5&ht`_UXr_-fweWKkRuS_r;3m&(ttcpKy^~C&hlqHWkQc1iUz0cHrE` zLdFvhm75F}+1_2SCV2B5<^z&nOD@{%h?14?3($SGch|NypY~u*hI|R;gr?aHDMgpQ z^h67^{F)I__U`oj69(L6cUGD$TM~D3=QWkGwM{u)n%YWD3R`Bf$U6ueOTRlyPP1Lx z;CW0m!;2ZEojX?*U29$z`}$M-)43c@{gwsxO&iWX{XIST_u8}#nLbJ`CrejKx(MXW zWXyLEsEU1kPKm=lGV##PInMugX5Y=-$0Yg2gi-GsL;FhRg!ay*`??j@%v)^MzG0=w ze&&a3-T#`lWcc_!yS?_2^&#GVvFsTRE56-6=BmRwuX2mTBe@Ny-%HAW-m*ct)#vil z?>*s+e+}b}?k?$P|M*0yv(dOw{eMnrpLL!7*UFZ?b+tBLE_TM}f}cJ8Kgs_7Iqh<% zm^0GAo=I&2mdKI;Vst02^7HNdN!< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A4%A7-slip.svg.png b/server/routers/bushou/images/60px-%E5%A4%A7-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d11c0eda6bc02ee226b6058a95fcaa7cb0097e26 GIT binary patch literal 1032 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 Ef>L=ZA^-pY literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A5%B3-bronze.svg.png b/server/routers/bushou/images/60px-%E5%A5%B3-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccae35d727fa8f68bc2587f6729898a12f2d984 GIT binary patch literal 946 zcmV;j15NyiP)X&G1a{+{N}95;4j-C%q;9XrYKiNbhw+=~1`pyBv6)W_{ro@8262*c zT$p6EhF3OaHYRx+atSH%T3U|hh4JDwT!Ckj=WT7KefR2IV&-@J_g3RxVL&>ApKz04 zY83b3G>#;{b4imfOY*+ySl6F)Y4~zsKsxs?o?j&__77ljl7EL#qmMK{@5LJ(>dM9< zp$2cq8r+3FW*?CUuQ6OxT6kAnDh^J2gnz<%JSt2t+d*tXXc- zXDBn?Jb%5Qu56?9Jva}a;sJaxLz#BLzciDEe;uy~HT-4Cpe2`wgN!xll9EAd8Xj-b z#j}>`n3{$UHR%FFy5liOI@`LiRM47+PbBw?N(HTH_;_-^uvE~RhEFB;{|m!ulP;#C zrs0$`r2^G7ydb$hRw`&s!`C(G5&Te5M-fKwu6Tkt)Qn(@xaePBS596oz*f=h_PTQN zax1MPuRE{N>&Po-BUP;C-uLMhKd#VSup#Ru+KHrd?c9tSm8x} z4Q>?7{;K~(p=Cta=-VmO{+e>q@~}xT{OSzPR_XsRZ3@qp5|(Rf+3sK*PV#!fmpY@k zVW51mt=e3MC!2J&(0s2IrjlE54n7mi|I(Bzw#Ac+o5kk3Up!Ws#AfjjuRVKuv4X}< z>EUzz{q$|qKNH^FJbSv7u&&RCTYksgc%q51&Fn{@M>FY|MlQqfJs$j0Q2YT<* URENS^A^-pY07*qoM6N<$g1?K$uK)l5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A5%B3-oracle.svg.png b/server/routers/bushou/images/60px-%E5%A5%B3-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a6f898a87ca0475aa510dcfaf313d61935110f39 GIT binary patch literal 894 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k64A+S=giAyX6Dr+dN$yLn02po#F2h;wW?6{_3l&+hJ^puG1oBESXu>(e&z) zlfc|t-eJ=@7VmO>O1xuweti_KS79?@GgQ$;cAWnzaWi=#(T|68qv zUwa}~tUprWW$)Bd`{PQU2K__+V`RD<(jG1Z>}uf zshzm?QQ+<%PM%j>TMW%^{I$^Bv+Kb2H}|4iIyw#N*&Z(AERa9s`1giv%8wQKZS|*) zGaM4VdqXQuv1WmX`j%O{mk6reTq}Ibl`XN&?AnXNW=7oxPK#@GvI03C8mmVvy6%^{ zq+?U$|5dyb7e3n_#hLz6ae>$!U!B)k+`fBMnr{U9&s4g@zFj{-;Fp%UZ8Rp;Dy zo)xT`={`fj$CRPJi2sA1X-eu^yQav84|Qc%9gO8T{O0e{umd({R~@v@{QLO5pQzJ? zBb72Gk2B5f<4<`Sr!np6l*kl*AY^{=8gIqk%Leb|Y%&gAu4~Z}eh_pi&uH1_@VCld zr&uah?mjR6ynWX6{JfaG3c0`d(*JI}YjWaQH87E?mbgZgq$HN4S|t~y0x1R~149d4 z15;f?ix2~ID+3cN19NQy11kfA9aa`sQ8eV{r(~v8;?{67y&)5*fx*+&&t;ucLK6U% C<#l`j literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A5%B3-seal.svg.png b/server/routers/bushou/images/60px-%E5%A5%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8f506518daec2a4b217e9b4eeac6f7a21db04f GIT binary patch literal 1249 zcmV<71Rnc|P)+W@PHC=Rz z6?4@!|0I=!rdBHILy1zoWMGmHDrWdp^oOW0qK7DbQiFojC(#GdKr_)rSj;fOUX}b4 znu^}i)@3zo-P^BjpT?9Xy01p{)QzLSE7w})Qdu_&|6>VZKFt|!=6Y=lxk4EfR zdztQ-h87m52h>Zn;ertt=i=NmHf`xfWB*!=`0FuZmI1?z?|&z)OhKs;}+MgUF-n&~<0*)1co%k!Xqljsz*ciSIoKyR=V#Irf z%iqIOfo|Yssz$EN_hkqWNd>~VrCv0T#t z{E8SjV*EY`>E_)b{BJxyOQ9|?dqZ21me+nN@8&AtbM)PQqZVRaae&~v*oPQ3S%a7! z0CwOX01-rFN?W_r3AOgD`NU4MTyS&=>C@vdSQL zc!pi9k{y98BKJ)9BdhdsHE!)0E;`CLjLKPyUf@G=vRG{~BI>NeoQ=R|RL&irBL~Ai z?a0!E11aR54t$T_bU!)xi@yy#onrnO$ePVF$TOa+1#5Nc)R6xH&O}<&lZ@5K00000 LNkvXXu0mjfaD!G> literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%A5%B3-silk.svg.png b/server/routers/bushou/images/60px-%E5%A5%B3-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f72e0839777c58dc8418c9f33e672ce0b54e71 GIT binary patch literal 1344 zcmV-G1;6@O`h$Z2bKWiOMm|ad<}dF>;U%5ht@cnfMY;nvHid* z;DQFlD9+Q^6He_E@G&sAAyEp_1U!pM$S3gx*a>tuB3Mc003QHD_$6H|wV&LGU?rJ~ zn#d00m-sKhtUw==fknUzz!u;;;Aoj<0oVs@0B(-TCV(99FmMQW(u26)?Jm^hw+A&k zd|#ggSSy#7n|9z8;DjTnAz&Gm%i*~|FYuM4uaC{CUy6FVfUO>ZeG7a7>;_JHwD+~u z^-odHeYn@|P}>9a0X@KVz^9rv+eafg6J5j))1APB=r=TrH0=-8EgMh9qlRusk^{g? zz{L*jJ2ZWZK(llbp-jU+**;)`r|zo;jl5v&!Hh+%lRn8F0a`qDTYz5;I+NtW4`T|j z%Mg^wZu8V$Z0KLa|3?#LG4PimD4XpA&T?qyfFBM0{}#@}$%VisLoliR2^_cl|51mJ zwU)j+B$KhxhFbLhwFHv@+kj5g3~Smt4g%*J{FsJvYOBOEt6~DM0{Gn#NC9|=$}Q!S zmiF7JU0$v)>6rSQ#J!YdCXX6=u0#{m_VE&f&byX=E6Up4g8el}fVZWRD`z^ehRS1_ z$xfk;cD6}q4Dgwu{|VHr{Rr+u$sed!#fhni_ZTn}bp}0%I-4#8X8VYi`Yge3Z`%p< zqfSj(7zS?i^krm#@FgX+O+ZJWzuP1Ht<08UC95+yE&@+w^w$J@pTXx_8U5984yyDT z;(U3e&n$^|S;c8V-Nw@;+>gxHy^R{}TLpA8GYR-c6I24+C7|D}(OoB? z8^tu#7lG=)4j@y2`@BkbfYac*LpS=3$#VkQ^EJ9x3g|{NA61qq4{QjyNI<*#mQbI7 zrU*|^`!qHP=vLq4*(IPU#_QB3JtI=H8Fi~K)f)yTMrw-DLhW^kH3GUzt27q~Xo`_X z72wj~4imp&7)NEz$rIX5Gc#VMO17&*s0(#<1Wu!)ZgMi)`;0HzyDxzN%rO2UX zS*gv!0!E(lbRo^to^+2ruhD^w7J1YqnKR}IJNXaj-t*p$(`1L#0X8MfD4_ zYea&5hEs@$?GGhKennPQPk%N?`za!>uC^|z`i=@A0ctIQ5wmXf&vKNA_{Q95Zfjc+ zQ}%wZ^xJ#y94_2!Z!JzcxBdBAQ5jpw{Z6NMGy)96 znziYIV_L-PB0D7x{+z}sFQjHX=B;6Hd{O*D>;tdki;@(jdE8wYNkuc-!`5e)DK~vk zUb1QJ6YHi6$=($+#imLL$>gqAk`&dbj~%Q;GC!FMYaj8V!&*aDx{wxb8t`uBj zeWkW}u}tn#@2}>6dfu-HSv8rFul4M0uC2Bko_+Mw=05av!qL|6U+-jFzJA0tRVP*I z<(iFr4)Zma&N$px_O$--m5ENK@-cpq56>%abC+JdS!PP``lW~8W-jYmb3^9aBTbd* zGksKN#)z#ho8guhG3t1d|@Chcv2o9g{re>R_O^4I#-8<{ifo@A?X+QF+~i$41#sb5}yV|Uu) zwOb#><_cMN%XjTfH@o+_i`Q+B^D&?(jZnLA~odql-Cv(o5`5 zne1h@cgs+beY~kB_Q>b>f3`na!{+3q9(A1r%EhWBt`Q|Ei6yC4$wjF^iowXh&_dV1 zMAyhN#K73f#LUXjMBBi?%D_PS@4`(e8glbfGSez?Ysgw4$p_TH;OXk;vd$@?2><~8 B%$@)M literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AD%90-bronze.svg.png b/server/routers/bushou/images/60px-%E5%AD%90-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..728034dcc2eda9c77bfbf69e7a0d3ca02e57b4af GIT binary patch literal 1017 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AD%90-silk.svg.png b/server/routers/bushou/images/60px-%E5%AD%90-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1cddb7d739a24be8c9526894839950a2c2b8d4d9 GIT binary patch literal 1099 zcmV-R1ho5!P)%@lTT`HjVl^qJq|;NK4eTC@8opG%f@u#ElDw zVjUKOQj3Zcj;%sh>OveqD-KwT7DZ7jEe=?%mRbkYjT%6&zMZG|)O4EAWu=-9V?M%z_4NEa@~M$MV5ERVETe*H|xP54nhMh}-) z^AtHXhZqZREw0Dx2J8NdH}S48Ge3(t70(=KQC}|16byc13=gH<)rptyUhzX(5<82wt88n7 zzj5^AxhBNsQ3^@n9Ogpd{MxFCeZmRlHGCqhomtN&-v-vA7c20)#!UV!Y$t~tInfbL zHnBS2rnS--CEronB=zN9%1iXjaxEe+@C;qRq9EQ9feDU#NJHdjJZWvI)1IQ zowc|s^7ldEBs8Ju!{5fg-S3MK)76GHhJ?G{O5SKg+l8<}eEgqYq^MNP6JL_H6eTEi zmtH2GTYfolyM<5^&k^s(tO9i^?xrF|rDCz{ z6zfodx{}Z(Tv}zFdpqGnxLmna_GxNqfx41#uI!}Ux&n12VV3N4>;V&O8`+BwWq0LO z#YxMbKD;N}>}NVOf!++$gd{+g**!WSUzHcrg`|1499JG+;B*AX;v?0~K2(^xoat8k zbEY+gsY}3>YMX6G+Nf=;7B{*Jmlvoj86`X^Tu$%Cm%?ZIGl~>7$t3?{{sWxYDm84M R=b8Wj002ovPDHLkV1o446(#@x literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AE%80-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%AE%80-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f92c9abb30cc9e9209d2d593ce4ea3273e1785da GIT binary patch literal 834 zcmV-I1HJr-P)2Cf2^{&LPb@B)~{-Sv0Ca_jqh z;4QEK{K%4sZ^1R-1aKTU1{?xLfWyF657%!1FM%h(Jz&biHO-s@#(_CHOEvT{PLBQm z4Dc+lAkA^hl62aVz6^}*P1Y0h|=^Cqe~!K&RL{p@MaxeN=cID#$b wA1IR>M9$&Rin~gz+ zg?*olGoK86X#3s=?9w<{1#c7ftkK^mi^ATcak2^?685~&-zUq$u4$Ysg5})>_+s$) z%{O5WYMinPE)uHzvI>^19FrZIldOGMvYyf3C)+hAWfdF~SzX>sx@gGi>UqHu?|t}V z!f&}OyeaYChm#h|i!@aIcO|V_Bj1eLj@Q|%hC3XZwLAxWC*cEu`K22l<6 zMZzk$A?#Rd(y1wPNv9%fNf!y#3xP6^!{3Fingy2m4zHzgvI<`H5i}60T(Sz5Wfc=u zE@duhNf5#E4i||aCA}c*m<=FTJXCW8tKd0d$K3WS1ukiv()8i>ek|Y7#w3VffTyj` z72Jl;qA(Nc!sl@tJV!$XP}072X^I}+bN!nU+|K&DC^xiJRP-Rf047A^ii&L482|tP M07*qoM6N<$g4$nq=Kufz literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AE%80-bronze.svg.png b/server/routers/bushou/images/60px-%E5%AE%80-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..600a549f9802f6b084bb34d446f19fd75f4dbac5 GIT binary patch literal 876 zcmV-y1C#uTP)=bSn7($dn>($aE6vjgwpv4(XFjg#nL7Ed&+B{>r^v-xon>l#&* zm>sS*+`+y^6(!^r9MNsKgXbF5m4v%+SlDa_GuYUey2xz6cY2%6kDsu%A&pU3iPtfw z+uS@pkd4&E{4Zs_VM(zZFW{JPB&V_MO4+SAuRGEY3|I1CEW>tuBW&~%-oonAb(?Xn zRQ4adB)fSd#~7Z*x57qG;SJo^r;hdbJ#g)hcpf(=(q4%Pyn>^`M(3~#Yp$`rb@;4D zU8nIbwit5M*UIM14`owHNZb@&!`%baKaN+02fFu;%wo6x15r%I z@DQHG`}n($w#)b&w^nT=G-}S^9o$>jK~2VFua^5{ifolk}e z^)lQE&fsr*(xmObf{1j!=wHT!_SKq=w*05kT+XT%TSmqq=QS` zDiJ$+H%r!wveu6IA1@HIz_{ky7aQr`Hb*$J!%ZxrN>I=C!)wn z&%hBb=l>N&PI?B8a5;ZEik$RBi||yi)aX%MUDYytJc^w33>@L|p!Hi6Iq8|PFn!i~ zhJT5rXb9v{9yr1sODDoC7%s0R(A)5Bh4i$gv5wBkr>0Y(AA1>IRY?CDRZe>HHAAHh zfIAB5BT?m~=NSIgV~Z!WcLnzs(%;8cl$ek4sq7y@*UU#2cK;quAZp~uH@3fMTF9`- z|Az2l(?W*D53)}cF+P1R37(XFs%&X#X=!O`Nyq;<5+VR$ZVMy;0000y*hq+lg-e29AuL!}3qmbygnt5Q zMa0G}7MckD0g0s@soO#m)U7lT>Qc0#?WseJ#djw2eltDonVEOa%yIf8C;d+6o8P>@ zyffeBodZ++-_)mc-PynaU>Nw8QVbQN1?U1CAP?+LH=N`-g)!@X27qO$MwB2+fe~!O z4sbKgppxVoL9^~>XNqwp!WK%Kb$}kADYfX7$pLrq%>4x(5Hx)(tpK&zgJ)_CI9UAu zMQp=gfjMaesL3qg9iFK+ajY45hHd&nr32LFJf4{@pwV}H9Zm*B**cBF90hh>Aw{-ddrc#YL=ZVG3#VE z_{(LUcNII!AAv;)#HUIFa1Sr&L11B-=gtHAu}$A5yV>Jpbl^GmK(#ue)&_!x^O$KaGsp#o1GLA~>mg|R1F$5ft_r)b zr<88Y+!}}L1Pwcw0WsA@$#P89Lf*=26m-uqzF`Nrp`ag$Cg7njn6paSXDDsh0ro0g zClr@_LA=2XUK*VCX+Odq6h8yg!iqM;2%m~Cb&uog4r{Z_ix zq-+943EpN;6|Zqc=&IGO!!8P3Iv9VXEO!Z64l={NTB1=5H)6^#eZW!Rl{hw+2+vgs zGJYv( zMm8*Y@B2PeK@;>I4GRs!L)g#Q3$ zu-2wu@BL3_r#j1T&RkX?UPyukegu-X}rEGF-qbmb2ANZ7jZawB5v4g04hIv6z{ zUy}R(%sRd7O{|5~|ARA<8dn=WSZ*;dQ(c|yhl+s&^EyUr!v|~|M49avdot9+UFPpS z$MW3bv_*1HK_{2ye2<%pjv9SFQ!G%$e*b}J?wseP2Y9w0R`shmU@Md`JvD00#BiJjqk~7q|A-vEYEYopwA^gD4`yfGy^|G)pf!=gax%MK5j1y_nJx^Cwb9!&*&x_rLnsy$614?GWU)%WF3e{oue;aX#*q)dyX- ze(6<5WUKp+Hd(Dt-@T^ep((?!C8<`)MX5lF!N|bST-VS@*T6Ew wz|hLb!pg)z+rYrez~Eqh%^DO9x%nxXX_dG&Y%n?^0Mx+X>FVdQ&MBb@000m~aR2}S literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AF%B8-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%AF%B8-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4106962b89fa449a5532feb72a55cab6217c76 GIT binary patch literal 1067 zcmV+`1l0S9P)$SK~!jg?b=&t99100@sFFPrY5LWD@MT@twBpGc*Wa`58j?cQSe3d zK@=2=h)59x`%*-FDGE^#1utlQ5bvU(qEKwaBI2b5t<+LX6t!A4YMV4ZoEbB-JJsEp z+1<=GUpVZU**X97`|X@F=Q7Iz3-lCy9jt2@gZQI^b#{#!zQ8Pg#;dpv1KkwWZbtE) zU^-3{xEn)V)YVp&o4eD=^aE}YT0+lp1jaC<(fG$WuY1zk%SHHHqv;uJ(4)<~ANOKP zqwyWMplix9xDfZ?Mx0$R)(ULaX!>ugDHyvnc1er-5^J$6XS{x_m)*A?)!8{iCf8t6 zqqsluIL^o!_Y#di<}5av2c`#c6F$IxjUwN{RazfzhGjSLhsqFL7NbIw%(^>Y3w`mh z7UB)yg^XAimnXR#`fvrF$6jf%lehzmnvAswFW1F*x@5hjGJ+?tPg?XRnjdnG78V?F z*>B62Sw1W96sFAypT>hYw2AUB)s?FZtMQif-Tn+`{ZF~a64&oDKY1h#_#JRse_Kf>u5*FKZD=9Nwf{4Z*PsP$T3)SoL1Td|=j+$lYFk0-ug zS5#~n^y3#n(5G0{V)>(l$xE_tkK=mWDm|$=vmD9AStmWcT!TYeC_jV`rA^nT@e=hG zriO>51-^+BT8J^MaT_R^t}Rh-Y1}3(>td0=M(3KHPhT$E>~`~D@o*r{$4+U%o1*j0 z@S;Y;W97>%mt}ZcqwqIyHIB?Eb3AUAy#U$Je#ynD;dboNXkZ#Y2~Bl}>}{T8+S*y^ z#W+!Drdhigt)!Jjg*3ZNE6Pq`hvYP2|9O?LN1d!c9>-^+JYf=(T>oAsY$f$9eL}O3 ze~9Ob2AuCZ{WEwkaePkEfb-ojyqn0Mj3q^aRl)FnDFK?=A^tqs$@9XtWU`sq^gETw6^E{FI6&}Y|=}F@wjEGWcd5K z<6IA}Dj6MQYFK?g{5T7rfv!8BpZb_^!?`X lo5V6%thv8AEwI4B!aw9YUVP^w=9~Zk002ovPDHLkV1iz73q$|_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AF%B8-bronze.svg.png b/server/routers/bushou/images/60px-%E5%AF%B8-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..397061a0e4ea2a9ea2fedc164831d1b24c05c454 GIT binary patch literal 1645 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%AF%B8-slip.svg.png b/server/routers/bushou/images/60px-%E5%AF%B8-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..512a48e7874ca4de8ce7da3b9a0c80ef6f3dff98 GIT binary patch literal 957 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 BaEkx{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%8F-seal.svg.png b/server/routers/bushou/images/60px-%E5%B0%8F-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4f62ad2aacf58a695960a170eb2a71cf9aa7839d GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kGQ3n%$ct)+pG+fukv(p42d}Wc7|`ZaG*%r{F!b&s#CYz@-Xz%S){PUsqpFX zQ+xj(tber3`+p-xUTl}QIoG0&r2(B?PNGp-W?Lg>N#sTu>shfKv@Cyir+Rtm#m#dH zKA)+6w=?}-@k4`enr>^t=Pf#_xBlDzsriDR57t#??A^rX!p^A2c+jzd@sZNO)Ky9* zVe0}L-*42o_RpcBuKoAB2a!tamfP_2bmbRal(k_yvqHq(<;tCdu?yB|t;JkTO^o6!U#?MJxlm(vKzb1-BPi*j^R>cOW!$)#|!$72GR0 z_Iiii`B>b?e2VL+`ky7gsxN)}tR%j&uH9@=Kjz@lMh3_Nfm!`dEWC z=04tgr{cv`X6L`lY;Bni=*M?GzEd4z6xG6HJKenC=7e31i`1?>*qik7Y1kg-1A*lq zUc~3B^gr6S@S(`6ireBpEH3y9&0znNyyKK$46_-F@`SLW`)%@E?jKT;>OX0{+Z1hM z@z)|(?b~tY9c#0+r4LN8wqObiy_PPTv7>o;qrcV%qXMvuzd(j%@1!7T7LIH z@D$b!HuCz+1?PBc(f$Jle7P2)Aod2UJ=2h&mj7_)MduP?M`R*7+w7!)3Ey6gX{xBuMcrfKX|^QQ9JK} zxYuU(4^vgkkLvRV{7ieVS>U+m&&uCTzoVj4; z->)un?7#eeMt_EtCoXbxT?Qsh)e_f;l9a@fRIB8oR3OD*WMF8aYiOuzWENszWMyh< rWniprU|?lnU~uEJ5{ic0{FKbJO57S8TfOH2H86O(`njxgN@xNAR3maS literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%8F-slip.svg.png b/server/routers/bushou/images/60px-%E5%B0%8F-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..436a627cb58c9e1297fa2c232e94b4c4ebea91de GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC=Fc1;v)l7x)8||Lp1F7!q;#?F`?HU`K)D|2MAGUFMbD{e!hBOsPs>4WpoI zw!p#+{=FP;9Yqd0cQ;LUYChWE%zkk7lSc~|I4xnDz7R1q386^X_9{ zWNZ|-n;t7jr)@Kh(o|@AZ*wkMcR^G`r7Vz5QV7i`~xh7227lubA^A zbU#>Ky0wD;&M_xn=^MeT-v-Lw2$e4gkKC}cT=-j}{wyu_?T-ZaJr*^yE-KX*6F4p- zB(Y9GlKDfzt_gGB8T)RSvYmxR&*->1&o1$E=F!ER+5+jj*ja2&Ommy?TzSvA7}=Kn zUu+MTy!O=gjndSaTxOnRktT1`_PH(WiqN0QTZ%diU-PwG%sziseWLO^t5aX{JHHuR zo|k-1Ou*x|W4`;Ol3AvePqZ&q`(B(lVbR}f5$0(T;`=kFr*+a#qTE+)b z#`CAhbh*`r2`T2C@w(`JWBnny1Nlk26lV7KN9cGR|7f^gWPbh)-SZ)zkGv7D5n8?Z zh}yathhjA&9x$8D>|HNBS@er{`yS6V^R$Emd>ZSHdq0XjapM5fZ}Dlt4IEb(olU*wxButAEO+>PVA#2fYg`YfohT}16G>>ixX5#bNWkNQ zXr9t8-hv}SZw|FE%{kh+$Ft5>=|-^H`nyTYQ>?#534|_q{)uhz47dHgMrux0^&2Pt zwEhsqHLsw^t9%oS@V3Zy`@{>PEIQ&LmA1Ne+jGAaKNJ$hV#@t1DrC$wxZx;-!z4A6}PD-ELrDECrhc2OC7#SE^=o%R58XAWfT3Q*JTNxQ?8yHv_7<`>%3Cu4@8glbfGSez?YiK#&=m6Bf N;OXk;vd$@?2>@Vnrab@v literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%A2-ancient.svg.png b/server/routers/bushou/images/60px-%E5%B0%A2-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c144593a23d046ca17cc92640a8b482e5e88a7 GIT binary patch literal 1225 zcmV;)1UCDLP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0SX8$Cr-9!!2kdQ(Md!>R9M69*iVR6Wf;ft&&=HU zr)Cb5;vWh^9kM?v5fP>+7=#IJO5C)lRRt|1X_16slLc+82&AZ_azsp#D5pi}B2bb1 zGr0&7h0)Z=%$ZWhappQt3(uTpZ0^jx-7}+$erIvdJ?FXSdw%cxyzleAm;ZH(X|s1m zh?p`O*gDV}D!r{2=+!MDS(j%!h$cwd&hwW_|6;4nPrtPZ zdj=%pN*|jsCtQul0Ustp6e%1?taT>vF8??J`$e2D{$=dIOLfB}p z5Vj;&=lIC?4msf$9YV;vpxp^SIjAM6Q)THTp;rUG5PnOpt{9NdLmh7n|Il0!;74&l zM^Y5}C&yOrnqiW9^_Xs&(^}Q4(Cts1wwCL+(yzj6V5e|+$f$LqG}Oq+wa`@T0#mWS zVC2PY!7Fe|8*&~P7TlF3xY|?rTHt=;3xKPPM{Qa>GSEsPECDYJ$Z6(ib=)6GRKAMFMStZv(%dy_I#BYUOhYHT;B~K59^)`-cNxnUdBL#;{ z$>73${J4c^mQVYeqeCKVF&T9l(yLc=|JVNAF8ny)#SRMVlJjN0b58dNWunJft!9eHOXb%t61;yNJ+42d}Wc80e{NT5W6{c=ay*~^TY-YiVxKc&(nw)2H* zhOUxg(}V>IO-*L5TLh|RTyUz|q1_?oD5RSdtsKJU11+yDRn`T9gZos%~Hi?@GlW6*zF|Bahv;iaoV^g#D~CX;!`R({W5z5FVdH!;02_;R&Yn$*j5dw$88BHt&z{$lB$=#|E`YfAQ) zB@f(QT)O0`FyAd*weHdZru7$cvO3iitus>e8OvUO=6bt(n!De8KeH-kdk+RT&f+Gg z^HzE!)d}rE$lU^S@@5t@^0GHB^biSCj2!N1l`X>pRW*pSpg_csDZ1xC-R? zU7B>9l}%7?cHp{Vjzd>9x9)Ac^rh?3y{e_f0=8FX6$y1SM!YZEQT?Hup=`s!Z?5^1 zcXgJ1%3Ykla?{?@@}Gsuj7<(5{(Y_AZZg_GW@E_i(D*fpH^-M(3G34LZ zq|&1Mlt-CE@N)YZfAdFYBpz(g`)<4W0W-&;xAm`Pef_ohuF4P1rUE<9<;MkDoDBC#bE?Y@eBCvF_2gIEGyZA@C;kbyJ-G4{uj7vFW1b-!xf-rdzH{yo-=+gR zKXyEu>-jY@CagfAcu4A0X}RO_JBNhZX8L!yKDl(>I_ib#(t~!#eD%_;I;$7PpWDyh|M^6W8{>~f zJ6%8IGb}RRT0GO+=7-D%UcObKQd@ZEbu_O%zoTH=0oKi|^E$ZeZ?HW-bFJsN$@@*b z@7NTaR_A)}ox>qJ#aR9S>_3dkVw&2)459ylXKYn^7+6@Dm|7WIY8x0>85p$8lJ-Z@kei>9nO2Eg!`I`BKLa%|c)I$ztaD0e0s#9( BjOhRX literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%A2-oracle.svg.png b/server/routers/bushou/images/60px-%E5%B0%A2-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e961f1a31fdd0dcae10743205fd5a04f6c555763 GIT binary patch literal 781 zcmV+o1M>WdP)n-2!F7f=H;aQxbIS*s)WGpi9&rP*9Nf2#W1u&_&8FK@gaPOaL2%rz8*a5ONNv7f)RU^}rBD*cSSqV-=VN z9s@0+1{Kl<+`xpcM%)A50|#W|S56Jk3)}`?Vs7tBq#wo^O8ObL1;_*UfabvY5lYX+ z9&io8k-QRa0+%TLfnF!vi+Pz??ij&{ydrww=_h5v1Nbr%K&y5A7%3CZ0dMeyJ^)RD z>&Ho%Fu+NQr_)CoUiL4r zPc5ATa=>d!3(x9BbH`EO57EMp6mvP{KGDJ#HAA_io#>_G5y=peZ#-s!`H1re1v7{W zHxgbUZPOu`K~(rG(eIy631$#wl;}Zgo)qpa^-%udqhBwY8w!*cex?^KemV$GN1rf) zLE%k=2QQc0!516Hyom3kxRi^kCFLEcnR1*v2Z~m zkn4H44f8@TkLl@c)-cP$Aoh-8>R2J%!=n;KwYEzEzH1cK6#i+o8zqWr3a?r1-x5WW z)Wh~Kdz_F73t|sinXn6zbW1Nv6x9^Ad-StJ(Ig4aNEA(y@R&r=q}9(G(7@ zo?b{5)fAo!{QX=lg&=j94Ymbfzf@7pMfW-|jJcgR6mw)`>}LJ}U?vQ{wfH#f00000 LNkvXXu0mjfo?BdZ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%A2-seal.svg.png b/server/routers/bushou/images/60px-%E5%B0%A2-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4cef27e28430f41bb71fe9e5fe19156d68468d0f GIT binary patch literal 1143 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%B8-bronze.svg.png b/server/routers/bushou/images/60px-%E5%B0%B8-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b8dcff23aecec217c11c0d6dadcd576a40bb05d9 GIT binary patch literal 871 zcmV-t1DO1YP)spR64HgOQX&_+ap5u&6hb$q5JeFMMF{Q6O$BYsK#MRpf*3*M8yG6p z6+^wElT%ZsT?#0s1+ z*z~u!rI@-z+=KlFn|`I7w6wf{3;NIA4;R#xlt~=bH2n?6+78xwgLB{_7GqWI^CdVh zjOk7>fwTILU6072I1$V{1H))0*Z!6Y}ogYoEVV zM&|I`j2)QK%&@iyt18%8`~E<7r7iFPzSQj1?=;iNrI@Y!=Bls&nKx|0Z(^gf*n?XK z)HzuD{krrrhi4q0YWC_$JoPViU#r#GnNDUqJTD{;RndRqecbgQ>Tj&o-IqjV3*3i~ zG<)@XJb44{tf|%iqE(eGu^K;%gC0k7x-ZJ;paIM(z z{^4b|$Lr!-$Om|E$ToM24L>(zd#$n!A7ZPp${Ci;;;ZGLzmt+qF)93U)t)^jOoW|c zIo{RGp+DC#vs3s)eEIfpPMllMdlun6O`|h-TgOf!9@2lC_K>iJ+bJe-N^JBGyeupo zJI6lFEbQ5mf>N?TJPXg@iK2=Uvr^o9lajNCFIUQAxIbg;>y%uf++8AQPQ!QB-uE)bzD`cVkJR3u%NRR5WB6KpnAU0b zikF6a%F0R0HnG`Ln&Y`MY!RFNMF%(PuCYN#FsdgA%Ze&W$Qt4F@Y^*0B?W5hMPG`~_=2AfdawI$Zz&002ovPDHLkV1n3&tJVMj literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B0%B8-oracle.svg.png b/server/routers/bushou/images/60px-%E5%B0%B8-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf5a5ef8ed9c92796971393cb7a17965b4eedda GIT binary patch literal 763 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k64A71v#7oih_ai%$_ceArXh)UibADO_X4J;C=R#hK?6Uxnz`-?ym(bw_RBT zb(^Lo>fX7sDE@*G$D##MUzjh+2RuhF@*2b+VYMfBV@~0X3PwwYh626)5_D zYcN#g$^QBHm-Iq&`)$YP2&{|zdHs~_!$iA`yN9-0zdT|eR^58NaszK3=fl=(_3OTK zp8tHKo~`x$y6lK2ed$i|-#+AC&bzhqMb&hHU7OpZ#cMCmmp(ed;M@J`qLZqMb3D(= zg$un~<$YStNO_O;`~qH{wN5=A2|xb#j`hDzZaCJmV%>{V=?^1Uud4P?4Sj#C z zn#Qr*POzK(cHx~>+gE;F!LdWOysIIaC)JpFI(L2XwW4WZbqwi#^BiVYmRbQ*h-!&z zL`h0wNvc(HQ7VvPFfuT-&^0jCHM9&dFt#!@w=%HMHZZUtDXO|2p;j2xjUz8@?@ngyE393*LqCOnsi;&NoLE%nEUK!|K{ze-tqYF zz0Y^vSIYN!%?z=A@XtAXtNNpfcROE9ZrOLwWy{-E_PBGulKhwMw_wXVKdbPtr2AHf z;+kbke|E2)by?4{FSNg?e&00pNyi1x?NqA#{@eXkJJUTUb*7re`FG~K`flGdoo`dv z<9>0ww4+_yX6bQlk=>Z#8SH-C^|Zu};4ro6Yb(?8SJ~CQyS1kF&tk`S(Q`Yt?=_Wr zA2Of!;JS(PWY@2$4i4LvJt^gItofYnQ%>u()}FNG-dS4}dntU%?iVJtHDa&rp0UqA znf7l6m+eH?nQ^-`gO40Lwyfpy8&Qos z!_Pe8hZ=l;y-aRk{1$jjRlZ^+Z{H`w6YO(&KDKG~p2)S~*mmHz#DxF1w)@&IuU$}o zR4k!-hv=E(?iPnNV@^p-X|R!<@x-8jY0>>6y{wSe=R77KUeau%+123N=BL9W)3&05 zY0aVZnSZPIA3fi{MCkZSu@6lm75ULQ;eXspO(Jvi*PUwkefwSv+liJr>$-K8rqvtk zmru++w$+obz~Ep0{A){D7{3>^eh#r{k$&kP>BttJGOc%p(DR=7jJA_E7Vt{Nd~f$P z6jd&17To{sUN`Tr_Uk;qY*lvsY*{<6?sHeASmeTGy^%|Ioz*F=WAeV;ciCjk+KPFH zgI=C{wEED$2MsZ)73JoBq8=L;+>D;W%%AnG&uiL)%Usb*!})F>-^Jwbb?diF;&ls+ z_O}raKu! z_ZQb8y+b=M02_rm+mQYy)OG?zE#4~BMQ}B|*oZrXIv>MDBbMIe2(E^|8}Sm4d{V>9 z1fS(pfP^t4md?J5EZ1BOJI&IrhCdsz&4`UA%QdNC=_sm6Qig3tY&2W0O$fE-yfGrw zMQ}Cz$%uV=*wyf`P#3|~@OvYc_OOp(bI}ph@SqV(cP)H|^g1IBYWOYc4Qm#2jav<$ z9_}*Y=R#csSHnMmk6OG&sPi$rTRWcwUI=v&d{#?C+IhE7<2t0b18cST0Wc-Z8NtW! zE2E$`fyT9mPZ;qnfyRoDVSQQG0vr}-Y&T^-!~20_TKo&Oi65MuM3;Gk%s*R~s9YXy ztI_@dP&V3M@hRGeCRFd}#oVR#%IPeXhHbl+J-`i1+X-NEGUdC`YbmM>oC4Nc+V@%7 z7g3M3gTQ&cOydPb(2}!x@kd=`^Va!+8&Y<0tUm{Z_@8OjB?+lw0)D#Q+Ib1g4uh_rWsS(=n7}1|dMg!;1 zWR@P#;tzrIXY!`ii`v5ico#Z(7KZzQJ-~h7Wd`|kauyQ50Uej{4{T0l>Hq)$07*qo IM6N<$g2C*YVgLXD literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B1%AE-bronze.svg.png b/server/routers/bushou/images/60px-%E5%B1%AE-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7856e4ec0744e02d710c9368c0d68464c19f350e GIT binary patch literal 705 zcmV;y0zUnTP)s@dd*_^W=YBBEeH`|jk2^ba z*&PT30$nl&Yyj_pea5w@a26=X$2INbIqihNkkg*gPHruHL_4{K@GhsF*G_IBTyomu zz@TPwYvCL)s+ruE@BnZW*xx~HN%Z%4s-Yu%2|ooEfhAzLO{^5&-6A#z+yveNkN>$k z@qs>Ai_as#jW)5JuJ8cx1h@wrBYCqkXA&q9Z6=Dq`4+Kr)HWVvV7@`jUf{VCvjQCQ zSg#izP%H2|aH>h%EJ@*uVtyQ0aOMlZwEuFu=OD05t6hF+cSsh!LA0tBro{a1_$Z0-XV~l${+b-o zW6CZ52enJ{gqYhF{W9>5_K&xoVi0&iy~uswbc1pC_yQbOuh;_zh&CfqXsf}PyV~b0 ziuJ`9@PXDV>K@l^%JfSf_(XfzhgJoq!3gk@=CTVUe;DWshJaVp%dP3t5^tcihkd(aOQ*yqTlzz+XgwS zSO^zIKXWS_gwv!KE@@T53M-KLo0cj;Sb?7gIji)7a9J~XF9@p=gcZo#O{?;kirZJi z>hDNbSaqvuCG38WRWI=%tVHI7H=DFm$4YqJY0DqxQ^iX7YkV${5#h=TKO%bJMU9=B n$sF=TZ{A+Tc;^)e{O9}uqUXvQ2Q}5C00000NkvXXu0mjfw1-IN literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B1%AE-seal.svg.png b/server/routers/bushou/images/60px-%E5%B1%AE-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4080cd2770e41fe288d406f1a0974735fcc35478 GIT binary patch literal 843 zcmV-R1GM~!P)qNMxW~^sDo$b0Ly zM_(&#RhO<183y;OvM%hC9^;PU{=*caiVXiPG4^#)hP zYeTUuY}eu8bpPS}kG5cwWmiUQ%T*LYWmtP$wedn_SgputkEbnoBW?4F%tlUsFti1m z_w!7S-=4=tU9ZNcA#eapkYh5fR?Y$t#A7105-1uqEuuIDqh z0(T*87cKp@U3v_y^0`TJ^6COF^uyHUB|R}6;2DXiDUuyn8~7@G z;9bUZ?|~z6!!O4SFo(bBtltOR7xlGc9C!|V z!(ZeV;1%$of_PPF16P0>Bn4@mp2#`i8vZw!hZ0$oW@AoV)%Rg}^y^r?0#KD;dAQ%T zdIg~B{{VnMcULy*AXx2S;6oh*s~!D(sDt3B)IqS?ZH5nZ5Zt`OA*qAlwR{&n>L57k zhqXEg9=MIiz-4$K1k1`i5JhW6*b7##08}OTZQ8B?^A*Jql@Z`0@U-ec8X68c{{UN^ VobWe!k_rF-002ovPDHLkV1k#%jS>I= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B1%AE-silk.svg.png b/server/routers/bushou/images/60px-%E5%B1%AE-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4e61fda164575e5e7570122f8e2de6cd06171179 GIT binary patch literal 896 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%9D-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E5%B7%9D-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe5e62248b5aad36a970768e58c8f0831895181 GIT binary patch literal 1123 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 bGdL?SFgh?WEe)EI00000NkvXXu0mjf@c;VC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%A5-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%B7%A5-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1a4626088c31703e678786d9cf1ad7588bb85a GIT binary patch literal 953 zcmV;q14jIbP)e^`84bh>B8m%9K^X9cf(sWC zBZ^yzuGFPFcj{jtC?Z}!Ma7Mv$--;|74ZUIvQUCCByr-5qa>4wi?5pLuIiq&Gj-;4 zH~oV{cUMh*|Z0KU2O}H1=;8I+MNt}x@Y{5osE%x79e6Ev4%wY*9 zifywvgTHVbKjJ-nvDQD^UmUm}+9GzWWTu;*IIoL+dW8{8to0yQC$&6@i$Ik-g3R27WLI&1m}yozYg2F{O@M|!Gfsc`QrVz_#7YM=qir6 zZoH^-9lnj-*d;EMBbhYT#x8LRmd*Zx8#C%k!bTiWHG5DDcLT>$s%GcKI6rVqiwjNJ z@Z&i}rD6j^)NwWgd_wpj*JR>*%9vrbVciDw%v@{j7A)9@R0puJ+wp#ig1E zoFnGZ+e9qej#0~@`DSd#6z;&S7;p2NGh#eHS*O@uV5b<)$~`=1K<~0P3v*?|@8%Sh zl83dg;k$B*O36M|vtLOwGtAB{+V}2EPEjd&UDfQqoPttvgGe)*%`V~QoT5_lj%x3| zpH)#p?o>59k1KMDO2wF%HkJ+d9nuiU#YP34Ez)_Co`Bb1;F=RLy>)h9!f& z#&)sNwOxv_;)2kAV;oOgUhZ3NFRiDT6#38?t`h66?!kj%jYlVD@Cd#ZIo4vEeVPNm zGN;6oj1wKcZ{h!>mSf@(%9J=gCyV!uZIi|J%XLmFQ}dHpQTxVf4={t*@V&GFd!6lw zRi3$5YJKe4Pwm=HrdAsF8f%~Xk&Z*$N?m^xH{pI!n~f&}n?&tjQ0%uw)a%XW)rU!duO%wUs`ErcGl;7J~Q@u z{VhFul#0F#V=iJElQ@Ip4afR%XovF_u-?$#zS&rNSe51&$?nxJkQX#1fn|qLjMA1GZb8N?qY2DRD>h3LZmnny+di zui!BRr-?h8SMV5uFQ@cfQe5-fo_QhNwsbFMQk`N_xV@7mxQg@fQfohhcxiXD=<{gV zwV44t(%c=ps>5r!)r9Cd$=~gSpXreZp(sIIhAH>_?6&; zY{_PyBkO{jU>@IvXCNL5(>#?d_mU3chTw=lhf{)Sdr2^v&DHiRwcty_daJWxyK|@h v;6|NQ;USJB^|jo{lHed%+~J%aJ-Ug1U^N)ByIA1x00000NkvXXu0mjf{xxWu literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%A5-oracle.svg.png b/server/routers/bushou/images/60px-%E5%B7%A5-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0f39fba702cebf6f500faaf7582f7d9104acd128 GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~Lll`IT-b{A>lv^LV;AhD02GJHyvo+EM0Mz2P+%@1)n>Z_^CJG(_W-ycT9@ zW>o3^Rg!Cw*;73+?hiwg`d$zJOWp3am7j$iGnsrnu1{Z+@iAexN75x{^JCLz_?B;q zZ2m2OBeDJN&$FM;)K8zuXq_d(=lq^WAf?OG%0k__OGK->CP;9<&hNb9nLRlxfCydN!S%IO7yU> zzuP)_uBF|@$hVfV%EjDM)4ExoZQY&vxu{NTs?GA8jV>MEcQ9~dJuo%4Hy77`x5YQ> z0q?}VuR{Nu9$V*5k9un=9HYhc;9693aag17_FGF+E6*NuO6zXidrf6}YnOcY)oGgN zY^{z?-5UD85(-u2SeH|8Zr zZ=8EIG&m>vFT+7Tw;4|}A8xy7vU>JMMId;5++Y6f0rN#y8SRs2$nNndQT#0QbCsU$ zlIO=ntUq3K)^A)bW}f)TihBW1p^{67kZMfHzB_A59y%|RmcP5_Q2&|9TUO_QmvAUQh^kMk%6Iwu7RPhfmw)wsg b{FKbJO57UCV%DqxYGCkm^>bP0l+XkKrc5;usQf`0Wf^zrzj!t^2n=R#97h!_~^gnU&Y6sjH9c zV6RdZ-_$vbDtZo%%^eFoIP4o+bXt`sD@0Fw>)W&C_qGjRpWNL3IW6ThvzVCJEQO#S z%I79}?78AGKkeB&=5-Zkie={WPnq`hK;EX7$tV1FTz<0Ryr11_YZ;}FA0{|7I5+Da zSjy|*a64>S_`m;AC#~hnly49oh_WGNz4p~n*yTd8*`i!2bTdOXI?LKzphD~Bm?z&Sgt%as# zYp%W)4?D&gp0jm>>A&Zue!n)}d)8!C)EPPN1M9|+lD9??o%0Oi?)X-+y7}yUs`gvs zc#o;?*ShQKzi+z9u6eSGz0~htkkZ42!B$&1GB0-AEPGTQE^w^ZtmmfwJ%);hvjvOW z_7u;}pOKZAIFZ?2`fFZ70;u=wsl30>zm0Xkxq!^4049#^7jdTr+LktY9 uOf0O7jI<35tPBi#W{TvZXvob^$xN%nt>N#HH5Y*z7(8A5T-G@yGywp&qv;s{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%A5-silk.svg.png b/server/routers/bushou/images/60px-%E5%B7%A5-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..baf6b5fde2baa78d08ec481f378d1492c07c63de GIT binary patch literal 1017 zcmVH7|NrtIQ*F=&N@y5kSeCs$gsDyst}^f{Y{6MsoPjmj`^V}B ze2Vw58}A5TM5T2+F2W;%@j28>#w^~#4veIPDAF3-ie30!dBD8*8MmbZYNbuMAA9vS zirvQTDc~Afhr0#HRDj3ESFs_-gnMWYjt&sC5#PsvT!HKH8fGd0*&I*y3vw8j;(7d9 z0kBr_qcA}lDhXM`R$PZ`a8k*B^7Jh}#{prTZPrSh*c2n#dn3Z~*3fTw9ShamN7{yIy^YXkct)7HPqXls*f{>kIsWQcaIN%B zj*(U|gOBknZWOMLPP8kh&wKiVlCQ=keG6{Ddh^$@8T^Dv?8g_v+V~OvEOEX!ae14z zbtU?%ye`vzgkMf!U`dLTH0fYY+olu-QUf2(X*)HAfz-fx_x%c-9NR!@;F*H<=$CbB z;AI8v8)F+t4ZOUd{gl`Sss_9|wt>{ZMU&E^11{Qv&c!y68hE^*eLA**)W91H+B;5) zl~rosGYi`HC2^5RHDPO+_p@{Tz}!X9X8Eww5~OcaUef0mw7)NaM^#GT^9tH0QkbX` z@CPYOlufmCt1Z}2@RZ9UKAcfRZ5SE_dI(F+tZ;G>o_5i z74sqftdP{Jgl-l;Yf%>-_FtTcsjY^D`z!@;V=YheY^SlZN2U8rJ+q6>7NU#<&Thjj3zO@K#T8MteT21h^~|(QfgPaj3O$C zJHdti2O?PLMnwd-RgfyafT$n{S`q9*s1d+wa`JkP!S&p4xQ0n1<`KE*sft659wT#O@V;q4+F4JVOPKF{F%g}=w@ z6jB9O;IflXK^%nlV1vJ8$?G)@ms z>-}9-*&Z$;Ja44+{lefEiv6*w*@c(zZQd`Z5IThoxC)nxsAx=Q0UE=3neVi46vq~h zzu+JaWR5@S1RQN{!RHBdH)#eh}B(xW2eyi7!8S7ZG`Tj#&$ zw@;-IliKjKD8<}{n{b2Jmy7QA&*SxieI#QH4~cqHccPx6&EZMaMsokkMx8J-Mf)9l z@eUpncT7@>T)A1iV(G1I9$$+}<315aw%bYkhEpQMJX%0csoX5YE;dtt;tkxZKY?G7 zd~9)}TX8{s($aII!Dc_g74^v~kFEO6zG@ZMi+AZYyHj(Dfu(Rvui?Avm9sqZWJ?p7 z&-)YTsEj;@vsJ@QDTFkcH}&4q$FZeWMav*hq_qX_4miIXAL1LGyI@|#!zb_;4vXU4 zsT||h%69qV<-bKW@)JCZ2Su9LXhuc4mNGNii)|uoZ6rf@1V2k_ye0PfSq(}HyBWnj z*dZ3M)W+AR6r1`A4vD7^Gq^@%N|WL##B|r^cDqP_DK^VN+@ZkZl_oJPYF!WD2aC`2 zi**SslS^>OV8dV4sH;>qi*0MrR(5TQ0h;z=+IM0N$Zk#TwdTEQl9TsFX%UXQvcfotA^|=hwXM>oubO- zE&YbK*Q%&wZq;x2kcK7|sTfrBzbSUL7Wy9(9K=v_F09mF?BPcH(!3OUOCk;t7CY7o(@*ZE#2lz kQ8b(pvG&e-<*Wey0ctCQivI*Tn+a literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%B1-bronze.svg.png b/server/routers/bushou/images/60px-%E5%B7%B1-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c2137ee78efb1c7c3a39ba9bb509d7c362613846 GIT binary patch literal 922 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 V!Z)tIjMo4F002ovPDHLkV1mE>HGcpA literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%BE-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%B7%BE-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5f909db528eb7c88475dd22ee3916d9aa2ca72 GIT binary patch literal 1053 zcmV+&1mgRNP)BSi%$b2Q$|$3ZK7@Wnh&c~v^4d*Nj{gfT0zE($Sn4`>h3kO8LT{e|wzv*n z48h~2_AJ-IT??)ThD!D*$MKyD9;4Vp9LIMqc(h_yIgVfS3J*sNUe4fJ@JhuV0W5c% zL$4zP%mEGnzYzCedFujh00)73iZdBX1+~Cw;4MLsQClnG&vAZz+ad!TM^w&4sJb-+ zGact{g<}Mh{|vMgINs$Qe*^q2@OwLA?p?B|1G>pi`Yd8Jo&fw-etRx)hXXskW3tan zV3?EaEpQ7z(I3F}h~HJgIaC2B6u%3-ly4%`;wShWSW>{}2=Rgo`DTF`>7|+uj^Zb` zHpFKy`hqKfcara!)G|#84-kpnjPTinzF>fBl5cAYIi@z#ss`qJ?W+-f9}N3#liCvy z16v}bC3qSB4CzsXU%O$y9a1|3Of%#Mke1*T-ad<%FodDouwT``WGbBd=U)LoBm8;{ z`~9of0}c5Bq$PNYw~rfGvWETsQS6cv{5HnVw8EW=T@r$8@Yku{#Q2&D{-xNJhWr51 z5Ik9G$5q%g;gT2J7V0HndPNvA{?TPAHNJUL>`9OYlR*uG8RzBB|hdsr^jDUmdj6xpE=g zQ|xsboKPeYJP24V*-tb%GIT5aNwU{#a6*wp@ETyS*Y2SA2CXd6DB06VFnA>qyisa5 zqxWE-3f4KL0Zx+tY`jC07l5tc3Sfg|Ki1^gR2bj|a7wbbVfoU{R`4RkEh2|Inmk*< z0EZE;Y(Pvv!j^&~VJo;nYIg#+HF>tDG>EC|dCA^yz)gf9h&gj^z4)R5_Y(Q*(pL;) zPgD4d4f$4RkOFoBQw_LR$WQpPMf|%G|GFvJ=9J#;?R$WI1fOW4psqryYgRfqf`3Oa z{?5x(@Bm;gVmWpzaL$mg4pLtY`5?xNJ&32M`xbnsxIq3XeJDX+{jvBgqJM&bHc&@p zn+oS(`W6Fl|Jjl%@V(>s&IPM)51%@Y?;NY}uir)-e}z{JR06wz%@pU;MPxPK3D z!_dEinjeDWnjw%!z?Nk=XAPYF8GcNnuhtW|FJ#TW2G(V8PLd9Odj@BlfpgzC=z2CD zeZsy1Ol5FPzfWdx-k|DPN7jR_iFyQY(As6xESrU&hVN!9c+Z6Gy)OF-E&!`FdkFYr z!82v}w*_xl*ue$&2z$tqCj}=qxTXXzwmGhqRI6m}P$+sj4?{_DWi zhqY~nr%2bo*RXDsV4Ec=fgZSRh9RBhpn@gOc1VL?h5C;8|gpjJ?dzHz_U| zo(G<5c2L3NT6-4zttBiK>@sNqJk{Dk1(&F4_Z5D4FilVe!g?$ z=`}oFvzHnATiJpm7pPD0;Ns^4N1k5qV>Nr3p>ICqu}{-+95p1jI`Z^Gxm}LjUQ{W) zCBlEae9=c$@Foxb31CMLkN)UoT`NWOFA$nhWJ YA9nZ)NUs)2RR91007*qoM6N<$f|>}JN&o-= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B7%BE-oracle.svg.png b/server/routers/bushou/images/60px-%E5%B7%BE-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f1922cecc35403b0a3ada470a02fd68d3003317 GIT binary patch literal 872 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B9%B2-seal.svg.png b/server/routers/bushou/images/60px-%E5%B9%B2-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e4a28ebe443d702e76cfc53f53a2c64c29a4fc GIT binary patch literal 872 zcmV-u1DE`XP)96GZ?C5$Q$%-B2-t+hT&i3;KGBPqY;4p9x*cQ4YKF9%YfCg~QfxQ9X98h#% zD-n(&VjI95uw7~Ia%}4bjzkZ*Fk&!d)JK3(rM=Vf=Ol1eX$x>K*rukue!o%AD{TSE z3;wCRey>sgrL+aO7rbQD|Hehb0i!;rw3P^Bv?i?x7*yCQ7`7U;hj-sFfQ)LhlM@PC zCk;Dw^fNx-KBObyi_yNIuw~B5UlGxL$pcy=^O^SNaI+MF8N<#?SDnkbGGwq1*&Ttb z%a@Qfxr8h&E3{8;HhJJSaK`xV5%ADO=aSg(?gXA8yRNmU0kgm|vUEjpUq*on?YpW5 za0+;mKwq6P0^Fy4mhGji05?4MUBv`&6PN}*A|tzz$Ow1~+yRdJ@3MP}$TQp&xCq<= zE+VOAAzaszAxHa&Uiaxd>Am!73|Z}0KAndUyvJ&5_uE|&LU1L3&;NuFtUVM^(GMeB z_USx?;4!Q1^?)vf;Bl+%b=~bX$2EvZnfBl&Mr`~q@A7UD7kJO|z-mmUU8lOB!(Cy=QVI7uKz%8SY-VsPfL6m*lo4zz1yC!rO==cYf;l5#W8uPLM0000BBq~}HVPsl3Ma8^zTb!}E-TOTE-sic`bI!~# zUpU;$xzBUX@AsVN{?GrM!xGVX1rs=hH*gOIk}9g1-_U3&XRsSX33b)NGVNxY%VAuR zOkEAE*V%9bJFDz)u*$|ta6=E*q}Es|59>U-zhYgL9j1PI!ySH`!J`34!RmcC+KSI*#Q2S&qH3U(uh0;B-tdl{W>w7hQFq4B!RXfvA`A zT71dX@F0Fx-0-&+aNc|!4k>Q>9SeAAIDqGbwQdp9A7FI?y_GR6tZ$2${tnwL;L-k2 zxj;6GCseqAi17pmF@{Zjv@wA%g}^q}R6l^LX1~wiqA(2}#P5Cd*B1|H&z1M!ej(Ag z6>nlnxwjyzoW-gL-ZI(OBxD@-Wn42Xj7U|68+uD|E9YAL-6Ud1%kL}klH!rPTbYoP zrY@_>Sq{$#rY`fz?B^=%5>`y>E9mDEPS2K8_*~cxZKKYhbv;gCO;g>+n8ZU^TcXV$ z@ik7GGk6le^x8mOhSv&Ptev)Sx-o_kd^KA}aG`HyHE^devPJ)Q|KJFo#Fpr)OK`K0 z7EUW}_8@MHFS$5_!s_UN^2@@{q~AU5%I(7X^#}b=A*1S_ElROLSpAHucFt_z*@!;6 z@(4av?!Va(BJA6EQJ7M)t~nmfO%HsexXJT)88^1HwKeDZDO_2zk3!rlEb;!-+2~mz zgIby0jGH>#dv|^E%d=WI0NW>IHw_`_KO`J$b_+f$$jq%b_4Q$G`<^Av{jj4fKjd8Z41#OOSQ;T1Xc7h`n3WHDD_`ClSwmDdYJZ(K#1xQvgx?oV>=!NT%#H4(a6GfA(+7Tpcm2rlK$h=tk|vGc>W)=)3k-CrS;F3p~Rw{x?vWBIg{c;df-nUEYN%{%Al> zA>!GV^H$lDX@)_F=hQ3uBaj~=cQ2~p({^NoBUwk_-E=Bxu)LwDevPPq1Azmk51GmsG1je9FMZb}O zTRj_5@7hIRuqUPvxUY#j?o_EEa)8&UX6g}(gx%KF{Sjz zKDIB@95twBp9JK{udp6qq(zO!s6szbZ3)O5i!kZUS!hqDIdogKy`)|u_ERV2tuZOg z#-3I-utd||fcRDvM59zUI#Sy(TmlTyvst_(PdI1VAlK5!-01jB(3Bwz2|K>ZHvEnSF1F&V{D z)UWwr%k~)b8es+Ed`DQL9R$y}BjMsqV?M(8B47$I5wZBsM(lPpBc`1e002ovPDHLkV1gJ?_TB&h literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%B9%BA-seal.svg.png b/server/routers/bushou/images/60px-%E5%B9%BA-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9999fe02985a6dc2e898a1e4984db477aa6556 GIT binary patch literal 1147 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BB%B4-seal.svg.png b/server/routers/bushou/images/60px-%E5%BB%B4-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..32b2b2a3606227a2e131b340514b809f4c66e51c GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k6FY7jQN+aY`e$6z|8IG;usQf`0b6`*)gFa$3OP3)r`vD+A7uSlC2-4;k9?` z(kt2-2dhI|SZXIYt#INJ{m&$LGFWQsmbi~c#RZ+BGh6p*ME$z7rRk!8a^RJ$WeYnk zeAA5lrt$YJoY^_a@^bN~OZO{(zukQP`pTkff<)|lndktcTR z|9)CIea?j9)Ne0zPaV?!{4uyrPiEcv(@n)p|M+x2Gv*zWzuBz6NpOD(|GkG=GN-B% z_b$+RqH|KHYHfdu!PA>>7M$JX6JplWw`M{1o3dwX=4O?OUD*9LT+HcU96wiL?5-26 zw`A7#eB9!v8==|~ed$PE(Hf?=*WXQg`B$^0H`7u7bEBrB%*P)+_5bG!-k&A*gIAHK zYRj_J%>vi1{6E3{yyW@<#p*XfYchBC{(4;UIO_G355?DRoONsYkhksU55LJy5*KI5 zek+pqcVF9C72NP-*Wn2Qb=UKPUYvU-yg%mW5q6#9(T7@AUp}T+9>DQ+Y_(7 z(KAw+vtfgl;SaYTr;A^%eJ0*okU#bJK7o1u{JSssJNZwop1f&;_1OgzfZ^@n<^|0NcC)hD{^KK66gSMAs+^!fD z#>f9YnDSBb1LtjN#`R){cuSA$5Z(4_(tOh+*B0_R`G}_%hj+&^tx0T>b&zPv(puo z_L&*e1GihR|9S0xy1daoIsOx`fjLFB#5JNMC9x#cD!C{XNHG{07+UHYnCKcAg&3My tnHpLdnra&uSQ!`ua~Cg1(U6;;l9^VCTZ2;AX=$Ja22WQ%mvv4FO#te^)ZzdD literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BB%BE-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%BB%BE-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb66cf621f24fe4fc55478f3d5f1a45e6b03c2f GIT binary patch literal 1589 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 og=C|z|25i}0GW>#T9_a>3k7bb?z9dCn+a literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BB%BE-seal.svg.png b/server/routers/bushou/images/60px-%E5%BB%BE-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..117e8d29411e94d8e1a2067294bb6f4b3a5e20cc GIT binary patch literal 1228 zcmV;-1T*`IP)U^}zTn95=y7z-{s!?*uLa`;bu&<3nI4GSX4R zp8^|z7t(bA?&3Su4tz;|=$4AX zz~@MGXwt`k8cW^Am<@C(XMO~RJGSvA&`OZ>D#tbwp%!RSPJEl9tqDMfvUMF8n4-N% ztW*vh00yLNZ#ltH&V1WC=o#(m!ZiH{}=j2OXTO)8qIdl{0028bs80L?GpMbwr z+a5#RMwp=tuLoX44)(dW4&+E^1HCXtm7SLQOU7mVl{Gx~RyeY;op{2{j%*~xsu)Ku z;_fyx6uEsx+4Il3+6uPl3&$w$aGRYKVp2Fos67 zH6uB&%+ZLf)Zr0$gk(FGVSYcZL-z0P2>qt3zmqH75hN!Shc4s{{0DFWxk}y%$&3Id zBj@bbfGJ37Xhej*YryMvF596{)-kG_Rqsv(j+glUc^hY4tfmiC{d*)A^&WCmJc7)1 zjdoREf?Nm+;l5XLNSY9gM6J!s5juWB2%hrFCS(Ddhb(3_$k8!}jld0HIZ;bxnujKeg7VQsV}ft!#XrRw)%rR;DSNz&(F+_5eQkM@4M zypjfbky}#^qv8aM!3E*mp4jO?S0S{idf5mM!_Q*;XQ`_gbV!$t@EE0|$5K}@Xu`$` zJX^y0!&cfOtk2GaO_kUZ)z+VLg|6W2M}nA_(ggQQ9M{ z^&6+A`YYkG&0&qS33sb{*+N>s|HM*PF;v6|>yQp7>s+HE2y3KGxFSMYk8qYDZM+5c z*N}cL2tQW!vJuvJSX{&k`g>GGjBtCblpFkm->Kb&1Pj3>;Z{psNpRHrZOOn^B<3QY qKffTGf7+e}{E46ZucC_Q9sdKs)Mo8yV(=$zX)$cc5U62110|pG}f*WwMiv3ttR!(|e z#8gup!9^v6EXh>Q(w6T#Z~%==_5a6Erh2vu&AOQ_IEK$UEUSTQaR>I`Zj9iQ9yKl~ zx0>0cr{iGF`6&{O?1LGy_@_B`-Il8=xJa~X9j=9 zOSli4@=NZWL*_O(i4U+B*U2|eNXEnBMn4tC)YavrrQs&+W`DqNE&;il%(2M1F`+5< zB||u4<`X_qR8a=LG}G{ed~^CDz2M1~@59)TtMU?te~p~mnyd1~V)&|Dm1i3caDgz+ z#^%1W8D58#Ra{t=F|GMDj^k_mT~|ae8HW*J3AeuKcrn%p##*B_>(R_{yjqpB0UL!B zP@RRrZ^9CCFTU-(Ls#qm-SSy>3D}>a}k9b>12+T_-oz{B1fL$&3 zO=7eXdP2xQjaOpEg_)Gg9O-KSx=+l|llj2YLj6Tj~?-MuuUP)1@xl>3Cw3^;tQdDZz;Te1{ kk literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BC%8B-bronze.svg.png b/server/routers/bushou/images/60px-%E5%BC%8B-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..27e76a7e8c272029883ce1bf7926139a572efeb0 GIT binary patch literal 781 zcmV+o1M>WdP)5XL5M|=q_s36dWi-#8iVI?o|>%1thwFU z*>JnJ^S*mwe=sm}H+%2zVP<#Vckd1=RjSmdCV*GKGH^}Vi-;ZqL8RT(wc}q)#DP0N zP1TV{4HJj`-*!qF7?KJUYQ*u{8n7;9pbWqrNdwZrqmI}1NE(m^-XR<>A!*#F2W)5?EN`w6loLBJMx6**OYBQLfF_1b$@1QHdWd`h=wNu*ua1CJ5g5Q=#srAYJG*B$LPCgaMg09XWG z15bbl!0)Ud(hu+`CP_F8oWN8(<6)C{3i$}QlJ%gxTY3VR1&-xBz6j+?J@W!jAq(5Y zoWF~}dte^8FBqTem`5|cRz4kIHEiqFdv`DwExYaWVLa~&-vgckSAjE_^SOlqYGCr> z2Ik7T1bm|V0Ph(v8TqU>roi8}nj*f!w40lZ?3MZa0l0A97muAf18lLl}* zY%0h7}eq7s~)F_QO)p z173*qzextx0)9((D~sNfwSWW6{~iFoDtQps1>g;ERNF|UN&~Eaa2?--F}fSW00000 LNkvXXu0mjf>Tp?p literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BC%8B-oracle.svg.png b/server/routers/bushou/images/60px-%E5%BC%8B-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..56ba7611e97ed6eacba2b3cc606e782f57789901 GIT binary patch literal 873 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BC%93-bigseal.svg.png b/server/routers/bushou/images/60px-%E5%BC%93-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..467eb1a812a202569d50e0fa03b0141d300cf336 GIT binary patch literal 958 zcmV;v13~DDG#MACo35@&X4=%P z$Bg}lOZTm=KJ}ftk8|#=V#tso6>}z@#Zy>Suas(d3G z3|lkxjYSPM-Qjc5%G6ISYVeez29{to#<3QoXm_sJ&YUxbHJSQpdQMK{?5!^c!xByi(9!vO6}1uM*kH@@uaCM^S@K4@;A|`WLmR zD3J{!vw8$?i*eoU&cA6;So*KD#2BB%_RQxwCpiBY9?+ZA8qF$^1K*1m@QE1n^8=RO zaZf5St))*nDMoMyZpY0yYk>b8z<$wn_v0IUi9I-&N>~{V--hS)C;eS!uos`>C+x#7 zm=+E%J9g@yXpZ20OyRs5b(O+8(PHzM#e@162`i2%y_S8hW-TWqW#TcC`Fs?Oo*7?SoU12U=rq;g7Ou%1Te01F zJ6_e_ooB^XZ(-`*6dS>X*dapMwT{2&cua58Z&@*p>+mE#6!CSbu=IKzLW^<}-V>{* zL1OP=v5b5|;$B#G9A1mpaA)rLUm}~D7VF_|+1EM#omgfrJ6_b^a!-pf+tlb#nC#xw zk2PySxp#V0Oj2Erlz6Si@Ui|b{kZbyjas=;>?voR-h)f(6je66EeuD;@GdT@QCF#) zk2l0)(X8V~@v?a8zarTx^5neZ)3~BWU8S?b!X1%=xU5c5WwTDaDv@>idkNm-XfiDe zoqniRMHSE%xpmj!&+3&^4Ik-$9#vX$(v&2ACi8u@5}!#m#o@VJ{dl_`Nob10Gr9V< zvM$sVhxg{{yJ}HUA>-mzhirJdwN^zHuv7oa>f3tdRKt}1n0$8X3p8;tz6JM-nfn<_ gzqmSN$p4vt0W0S2b|PZE^8f$<07*qoM6N<$f$eTC`|UM9`w3C|nd6Nk|j~Z6pkZfW z$qrzD==WNWx>RTaCJ=LXfZ0e=(reBg@+WQP*@`3@N#GJ5QD#MBKY zn*}(79pYI}1<-?CG$bNo8nE+mRDV`+3o+A)JhM^MU|(D-9O+VF2V!D`>6e3rz*iGn zuP;l7BJ5B;9wYv(i9M((N|R>9Ko9Yr%cmy(yrwA4TsoLjF9W|~#P^$4wGyIfxZ1Q2 zV#WulE`SInnlQ64otj9R!Zrf(b`aK*4DU|BdemHSThqyin%r=wlWm6-l0Yns*vQPlk_Fp zl2Bj0V|{8A00*#Z;t`-U)IVmvT$N?(wq6uXn7OC>Of4BLJt4`+aO(|1Zsfa^Pa6{&zEk!s~=N`Ek< z=V%FVX}A&CWsWZbk0WB#hqOz>r%l_9WL!}MhD+1*|1+)(Zw5A+<7OoDiXs@&sn7O| z;mYuK)4l4^X9!b<~{fN9`6SOGiUD1{r}(0+;`^8g%Tx7Sfm4Z0Mz&v;)12XFfb0> z@GHd)=P_o3Ww&2Bx>N&0gbnutO ziTyP|g=8t~ z3vodQ*|V){9(Ad3h_JyS;I`Pl>ra|}j$$&az}ypH8D{VbV$Zy(v&b}{lkkj|2(RQt}Myu>1)9hQ!RnNr-(SD zC7>QSGRbpHd723iSfjv!1jos8&^a}AN<`;jjblEoEs{Fm4e)|w1-=p`N*MkD1Ca^vFfKtI00000NkvXXu0mjf DMuN1N literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BC%93-seal.svg.png b/server/routers/bushou/images/60px-%E5%BC%93-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..20177e4f9b7381d92e7baa003f168e52a8ac4be9 GIT binary patch literal 903 zcmV;219<$2P)=GN+cq)aZZ(7GI`CBT5 zr91p+C2tFdhw(~vf3!|RaxxpM@D_d-?{5PyruqlDcIhV1;dv|-A!%OQ_+pVV4ps8L zF2DI6>vhKG;%M%$H+%hyeOQsws9ZDr20rNW{InNF}RTeX(uYc<=_L5{FAH0gdUgZ`e#;qc^`xh8}DBKcM<=|8YtK?zQ-U3wF~ z5*rwtz}MCFqu7Ce7NMuFLy|MR=EqShV9c~LeV74QG2_$8l->A4r9BL3b? z@^KbVr8FpaYT0BiHejVlF^8}a3#$939ZN)^zecP0{}Uq;*2E<;3p>Q}E;63y;!WZ3 zN2wGR6E3FUP$eHsrLc5|n_nA-Qz%!SfqTMs&850iguG^4)uwFQOSsY&|iX0(eTO~gi?U@CPPgn9_V!g%kjd*{btlN-&Fi)hA z6FSdn6hq1-y;-D`V+ua1kka9|D_QiJs#Fe-Xq}}xmPlt7QaRl0K@s17Zwp58lkNw@ d2MidHhZ`BN$K8-it_T1C002ovPDHLkV1mE{vAzHR literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BC%93-silk.svg.png b/server/routers/bushou/images/60px-%E5%BC%93-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..04b873ea4366d993c3842fee42b0104414fb2879 GIT binary patch literal 1074 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 B_7MO8 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BD%B3-bronze.svg.png b/server/routers/bushou/images/60px-%E5%BD%B3-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5ebf7bcf26428692419eab8b733af8890efedf GIT binary patch literal 1259 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0t*B!2ZP?D*Z=?n^GQTOR9M69m~Uv6RUF4Z=h^OV za~qqoje#!b99ot#eKC=mZZtG>3HeGQD50YNK~fNb^iC*xQAr31Vl1OTDB9NUZ>>A} zYi6)a+%#u64Rg-9aPG40?)mlN%H5v(+->*jJ)>y9m*3~d`JCT5=Q-zl4$Q~DGCpFr zUkp9;Ri$n4Sq91Sfq#`J(r?O1D|;aeS(|`eX4YtdZSWOfgICI03C;rB;69+nD``2n zxwgT70&BdIyBNr`4ZZ}ZS26{2G1Pwpt0?vibuOrNa1;pepr_(H=3=O0l`Zj99GnYq z8309|iYLGn+Xa`f8GvDrItqHv7Yl5GOL>z&r~=@3-@hFUK4N2suHbEkQ50o@z244- z8bw8=KU|hsXdOq0-h?XM)Fmc_i$a$~MdhMwSCe|f)1?NfrGahS8&`UHm;H?SQ@^ap zYGD-szi}w*vj=)_9ejYDQ+|;fG}A;Y?sScWi^dPp7@vX*{KSuXbmEt-qv?V#Qwk`j z=%j--BC}TzE{i_w?l2q4iAz_Vnuc@ffuCWNQ}i&D?viLPWQ#Vkfnu(4H1Kl$U-P!@ z{~NRa@)rvm`)gk5mZ52gpe zoVE*&A;&$^F#sK!i;4$5ZtyZuFx%~dOZ;G?4Ec7mjDutQa({w42rRb?j@=~ACjr;m z1#bj~5-p%P0aS*{?SX5!6Y$&hj(Ddmfp-DW={q}G7zVS=mPsmQ1VyP%;-;HK<$7z0 zor+&07x*U0afu!V^0Qyhtl5jjU7R4m2x~c$2rA=QG9gOrV6B z^?9YWMEXQU<-<>NZWo%*Cn!osYA;zG%jKM?sC2ef-43>#<0#7Kr2IPDUML5|6_tqW zX${^QwvH<(F8lm%@-s(UjfkkIbhocgANw?8DBs__JER@5N%l)~d)lvGj}xJb$1u#t ze?R^K@0w1^(6uZ?0000bbVXQnWMOn=I%9HWVRU5xGB7bXEif`IF)>syG&(djIxsgY zFfckWFwL&XG5`PoC3HntbYx+4WjbwdWNBu305UK!I4v+TEio}vFf=+eH99aiD=;uR VFfhFHagG20002ovPDHLkV1j{HGaUc` literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BD%B3-seal.svg.png b/server/routers/bushou/images/60px-%E5%BD%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e4fd595ff074cd98a99f3835d5edfff344b244 GIT binary patch literal 1063 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BF%83-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E5%BF%83-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f861cd313e49c91902e324baa8ae0eec332532dd GIT binary patch literal 1199 zcmV;g1W@~lP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd2p<+J4^cKF8vp8-?xlA#bCDA zk9p^~%XeqK^W86CDjPRD!1ml5QHaW zTVf~i!9f3fu8{23K~H`l2vztjus&)WutKKIy{|WB`$=U4v&f-OqZSLObHobkY`{qr z8N=`9+dFpC-%-CGl}76$=PA~wD+rJ5o>v+d9q+$}0*5!@Ac9cK5k~6F03I5f_IBtk z5tdFk7`8rsga?cXnjK`Gxz#3ZO+~=I+{$JS@XE~04bp8#61|iPvATSue3Maqo#{I zf$wU(>TYj3Rl&!svdYoqveej?c*_>+GpJv5(3zPWn#11g=k5Ox_a~x9jNT4cu4rsHdcm8{+gey@Paf9TJAC-cQ@p>SBd1qMtP^*Nt;E zC}7@45KhyBOiI;ijd$>Pb@5Zj9IZ485hNh-8;l@a(k$c(f>2GTXsVx*fTg<_Fh7pj z0l%^kp6L_K&Vrx zRC{kMs@y^aZ*o;Z*{n{JRlOfUsBEHs0w_ih${cc2PqIP($MGigx>AcEY>ZV)A%%O2 zp5bDlYhCRImy)HG&|4ESoa7dQa4NQql!m&XsFD3&uQ4;W;55qA@!|*?`?T|sOpGO4 zm)ozYdgzUPMG*4h(YI=-nIDoKc5Q|BO}fRWVRp_WL`fluKz(359IswoH$EwPOVIo@ zot+TBHsKW0VptY1dj>(cAFC6q@n%$wiOIt>G^`@da=^5rrT}mfL8zc@yuqoa8CA_8 z(-Yf90;B_vLvqS*9*Z4o>B+Mou#bdEFK!y_$%qASTqKQrp7WjpPu=bRk{J07R;K@z zpT^Td0000bbVXQnWMOn=I%9HWVRU5xGB7bXEigDOGci;$GCDLfIx#dWFfckWFx5~q zwEzGBC3HntbYx+4WjbwdWNBu305UK!I4v+ZEi*AxGBP?eGdeLeD=;uRFfgPIiwOV# N002ovPDHLkV1kh<7*zlO literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E5%BF%83-bronze.svg.png b/server/routers/bushou/images/60px-%E5%BF%83-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..676745c1145031f0ce9a6300db8e44daa5646871 GIT binary patch literal 1307 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 LNkvXXu0mjf_pblw literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%88%88-silk.svg.png b/server/routers/bushou/images/60px-%E6%88%88-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc1ec77a3900c76eb6fcb348390ef990d5b20c2 GIT binary patch literal 1026 zcmV+d1pWJoP)t?D#RpSc#(*L@xVkh>+bkaJ#iRzF=(_lyMe`!Q#-liMo@sBye%y;jWL?R)56$eF!e%V%GwrrQ+J}>< zOTY-8mkV!V2TtxI?cP$l4T&^HXNgcPi{ih-DP7VuaIlnSQ(BqvxnH}1Pjs%{t4nd4 zxH7%OxHK@K-Na2D;@(h-_bo;%&={Q)@w?o})(-JLD8!k;MU|*a#74Q9X`E0B-=Mv8 zpQ%(`0#*w~TZW!0gdHz*XsxiXu)Jb@N!Y5r%HD>n@lE0R6xI(&UvwTcyB98Bccd1v zG<60Ae(4e36gsL4OV5AJ((c7hY{9Jsp#-X+}6bx`*K%)mJe4~S#-FQLb;<;3C) zp-t|wIFmmLWAp2=YO$i0EcOK%qc{ua3BBwEIBo&&nZ}1gkN!R;h0jziSdY7fPUH`Z zE5%7%h82}MmOzD|088O>9O#mMv+!AZ z!~i?15uro+N$1j>#yHlM(vAuSileS>L&@TzK&P2jWh}#0ctx1b{VdFSHVLKKiE@)T zzeBu>OYxqLqIv*ar`^cybHrJJFG}$qs!CvNRtZ(PW#sizcq4mOZYGyjs4+U9%Z>ad zU)?wakC|kr-P5@zro75nobtx z%R0TyzNhynY-l)1ceC64OV+kpbSvSHam?VP#ixPS%x!ijRt`>Dd>VLC=h9s}IBD@2 z#k0D%-J#xbC^BaDKGR&+ErSvmlePFvZfc*fuy?ceP4K2L{~ctD_x)6RO zcFPSG?+=zVlyOuqX+ll>nmHsT)ro$F}v zmb{eDP9dsp+$lGFZK_P_Gz*z5{60NZCUr8rT_{}=8m=3y&(o)=GN@At6ZVr}4Gv9_ zLEQ{*&+bdjuZQoOx*0AWX*w-M26Z#ML)eL=`_9FJshi;`e3boOlOlt<878mRNzQT9 z(eRe+o}>-ekum%&RPT`iYpIOZLDT5%xQ(^b07*qoM6N<$f`mx($p8QV literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%88%B6-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%88%B6-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3439ad49193a9ec804c8db5bdb0c2833340d5eba GIT binary patch literal 962 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 Z!yk&c``a)|>PG+o002ovPDHLkV1kb}x@!Oc literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%88%B6-silk.svg.png b/server/routers/bushou/images/60px-%E6%88%B6-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd13734decbe9653cf7e8dcf4365ba84c41d182 GIT binary patch literal 1117 zcmV-j1fu(iP)miGbzOfHcLa?lEm__zs`B7=4J*>Ih@!UE0oHJ*} zIUUX)Hgjg5J$tXU_u6}}y=LgqqeqV(JvxTIirO8-l$ta(xlYa~{}=woQS8T$IFRJG zL>UTCzyd7BB3zK%&&M30)Wm|?I)pE=8(&}-KEjED>d#~VH{vmTEJor~h3R*^fVDC@ zw%rlF0ncFOIAu;?7+>M%B>jZLiExLLlpd8SI6Fy$I2W^oh0Ml6Olv~EZ}9*&cAuEcHFB+U7w>`{MPbX*}U6+O5ETax>-xK~)nopt^{ z59`Hzu2p(diE@?38$$R)#-EOTxCO_IDtxGP=?bO~+l?wPzlmq=NtGXl{x*fUN%?#E zIaq`Dup*UzVH3~(n)>}@yMmlAR=yPt$~9twSb>MI5*zR+wqmcbi{ePSzCpc{u`emR zHEE}<74#ZmA#3qYoiY<}DVAZb*j8p?Mk-Cu+5V&k|8Epl@G$OHz_zqm^xm#<%4|}e zgK={M`7Xl6wVCaV@a4&MNSM!`8D+NPR*mQRL42R2?}VRx0LL*;tQA+)Jaeo;onL2V z=3Q_m;)rl738nYcDZ3o2C38ra)&a3<4hwIn(IKE;bi~|L-qm=wHL>%v#Oda>y5#oy zgu{_;b55R$@@`8DYVPOdtfyI4i3M(iU+_boit;Kvx8{CU&U%_*G9IkS+nTqsq7&FXjt0~^B5#qx(>zgFJtcOGdqu$>8 zwBn*AEwQ&okjy==4uir(*Wn4gFZSEh7rD&7)@`?krW@J!(u70FTIqJA#oVjl=cqj2)LmW%4-9~T}}GYn&=P;jT1 zw}r%<%3y=+dG>OZLN!aCeRy%5{7>5v&f#_9MO7Bt3X-K`7!Zzp*61D;r=+gp4)xEek5njEDNGYb!7ODD%Kw_AV|hyb z(OpxaT&1vFoKdrsy}v@aN}*pw9m-H zIpuwRR2c)t2G~#GKGl7bSsJUv_ljvn{}C^kJ}==L j+@%W_ryf0ebPxXly%cZA>Lo4?00000NkvXXu0mjfU9TkV literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%89%8B-ancient.svg.png b/server/routers/bushou/images/60px-%E6%89%8B-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0d24587822ef75562b1ac7560b301db24e844451 GIT binary patch literal 1178 zcmV;L1ZDe)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_uTS0VjtlT>t47AmF|99We3V-664%|q832QUV z)561f%3iLZSzQVHgwUdYYWHRk zMF{Vf@LPn(GqKz({3(Pd^AVmagitV{h<{I5ky?)m>kPM3D43sz@Ft;E2%C%ew}jQn zxWR9l)S|C7LYujjJ65|*8XXbBtjx@-!Yj$R$qF^;%q+XKx~VeZ)xI+TqkJW_WHRy# z!a6Y4{THrl7cFGf@@J5AW*eBNphO=}nUBq&y(?I$sQs>%`6v(MUByYCO8%4#i-a}q9xLn!EPMDdD zCuVYSqXtY7LLW@ByhEEnoy*FT9ca6&Gr=;iWPZ93`gYQJR)|{+%~;piUNV295c+jk zmuuI>AYoD`4Z=ko+N35q|2G%G<$HV;}+yC{E{fjU3UrL;v!%E-0vlik^?3P z2QneDK!{8&?&W1+Wp^B8)(iX7mT!>|hNNBf>%!hnygU~N`$lNn)i z>|*6Ow&g0lF;nhIyt>41^Y{)2@hLtOE}8N?uBmC8#P68HO!54u_-#%Y`ZeCi-+p6Q z7RyqzNP|{|)A+t9@8FXr_J0Yxu^&HUR^AfRNZFsGbXl3!fEe{H7!fYLO}O}&aN(PT zOIP~*9Q#BN91&UCP)+GWe@$PL_!w_$!4zne$5cn?gSAi~CrUTMKvG|mwYL$M9>xyg z#)C=wpoq#9`bAbXj{Ak167&8I5v3=^sHe;nZI#W$tk^tEHK21g<5r*emsMu)9&X4{ zJa>e*7M<>uzm^jT%j6>MX|U=O9#Y%Sm#Voy-834ddsL%w>c%5tV=`2<4~i&!J02Fv z2t19~>*%LfMEEE0Lef4e^6|E%7l%~c^Qnw){E)~uGx2Gdz4*++`S|!MK=U7 z!l+*tx%=UI*d$Im?!!YO(A7?%qe*>(NKW>MBxbu<1$K#%++8Do2>&%f@4D#4gLq3E z!Tcn$prs=16rN4wH{zRR-mfjc;^rJh%NXHX@U{p@OL1OoHV)z=ks79H;YG0-m=Xc6 z!a1>poGzXd#di)^qr<$tVsBhK0<$7lei3)cm}~9Gi1^3T!@76zh*+mDJNBs>dqAv{ zmoUYVUGuIk7dsrNfM*2B?Uuq8sgQJnR!vKPx%fy}FCGFM+cGw1i` zl8xIp-v72Z=l9-x4!iePE6+W&ne+bVywA1gPG`<3%GeaQ-+J{l+xvWiuUAivea0?W z7(G?-UV?|qeD_t8=Z3fJxW4$@O24v|d4*2Pw;l7hI~^r{^=)KwK*{cHb3$WPfn~v{JW&%+{bTnA73sp{4OmpTYC31%Uwqoq`LmDy=c8~|5a(FIIERwfBQ$g zYx!}rH=(pO?^uNSJ#iJkNDXRn}~(Bf&= zH}H4tSl>4L{o_Xybo0*4+AsET?KIDK#&L5F=#(v(P`fnnXi~1>!(&qWYkg|$?(K`+ z-y!%~YI=>>n2W=IWF?zw>CU>CvR+pHJ=fh_a1+^YqF4x3hZmS-o>U zyZ63Was2hY1l5GTsq;1+-e6%jS<3Y8DKnLAA<<&T>zvOVdibjKIG1Dm*F)1k{a^E= zYQ{V1O0`4R8~3! zC8<`)MX5lF!N|bSLf61V*T^))(9+7t*vi;I+rYrez+iFZb!QX}x%nxXX_dG&TvEyZ Q57fZm>FVdQ&MBb@0Q|Gjz5oCK literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%89%8B-seal.svg.png b/server/routers/bushou/images/60px-%E6%89%8B-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a10adfcbf55082dd2f009c9f6b9cc5f0edd528f6 GIT binary patch literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k60vyxeR*eXMYCDAM|u_42d}W_J)5)XsX2VkLS4|K*&NhAeojTKp z8&(&;v&z2QIA3_%lsoAyA3V-QFM3yQ`~Tm>=Vq?n8}~iA*Jk*;=-vXk>$_A%cko}I zawk29rq>fHB)3baHkn8HJKb{ZvF9-0{Ppm~R5{?Wb5x$kAkc!__E zf}?y1%l%htJ}kcKdynzq)n%*x?h>%` zj@@gviu3ZmZC9Cp6$VtWuKCcEsQAa`@?xQ^-uG$00%jPf$`s%D(X-w9^kbG?=NvAF zPOpCR!CUy>`^Q`Qi+De7)LDE!dcJkw#Dk}KZmv`yE>C%FF9sT}SH`GxCG zKVx}UY+sj=TX=VgUd}3+)tvbuKW?{v?24JO*iO(*d--m)J&{G%XNug*-P^(=A>0=g zDK%4QoA{pHJsj;Z6Bkw4rZ`zVRt>KCHsQ)>Xr}Ze%`xtSLnz3&zBg@HU2bYD*w3DRS`G8Fn!f+rgi7j zkMy2fwQt4pUBVxa^2;5+Qq$nC@&Dj8u@B~bzr5W4m;U99nZX=wTNC93Oy8;{t`Q|E zi6yC4$wjF^iowXh&_dV1MAyhP#L&{p(7?*XLfgQ=%D~`7o3A~JhTQy=%(P0}8fM=9 R+6>gd;OXk;vd$@?2>`Nft=j+q literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%89%8B-silk.svg.png b/server/routers/bushou/images/60px-%E6%89%8B-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4d357050c1821aa572a3368541001670a40711 GIT binary patch literal 1300 zcmV+v1?&2WP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1Q`-IF%~LiBLDyd97#k$R9M69*jtE|RTRMSUzTI0 zMUjfBQRbCNyN8xkMg^r%niUa|VU!{fm{4@1km|*dO1fXDD6t@{9;_*`nl9Ld9>UTo zQ^&Nj(V5huX2zM-!)(9K%$%|Dd}pSY*7tJu`o6vYd#$tf+G}tAmtK;CbM*bhAfNR9 zlqU&I2AA5sPs!lP=b)n-5H`Z@L>hN z!#dTfeds4tnCW_z#&i#Vpi-6G`nXvIVO42~I-$kP{D|R>DWZKLfzL_p(H8nN=~~Rm z@9ImeM59_;)Y@XRTD7+M(rj>(vz+7%;-^_vC zd7d|*d|`Bq&$|WP?Ba4qaE05|?-#n)qXzcOwm;Afs{C0L`<{teF?4kIhdhu9;!xv_ zGu|+8si9cotnB?8##(H>HKmsa|CX&_Y0Aw1O#P?igH;BV5Bs*J4vAq#!i>zqFzmHM z2w&<~9_$1mG#XW)8=SziQu{jLMZ;|n!hPid&rOi!?X+#Net&AcuGwgev$NAAOO~e+ zxYcC^+RudW7C2g?XOsS7EyB`rfWOEV&+kspw9AC>Ex1c#I$OX4!k$jyc)&71Q^C63 znw=0I7Q&zU7;3jC+HE}_3RmU@U)UjKypsx>yHk6Vchz-B9>e_XwY=a5GvJ(L`#oS@ z(tj^p->KKxw&pta>uXyY{wQ3eL1-}zS7bg|Q8WXdtRfHiDk1D~Vrq|5Bh)+5)P&vO zNHD#K-8t<2T4;57yDejhX4_qzz-`H*zaO=lUoP;yLRi#EKhbkGCGcI~4k0v~Tn_9- zT7@Q8x! z%bl4ktFq(gugSHo>eIe_ONY&}4DzZFcB>PrlEd3-jwY>UbeP}|rM?eJm4pl%wPwtx=sbvvxnP2Ux0u0L3s~o|4R?Z-+6=xsbPUi zuK)l5C3HntbYx+4WjbSWWnpw>05UK!I4v+VEiyG!F*rIkHaavpD=;uRFfcBloXY?J z03~!qSaf7zbY(hiZ)9m^c>ppnF*q$SG%YeUR53U@H8wglIV&(QIxsL_{Umn)0000< KMNUMnLSTaCjBZW< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%89%8B-slip.svg.png b/server/routers/bushou/images/60px-%E6%89%8B-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9961241ee5ac1efc6116f6cff82f3c66e84dc895 GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k60vy<;CR{EP8zsS>^5M zB5>68t%56;l1qUgd%M*UD+vMig=wG9KhWt2b19tQw2LFiWg$oImIcS`eX|$$N@brr z_~Z0$6}6(DfAze6=k2_|`*dxQ{{HIw<&CVrkLNNU_9^T&E!(K=xgbDe(whyOc2f^) ziLB2wj9he%!&`rUUK+gVdu?lPRoIv6)?_RfA4uA|O}%a?0hiRAq}rJzxr!Ngc$kDlzN z*;31Plom|mpY?o!^@FW@RySO`z2xRiJ=u33_aC!cbogxf?oNSn&*`pp&$@PB*kih> zJ)`q({Zl^o$cMGtrmerk&$sc;G#{1!6C7;BI6rjO9ZPBa#r3$(>Z7sKsxxz(3b@-N zU3-2%W8^jJaxy#}YL=~hS?S99EfeSZO$=y_aXa!UQtrarjw3x1m5O#3y^no#KYK8} ztIxNIBiF&}$Gqoh`j6&JJM8@I0Yfuu(TCSR?mV8YCdH7;lexJqbH%#{IZu?{pMJLb z_?qWUVNxj_o38W*-#$>6*BS4hUwrGbJ6pu_yh|JcN?}T0etw%)_q}B0jw$cc*RYiI z2bO8nI!ensW(I}z)tZ#xg%GiaPu=da20I3=5T-o}-FlD@OERl4<`OIGx8&VEp{ zs$+Jj!mRdP`(kYX@0FtpG$Fwr$K4KcK|GB&g_GS)UQure^1?Qm!>iiX_$ al+3hB+!|iVRxtuKFnGH9xvX9!GHud+;+p#Af{7 zh7FZr7}Ge_p|lq_RLYylRTG}d z$!|vww1uh(AFH^((@-_xo};W=f(hYvCd>`R@to^MK_U-H)dGiPYzE z5vmS0v~vh=^n{HSmh!@_+GrRz0fJLudd?cSc+%)+eD0@Cj; z>=1tTXi57^;br`x_p-5;X7Re%AMZF8i&(bTB(u_C+}~-!gP2(WxT#MkP1lBG`a$J7;2VFd#^OqWMtY(j)u2h9&q? zKH*o2HqjXY%QeJe}_YL6{xU)(5+KTMxIwr&yK2w^{;Uk)F4*ZK=taA$CAl zidA|NSK>PH!CFxpZ^Or}9xCgHhs9?4dU1+4l2UCOrV+K1zS`;HfRKNS%vVjFz}*TE zE`#fZ=I!NXU9)t+{6ON2v3&uMn!2)WA$@aEhVV)}D(3GRF^5-a?b;3q5{;=A6W51`yVLWnFd_d-`biO5o^{wG zdsuI3R;gcvM;5l{do`kU~lIr(}2eBWaceldT+n$}_Q nvCwdjSgohUIRAm^z@tHcypc4C%ks%o-^|c1_dW?ZY#JXU^=nbLMu| zW&ZFobLPD7bDrm%_kAw!8QQdI)22VPR9#|cSM_TQ-yI4 zr22kQq2ENjh@*+VNAU(`HN=7pT!inH8~P(|9bxQ>)R-+J^k0atQe%3tQi~FnrRYv6 z@CTNwt{8Yq`Ar&$abjj1OpV%K1q!~jx}Nl zG>l33CUv15xT*$O>0Eku#_{8@N*J1yvr_{rujMJ>U#dMTT9%U4U89^^MA%BoT2Z5{ zGUf_LF@)EJhpv@7l`8pf9kS+$aP>Lf!}L02l`$O`H$YB$N)H<2J0EGMGbA##mNBkL za;J)1c#fEQb8(4SducuvWh0S~pOrd)RIJy(u~lSn+r{k2OcsO3iz&Gnzl%_Cws2s{ z&*_?<|Lzqb?(M7tvlzS`#0@P%v&U{>h?L1@1ssO6MI|&;Z$^mUOk1+3B5X zAz|wr<%cYQ^(t6OkS!ju{wqGm@L*Wu~X4mXp@D5DIQNPe4bIb#-zlU^iA#- zPp%6;jG)JrspGCH_0PmI^r?Q2s-Ct5*HqBsx>VnO4NfPEe3nt^e&L~arrMvXyK#e} z>`aEBiK2E+_FGenG1Y{n`$U%1heIO7^c7k$j`oSQ)Kfu5k`BxeTQwKrTHGt%J0

Q%P>YG(OB$vi z(58qfJipKuIC-62+)i38d_>LEYj6jq720fJ*le+fyh!XiPN_J$dJYw?alBqZ)fhYr zkBYKwng|6moG>(<&}XGvOx4}O=?#jfzeMR)(zAHE&TCa=aHsH?H)oXHi#?*4818eQ z2vxlm#?QxhPRx)2+%7f|YNpyL-63A9%&c&}SUnX()gFxr8B4|Mm|}Kz7+2t@2FM<@ z6#oQMY+tK?8I5}0S8DVJ#<z?Dbl_so!c=DL49O@i(b4%L?VwyH{*Sjalwi?#N!tRihTL0B?yG l0sVM5Uv=8FY15`b{10YfzoyMqHEjR@002ovPDHLkV1m^rQOE!Q literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%94%AF-silk.svg.png b/server/routers/bushou/images/60px-%E6%94%AF-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fb631d59c3a36e9d209f79f6d309152925a8cf0e GIT binary patch literal 1131 zcmV-x1eE)UP)CCI-!Y~eF2op8fR5OKw+p#q_Hsd0(4A+S$+X(&;<>(-O&5gtO1qbmH zrWQNNM!bS?<(FhLjN|wYuVWW3s7LU@CJ<837{a?axmuz5CEbZjgpZzy)dk<{6h2(Y zD&fn0*rfWHFeH}hfLN+Wi+txFOwM^fA%fzV*pU33d(Dh3_)Y1jF^NaTOB&;)*5OD$cBfpV|JNmsaTimv7B2m!r$glK9l}RzeZpf{pO$fHq@^iQj7+PqTew;Tx+kz9LAw%V zxoEZQ!fPT(CE?FA_yi9~s2Hi$*H#Fh?h{>!{J2o@bXCX%-p2bPD4vGPaECbVEyuKo z?9bt&8ttx%eB0$=yovqlkKE&UUg`dDhuC_)BV3}=^}ZCTZP6~-iQ97m7t?l`7B}c+ z+?Bg-we;c{{8`03U+3(tD=RD)-Mm_ajpl^Chi7rGh|WpW!mIF@sJtrKu}^F(D+(|C zLXT*<^jheXe~BNajEkT&sQ3wG(sbh6&F2)$EEw5(o9${%Ge`{3*V!nX_AqYB?abb5t+UqN zd)fKIysWk6zy7~9Gyj?S&tilTs$dk3=(ZD`U=(KKTkOFy4C3Mg_YNzrz$e(BC~NT? zu2%EbzXTsh3yqbXct_|BM|R%jVw{AR@V9(oo69CF5k6c`(uYU!r{M{Wl`n9s9_sS5 zu}*u(H{uyg#bvk)?_+O$$nP9ijGYT^f zPdjux?G;)(&-g5pqj5Lh!>%UZ&M#{8EPUzEuee+X0!0o6gor(eYl|A0=Fll(vk-Mt zQ%h}`E=1dg(BCmn=thSnHwg>)r9wBUDj-e53SnB=hR=kh>B$wnuj|YekFVWZJ=OckcA?}e6IBy1S6Z0QE@goA@+^9E#A z`7RHSdE(A)5f&*^GT1l;FDLBm5@wK|VVn?UQ?0ZgD{+tZt$qW3i`3sLe3YJIB3{=z z#j{ozyQ5p!Nd>hxs&ag|oF{DjTV*p=3u8Y;pU^A*TW238SLSsIoQ|i&yJ$ne66xt@ zPNdF)YF$nGF)O<5xHaA(AkMj6ade=@#G)PDP>2yN#V#xw%{^*%*y)+Bo(L9>?)5?2Hk1N?FAY>0&~Drff;{?RY`RNW{*J9?W2) zQSPryO-3G(uRCrN#^6HSBAh-9WvshVj~uc+WcY_?S<0eL3ChAO+0K`SQ|1(PuGJd0 zC`*OqcLGbz(_x^W+Pt9wr z4uXeT+{^uMNgV`lXmPJUudzA^-Xx@LV{FN5tPX_;IryA>bfUg4MF5k_d@AAnj(ib`vxaR2}S07*qo IM6N<$f~5Tz!2kdN literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%94%B4-oracle.svg.png b/server/routers/bushou/images/60px-%E6%94%B4-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..743429e7f9b1a73defa8fde2affed59483187f57 GIT binary patch literal 789 zcmV+w1M2*VP)^2JQx7h&K4 zm}?o+1-y-onJ;GNft5r-0-zM@TMAq=`p-)Xx@JAeKviG>xcldIyzd+^O-IumT_i)< zj+el8EkW0GlOD7J><6Z**?C|mwLz=EQJ|>k<&9m`1}@e8M3b|dWY}R~ibUZSi6RzS zjrRkbFQf^_S<+Wp zkAZo5YJRvy6mW=e(u#+E2()X-xuyV&5QW;P1YU zdQ?mu&_`{UZ@>j$8?eRF9{@KrWdE1VM3?9wa0=K8%!rL?0bWrXxC+dXl$E4}{Vea* zl=4Xj_P|#(rF>)lBn*Hrc>4EHYnwLCRZCkNu-ZqlECjxp(!SP5u`C3BkkYQgN<$(;YcGdpwU%!ML~D8dl-0zZKpK$T-IR&W-GtF+IS(K)sZr9gvLUT({%OTo2T zxzd(Vmx8Oca@>~Dum~QvWpu7BLn)xI%$tFQzyd8VQO`zzPT-PNb^+i6{wkeKI%vYE z%Mq@g<=G4{tkMuL2)wjGDkzj7qP)@T0(JoFfTj4;xnNL3;&k0=%do3eI(a&Ov}M?p z;AG$Vn=Qj(8Q~wc47(6qiY!bztO<@7?5h!3Wmf?8z#^bdr#L}S&UvQrVUV)+mS;R772oXFMES>P68xcHd zqBEBPfNT*}xskov#PP5a*?(7(xZfuKHp_uBRh~gs<5A!da#~6k_3%bEW`JwXSdYY( zbKP&>13S~$=u&M$;egZw6J!9wASt%e>)kk)U(^cO35CFfzQBO zN_;&LUt$ zfQ`s;Fh=5Z9>d^;fvJvKkPy!pLU@AIk;qcy@ZSI|R{2`QHLXk2_X9$B@V|<=u+9YV zRQo%W)A<1ZCvF6BGcN;2fi1`ZBLeiOHc<>tX_GOn)j%sk*o!-RgeQ@a8%2ETFNiz( zYnJ}@<6n`s0rw1Y4JB%k7ZL|fI_6>xy@=rZraBDcKCHt#1GgYw1>}sd3x22a5@3^w z4#O^ZP%Ce9#=;`n@VBsm3~dVn75FQ490|%ftE#T93#MrcHxw7cm%vR$3AAJ;@HWZLMqvtg130q~r3TCb zKA_&Q&A@%Y-AH#n={-LRJPdTTUvhR90Ask0{0ZD2llDqrH}w_s6;df3&vM{*>K(W@ zAx}53EhbL|*aBP|P;X|+zzFg#`l3H?A^(Fh`Skn!9&nMl>Wo}W;})s_>szq#luCaT zI2>c=B=9=WZ!5ob%D_tCc#Jq5K51g71njG({RQZ&{x?i*W~Re2q=IHzI@63xfX`yY zRDhp>cc^vm6TrC%ww9^9&w9^F$ov0oOgUq;VNTu+tU?w5y6}I14}n{eX(YhQ>iN0` z_PT(*D&3+6=}rM2LAtwN?yEpgc9$Bn1o(pb?zI+J7?ZvW*s9XL5R>L5_53GlmDPw| zU=1+o>DU9zOXEy4oD&Kl!wCzKj)uZ|oDfBEvdX#qh00uL) z67Z%nx&xUhrI`s06aTr=;nS2hBbEZ&m7QlY*l<{Y3{I<&Sy5Kj(%9K`!0dc78A9gm zcjUBVMn5vWjC1&&0(Avp8S<%W)WYMyrG=?8qzCu?PYS;QHx?t)hCW~yu2Vk(&jYt1 z@7f6Ncl9`MXAxra(u*t@B1cXjj>b(627vu4?Ig0|`d_h;ngf3Ww=_vV035-spzA{l zwB#<_ZoHz!d@H9eV(PjW-F7l=)q|dve-z&I56t{cU3M$9+nPwBL`&>TQl0(=*2ts&}|U6 zD_)b)&RpD;)yF340$LHd@wdu1}q)cpO1q%ZEg4Bc{Uy#I<R zaW~rYc4=@&=L=}QJK7Rf4$r~eam?GL!F9L%oH{) z{EZhkxy)we@D=L!VdPjdFWbEMbp|%g&{r0=7}@Ni{@`qWUZWN*d@Amq@@@m0AiZRR z_h0UAZQ<}D+!1=Gfz625a3>%gv9Y%Xx7(Rb^s8)Aw!fp``%)`J{!RS>5i3RzeJL)0#?hWau9@OZV5BP8FBZ3q3pqr~42Gh-O3(cX}SOfyY( Z{sownu6i+>_Kg4l002ovPDHLkV1oQjP?7)u literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%87-bronze.svg.png b/server/routers/bushou/images/60px-%E6%96%87-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..95bed288999ce1d3b58ffa63c59a2d870897a221 GIT binary patch literal 1123 zcmV-p1f2VcP)OGR#hCw@sG=xOEzf~XnU`0R0=ASvIR0QY^NlNN;0Sy zK?M>OEf`oqZwyjGXonVq!nClYjNa6XQZjncqE=A8sAyH&#_7emm*?L5%-A!-J?H8$ zU%1S3&-tI{{C>|l_iT3cvQPR46*%|%(>bYULO)Bi$G0~%}PVP&)LRPxUe2CY2* z1B^>4uukToSIf+A+ILHEi}H`MCY8WC8Ha7kM()9pmAIZPc1$LPj$h4{TfcRwh&1pBnae zi{6I?cmh9VF>A30XJ+?1@J9Bz3+oEycWOU07&3LQv_|1sWr54FQ8<>JgxSLMGXZzt zEnx-rXBOWpv~11^!jCbzX05fbO!>KeMfed2UARv$z5(lTULp3HEOvF}JMwFz(E0}q zbCl=PKD?m3DR?-C!P`pu|DCsFUGFyr;eGz^tBhK zM|08vH)&s75RPp&Rr0>T-O8)44ZowE!m6PEBRyapt8a3 zn2)P*HomFkb$3wj6b)=8C*V^-=pJ0PpV-C1=$sqdB1|*I<>bE-zh@dOj|oDz33KcJ zak(%+A8I|z$J8k#)qem?FVwZ6gZO*1zhiM_6h)CaRjZp`*kPG>wGIRiI_3%D zf6@8jTYjYbbtFwuSzu@jiuJ;reL%f&=!7c-!wUvkZl+-Pq}mllX1*{j4P_^^3a8a8 pCqA=r>k!L!8D?9?5k{zy{{W{EXR35el+^$L002ovPDHLkV1o7`C*}YE literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%87-oracle.svg.png b/server/routers/bushou/images/60px-%E6%96%87-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d75054105ece53b34bfb6cf8f6ba8da6da636691 GIT binary patch literal 1037 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%97-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%96%97-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..074d48c270af5907a82ef52e37a2d994c7db29dd GIT binary patch literal 1309 zcmV+&1>*XNP)DTGDY6I&H7zajT6vouR>PdxYn_>WX7;%l zePO+vv;J%U|9kJX{=fBKoBydft@sE#@DN(+>rVB#3LPbFaedvXK8th@co&-L>QNP$ zgzdTqysWMsRgtT)Q}!z*xx?WjCuG?9B2pHael_;rbNG=Fs3#x_np(R zRyxovn2P}kyGzR0Y{P`Ad))_GumFFFo!*K2F{B6kX$iZ|wpF;14a2E|M9ez+H`*{f z#~5u1`_i@^!-{siFU%2gXm&w*Sx7^9xD5yO9B>C#s-qGcgclP|eTuVkjxi9AC&uWh zT~k;D6)+NCil6F2`FA`c@v%6d&B9wV85o75geG}#j`8+$u77eyF945W@U8<{+(G#tBJz?L0 z&jtC}FpLnMVpetKO&g=cdc3o}B5Y0?hE^d(Warws+#a{qThPFB%Cg0&y72AXF z`J95UQ89yrKr2~^E8#=k172FC>og3<3q`(CwRT9Tul_I^@8Nf0_5aTY+;9E?)vtgG TSiwn~00000NkvXXu0mjftN4U; literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%97-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E6%96%97-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d61bbd1ca2211bbda02eed3cc009dd0a481d67a1 GIT binary patch literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PuSR)wIrryZ_WqG@AY(X42d}W_C|b0c&g0tkJrzi{hO8-<#*=Hzplmrg)4hD zl?95ou?m$aPP*heVNsg+O7pE9dS$|k+&mRd*(c|`{xk1>@BHHOdCx!C-GBeNcHjBuGIAOdS1tPyb5SbynWf^Ty>D{l zUkEx`yu4|0A^nY+MoV%Y$HM#3PuujaX1Pdw+v|2_QkOG#0c6IiwXD6~jN=|~uV z+GFhWRzh7bgoH5V*!IU(A|E#jDmk%v)eHnexNU%+*-4xSn86a{O6?)*POJO#}@fE^sQvcf#pBTUw>S+^-5Ll zuT934C;EP`e|m^Tx%*6L`n0IhS662}=Jc;R^~Z3tUdHBd|9R|n`C{kquD6%DzUbrs zHJ9&xogJ2+74YT4jNRt47uMcpjdi;u5_Hiru|(*3$h)i{p>x{Hwr!uT`(e?}cNX)k zo<;6zy*+J-|99z`8+DhsmvcS5`{lvUU#)Td%iPxsAA0Dug-eedM^YHmHEzmyEDsmR>}D*s#97F9&vwt z`H#D1?%cEKdna&3<gD8aX&rg7`rh_ylL{xCZ@DmM-&~O`T&k-tFV2<`ZPW4Y&-;+Q>X+R5=U+I}&-nD$ z-OPRH5ohz5ZYzK}xEkei>9nO2Eg0}n&MGN1+q MPgg&ebxsLQ01vveRR910 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%97-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E6%96%97-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6afd69037d85893e0bc3c7edff9caa8442443e21 GIT binary patch literal 1085 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PuSR4S-3JIw(n$MV0QI%aSVw#{Pu=-PH3pev5)d=RmDP{2ySr{T;n0Y`|+>B zl0^vyA4PSgRPEIK6t*5y>+$#?+3fMCXMv+~v(!dKsZQoj{zV(Tas!&LYN?8`scLEp zt*O1aTc%(SqgQ72j_($UcQ4wezx{LmR`%Py`?p$VOWxdZMOj<7Wb#iv)1xep-+b=w z&n;e3Az!`r`qr-Ce|*)8Bm}2d-|^y}R9`D)nsxD=erno|!-tnWcFpFNOmCfDs#f^* zXTa7^iguH8MT_3)-g%ODak@kOwo6wMZBLtU-xp=tb>sO@o_8hZJ5H_?Jd~Qw7W-;7 zi{*-gXBSHq&lh;-!@u`n`p=%cqN6L0uN62nspLZBtEZnXZ1lZdrFh1_dF|)z0>AdA zUYlXQWUtfmOB<8DOSx;!X3u@Jcsj?!xh2B2TeB_)haK}%jG6xRT>Y92+tPdIzMOF3 z^{JeVm;Y$Agx*YA{>zagdQ)H7b^*JfX{z6(a-D8GyrZ*`-)dHZdJ4O2e(a{L`{q7X zIe%HFWzO@>&C^!+mVMFVPibHK#kDBKY^RNO#!k~Jp~4TdK1Qzm@bsJN#%zZLe1w*>h59DmKfu*v4>vA}t& z-gE7&S^cR;!0OCtr#B^B?Prc%E;@8DQ8+lE+Qly;Oj}*XKz(=ctE)AN@BF9V{<69@ z{8H-KvthAznFgH|(bF!ax7N4(m1_Cm__4n?IV{&9BYfqNXKya>OA35b{af7G>r}D- zM%Rce=X&LRgRK z-jMzai;`x158c(m*Ui;8A%g(qHc3*O{5y)tb2 zh0Mrrh5lj7kNTgx^*`}HQ)q4&E3??u>A*auTH+c}l9E`GYL#4+3Zxi}42%qP4a|Tj x#K6?bz{JYXK-<8;%D_NszxXE<4Y~O#nQ4`{HDo_p?+4Vt;OXk;vd$@?2>^Xd=PCdI literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%97-oracle.svg.png b/server/routers/bushou/images/60px-%E6%96%97-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f03a29300d63fb8c57399b9395460742723c17d GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PuN(wg^jhpS{`O#V7%e!;usQf`0b4I+AWR}$L;rI>z)j%o7S?Zz`5^K?`$*m z?WKV-e+2c4rZpE$y5i_|WUUil#B29$x%GQy_r^}Yep@U%{krw%N#B3VrB&UZ z`SXmi|9hMBJQhJqj2=$Anq%nJCh@^*j)dkU7f*pl^SJ$XOg286x`}mOwpivCsp$4N zfjO$DXI*{Z$@oIL`b#(83!xnIlqs`wf*p0`R-MWBy!0Zb*vsXPP+&oO;JnSbXN9J5 zZ_742wIy_)Fsu1Z)^E31%Wkt?d&9I}>S=dY!6Ciw^>3Ki*Ro|Fdb^Av<7oG}$-8#E zRh%ZwC&y{vy339sa~~w z@tvB^xT)_y-}S%1A-yGHE=SF@ylZ?C$9?C77~b_}UtV;q`vXbS0 z0r$_x54g4_-2M2`{?o=~Vlrmgfmzm0Xkxq!^40j0|)Q%ybP*LktbA3@xop4YdsntPBh)dMfXs dXvob^$xN%nt%396!6cvt22WQ%mvv4FO#qx?BrX5| literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%97-seal.svg.png b/server/routers/bushou/images/60px-%E6%96%97-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..91faabf9b883ff5bd7aaf624244db9557f53537a GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PuN)5*_pLwsK+rdFiUy5IEF+VetRQ6<7%nI@sHE9PybY3I;T4QI+=4f&;2W`d%j)4{`tF~c7N{K+<*W1dG)@SK(}41nC{yw@Js);@Q#Yi%sXqf zNpm%Le% zsgxf5yzupzv(ZJr<`f-^{QK+cuVX8>JdSzfo8GH4M9>dx!n`A3mGo! zEa&roG%5Dp428^BCQ&Od%7(2z?#TRf+Sv_?);hWyuc^NIGRJ?eWN5(s$e@2e*KMkp z!}DIYb@z)EwcE1hm38_>X21F7FIV9+`}m!>iI(A8n5(%K{c%d>oIg9)qx{E}o2f1w zwQ=7*TRc6Ix6o4eg^vI4V272GQ|(&zth=y zZ_VMKHPht3hD1f*S8I81>hq)iWuW|P{|E8@br)yH6vqnL8Rv8D`)o5?qSLaKTvkfv(dI-Ph&<-uOGFn>MC!F24)=964!{5l*E!$tK_0oAjM#0 zU}T_cV5Vze8e(8>1wzK!1_o9J2Ci}2y-_se=BH$)RpQoQ!p#32sDZ)L)z4*}Q$iB} DC05c% literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%97-slip.svg.png b/server/routers/bushou/images/60px-%E6%96%97-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f4aa1abbc0d8892a765281619fd4c20ce450bb91 GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PuRG{v?Wr$TW2sZFfa3TaSVw#e0D~*M~I`y@%n9E%OVrRQUfDvHLC5`XsAq@ zr1LvSAV|!mMZ|^QwZlnAY0-takh%b-gK`2hZZuDtC)MZ?B;x4i5_$8q*V+@I`SQ2! zzB@B_@9yh+%d?+dzGqonXZ`)0<#T)H|CO`74Zm)=bWGT9q6}XOOQem1aFx00mtwKq z4ON`4-u6qp6Dd(}fBCKX>V=Av5$YSfGt3(Qy*w|Op?~FQT;f`JOCL352{);7mM?kM z8#!ad!?sS_x9j4*D=*!$-yHUPIQ9Hnb~EAB4IWn;v)>*%_hj<+< z@gQFeDm@+e~%IQQHt$6uoTr#-Q-^ zd-hs&?A71md+6335y97zmTEiiy{eqI{=&Vj%bc79x!7A?_AcRA9NuzK=`OA>#K z^0`}*E1k@D_O4~~6!4$S@Z*dw>o<{!*Wy0a-F@O^KS^O`{xbD$y={^9!d3fog}r^> zOye~5dXpCx$vfZX+Go+;vNF~+)<5eu+zs1UaBs1OADd>qp2k7zwdpJQ>H-e!P*{7p zW>Nh8`H{WR4V6ct17hc%`ns=plbd@$#-_!xmlH0|;T76akPbM?8}(@T@h(r)z5 zJy4uk%DSWD$*PvT#65FwxL&f$OWc^Q(&xtccb;ciVsQcYy7Pt}=2mmAvu)v3=h+#z zbyDtznHe3g%Z!{3f14h1T~%mm8MkWfqK9hBzu%Z>b7g0i+UX-@&5Ap!G~V1*RCisz z$V!7_g~m5crQch==1lY2z5dyhpOpuT!n8vdw|*8l@9xp{60MJ ztXVj3?zH^$#XHwJ{7>rs?0zd^Dc9v4a#x;ntvo7Ow9EWSzwPo2a z{cJdSuB&^{Gxoo8pPpN!d}4an>H8(K-hH_~Pd~IUKfmDLKb0=uJ%(#4sw?zXB}E)} zomKdGq7|3Nqx;+LJFK^u)TXlon9UhfOI#yLQW8s2t&)pUffR$0fsui(ftjwMVTh5D um5H&Hk%_i}ft7*56^pf2C>nC}Q!>*kacfwbD%u9rz~JfX=d#Wzp$Pz)(f`c= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%A4-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%96%A4-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d61639b3d3e9a1ad822368f982b233cbc832384a GIT binary patch literal 1201 zcmV;i1Wx;jP)}T1aKngAJuw zk(rp4nln8twSAj&_Su)S9hooehc&bQ|MmNywf4IF*JhYuh8cv>Sc6^o4lmCN z5@Ya=cn>dcR8dXL5CZEH5B4+RM;P*q#SM508)Yv^@8hJV1XjUpJd6*7oz-A#?@zef z(3o#xOu&4s5+VKyoG&Q2iT8ISSj@WkmD|F(>lm)cm;Rh)MjK> z!@aTtJcy654Cgeau3}~j$GK>ryYVzmZ%|h)jKF&FU^fT{gJY5f;=%Ue#3lvR%?9y+ zZz-icN zR;IWlYsAH^$Z0nnz1jyG9XV$g6rj$b0>i(1sZ zSbUD?7nZJ$sVd;)5|O8e2{Z3urs9-A>Rpy7zpMSESR0e1cSD!wv|W_2TQo?$)sZ@T zHJm)SMqKnk>Dz+Am@K}bcx{k+pC9`Fe%xF}Y!%!m9&m4m_8&)V_sIS%;yEGcdBtT` z#|z>Czuuw!BMJK@m8z?OPsIg4)}j5(g#Bhm-!<+Ldhn;X;3DtX=7f(jnUY#LUwVcv za#_7Xx|d6R+E5ouqz~ssI9J$AM14I_g}|zbu8#x4l}b_8CVcI3l;yE|gqyvn$fYIx z&6j>X);Wr94X>0I*lIuAjvjoK;j`0Ozc!u~7xtU-y>YelyWEf4OZqL%X#6TJ?2U?i zuafTNeZr7$jI0ky3+0$H7$cd7SE^d{;3`hbwcn^I%DN0@>i zA`L&-g*Go0a$w1z@9aX`2p3?hg|Fqhb(EVTT*dU^FMQ${|EhMFVRG;v5kte78OGiS P00000NkvXXu0mjfN)Am* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%A4-bronze.svg.png b/server/routers/bushou/images/60px-%E6%96%A4-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..524fb31983dd15f09cb90c24799348b00507994d GIT binary patch literal 956 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%B9-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%96%B9-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c7e821a4ca5aa78ca50d16043fbd7481c0eb42 GIT binary patch literal 1095 zcmV-N1i1T&P)(08wN|9Qm@oFHBR1unYv z=mBr?>9-WP0=xrCtT?s62;e795X(HY7Zu%iV6ca_AF`-r^kZz8wZVQIQ`c~Rx&wjV zinhV0-v&kd#-rbyG6rZzO#K5UduUhV1n>tK<)NLG?k}U?Y{RS#4&azN;-kH$Xpeg6 zN`RM&_7gHXVrL}sq*6c|Fw8?c4kv&PVbhDPWO{t`vBV{&W{u@*A3k=*C_FbCD!Lr8jUv(S1g~ zER!PiS5^u*9M+`GWxWPC-o@wNfrr3H;0uyAPEr2<7dVY1C!f-uh5$>Ed7j~Yy6sns zod=!*(+VAUSiGpdZl#PbRk0buizM-I6uPPUaIA-JIN84o4-OgSd=TNGijS zO3KtO%$ZXcrX!o_L8(U%;0o?3Hf^5qc)u7a6C|qv>+8uR}=t;(2WP# zj59}23o)jXedwJ1Gy{#m3Z$Yb1118e3|(Wud)zhJ#d=CuVweefT_xC4nrpOcLu%t# z*@b>Cy!v8GG~6gd=9qcH*MTG_ z#og#@rqRbvt4=LbfczxkFtUngQ?t%MFBkLT3^-~kkYk!2{nNv|;y;{P!}*&6)7k(4 N002ovPDHLkV1l4;0v!MV literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%B9-bronze.svg.png b/server/routers/bushou/images/60px-%E6%96%B9-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b6253534301bee87a5a8e656ea714837343fdd8c GIT binary patch literal 1162 zcmV;51a^3EJ;K`RA_|epouvQK@c@@y9B|5 zOPCl*++&;!S&ZYMT4$!;d(-{iyw|S>`VU3Z)vvz#zOH&z-}hC~qD6}qEm|}UZDlJ^ zp%aVHi-qXIoJ#2#^V}bJ3*Tk!s8I$_$N9LhQkGZB5-b*st(OmRV^&3`Wo*g1?W=>J$PC2$gVF>wc=>QM@lxhy-^(rhV>`> zmgUvz7G}*ZJcU`=)GC(g_*ry>H)W9ZNR^D8^)zba2*YV%C9h^~23gluecyz&wHl={ z_yugo7R*o4u9{sjb*oa!=*G=4^|z&0Cz(N`)8~w^Uv9}DXMyOH{zdS$C!$T*mmk7c zF)~K*dacg0x@qlLhqr|(x~HPVk2r|q6SR#B6y{;S5D9%N{Gl@|^~;1n;{u#jL$9t{ zilie*ez4&QN-E1LUqw+aN*kikJ zcBL#77NPaHGNzw?JSllbO~*ahA-aDL)?r88R6GCA=OA;B=+<&oooz41H&tyn=AhI6 zY#Sr^knzd2tUMrUa2h9MK0dCrJ0a(Va86}yZWJ~6&Xh8y34?K0PCAWak?;=Y z#r2{FKc1uf2x)_dBgQXMlchJN?v@-W@URZ_iul ztZCX_yd!?EJcGT$(Z`#@J6sPdV(Mz8WgAAn@gs3Scz5r{xfx~d6&>LlCaq~sbmDSh z;mL9?RLx4!n*#@w>+2WFZqd=*UaCd~@~Eh>hZUFpEtPHJFTrdrQ>h}@fY-!tWv`Z} zR{qSz(~|e?0Zn>!Aq_o3%H}=cxF*Tiou;s{Gldk+fN;%WBA4?t9y3L^pjpC{{Z)M- z;0MAUJSABzITWn+uLp2zIcnxd(yIGk`5w=RhJ_6!&%2f#LNKw`=!wE9{2*L_*`H%y cEm|b-FIc0jSgNn}xBvhE07*qoM6N<$f-5U4WdHyG literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%96%B9-oracle.svg.png b/server/routers/bushou/images/60px-%E6%96%B9-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d4095f2a560be3114cc3a5577c1b374626acc3 GIT binary patch literal 876 zcmV-y1C#uTP)82uqGF=9hw7$kYGyhl)K}$<{Xo;z_0e7L zJKa@X_4PnTMn*xCp)*!}Bc+BfTJb_$-zg5kQuKDH6i9>-eI zrjl)k5i@^?nqe>HhDT9@(P)L(Fz^T%vg+sh7Cv2$QEqBFTZ@D^i9u_gqw6epbe$3; z3|E>=i~}Q6ypH`2cY=iB+1BwDRDWy&76RX`_yN>Jqur`sAfQde@R)Uc8Tb{Ki@-Z8 z{sDLmTnGA$dXYg(!f??jj{%RZ_)yBZJw|!LnIZ!T!vjXS4>jVNjHjIY(kKr)Q)D1v z_#xWls|xXNDd)a5%KfecnMfG^ikf6VWy5K_G0JvdcY@U7p#!)JbWQQRIbVEl94;vHd^s!+)Yo*@O_6{(22Zie32C3 zJ8OA}@?7{2&lKYQ+{CK0000Z6pdM2&u@3Xi*TfC@c$vsHj#(w1~1zRHD$r zF|4(mpZJoMKt@T ziXZ8765sEd;()^)#1CL|>Gw_?O{{4WsSV#;Dj)11em&Nee!rep&e^0ke0`~Wpo92L zrScc}C8?SW>=OIqnl`Z);CK;x0*kAa7D(N~D~fYN`$zgAEGo)-WSVfKHoUMnkKQCJISqutQa3(N7WVCvi!ac6{XFwy3I&2F$A z@1+n}6)W(JFh(~L9QXAiW?nCqJ7f&c3-jhyGpcd?T^!^8xz=o5LK>(qxKnJUZMYKW z^Mq*Z{^GyY zcuiPbl#RcSB{gVF#(exNnAtnU^(*j^$)@*YQ&$0-MI*y4;vO-1k#S4)($cd)$Wb@& zSqJeW`grRUo)#DU*LD!UTr^zyUQ=q;h}$WhZl4kjzgvZMbqRd!+(hm2i=emu}$0Y1UmU8h$dduFBXUCgU%iX5BkP!+kO9x=PqN zY~X<|>TfIRo)Y$uXEaNM`EUcDcTs-`Cwr)$l_7j0h&_%Qy12*H;^VwAowW1}3d!+? z&_dnzy=F$_h`6~v;~2o3dT*H_vG2c}Mp`vIC7S)Xhx=?O-KU%GkcAO(5#P-a)Z}6u z60;xKlY5=8OcZ$%_w;bDH}t{FYO5gdkg)IDEjJ1KNez70yR7QC9QW!i6*DO0r<<)i znn2f#<~fsJcr&u^rs7fY(};t@$1by$mH0z2J8l+y&C`zNYU&tnt657Hz7et@>+2Sh ei?wP>wEqh=cot|*ChU^{0000klwkEx zWMWX%LmBoEK}cD?Smc995eO+cQihg7L6nqKUPz;)#JpuiVveb!&h)UxJnr^BXP~qRLtcSJt`o8`DpS{=R`_?*~WoU`u<0DMKe*A*(uo2(jTXaTvM$@1L$I+cpj^QiJ z$F1nw7@BeMmTbYvatMntz7a%Yp$}fbAMy+D#(TK90eqvOFQ#BAPRJ*EH^w!BY;0VO zwepGn6<0NeW?ZyjCJw4BdIv6T49)l$fzMSIy&nA<#4$ShVY$kpS7UH*5{a?!$csK` z$J7e#4htjr$JmG8(1jy7ij(*=Vbj@TR}n=DhC$eh%X-20L1EP2g`L>cQ#J@cSi_L# z(~eoTVOSx`5*UMJRg#S*ct`>I{=xNlSLl01i9C)Ea4*j7eTm^0eL{$uiV*l0KE=zp zM?p*0^Ds^5qepvDT(>ZKufS87sGzq97ht*|vLm9Pw9+=!=b^awj9seT*22=VOmQID<7*@ z=qYTfKq9N`$BP(V#k01S@wdLD-Sa8;m(?OJ4WqH943V_Y?jhA@AqOg-<-ED1?EoQC zD!sqEYGoC0Bi2b@26kc~Tz*2BA+qpAqCT=75=9Aa z#jK2bOR>F-?UqD+V7)|&z*Jn3a{UONt6+N|Q9oG^k)i}Yo^gE%_EfO#NYtBN@I+zf zFo{FLqNNg!C+bZvcy7k^1;R?L5|VwksrQ>FNS}s&mVW{9u>a7s^i0O}dBT8|2Nxyk zJ8GxXyBII5pptKQoBW9fSXg3v4Cln984p?8rFT^6XLX6~4>1YG#3bor-><>f&Jz2# zV-bvrR_Q_hVO(CNuMr6!Gvd*VhXp^y_)cIT?CHNFj|Ows!7|FLz^=*o693`jE1aFd5_w5-G@8#Q|?e_ zN+&kvNY6k{uEEz(;ka?Bui0^E#=%X}lj@6V@HHCWC;Y5Z{3)YM3>9_;lVZ0EBWyLe zUDz2+`bma`4MSgiCVf<%QiY!(!qy#kG<7)`cgf zi|xj188*X&H0^vL_|LN6s>w#=HX(tQMfjvJ%C74v8-%maS?x>9hnlF*63Fb5k9;-d zgpl8Ay0pz=r{~y(!uq&X7_Dy*&P%mR4-K=*CmOJ1%rno86;22o5VlR%RA@g+NY9QF zwpT_v{RVdnXF!$<|8Hta%o0wt|1bWRaMs~(>?HnDK4@=s00000NkvXXu0mjf0RMeu literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%97%A0-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%97%A0-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb210e8ea8666ae0d5b92fc0219f60d4299bd15 GIT binary patch literal 1222 zcmV;%1UdVOP)S!-stG=KQmiv`roziZQ@M~@!=GbUk7w?%Y{rPzZN z-4@ab=3*~~@I{xkG)3)J}q%QA+L~5k;m|q#P$BXLOMl% znYd0fJPoH}y6EzgN@WjrmC8#0))z-9qe8f#q+!f<+zj(~xhpW@MKz@(zA&@}5s|NoQ=;r`GUqcpA&FP>kK< z@K8CyO8C7xhiADnNTnBn=HD8>kLV41 z#h5JX=okC%D{xuqv(4C-LuXr#LZ6tlk|K9tUg^7)iO+Z8PLUj_Wfnd&-0;Kgm7k41F*7FxZpDn6 zm{m0~zvG&e`X-7MAsM@-P1-ZlCuZTKxDRnuN^Dw}9}?^EKuW#Wi>$~HZfJw{%=C$_ zmK49<$h)TjY&6{TOLgKWi+%g3c++veYSHTqZ>cnnk)HWDvpq74VX11dFRQ=Srtyg3 zhHo!eV_}>jvX*6`&&alAJzb=0YYpE~tjuEQ$HyunpO9^QU95T+RxX2Lt2*kqT1DjJ znm^(6<6dztPTN>4D_m(oye9;1)V$g0cvrg7L6QF&mCR5Py0*!C=7{5Ct9eznke+J?l@zx=2$5rm~TktHd zQ^{+0h4HGzJ>OzI6T~?FL4D)N^0_X)OiNB$Pvxv@9L~q9qGd-iJum08S|-^lMgFhl zY?1Ly{-EWuQ?|rHp}d|Da!VWPpD7Z8<;2~fn9aM!5|uS|VH=+_PW9NB{r;07*qoM6N<$f^6YfWdHyG literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%97%A0-bronze.svg.png b/server/routers/bushou/images/60px-%E6%97%A0-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d87549aac04a88ce422d728bbc2a872e3b457d47 GIT binary patch literal 1261 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0SpKa1sM-N*#H0o^+`lQR9M69*h!34RS*W?kFiMv zp#>RDkU@~KMWzsA91u|qVlbL$bR!8wVpyOghKRbss0_wPScoJ>g^h|)lm!}sq9S1s zaBPQw7$8AFXqu^^yIl0)`k17p?|ZtS&f?vwckcOboqMY4ugfJVku+=6-EI8nuuY|Z z><5K9_mv*_10k#}HEdhQgiz;-e}8k+MgZTV3^dWFw7`GA+wP?VZf8t(-LjOxmlwd* zmG*G$5@`%CE$~MPwmKcMk{zyZ((g}>m(JVXW;>8=_4HCewlmr1>N3#!u|)ggLAEr( z+m4(4yAoN`X@j#%krf&Pol4yNmE zhUMWgqfOFFGY1@Xz#cn&Z;iwH7~oYM@Pv6NGtn&laL6d%H6Hk%q*5PTXG=yaZZ$%4 z%d$|*0l2k6y6C2(7RtP76E+!w9<~?nL@!i(+FO1Ld?|#U#f;tq!YX4tloI7wuu2HM ziwV3zs5THYgzbqWt`OoJG+>a)c>xb`MA&7zqr&6K`mPZAqLb+sS+B-^`-O0QUeGt% zm)`I1+9cZ&A@sv|A=Id}EzRne-*)#9LajS8%VHr6KzDV*OW+-$GLN!2+8)dGRSwpx zHqHa!ShmJ*R$!X3%5=hud3f4cwQ$T21>v+`d(0C;1?cGyVV_E2Rio;Bfs9On6NyK^ zp&OVZgrRBHaJz-DTc1t1IN|opHeU!MGku~ErsYL_dK;{%Eos4xRw`GnWp;P- zZ026LaDix;v~XD1;kgt%r^af$B7~d3^A0&7gq`LXkq7i6s?Ms&oAt*+A&dsM6>zW+ z9?qvdn_+vlr!7Z?#lGLofN7X!o38#WQB+8e##Rq-fpnF(1&8gy2Nyr2}#c@wJ> z+&Yh?N2t-a_`s7A?AOZiOwv9qHf)8%LfEQ9^8Zvh9ADgTAioOXTOBi7D{E7O-l}-O zGlV*e63dq5?Rui{WbuG!`P8WM)~{U`^Ifx{-!RW7W1SFg_8-WU(~8Iim{gv!QESz{ za7q48@)wA0)0xs)i=O}h03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SF)cANR4_O?F*Q0c zH7hVMIxsLhLjU;y001R)MObuXVRU6WZEs|0W_bWIFflkSFflDLGE^`)Ix#gmFf}VM XFgh?WN*_l>00000NkvXXu0mjfS?xfh literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%97%A5-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%97%A5-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3376d713198d99dfe84fc5ee9917fb65b144af GIT binary patch literal 1316 zcmV+<1>5?GP) zI3Y-U%p?;tlZ<1Whl_I?tE3p&i# z3#z7HoCYR=qe&S7=0hnE)8G;Fbw;KUln=F+mrf9MW&>*sqi(pYSnij zVPU&i1U!bmWL_dlKCs$OD{|2ccAh#3%D~e| z$mpyT;(Tlco^_OWwj<^nUJtwpT8av@C=xeZjBorLv&LC;r zn3#7J^flN%64D%zQ^xQ8)Ssgv>h*mp{gTJ^N4I)a3bor3d}_BHshRWCM?9Yj2>zdSjz;GnCZZ!UQQ@V-$$1YF*t zPZ_yL8$i~7KaxnOAiI28;O~mLghLA|8sKa2Rltu%eHu|(3(8&5#eW&j+5=dc{4E;4 z`;jp6W~=`&u(}QYrYIm!(##kR#3EC$26?z9|MsRmEcmYBS>SuC?RL*GvSJT>mN{Q zbs=u73m2lGAnHO<1cg#9CouQ$jp`oFnp`oE3x@y!u38&*!oPecRoH6z{{DL2` z2Vdh*9ZsbTcp0w2CAd%suq+4gId!6{YyeO)?)|$L#w9tFJ8jMGZR*vbr@7% zkXh{$Twd1cGE;gkHe=Hi#~&2#%_00T-nRe?$J?SwpVQ%0+>T$TdEK;Fhz}M23t!=W ztU=!twHM)B+=K`5zT(^DXRNFqR-C!`sK9}@a8W{=OK~gS%dt6vwFzw==H(ot-{G=4 zj85Ww*|Tdu&Pi$P`V2!YY{Qb2#&YPwT^Nn{v0KOumFW|bPAu3L(38T*G}$N=Chh)g zP9eT2BHY58j!m!=JP`5eAXZcr{xTvwB)d$UDSGgQPT#gx5j{I1*us@nL=&=6r*D5@ zc3HvLwAoqN&2;qPZ=F77E>qnFf@>mu50&+<1`Y_dK|8CnE|^syxT@{@H$rhymPNQl zSTpAcx!^TneJ#tN&Kls%GD7`2r^=QJj-7&UBbpN#zibk`Eu!~!8KDazLRXY@3SN)s zwXf-AxG|#jS=QjZd-%jiU#3t2vlVaYt}3ZL7U`RpH8?Ne_9@oF?`1q1zjm}>%t%S? z{z%{6tigE!&uRPqk5I{!;SlbXAN1oTwU#KUKB}$!P=5bHve~ z@SJdumti2%H&jOGYMsfTa-Eu(9-*>o_w%}}3-YG)?nvLdD&Ez=O7Z3F<1%8s!p3^? zFSnz#YxS^I=fAtBieUTNIVRkH#{>Ps@ojs+k5&=AIU=~NlAGzcPrQJsbks9XJSkjT zMKl4+#dk@crVx*95%=M&6yhc5#`cI$RZHK)%oi5&cJX1Hmcqa^c{t)r3m>F3vR3?1 ze6N{JVs}P-XbH*djMT=mlEkR+t7jJM3793ENM`M{?x@S~GdV_wg{K6m10N8Mm9p$U zmDt`JkT98B3>!O1fcSpf@h z4}Oq7$T7U(_^IKKq8pduSz&uwCD0)}Ch;D;&exU*uP&_`Zv(;(XSqG&D3cG&D3M<$s|J5&-4}`pp0U002ovPDHLkV1h>23(^1p literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%97%A5-oracle.svg.png b/server/routers/bushou/images/60px-%E6%97%A5-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cff89828c5e1bf090cb6c788c60cf0c9acfb3b07 GIT binary patch literal 1055 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC>&{bxr4Vg?ckEFspmIIEF+VemmoAwy>kff%>&8e`Z|jKkL4B#-`ij`H(nJv+5%(WJ!QP@^@{Yk63|+uw7TUZPs* zbwRQwUMj*}-E}=jw&*SO)n+fhDeloc82$0$W2SqFeUZ~56wmrkI~k~?{pI(^hs&i| zkA9L?cG}Hrdraf{ z)V5ILxix`dU(~+#H4i#cdi7`B{kg)#F1cd!GoE{@;pHDX1PWvi8iiHdkd&D!W!E<6 zpy0}NrMsjy@bp&CIoNeE%ARY(agGPFp);Z$>Kx_~SUg?gZOezCq~6f58R^q3r^yDT z9N?4@G1`3hO5wV~Mnk`lIc9lX4DV+?l6Ae@;kR(D)$$JZZ7bb1uZG0e8Z3>L5c&0P z#`PWE5^2{fW~rOD9WP$?ye#-=n$cEk3Au@BF&~(hCuw+2s+=@!>pGzr&7zk!k4?Al zIK=T+MtlF=#HYNJx&TX&d?6hX=+Iq-uGUq-0`fRBO6E23T=nJk{H2dH_=k@Wq57um5@ZH;F z%L_-n1WBoK>*m@Z(>#fY%qc4$_g>nu-cU;0Y08Nxf0jL^*M3+8KH|A>z9HZi7w3uO z%Rhw9-(1phO78ZX3F^o7RxO?JQ#ym0<%N<%1D_L1hPvAnxkG*I=G#QpdGGJ?xp|&> zpGTWmMW)ftf`1byvBf@F7!ZCtWx~{5%F|~&*c7O-v*y0fb=K{Ulfv&j-Saf(#?u=T zZ5&LwEREBO!hQxP{`6rzb8y}Lbn#xD$Pg0~&57$ZeSfMyF&Elwa3-v4wH`1Rsg}4# zl%yngTe~DWM4fGH}Gp literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%97%A5-seal.svg.png b/server/routers/bushou/images/60px-%E6%97%A5-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..eadaaa99f8204e1408821c2ec104dbd1f5fef69a GIT binary patch literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJ$Lc#HI7Q7?^ZGVQ60Y70_CK*)dQh&o zY2DORwx(76EKSQLnYw%?D0JLYPze9(`*zv&7oy@TW?mJ_IV5)P zmU-zD{$QEA3Vp$gYBV40Zsm2~%5~?g_R?FbU0Zf&T)QQTZbx8ec+XYLDLvf}R+hgwEXuSVRjI;Oc#A&m)vr6AIebsO1 z^o6Z?`p*X(b`P?5b{#ZeKCqx@XUAp!1I5)JVi~F|Rxt5ULW=eun%7qpZL{efV_(s#dVSGUEs2G1W4`wZyT@!kQfKEC$~}j-v--v3 z&i1`Qy)33@)7Kw5K1XwR$g&+;&ZiP~ygcnG`{}vLWSMX8#AZHI^#AG9$M@~x@eOCr zWLMs@NalNPu0Spb$b$ycvr0O3!WZj?k<_sFjvJRAZ4D; zW*W16z}w$z`iV^V(U((?4{+-bn%tXkq4QIe8al4_M)lnSI6j0_AdbPddO4NXFf wjI4}|t&GgI4GgRd40g=ge;!3cZhlH;S|x4`Cy%oi12r&sy85}Sb4q9e06t)nZ~y=R literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%97%A5-silk.svg.png b/server/routers/bushou/images/60px-%E6%97%A5-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f35cbee571ca34298f350d1f8bcf960f41bf3f97 GIT binary patch literal 1253 zcmV z!(tA@{?=aW?7i1sYkh~DoSdAToSdAToSdAToc|wf2YK#MMKT6QB#hgKFR>k8qp#6P zTSW)vVHVE8DHvR%j$g4A>#-JVu(ydeHcSU@z+33W{wB*lti7Yqj)>K=cVV zq6d2l|35$nreYe-5K+AnAK-jV2x`;ul={zSuZXgDV-60j!-f;F4DVN%>*YFh|HEv& zAz3aWK*9G6mi7AFn9vM@MpYgD^+A6H#a$%@hVxx}t@rGsXw-^t=t zy)08#s%N$Sw*862N(U{$SL$ZF29EyzU8&52*ag3=W(B&06tPk>3Nl^BRZKNh z+R~HovAEDn>A{EMIwDqTGRBJ_k`=w!C2o|RB5xp)oO4rbg(pOzQ;|g)zoYAwUU8fr z!9sDa%e95Zi!Ml#t`*fddw>^O=wuI`$5kQ%*Fqb1r|7-37DdBFeVLV$JH#qpps{m4 zJ4JsVj;mGKSW$U2%gHX>i?cPSd)ki9l({-f2hYPcyePT^X$DMEf6uB<1i2L=YB!sE z%FMmIbnwL`1J;U&o5UErTSj@Y>=jqo5|ONA#eC^i-X0uN`oLgu#}*IVhnpp@_8=_4 z>tdVl#um{keNuEUXR3V9H-n2rgFfv`zd!B4QzeJ=SGB&7ua>V#e;Hem zHj#U#DcmZ8R+c$)F{ALb>RQB`MXg*jZK7FTPWeV$F1u(v8uuC4luMIM>d2@{Su8yv zFOG(fifX0NtZ67N6y48q5x7)VNqL`C4>Rz2l@oX4P27RGq9#r|^M{CT$0fK4ui=*( zoZK&7`P{Ddm+KW7hC9{&PN`d@uiHdD+pY1Jv)@pkXbmnM0*xT P00000NkvXXu0mjfYtT?0 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9B%B0-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%9B%B0-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b1747124b06143a0bcf9333de55a785e06ae552d GIT binary patch literal 1235 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9B%B0-oracle.svg.png b/server/routers/bushou/images/60px-%E6%9B%B0-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..eef6d0df20363a86036fe1331b2ae36a5c22b243 GIT binary patch literal 1182 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 Y0fr~O5yRn43IG5A07*qoM6N<$g0yHing9R* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%88-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%9C%88-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..890046a388394007d0c3bb9d0e135ff47731173b GIT binary patch literal 942 zcmV;f15x~mP)P6%~SCC?tx;e&!mwjNkz1ijW z&Mz~wH(!B*g0`X~<9M5aEkGIA1oQ%3QGR1t7J+xbN8r290{ApM0E_~AqO=znL=46$ zO}r1lBj5&b3;5-uuxU98Tmz7jjN7( zqgpYo;kqI3jy9;0+d$27@1R!9M-9(<&~UMcyaY`Q0P8hkJ`DGH&}hX2OMVA3d`*lG z!@E6bwBniL-VTkB55prKG+Ob*ac_f0$cN#5$n-8GuaGgci5`uRcBEx`OP7JO$f(D3 z-$XaC6`3-|pB1EeR*-S>Heh>nU5Vn@v=XB=Y~vg-j?ADMC+sCw8;h@dJ;jBNV1jeF&TMmjP&xCjCeA za61?-YS=|#xCN@_lMz7;tHd)RXdgB$wdPGx!!Fvvu&UK*M_Or`bPqDmjpw#;YW&`f z>=&1jA!HfY*r4IsW>xJxXbrn+cpNy6Ox%YMLxY50fabi`F1c}T;8A!v>83xZWc+$F6@ znnIe+FTW@J#G-1*Q#a={hNlgAwnHaA$<6RfL*7&h9W674ytf&|Wdu2>9rvUA$ZRGw z*JZ6BgSqBUQ2cqjNIL&Ia^T2+sNY?-4@xKfsr|$q>Ajgvn3f3}z0q)~Mq<&S8 QUH||907*qoM6N<$f)Der(f|Me literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%88-bronze.svg.png b/server/routers/bushou/images/60px-%E6%9C%88-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b80867aa18a90b29d79e4deee1e7f17cb11e9100 GIT binary patch literal 1275 zcmVetHjNa&6RT~pCHRF^EP}YH zC@3xz7b1e9xY30hyHKzjEoc!zaa$3J-zY5=DP2^H^&_d8eko0*u{4b_&&9b=nYm}qd_aj3B}$a&TvQ6Ob1u*mE4|V0`O*7Y)K(X89#91q zMeh~@^9_4bz+vEc^g9831)R$3XfuRsz*=AgSP2XP%Mfx4^E#3ObHD*$7w``7B~TC1 z&}Lvy)L^}X%3k2+qRC#|fkfkF7I?ZDLgu$);uLTQSka7855|EpVA7D!Lq3~E>Epi` zU_%wyf)IbDC;~3nY;ytd8t{N@>oAJAYZciy4t*_7EK+1ZdkFvJ(7yy&V#sE36P{LN)^&7f!sgJL z0e*GpYg;z^(0eg%(}Z=d4^8+|n95qGuhfO&&;X&j1M~Ch_bizA5 zZD_ftr0{1mbu?Se-5Tbpu7!UH68U{}DpLy>(B{N<=qL!Wco zLijR8<|2HzBKyG8#s-ocj-oGGg5w2}I}(>$bo-EC7S}xkEcUeVuF{4x$c60THOBKa zvel|#z2eIb+*#RD;2uTpnzMrvHrJ&Gu+NWL&%fod{~Y?_WUr@Q5Ue0M)V4eHA2)Q5 z;NH$%iGCn3ha-;;iOq^LPdfCMAc3Z#`;eQG zzSpCQ?MB&@%j=A&0>3HFn2UleSdBz)jjS&P4TcShGe-)rJBTbiG_sTYe;=%+cu8@{ zmk;|ej4V8CCx=>=)-oJaoZ6DXPB(BTa$-2G*lZ*x_vUvwJG2wSI`BXfHinQB!qXO8 zjWQm!*H*lV?%e7WbuR>7#(&^G2W+D?7ipZh2>a0Mb=2!c^6nG3iPn*Q=(Zku$FUW= zquY?h{VhmuuK^we-Xq-=irvWf+%dQg$&-DKH&ad`|3qyUv#nSRd`~eXCy;=(iFBuo zEkzYcGWL_5;2iKZ@H{d~infMLb;`Ln02py}ix0YErd#k;=~$f0L^H zmYzn7&82J=JSTM>%=mJ%$B%8%#c-n?Ir%y}9z?m-Z?hG`|HJ;2|nJFBIgG7aW8lxl2LMZk;idW-gi%2%k+d|4tl*; zIl1K9j-#O$-tuHdGhAXg2E39<~&w2c&+wg z%~qw={;M9^Wo)!GyV~<~hvBV{w`HcgTkE+s)|dYIyChELZAE0?(v0J;i~b1h?!P(h zaYf0h?azK#nO)5-d-`*7#PQ#sR?YjQbFI*So^3#1OpNTVPjABBe6KLLzdXg_Q}rIF zc)9x@?1XCEv^A{be?R4Z^`Ux^b-!MvWZ)awGe_^m^!e-dB~ z%XD|G*&K<2AS zWpV%e_c4Vn-2QZe>xK!yB%@m58c~vxSdwa$T$Bo=7>o=IEp!b`bq!5Jj0~-e&8-X# ov<(cb3=F!Jo8F;l$jwj5OsmAL;a8m%D7`ayy85}Sb4q9e0Ipw8IsgCw literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%88-seal.svg.png b/server/routers/bushou/images/60px-%E6%9C%88-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed4dd3c71563cb6bab751e7aa0a06518564d328 GIT binary patch literal 1191 zcmV;Y1X%ltP)$y00006VoOIv0RI60 z0RN!9r;`8x1YAi(K~!jg?b>aqR7DsE@ZZhML`@3~Dz(zeGKefPdLgNxh>8-jH;Tw0 zdhtt0AL^4qP*H&uL`YFYfff`&q*NqP77`KN2rM&*v@|RAYH5nzKFlt2cDcKE@6PO= zRs6$YhjV8B^MB6lJm;BbhQsIxM&o)c!#eE1Aa-Is-ohfBSeC$C7=^pAK`?N*>p#4T z>1Bvb#dLgXXu~$*8+?atLp=W*3%W14eayihYK`~-4`D`K-9DU;Cj>)_Z5DM&ZxYT` zJ8FMopn1JUBZ4cm%&dAJz6Y#4jxL=C}tzYE{xJuUEmgt?XS z)p$BlZ!+!`M_^{%vnSOC62)t;5N$2R6+*l{6y_D$?9kfxyrXzs5cB;I&*tDwVUaLg z9KBhHw(1uU6YA=nlG}ih;#)z;(qZaN#g(|fQg@~3*^AczZmVm%x$ykbT*BMM?uw9m z+GtyiqnF@E(WsSm^*%2=o8PX`95}WhlMCe?iCl!( zyMKuLdkf_QDIFY<(par$-P^EMI`$RH+fs;94K98n#wT($!`MQ3OA1k{!Nnlsq(rV} zm|FSWkDpSAQVlN7+fL@8s^8`fT8qvaBF6}Cuasvcay7yfA+Z2orjq4|rPt#ETq|TL zw+k;~K!~t*Vyh5CZ#Hsoe!1u?dLj|Q$xZ5Y4G$QZ z!Hr(R3L!OH^vI*|Tcysb9Aa~`1&QED`q^dgQD3H)_0mECp|fI|j|>VT6n7YmI zOo8V!J&@9AgjqtYJBSb3T|xCI!#{d#o!cq&3kHAH?T%B^wC$izOzCdzcIRanJV{tTQ^Mc541*^Y%JoMi z4oQp`J@f$_-_6d;7~x%&i!h&WDnUcnv07~!=a9!@(ct|$yVcqgI9b>$sv2E?YNul; zV-CYFYLf$JbgSdC42H+W69j`L>gX!2!_UJ0@?mrW{{y!jVkpP2LL>kH002ovPDHLk FV1m$oLreew literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%88-silk.svg.png b/server/routers/bushou/images/60px-%E6%9C%88-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9b508d7f7673e59315a81509ffe576713b27d8d0 GIT binary patch literal 1258 zcmVUIRaF!R@ZaQ^Gv+IeO41s8pc$m4HqjGY?+X&?5zHD1r-o_o)|cf9q7 z_2tglYpwt6z1LoQt<8T7Esb^{0*B*boP|;7DE!u|@b{JY3h!becGlm;>M;n@u?V}d zuS{8sYxT^Di^M3*!#3rUjFPu7pw7ORjTT&vPgF;;R6f@ONnauCzpP}w#R6d_Hzj=c zdi|&*V>~{TjpXl`gOMe=2I1L+ao5+BNeYg`E7+@iqN{Kl4olH}XUzEDFgRZt=@^K| zusz19C|QQ7=$*mNb1}Le&4WZaI0Q4WKE{!_8JXqZb2bb5VNHb2Kcugas&O`!Mi`Hi z-I%NT<#%(8{+U(kjYS7um2ICc$C#Y#_ZNMRe~^>@e{ckz#EuAKX?t~0&c3`KVP`jn zlzw)poTcOBlLy}(W9RNl zl(pkVAyLmlYBjDCB4*Ne>o8xq1e{QbgSaI|_uMQ>M&bz}yx!`SzhS!k1x7g^sLDAzMTX&crhbj^-t0T_ie$rLeUIWTP+? zlQA2w;WKpQM0i}Ov7~^|4;SKG3=<;g$-;i@j+K}wMCCluhT#RFAzRq8Gq1MR=3)8r?-jGHi4`6ZtFQ}j;C zg-w}g!43E&#i=OSBD7i_!8D<_bYwT(1MyOdj;MQaUC@Rp!V=z`;9xnj3ExRBz!zn5 znq&27LiNUJ=oBgtoj9omb`}ellSDMC>ox=vy2*GUr>+!x3wpk;-nIH+7_Jod@FLkd zit`%aZ|-Qr1wtH1BD+QiXibAT;>qsCC5>|}e@u~F7OGnhsU8?7x%#q1w#HkJ#u%Z= z7Dsk9j%k>8Ib#AgiYL2X<@M_xhq02=(v3m^uqkknP}6D(Tq-%y=n{%|O@V3H zC7$dup@w$QqXiF0K4%xnzn9z)wBrr&ME??6od?a6!Xyk9W-gBGpSZeV-sOx=p&c4W zcCqT~T|EZV#lHvHDJe$@;!gy)1m;3*+#sN`|?|ELH41~OMH Uc)enw@Bjb+07*qoM6N<$f+!1OhyVZp literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%A8-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%9C%A8-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..adaef956219f3411ee28e111af373125fdf1a1af GIT binary patch literal 1397 zcmV-*1&aEKP)Gf! z8{%c-dI`E4H@nNmtZ~MNGlSKqySlrkYI*{hADXSx`=62M90m7}jdV29FsxGAeWu@cE*6 zUK#jMai@UO!kFxjhlm)cxPL9S1Dc%xHh1@-lzb-^S^NySa_?6I-=+O<9zHkPgo^+P0N+ zmy+jLc<(5AWitjPA*91*Zrp9*j4IjY@Y71ZoW5NL#uA?&X-z}E)%i4mY(VX}Wq?)n8T!H6WS>o&~>fVKJro|D$;cJZc-@wZm{HoE;+WGiY$xDEP zbJ~@N5DqUk+OrX((qJYV3o^L6@+#G@w&FFS^XvnpUQR+8d8HfN5eu&bTtU3%{wbK% z9#~F1(SHfqr7%$f?o8mGTL1qd;8Ng0;QIt#t**ac;926vO#@#5?;&$h7xJ#xtJvS1 z!chU<#m^zzH3r;5@f(hrm;u~NJa)QXdx34h3&52~oDYUptax*POMr8MlYqmGE2+O< zkpyH5lC=B+>}!Etg<}@-0Q9Q9wn!t2oEOtb%Bkb@c!4$)f(o*=Gl*15dd?04XCQ^a zq4mqQG2o3>%;9;+f!PY=L}D5Ct(+{3BAf7Ak-WOG*VT6P0=FTC?V~l}sRnE!y%K9V z%D~-ZhoVWO4&If(9XI|rnejU{;O0U+OF$Q}F~OiJl7!rVoGj=OS*7^;Ag&uZD7zh5 z==ATm+nXRyO5WWJxB8v@$-rATkp)N zYlW}Fdyw$dKsPedX-M0AH<2{g|IDdtMTlzYIVIZ;!yC}~yGym?okxdocpK4IE$bT$ zz4>k{_NNl=xvcPs2vrY%YqX~wbtf(NM}QyIy{zeyiBJxk8C%vXs?B^h+HfLrz_!M* zzXiyy<%6GcI7v=AE$MMP0VMG&ii zScuUg7HKRLECf4+*cd^=1$LI?`L;*vf10+`^HQ5 zfq~nZ@9ulwo7>sl?*?LGVq*NU2j~D!0aFZX5#c_N$+rE5wTSS9g5h?DBO(ZpGxXMJ*u!gIP_>2nWI2kf`Ai^5H19SuHeZ*EP$2H@` zR{#w@;>1V*X{=Q@4V=LHhGKxiDxCrLdc@WNkFs$sQHYI-YdB3@X6$qG5B>}v27cM% zenzM_G_^n{P9u+jg__t5-iB*{t4hoeu(cGz!>|B&g;VHfV52Rj3b)|{w()x4g)-g` zY$&bt;4B0Ba0*UQIIrt)8$OnO?>?MA;SBHrSRp4r7;A7ZOc~%FmT|TJE^tND{~A~# zD?K=yDXiQ<+8fHqY>uN$BC|PKD9&sj);dtOB!P$cGdlpRG9xou<^gZ!8@LT$Hz7o-0MMrCdn%OMft2Bwn!X;P+zzA+f70}Q z70T^E%COE{S}3;zDZ_I#eG|Gatt-ja3gvbnWw>6`H=*vZ?92wba9@Yhco*`@l6u_b zAGNgti%bcOlATx;M?X(YLqHRT{*8!&BfwvZF9P&peNkmaGr>zdxzK7^SH$i z0uMC(!+6)fQow0ox}*ueRAT+>po;DUmIEs_W6fAaf=1xIW<1xrfVE;yd@uvJja%p~ zU}iR^0&B+Xe#d!N{H}M~AhDic9aSJ>POjTmPDKWZha01wY{uIanmoQv3 zxTpvk0S=B4+spWd?X1H(O@1ivYs1h?FII$f;=QsyQ{uPz%u@wy2QFY$LVJMu!6b(x z2^#9!bOY8STb;UKU5v@N?ViR>8au#=AR;k}tq4 ltl2$@wNWi5CMKpR{s9SNbgBB%^J4%2002ovPDHLkV1oN%nIixI literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%A8-oracle.svg.png b/server/routers/bushou/images/60px-%E6%9C%A8-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6f19611bb6cc7ad55edca923ecaea750b9f35bfe GIT binary patch literal 901 zcmV;01A6?4P) z7!)xOLHiVHVPheJg<>O!2mui!g3&?{{J~05u`nV*)PR?q#j9q=mbn&q z1-q6x_5H{?gT0M?D@S$|w z7u0KAlN`r4bRv+xhp6F2F=Z?Ro(HZwmX=r>v;p5xLW}r4^8iu9iw*a;01pD!JVkaS zsfvq)JEuG_NYwCB?Y=B^OBc1SKJ^^O{1< z#2St_m<^wGDJo4&Q_Be)L@%ZOM5YaC*JILCMapo|kTxzen@H0F*hb)*dIF=!{>FUT3zW6-9F zhzL!?DKYO1>wiTJZ8*a`Gn^wDdi^C(uMr8uro9=?3`<~IfhYofE=8rqc2sMc;#u#3 z}V2Eu!?Ovhf}4E~D5 zBkJ_k&H@h!_r~||H@eInou%uK0>4XXhlRCTVF=&UOVollz-_`0A^3m1AGPE%Np#;w zP1BA4V}A`;63DwkcsSDOMXgQ@rmWE#8DI?60Ua^qkKh}=8&gIOwJ9xCY%Nm`p!P=g z0WS>sUjyf3F=fmk5a+UGxBzSee#GPlR~hbGsUK!PN>MSkN!!yTAsSwrbRhtcP-M@<9h4l zx>9#tw$Z3KO%TcjdldR6ESAsSKN_iz`d0jf< zS-k7SX^YS2tY4mfvM>1PyvD}r9qIdu?^WL`o?pE)??2=3Q`3L#>VGSKXr15TYHPN9 zhV5nYHOvv0YYY4jmoI(5ZyU*w*H?evc%^sd@`5cVja6EXOW9=W{?si!R{prJ>BKSj zy^;NIuPtZIKYAck?&~w1_e&m}mN=ocGq&(9o7kl${e|0KuFXALAz(WFQq%bc>+qiY zZN_@bS^x8tt(U0h_glK|mHpfUi?xq@ztO(_viXF>H~A4yPaJ(;Z0&aGy_@s1*6pt! z?{4`JQv0X1V9l)F53viMJyiQ}`Q{5tMVS?BHV@nruQ~25{lK{9<0RLIpI@2%e_JPb zXoqv0=pl7JY4JlD&#Q}fuCd>$5oLFHXIoU@y?hBn%@)gKyH5`0rq{(3W!~&#ij0c= z^Pm4tr`MbBJAND6ep;jJCt(;~>iM0- zAIdXT)Tuh(ms8JmK6&r-Sb=44*DzHt&TqB!H<@zXNTSSAd(J67Gtal8i6{T5F-pX( z=znLbF5}gEHzVrDf|J{CuskzOw2N*_`L@g8^)$73UG{gyeihofKbCwbJU5-aIO4}% z&)W5uzHvQVIH%mPVq?O++Luw!lxKYW8~Xfj!mMfbJGef?)hrIXu(rBro^pkOYz2Rv zmg(n;vQ0iLaz`S%&AHP0l2@Fub(H+T_PSt~z#R8EZu@&P56nK`va;uV+FLcw3fV(D zoeJdaIP?6N-yJ?`cKp0e#WknDT3J^gZ2hsCrQ~MXsaU6}jQXke;cIq%Dr2l)&iKDE z{&vcpSzlce70Xnq*Tj-=zN8T=|^;0u_4o?{6#lRJJA8b^E%{Q&wiN z{@rx8{J+Y^Id2bbWw^dB^q6t3l=ssIiR!ZDcmKUDW4*ZXb?WCg|A6VALAAs+q9i4; zB-JXpC>2OC7#SE^=o*;m8k&R{T3VTySQ%Jq8yHv_7+5=YtVPj~o1c=IR*74KmyCfR PPy>UftDnm{r-UW|>=C;u literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9C%A8-silk.svg.png b/server/routers/bushou/images/60px-%E6%9C%A8-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5d630e5fc6e87bf2ea644c1ef4fe1cba18159b79 GIT binary patch literal 1007 zcmV! z!6*hn3=#39CV~VHq6ZIx;6V|5i(WK0A3+Q#Q85P}iAhX!HBpyjcTL>&P&;I{r+T-0 zW~#e4*&h@;-Cb3`|985ox~glIlT3>$@)^cfEXPh9uE@7my^AS~;bp9@H=OjkRsily zALG&*V@j^CbwiKizB+?SsXKK8PvJjYQ)67ov>5xvp+BfGuB3WW9C#c{YK$wHRtilx z2AzE5ZlyMeXcs=sxpqNn^E!axjhyr6r#7w&_#L4MXSF=FaarI8unA}O>AMf#N6sg2 z(q(l-xHAWEH-`GC>v`RS*5?Jvt;K88{$-lj%XK4*#bHsQGf8#ObCJ!T#dR9g9ZOZZ7 z(hEc{x?KQ_1@RMZQ>=e)jg-G7ljo5fpF=piPmWT$2-|XknZhSnGe;dSM#^pOxW3NJ zKHE-5apQnEN~wj1@J}SDcAtDzm`=vDAyQ^LPR9$g)VVGNOc|}foAU4WxX|Cu%9Oh~ zC;yS0^OIPg7Nwll;!FA9f8b%qpP#E{$s2>czaoxOYT+(nHkB9r55mB2{{wxTN}!`_~XQD%O14X{Y?rectF% z#b9?}SxqqxRF^3}B7bO}_1&x%<1OX;@mIp@-Q-KbLF!z5q_=^qo%RY{Vrj*(mr@J& z;-KH6;Pgrh26pI zBWM(_n7Q6vEe`x#rp^{_!t25p)|vMkT$~1_m=@u3TtA(z#)b0N$9r@G&$hX?Oqh@F z=*WN2JlcMJUpMeo1> zW=#Md%^dGeY1RbbiOlf{e}}Wc**-l`H39hF%<=Cj&6)t5y~7K@gVX|W4a)Z6k(6dl z06y07`6&KOY1TC0_V#HqH4XScYO|&R|CZXU3Ba9$R?-ogW&lq({%ATWnlxcU9ez%2 zv;bU_{+j-~E45KmfcFXeNl6#~GzWOE@Y~Dmyn5iO{jL49e#B{27*+L;T61Yk_-Vtp dbq8|7>3?wp#aR-HoSpyx002ovPDHLkV1h9$@PPmT literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%9D%B8-silk.svg.png b/server/routers/bushou/images/60px-%E6%9D%B8-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b515c8f8ed78b8ba7aa884df54ba817aac17a865 GIT binary patch literal 1272 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AD%A2-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%AD%A2-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd652126f47ff6639acfd4f2f083c555f1d1676 GIT binary patch literal 1060 zcmV+<1l#+GP)M< z^>0Y(DLT!Q-+yb<^aY&P^89NM4g zl7Mf)tAQMF2v}+0R}ym(P!Bax}3k>|if`_>z;8SopP#3Z%82DC)_Uj6MO9P*R z>rkRQF{xBpXulSRynPDpC+wVoZ#d5iV4!UhJ_Yv@b{_-ZGGW)+CgD?XZ(&yuJqU%6 zg8SMgk!6JeDm8tjV3X4!51)eL#FfXq7l#yF6Zr5j%!n17T{MY8Gzfc}VJw#l%USu2VQedg11&&Dur(7s^2Jye z^6lJaY5INFdIt>KIGs93Dpg zEPV&{OS8gM@O@#AG4Qpm@MvLQHi#L)RPb|Qk1+6!6D*qoaV!${MT3|T_X;@U63|reXJK2nS^|c~yjKIP0k#0s#Ao|}R+oULf?H63d34U2 z)}4odMZm&fe-bbom`8lGpaD4O7|)7##*+jf#~FAh0Wd4Phq=Oxhrk~ zGl54*4Axx*Hvvb1rKt1xaZ&@Dp2H9oth2OqMJsR(wd7m?ZUDa$7&n5A;AUaFR`@uu z6Sd@|j*Z|ZVOuxUfUCe-)WqZkn{)Vwuyvd1aU8~@Sg;c;D=hy}FhO3Mr%u)tmJ?v= zBq7+P!g2ykog{wJE*1Xo1pjvMwZcYlqp+QxoAQl~VA)S{ddS2#HiF*^dz|GsnP8LX z6JZYl<|mMg7iuTLbd}72k)^s=ttSa!?SJdN$ji?^j=iqfX>UJ+o z2k;Vjfa+*801ttCMEhr%vL5^Hh3@tYI0o!MJ;Y{PoJ1%GZj-*~@b(7Si|T!4!XV%T z>PFqC@DAWCFvBM4Bz`89z$jG9c0jOI24i=2L#p_D&7C9uK0FtUQ5(DtrTC=U4(tbZ zky3ZWH#uMhaE{{DzJlB3ZMS4Ds^?Wm^q$NzOPS@sU7~`|XPH#m^gvzYoC02>E`l~? eno)@o+3^RI3-V@ZbfR(q0000_MJ(p99}L5 z9Tv4l+_ER*^~~<0=l1+QYh%56^X~h4Ycg(TFteZDk?tw5+*IdyL4szpD3&W4B8E`sl90pvXz$z6aT- zL`{yiTK=QnKWVlIbHP24J$@@qcP$O>y8m=qSmiDG#Rqv}0-QHay0w zmZ9Bw+rLF7vTo<(cXPWNUWL9(o}7DyC&qu1*9Y&*>DOhKH)lE*oGaPXKgr#|Z;GJv z7s<Fg~~W z{)BB-#*8K5+DqSWaKZ^-BHv)^&u^{BtY&MDa5QvQvSI7jI6srzpo z&7BwL6wc1C>2ZPSyVlaJWmnHiaDMVB?#>I_vgZrCWc?opz2%eqfvHus#5JNMC9x#c zD!C{XNHG{07+UBWnCKcCgcuoH8CY7Gm}naqSQ!|stZ93Rq9HdwB{QuOw}u;vcA-EG N44$rjF6*2UngH+|fr9`5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AD%A2-bronze.svg.png b/server/routers/bushou/images/60px-%E6%AD%A2-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..634ce62db43a16b7cef58a6ca56d0f944219da0e GIT binary patch literal 1166 zcmV;91abR`P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AD%A2-silk.svg.png b/server/routers/bushou/images/60px-%E6%AD%A2-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b678d94ff08dddfe65bff7abb9f7f5634d2d3906 GIT binary patch literal 884 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k67eHC0Kl0SI+~=*Lb=(hD02GJKZ7r!lt2kTZxBaE!Z=-|3kwZ1RtDPq1nSU<+eD2T52}RpYcOUv~ zxzc#8{3+AZ%d40JcSWug{21r?b!*Q1MbeHe{AN>Qe6sMQpL^_6@My^ z?+>|`yykLGgkyeFNmBQ+n}2y;xDNuHSQ#ls})Hy5Ek)PG(l1>YT)g z)Td3F^9owUw2UX0eULoJadua5&g0fqKi;H2R#VSda$&}nZcdiV6&lxiV-K_5dwGKU zP{qy`?(Ta9zAXYAOfm*vKCXCbQU3U=_uij3*bXF>JwE7df3>(hE5(Jgu6cHl^GvM; zjmj~{-9w!J1O~N5d3rjl#^!{*Q!XiPmt*7ob;QfmFYMuw&fv=_dh?c+MOnBQWNvG| z^FSk;S5`v%bmpSDr)xrEYv0SyESd6XS@S2$y@qxVj-NM3Zs9QWGjxsE80f}YrnO>` z*Y(rPIf^SpH#8jnQPMj(^Yy{JocphKoLa8ax$nt?`#jM+9nl#H;A6g3@`gDJ- zi_%07mA0R}6JyI~D9@g91DG^bOI#yLQW8s2t&)pUffR$0fuV)2fr+lML5Pu|m63^+ qfr++(ft7*5gCG2wC>nC}Q!>*kach{kbo*4G1_n=8KbLh*2~7Z1p>#?B literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AD%A2-slip.svg.png b/server/routers/bushou/images/60px-%E6%AD%A2-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..bef2898015418a2149becaf1894460831adc499b GIT binary patch literal 1161 zcmV;41a|w0P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1pxsJ3*Dgvj{pDzkx4{BR9M69n0siCQ5eTRvmayF zkjrd_T(UGu{&20CyBdm+G=vrtlaO3WA(BK*$^Dknl(G~Nw&pfkEo-@y%P6Kc>&G_D z?Dfa&-MRgKdoQzp>^c9u&+UBQ=bZOE&+{H=r*`^ZDT<|BrkK}c6Ww;O+bGAf$C0*z z9V>uZSd_NLq#YdCOjP*zwgMih@Ue7l8{k2jBrb&I7>;s=gx1>QC(0gMOg30`=h|Ow zZfgM-YrxYCR%dN(EfH>(x;qyrWEY(@n;Hi%m&^)b&JJ$kYFen9n%f-*5nmLvMQ&h6 z36853-MJQlhfpVI*SYzs=L)iAicOj3)u8Z)=x9Hea>@;GN|?j)QS+*lxG5|YxGmH> zU+4fqVX5*J?M!W{6Q%MYe)T!-4$Nq2+7pU4Ndp$^(@{bGiC*r2mrB!SDcWudY_*`9 zPlGM5H=ggXv`?CNhNiEQ^zVeTP$|eW-RGw3(!_eMEs^y1?BelRknZ=A6kiAvR2lTQ zCE(Klq)O2qbdn}99FOKH9vk#mCEy(d*h9U||7MeW$N&&cPeJn1U}Y&~vRJ6mm8|qy zkA_L{nD*+HcA%O@0Rz1^0&=D*H&_id`u<=ODTajVm}W^aEYb9dhDaO8@fvG$#B!hf zO|zM!NggnPMSfy!1a7HyOP9D(7L&?Tzimwb=n}U58_pzwTgOSQD0&8#CsGr^WgQaUSlYi70MPkq5fmqba`Kfu^iZ85d2h(ZV)UUYlJV>!PpHrOct<9k&F(uxxV$0O2o}#|GC0Ovr61Er z3F)R+kFXc&tr5bakRpOWfEaoZOCRFs=kT|zkOSOkDaGz?;mzHS0_nFX3`O&*l^`3) zWxTuFogcnI>$s@hnKaVgusM;QvH9Yksjj0SIo?3!@pqOVo zc5~U#PVMyn&>#B&6Sy5aZ^{4w03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SH7zhPR4_3* zF)}(aF)J`IIxsLH=(x53001R)MObuXVRU6WZEs|0W_bWIFflkSFf}bOF;p-yIx#Xj bF)=GJFgh?WP_+OG00000NkvXXu0mjf7tspq literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AD%B9-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%AD%B9-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4c294c1450b7bab7206e9b0d790d0375b3bb0e GIT binary patch literal 997 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 RMH~PC002ovPDHLkV1j4Bhc5sC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AE%B3-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%AE%B3-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ee9f531b80666fa4544601d55979f3d17fa4be GIT binary patch literal 1354 zcmV-Q1-1H#P);$6=fL5@z3?9s zSKw{@qc-PXEnu%<9?FRL3nvyFb1)|1LfnSgcpcv;clvJ}SI}NvTwOuL2Fz%Yz4I#A z`v?2B$X<%A#fn<#cH4w=TVV749D9$oz*dS5Je6a-)Ygh{Qfr-}~{dhyuM`*sn0WkT+GBE^gV9!NoYL``BSvo;bEzBo~$F z5R212n5Xv8lw2TZVw+|I7Gq-rx*K8#k>{4K z_8%hEtHfOCnYku&d|u+%6PO_F{1(A8(&^oVoPHCG6>H}J9|lu=bnvUxoQ%swO8KqcoqrdH7tmfe2aC+7 zBw!gvHrd93VlTW-WvADR3)FHtM2eR*esO{EM#zurM96ws{%l`cz;;a>oiVsXu>^jm zn5_${^gB(Ymsy85id>;(%*Ys=RdBpndSY=k;XC0?`v3-?uIz%3xb^5|4=&6}8B1Rq{vafm= zC0(9ciVaAE{Gr7t5NGwRThO6YWxe3SCaL!oem6F}-5nhBYT!sZ1 z0c-FicCB)Lwj#Me<@chTTZ!Rf12VdboiznCmQnPhmZ`W=yp70Xkw^yCCv5H}b~Uwx zn#CfMTGzPD=5wqlyCz?*HM33cJ6Gyse^FgbmVIhz8%0=pTqGIU z?~X3Qozfqr?5}e2F}oSU`r^a15n_ScMbFE!Rbo;5S~!#C6j9XA>N^4Nv_@w8sZ`CF zul_xDzoAPwn05N1c8Y2>M@qkTE$xrDly5{^!h_0Z`KVsc=;!PpK7&X)d}pJB^@mOM zO5C3Lt!*#T`idd=LC*}o&|W!x!z3}=|LNloN!!UtJ>{SQ1{i?<0eR<2RVj_%QUCw| M07*qoM6N<$g3+q4Z~y=R literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AE%B3-bronze.svg.png b/server/routers/bushou/images/60px-%E6%AE%B3-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c55159858dfe27287e22838042d3d0fb12ab0915 GIT binary patch literal 1025 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJtp*_;jaV*dNcpz|86C;usQf`0WgT50OBb{@>wW^3+LZj!bI$ z7s28vDALI4%FZ8H@=Bm_`ju>PepeRRCA(N1OJDF`S;%zOh~@PHw#J9A^t`iHuim}u zRoRW_2Hfx7ym>eKVDo<4GqWr6@1@`WeeTb_@4Puj)jF7d%~(D?XY;}8P9asV_L~pF z7{4V=y}#3S@wy0^*g2E_d?t4-wt&!r;Iw1t0sc#tZ@AMDa#WA!5F z){_&LE!smDCgdM7lXHFQS1INGq5G0EZ^10(Z5h|;M%b4IsJ4O-{(f&1EzB|rPx zdL=(5Z?atXu|%4!En`yE;R88gAA)v0xN_H(ap!?D9UX)D|AObrQaiM?3{xMHmg*`R(l`lWLgllf32coT-)BQBq=f%J`k3@b;ISOYAcv?RB((JlH$6X3YVeL??y_&EP z_syks3!bdEi#o$%{bRY;ynM?vxnDBcg)?{0XWM)s*XQ`c{MqJN;&XX~RZei&{@QaQ zOhV>AqoPWYpz131KfrvVTH+c}l9E`GYL#4+3Zxi}3=A!F4a{^6%|Z;!tPD-8OiZ*5 m46FC&PSd=4Gf;HelF{r5}E+9T)6B2 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AE%B3-oracle.svg.png b/server/routers/bushou/images/60px-%E6%AE%B3-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..19124d704609e8e1fd90775384657fa59fc64eef GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJ$LxwdMEu2p;W zpKi~SH|v@A8(Z$T{rPV1wR_p?i+`+*k5IjR_tN6qk=>sX)pu&P&8w6Cl<>d6`Nby3 zxvYAe?{!Wv-c$QBV}4Ap-@_8V52X(?TJ80|NPJdaC_Pi`aZYP}mz8lh`}GB@5Bam( z9&O*{8xd{zw%w_^PexuaPeZlbfup*pLAr!ned>m|$c*sG&sEGdx!3aj*7y=VYkgVn zN4u+Q{kJ_^drg;fkFx%@gWQU5&evN1)#kY|^M6##TL0JQ@0%%y@0Qwol|kRV-t@rf z59_2Jh*nIKkNLzu?>W1EPdr!|*6FXh@5eMpzb-4P{J-Yr!Q$Sd_;YYKDx97Vy z$8(go_wqceOx?I}-fG6R7OSr6cv#m2ZG4dWK+7!Z;WSl=*-C*c{s|xA$q5p>msJ!X zvEoFP;x5fQ{_oG)aiq!~nw+#T`3skNd(Gl~S90g+f0NNS;k(}UC)IZ)t5(I))h&#{ z?Y*+XPT?CZ*M0ppJMP!%{}Y^#uG{%d`~UP!9~>*PO3v|B7yt6%U1+HOW6_1gDei~M zsvpjJxA;T-FV@c%@)h$1{<&=ykSc0C&mDeX&z{J68H+O$rkEd!3k{fEu;_*VjQ1}k zpM^00*%S3(`ixlK57}3i=c#D_2wipe=E1uOMRgw%4$hhIUuOE9!gCe-zrKEH{IvJn zd_(ICyMbv@wZt`|BqgyV)hf9t6-Y4{85mmV8kp%CnuZvdTbUSJ85?RF7+4t?tgTtb ej-nwqKP5A*61RpsigF+u7(8A5T-G@yGywoweR(MW literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AE%B3-seal.svg.png b/server/routers/bushou/images/60px-%E6%AE%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7bbc367df6e5d29341656ecc7e600e344b743c GIT binary patch literal 1146 zcmV-=1cm#FP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AF%8B-seal.svg.png b/server/routers/bushou/images/60px-%E6%AF%8B-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a603f02933b1f6b65d0db1efabe976fa35f78ec3 GIT binary patch literal 1355 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AF%94-oracle.svg.png b/server/routers/bushou/images/60px-%E6%AF%94-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..16acf68f6336e11e1277fc491912669e5200d69d GIT binary patch literal 956 zcmV;t14I0YP)h`&?f~I6jX0Pz4jbY zz4R1B4^a;a6+}f*J!ByC)CWOOkQN0+B^9N8sDT=VQI?zA!@bL#ot>E#cka%z+#d{c z_MS8M{?DA*xifbcEEbE!VzF2(7E8Vn1InTnkt$Vom~ z1#NGE$>NxU!go1C|7(C@pxf0)WXQSKYl{P`M0_*qDJ<#V7SQ)P;3qH!YzbNSglHgh zb;1saa6@QKNgddT5m#zceYhNEQ&xG)aasfy9?hLVIsGE=1Wq$`%#R}Bi zoP1haX+(7vECohU0zUwo0%F(VB-jTW(8na(ZU8sM=i|myXGsf=$lC#Naw@u{+iHL( zq*weOFw2nMtf>b^P(lX-;!fZsbW60)0lt!&@B<@CL*zP+*o{6hTSZK_%eS1=x%sde znc=YuN9?_TxYsxjBkonr)u>AMlgF2Hk{LL2ZycE76L*f_`L_gv%e!H|k_`b}+MWa~ z@ripU>;?~i95o#oA?$b14qf4~0G3C+3&1YkXpi5q82agwIDgD&Yat>l}=)!qY<@KO-g<&OYhAUxoh&dzyjq12K_skKX%L zxLnw!2F4G>M8ds#KhwuAA4tXwj30=Jgum;3rH@~}=odu7!=mqU4}ZZX4BpSvvTfAB z_<=-`u)H((8yG(j(+PVmzs?nQhlk%NrW5w+e}UeAL@n#)6q9#pQ0r3e@tU;Vj#?JV zDJBw@Yg%!aZw1c$+(m&F|AHIA zg$Uxpjkr<7h2U0PiYSN$QP}u&jSkq-{+bMISwyV4Dt`M zGVFf;zQp$h!vCmMS~x?G0vB)rzD70{Uzc+~27G6L4&{RHX)yL$cnlZZ31B!s|B#&j zHQ@WUTr-#ZJWEmVfrjF)jaPBOJtgO-<@~JSHw2uOYhKLHk5kP0!6t%^!DqOoW3!we z!v+19;WtAule@)sTFyV3I^f~zOM)07Ya0Ph0_VlH1kC4r)bQOQd=~gYzMmF89uc33 z7{PnVmL$m9Kp%7Yam27~75=Sf`(5}=^+F3HM({r2zZmv~{5WF#&dtJq^K5g%H`WU+ zj2OXp2|r`l7xUu~y`?!M{JdxTTX?Gk?-g#%#EZgj@N6r>uXr{U+^Uk^CA?$U%LK0m zI222|Rf2UHS~2Vk!msyinpI!$1>vnK=}F<1;D3bsg0*ZXJevw`Rfg9Iw*+4n?w7O* z-r(7E5^Gh4=Y?B;M+N&CE*qzs;ah6NRf<%C{j!Ae3~Rf2t6}So>n#+QuxO+b>%+TEhF!<;9iB~Z5pVA^u2Q7RuqCLfr1jCy zF32A9^74WZx7{M2XTg|~$Tt`(^($i$iQx}UAC$(f*juEVDrIlfDOV4`XM$a~jyN@2G zcQ)2>e0QAyEyM`^Q}{Uc6GmNYw|KT?%9o~-!td=nx&UG`tT*pgmQ|217>eU~w`coG zcq;^VD9+TIjcatKwgl@q_Lm( zuu5=MhJ8Uxz&G+eNm<7V)+T?-u&ZGIz88vPcqhHP6v@YNO2Jhb_Ge)zW_TUF4M?j6 zTN&0Ji8~GZ&)#>xtiKSRWOKaf4A09o+vr`Z&r$5y{E6#0u3MV~w$}^OAy%-ivzB0R zyMx2@maN*LSMV~~9&{JcWt~#6Rnh=o3%ANz?bgzBM0j*r#|qX-sVc)@3)Z*uEWw`& zPu6k8;4)c@c@_H^@&mY67~VAO4~u;ndjtIpOVss xBWoj<37714vhshr=5MqP>!~i+DI#|h{{^`{O}6qrNech~002ovPDHLkV1hpvi`D=D literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AF%94-silk.svg.png b/server/routers/bushou/images/60px-%E6%AF%94-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ef4be2e0db28fae27272dc0cc2bc8f5ee23222 GIT binary patch literal 1309 zcmV+&1>*XNP)qAIs^YP+7;I<27U!D2S$K{zzIX2ZU-&^_5+EbZWM1K z&LqGvu+~Vo0~o964gzNz=|(dj_=c&V$ALQybbC{p32+3s)IisSKBjsjL5B5)NX;u~ z3^)OP2hNPtHRB-~o%H>`i-7lgZ07@O6k6SZbAKrGGFSxs z3o^7_Zc=E?2%P&tp_joT;5^m?vkG1l8n!=2_%exAz&@Qhz#|2976i^MET~l)XW)O8 z)Z1&oq9(PT59mB*>U9MDgab~13h*efWE!mxr_p%>xRUT}9;8isVTw(_Q%(Nv1h5;} z3A}}@w(876Ccsmh(5WK1{2?Uq0XSYe{s?%75?5NgnZAd8Z4?*+29Tlru~Ns^HkTD_ z57J9kj#{<%@*K`f<(lOhU}mI7h(Tlobpp$PbAXkEUthxndN?-VO&;4A@Er0?El0Ah zUd7+q1zd;!SzHX9hunm5BnvwVd{z6IOU$Ho3Gk`Mek<^TW9vrNv~!W(nTNb{F9U8S zyVW!btN^}`@XwrGWS^ZcD1H-P^5|^0bJK=3_$Q0I6^}UDO$B+RP8x@34CEdpkq4QX zw|ksS$flUha9fVnPQClZc?Nip{AykYQ{_!}w$)5x136kPQ%!{YnN~CD%tdxTT&)L8 zJT+n_@F!U(2bFpoJX#;byJ^b~vQ7rqrvci@W_5>S9kk9_-}Tt$EC0>}*@DOUXLmuaTkWqIGiEW9w9E0rmk`kbK%DR22;2s~Eb=$wHK|?ws)0 z#*|v_ru;GdH?(O^R=^`3TQj%?wCGK}G6Hs=*D8`9Yq;1s9#ZN|Vjb{8vNhrQ;$DNh zm9$r>Gl_M;XL)SeVb}&-<=FNpwI;C+c!kIIxl*eSsVvmlhyOKI2tusHfNuRe1KGk!kngoxYAAQo_>Ug-Hi~3O8m_Nt97L)R zEroC2I05d6(0mmMwrE|dbXJoM^f+)!r0zO&_2tr8hEy4jA`63UG$#4~(@OjcIAI7k TMBugt00000NkvXXu0mjfRw`n* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%AF%9B-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%AF%9B-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d25e912e91d7c2a4c5114056aa9bc3486a0ab726 GIT binary patch literal 1212 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%8F-silk.svg.png b/server/routers/bushou/images/60px-%E6%B0%8F-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c8988a4871af9708ed306033464e7095e236ad23 GIT binary patch literal 1205 zcmV;m1WNmfP)2FJ&R6m0ckv3kfO=G%BQrAd%|H zhrsBqf+&dygC3%X9wO+awCHA0AzDVIMG$5R6=r5Nmea+_tSobSSaWF4IcuNGzMYi$ z!k;;;*?ax}zq9xLueJVbABGv`xT2@v{#Ik*;OBn)h@bF1zQ%5Rh9d?0?HaT36$YBv z?|2Ij3PQsh=i`|KF702E& zWAK{%Vh`b>ievAX@pwmmvESl?ievAX6Y;wIV!y=PievAXQCKg(*rzeE;@C6sgnUBx zV_D@;8C8sza2NJO{x?M!t1nGCce7Cc`cNqO zz*Nji*fjisU0A1rI@kvBD|ASEWtmgZo6<+p4hq6rJqkq^9EWgYisOB_xPyN3j@wCF zkyBGDJ@`1{a1YMvpr1wPi}aJ#b|~p8UmtPSCp^=w=)o025ijq!9kUAy(AU7$Iwyy5 zd5d%A3Q4G0b}qtJ6v~1jpBSJ#jg|R|@Sk&bB^E3KM zWsRZV=*y8~X5cX)Tj#xE_ec6)fW0ZlZ^*4M!3aZ#kza+0M3P&DVWg;A^s1CtW(j*z z^~b-LS7eg;b)7#LIc7&n;8|@!lX#X#j^CI=Ujz3hI{rT70CWffN=nY0!sKEF5^Xg!;7Hf|Q~h?#@!2ZY44U6?lROPn)Cm}bUq-w7?^ zTY-0RUc!GNj52h3x1^|!2f0N23g6Vmxs!w$+d2iVw9ZWgaYXU;rV--F?zV#cv=sxjtQ7i%thuH{A4@f6>3?)-*RWq0=gKUu zos7RVif*;^EQL}Q))6*p6daqgA2+PjC^+_PA2*B@UrgN4&7jKWQH_E>72XvogC1en zom5i)EtxJXKkG%W_1`d=myx(mc-f{l0`(TucP3Vgub$QmyB1lQgNN{4r0+L!^qZS; z_#zV2fUw9|t^FGK6d@UIN$GDu7!K!C^7cgw=Hq=~hcb=Ng@VF1;fpvZEL~^f99$_Z zZCmNM8xQ9Tw-|0$PQkurN5w0nU1gOp#VlHEpY|#$U170s%N8N@03H#hvj1x)2rr87 zk?q#qhC8%)t)iPrD~%o@p)D1*Ugijsl8M4N{ikp@^a?*5**s|bs}FUUVY<%0_hu9Z Teo$}c00000NkvXXu0mjf4*o+) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%94-bigseal.svg.png b/server/routers/bushou/images/60px-%E6%B0%94-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d68921da7173a64b96de4f709d7e0fff6b7a9485 GIT binary patch literal 998 zcmV^9Hz7zhge8ilmjc zGo3NR@$jF+o;~{mHY5x5c6xIEZIO zVjC(};2wOZSa<{9;&EJpqx<7#^^D+3yo_J87Jmru;z4Y}s$MwOi~l%BMD#LTiisA# zoxvw~A0Oaj9PWXSrFkAZ@glY=AE9yFGJoG5tw+E?yeb~nK=6~r4!(}fVm_B)1Q+8e z?dSeCxVb{#leofvRaXAmk2i3W@{u2zxA`WfTiAWBI``8!5l`TEt)nxI4@Gv~jL{Ny zPr}1EP+)I;l>$;(j%)CW_Tn3u!>6JsxfaK@vAY)UW$xXJW4ofD14cw9z5_e(x#CK! zdClS-Y*D;6FB4PaeghKSGOWf%JR+j|w_@?X;%ThwkDIO8geP$uj!C%x6x=7)+9KhH z#gHF};d`E#hfU}9h;_IVd)pN!sNFcd1KX9bRdG~y;%YJHQW(WH{E)NzR)_v}%zEvU z(2sZs=O@}C^)ut=x-(5E-I^b%TGf@>jm716Z+z5g{%=v#aI4ccys;zQbg`f zoU1n*n18AA&rZelqL8>s`(h%?A0kul!bf7aG*zKr3+UFEMtqPM6KCFETbTGB=%-V?V3nx7n}Vmr+m4~;1`DHncYodKJ}bouXH)R@R70sX zZ?Bma=h;oxrW&e?V4^;6GL~wjPJ;Jl+GWnf3aOLenM^zRRcxIEXWu{^5fQG0Ite~h zg^@Z5{wvcyKGjH_1kYvK$$r;K@MNaFI@L&>1ZP>EdSjggAISB~9w9BDPJ;8B{-aWi z)JgDUuAh{t>m+zC*H7}jPJ;6vwHW*FPe%bapKs`gIt-@6K>z>%07*qoM6N<$f-Upl?f?J) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%94-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E6%B0%94-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..90ae32b9ffb5bab5c5cb70b43e39363941d2ea72 GIT binary patch literal 1098 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k64+6xGfZ)I?iNZU=H$haSVw#{C37^f8jupcKa#i%n~&Vo~r6zVpmOIC|$~F zSeSYz)8L|uaJb4pR=2x5F6=P4C?V#cbaBT--b7}p(#F8Ui-U4ld04xeG#0R~Rk%=i zkttZ?@R=<$lyI zaBE7ix8BMk&bE<>sZ*Ns*2b)ManrLs(-JNRy+3|zR+;LJ9any@)BW)vZEc05%}P~^ ziGRKSYU&=Gd8A`cl=BCKD=u`*SU3@mldj%(tg=Ui{5JHmcQYFW>T8nPGBXI7;%^VTF3J%f`Le|SvDqIS)k6-g%&+d683R=@nz$#?Kf1WJ5((pWU}q zZ@@WkH&qo&A+(F%XrJNN*E>` zXh`hsT0PM?==!3VrNIrYOg=LVPkBsYne!@4##!yy(lidwiPtX6^xj$KYiGg6eDsFK zpp#JBj)e38f`vZnB3QA@AIK=*@a)mRS!(g+%QN!?35QVy;h>~L=4~DYYCet zs2b+CS%f1#;hL^X?y}{QLEDd4tr1B&+Ta^#^nB60Sx2)xcz9`}-`)PlBKD$f3%-esdlvnoa2WvA*FA^8`liBgX)jDO~ zf=S9LlMnIj>3N*kz<8%-S-ETJp0#V2{I79Z*6g5i?gKExsg}4#l%ynUftDnm{ Hr-UW|Png9= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%94-bronze.svg.png b/server/routers/bushou/images/60px-%E6%B0%94-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c29c3f024c69f3ea7c9994e538ea7f2b76c4ed GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k64+6`83TR{FemEYkRslhD02GJHtLB*ioio|B*21`_;Ajt?BWrE^4S|wdsj= zm0t98WKo~~=+Tq;2T#7^dvxdEQiVLP!hn*Oj}%_q3D~+!<3++o&P)%f%SR%9%Lrv0 zoOS1Etn@YhwtEJ5Ntl`Ot3Xf*XW=dx^o5v*jr$5SOJktAR=Ibvf zyV*5Z!hY90U9+cZP9^IrF3+DYSv-$N8Gmp>xG)w=}qtV5?WE9$*MVN)TXV>ZI z=;Y-1e9Mi_>nonp)Nwocfnmq(J-b^XpPCw9DV=jI!(`SvfrBre>1}R2EPPIQkz3=` zXH)Ng+T)a%F4m;k_;jB~+wwch;+OttK2nz~82n~&Vx!G#p{YJao^vb0R@KLpKB}&n zBJlgwk<~qhu8{#TfwtRp^FFM5`(Ra3PCC;`iSIMhlcO_xr_TwLboi%sDl>@ZaiYLN zmx-*G_AFiDyvJ?v#XtTh^n}trUpcJU;;CP4*kJV9VX9H&v?F2f!XC->70qEWYu&~p;%OBsyQFU(dCd6!r{ss0*E9bxUJYes&$hEGPyHUVU$l3D^^Hxjv7uL< zoi5Uidp2!R*!$`FMP2PRTvu*Mo&Wz=|7u>9MUT-b4s}b#z~ArpJYwCvHf>7<1Lx#~ z8HbN}J`g;5@Yuq0`V3w=lhuzaWnOwxl5)@W596=tkB>+#`QHmnNvb8T5hW>!C8<`) zMX5lF!N|bSLf61l*T5*m(9+7##LC1_+rYrez@Y1rLk)_C-29Zxv`X9>e)s=40Mx+X M>FVdQ&MBb@0JaoXJpcdz literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%94-oracle.svg.png b/server/routers/bushou/images/60px-%E6%B0%94-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d5dfd3179f1330f5ed281e63a901e2765a219933 GIT binary patch literal 717 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k64)mEezL*D1|UEFkba^aSVw#{Pu=_wy>kb@sIwuO>%{Qt4m}^tqicOc(d?< zv<8RQ#nlh4&VF!J{K3V|;kDfNTs}Tp`(o)=1&z2XO=}mXecsNS8^o`dDYVFB*0)DB z>}74WY0q!YoO|=WjkAIP2aDf{6AfRF&+YbJoVHshSnc<=`2`KLPL!>GyoNpOjKbxw z0Z~SJzO$s9)VJ>~ivRfISkv~tb1GNYmhC@1WA;328`W}M>ua`!*PZ_7&)NEHT6PdK zf0DOKkVxs0MXS1+nwp+@s)e6gwK_~^*5oo3C&7u+JX}LVBRze0zFi{|mI-t~RgF(j z6q|3V?$XPpHo0dvX-|7{raW?1+1prfRh3)BDQ za_YD0pBG*hD%=otDeL-;?c&p=UTvAWYfa~_wrB4T&7RnI;Mbx(uHAY^uD_XJ6&|+X z@nn9pJz=j+Y(IVNQF_ugJ?~FfPhzZZ?4daqga2(w*4zDf=G=+%ihEQoD?g|C%$jVJ z8g|O%c%jRol5jhY>U}ppT9n-~W`c?he zE3AQWu3F+6QIe8al4_M)lnSI6j0_AdbPY^(4U9qz&8bkE>_mP5v+k;{7pe#Ec(3~UoLcetPmIc)8C%t_c3gxs=MdWdePq8BPA0h zd``amd?6sGOkC*3$tMrqn|*HkX=I##Z;$z&D^0=cy(esTpo@=TpQZv2m_IFPE^Dm-b?$AuUas1_h>X!Rj zU&^HfysEA)Wy}|n3)ynzW_FOpQbX1q&Kg;3lm3P{TCCmo?Sa+yR^ia*la93!#)w50kr;`hMjs3nxCswcO{@NvH zFFE^I{Pu_S*YxIQZjim@uvqW!vDSiR(=-E3=YBrTy;iJNt;ITQIa_?-td9n3KDGyZ zaE$t};KRwDePV|XCCg?Ot*ie!!|1!@)wlY-dQtQE{-}$d``mZlcJrzJm)ojVe^~K| zdyg;2>)^)eRVp%TGOV>?e78T-b^38|b?UULzh2XpIm-tK<-J^&P_6xT=`9;sqw~wy zrmj9)sc5sY_@8#S-1n9bwX14Y@0w<<*|JYY^y>94uYD&zTMHdqrPjn5n(tvTX?0oM ztmS3<)ZUz9yr&p*jxjIHBr}rl%Y+SPu}T54`ycO>c@SM;F22K-{fAm{XWUk1`xHIJ zC1nrx&z#S{;!{WLr+yu+j+^yvS3boTg*>rHem6T{&f5oVQce02--EdQ&oc%s-nF*M zY*q;{EvlBdMwFx^mZVxG7o`Fz1|tJQ3taFVdQ&MBb@0ALYu_5c6? literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%94-silk.svg.png b/server/routers/bushou/images/60px-%E6%B0%94-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..956123343732e3ea87991a13626c379be3f46362 GIT binary patch literal 1589 zcmV-52Fm$~P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1p*Wk1c)5j^#A|`JxN4CR9M69*lm!ORT&5H-@dqu z3#5iiFoom}frJJQI%+^LqhnYJmZ{a$s+2Uo^hIWBopC6gYAg$7Qj6J~VH#>`!kP37 z0+OT%Hh>j7=vbh(icq{RBgnEZS0DCp@AK?FPb+(``^oEkx$o<|{LgirbFMc&pkbn_ zLCreTYp(Q;e~IDV@a;l)*4e`iT;Vw({9*VHX{HduydrL`DW)4WG!W;O;XfmUKZ0tr zEVWU)5Dxode%M+^tT(WM|RV&dUe9SO{G%E8v~uTWLF?#cWgUDS+&@O$eLv zxsTU{@MsB5JeUD>6~OLrxoWLKm^pah9`kV2m?G}^zUevLMenz#by%z#PY5yaDOZ>6 zX#}IS*r-*7dK1iaPM=Zx{6&X3CaSi=y`DA>)DK?by~2qSl7;YY_VqI`##4Pp{Cuzy zpJyB{HO5!WGbsfOCvCUI2Cv$c#;pPeEil84E>&+_J}ceh^gfaPMwq5SgWB}}lhUlfeQ{E>L9O5a8}~mrs~d7WhYl1wO+eq1$bJ_;ZsN4&nZyo_Y%{^K!|)(>UV} zPq|rz73TPz*HxP4Q?7GSHX=M}r8>0xxbuBHI4nFi(DIdK zd){=Dwi5hSOUzEjfJO!W_p%_sF_zs=rqn|1CtPbDVWBkTm1xYaEdnwZU6 zmDgGqx{6InHzR$+hRj0uf{ixK0(VrgVN{&A}uSY&b3xx3H%x*uH)Vi+hj9ntrQVyzdP&nca z^DOa3f^9dW?2HF>I&&zj*s>DW=q+FPKNs?r{LiT;ZQD^Yd)lnY^F?`9gGnZ7P~)Wi zTC8y*Z&KPDO}?GN_?`>4T$QmJHQQO@;k{;bUUiSM$itTUk{VUk7P*CTFTKsWay5gB zL2ly$EoE##tIf9AWuI1i^B9o+G}iTQD7)oadpw;S$dJ*w7JEi#Kb5}fKA$w-n;GXt zclz*9K#tOAZBc64+n&gzKg;6<{9_*NlMb8~Rl3S=yweZvzXjhb3hHH7SYMRZ462eg z)dL0UJJq&nGAUW`Q|4fOFvK)JE#HVre-k1lFqhe#$-Q!@i;VT& zN+$9GG^QZ;;w<7?o;|X+eSOeosYFF`3+@qt{bgMhURdY(C9tU$Rur-CNM*r5bhno z&V5dkUk*O}8IcN#2V9dfi~k7WS3`GwO1sR}LfD*4!^gA=U6#JzrSQcQySqVO+ynqen7)Y{{xxI&f(d(*7g7Z03~!qSaf7zbY(hYa%Ew3WdJfT zF*q$SH7zhQR5CC+F*!OgG%GMLIxsL&s>PxJ001R)MObuXVRU6WZEs|0W_bWIFflkS nFf}bOGE_1!Ix#sqFf=PLFgh?WBlmqC00000NkvXXu0mjfmv-v% literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%94-slip.svg.png b/server/routers/bushou/images/60px-%E6%B0%94-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5a043e8e0cd82b0591b7fbff3c48747109c166ea GIT binary patch literal 1190 zcmV;X1X=ruP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1pyX138UIUBLDycu1Q2eR9M69*h_3wbri?(PivtR z#CB*01&eJ65fu^?k$?#cABk=VF$fD6tW1nCJ`-?ZBC)zq5~3@0VPeDtV_XPvp&N(_ z1i?fsg-{3-6M_O#XQnf4r_;x{U}#!A|jWU=*5nNlTbBn#`(g(>88~UAhY2MpTdf zI!hg@G=SM^$NZzmuzu$p@|nx!4JdB^n7LN&8C%N1F4h?;HZNgKY3wRjLdKr3tn?n= zlmQtTImyCxR`1lJx<;>=W3Dgz z(Fy0Aby-Rx%G`ZQx4gVzA6r%=-6F6?JMFSEYDo-V*=M*7G1RLz*PtxYhV(ltR|$BI z`EJ)Fu2F2%=ZT4p(X=4T+3h9i^1!!h(W=E=TC})RTwO(L(q=m~lWxIMtF5ryeVRkv zio9QgOTz=U`c@)j?Yiz~JoC>zuJNc%Hi(x!_CY;TQqt1WdL*R{N*IwcBrT^GgEEEt zuL;b!sIIZy^BMyl-tUr2uJ}W@q@+aQGc7G!c{**iV_X$I>X_3yopv>YfztFgYtQFgh?WCGx#z0000bbVXQn zWMOn=I&E)cX=Zr381T z-}&9|cg}g|+;ayU4u`|xa5x+ehvOfl0vMIHh$Ptq3;^TP5>T1&{px@bz|4g2J4Dik z$H+J?;rk8|*YGf4J5U?3U$u-iG4E?kT*F&|cHkwjDnh@JGFE8jPXR6i#}QwJ)K~)K zCSVMVD$8WBc4)7?O(NbX(24evzF znECc(+GPc53g&<#Me^=Z+VC8pAN@5URZgJ{_Y%D2l`=dHF{(LWUzs#oWi0RoWx6gP z$1{8=;Mxv(?K%4UbYyHkTJ|9puu=?{adg170U2)~jF$!5&(hw=^aAe!u9rF*cF7nt zGpu3TaJ`J)Y8-{9h*{Etc%&=~HVscgZAaH)^v@!`<5lQAiN(UE;Rav(ddwOfGPVNK z&Ey1Q)9_LmyMZ?$x!EGWzlhj}tAN9HWaVSi@JbnPY2~C zW&5UKt;V>k$HTz-_}?oxU2)z*@t4W#KWx?6Z)(PMNniByS!0XJKpD z7~xq!lWd1g=btkE2+8X}EPeoUQR{;-HVn7=+F{$#cg>o=ffK&Z2O}veBh|o1#MB$4 z_&M0aJ3Q>tsGTAIFwz`frowcDH=)z1Qxqf5-kWQ6O1MY25zTrw3Czzg7kY*!*){}^Fnc#W@p4sj&ZMR)20ob|O^ zQD^GJ*$lh~j-vn0_zq%vE{|}Z4DcB>wO2>zn>tqzqQl-_7t)3@e9}Zf(*HgDBx7I1 zer>=j*`8`5pvt6k40>ez5V2oBun<^=Sn2;8nt)Adi*Ps`4u`|xa5yaR2T^aYeSDM^ QhX4Qo07*qoM6N<$g7T24fdBvi literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%B4-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E6%B0%B4-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..936d2eb9de6ea70fc59ce0de2ae75ab3cf6cb5bc GIT binary patch literal 877 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k61)REi^wR8|wn)OFdm2Ln02pz2UziG*smH$Mauj+8y;!metU3yE1t~M~4TG zv$hh?A~s14E!PJM?xHMwU2KgWjSnw0K5!8ba=P#$@yDS+*Jh)R~#i+5l9`+4v0@^iP+*B{lr%W~`KlBcyZUBjj^ycf2Q2svHzpsV`d z?dj<}jB>||erNADOuN#y?V9DSYSZ(qg6qE;#dkb@n~?tFsv`HQ7qNoDw!77jyevB) zJ2~l)%!UK+mC8cjzZ09B8@bp0NS{`f`;n!mnpN#SmPJ2kcZt~`aK>CUDZ10>SJaW! zpQSo_sHL+2lYFD$ZXR}wcf2T!&ly#Wo z-i;1nhD!aJ+0l9FM&&<&k7=17e!b$lfBVgq8!`S(`Ezy|KIr$7-n+!;*TG8< zbd~&Go4nX z)pdC5nf9do&eeYwe~GMhh>?B6ab?Y%zJxQI;{MpW<>V&!a`#?YbX93<=QZWSvRwas zpZ~dI9%rd|Zr0!JmLA;47kp0I^zBP++>vK-e>UXZwQ2OC7#SE^=o*;l8X1Hb8Csc|S(zAW o8yHv_7|eO3(21fUH$NpatrE9}xBF+90yQvry85}Sb4q9e0DvioJOBUy literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%B4-bronze.svg.png b/server/routers/bushou/images/60px-%E6%B0%B4-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ab959fa638cd13ca341d9ef315275463398b14 GIT binary patch literal 1004 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k61)R*;pIvTs8yczj(ShhD02GJHyvQG*IMt{jAm zg7`%xjgAE|tfE)cGK53A5BR!XvD4t$;>sN>GD%*yspCMGR}iQ2yfmdutyk6a#NO|D zd6wP6E}Ca4p(e;$T_Y^Z_NDQ z$l|yo&F+~Qi{e4W%MWyYlsN1)413pIeVJ!E_oZuz=C7ugGrk-5D)a=s+ELta_u(S> ztTW$ZtD1rno6H5=1(rpmU#=E-^oC3LuSfE}xyznraoua-v|IH+KQn4&)*(6j{u4RD zHtLKHoUYThndJU#Ws`ffcIx{nzLDWm4>t4*Jf7qIHemmupkr%Rs~&8~)_A5jUFMbb zSJr8tYRe{@8Smg}kY2NC<;sX{cS4^ zW3RVn-m3n(zKOAXWqeNXW2=QP1-COBczGKn#H}GS%25QI?PW1M1ic5pTV7nns*P*J(Dib@|EwaSd&GZy7r4@`+McW zgVrf=2+y=Ld6ewaq_xPWI&ZUv<;;VBMLE}>27fP>PMhp9GJkim`A=rG z8T;h(jxB}Xtl}(ZKDL^@%lGQ>gAL0CS{%i!lEhll&2-}r>Nn4P#rW2&tm?_;3xP|M z*PTn@dl2&MTGfO;@V?>Jnn$oraYlk+Tww0FDzG{#r2I+@=tb9`Rzg2Vp# zvL9LN7T&wZQxg5Z$!^KY$!{L7Nj`b@;4ZI=q47P}Wj9W1;)mqFLd)KYJ2;KkZ0$ydTIWiK?J=^Add;zga- znMK+inpF*J(=KLbgqP@_KC@`Eg`4nUp28WGzqh|J&w2iZ=c#P{Hei-eEpd$~Nl7e8 zwMs5Z1yT$~28I^81}3^j1|dd)w{r7< P8W=oX{an^LB{Ts5d0et{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%B4-oracle.svg.png b/server/routers/bushou/images/60px-%E6%B0%B4-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f275afc2c0d683b4316b30aee629685682f4031d GIT binary patch literal 1011 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJwnn_zkA%Jd*;-|Mqlo42d}W_J((cY^ubukMlV_rFu+r*DegpnG&SC^issf zpd&#?yt}8j>g`&)Ac7@aDen&FE4P@H)|!h}Xt3%Bh>DnsE(y%M8sxQm!^)*1TW@4M zGJLj2Z_Px2pr{MLM5SS{vS z-kZ`_hdy_2zIUHj=UmnN-2YYgMbGVAa`%Sst3#KsI=$PtcfnrOp2$GevewOU=QFc? zInQtXbfd3QcK4Uxy31|XIN$ZYn)k)y;hQpR)i~cB)2FfT zi)43`-m=@^>EovFMTdW#X3A$#m)dgM@X_@n?{dEQL_Wyodcc=msPpjcG3RSjnB@-4 zFqV886l*c{L)pU1%}*PqKdPP>xNP#1h(pzkH=_75}iHkGfo{T#aT*}?DXR;!*qnBMeV z>vfJcx6NJKe-mdX6i-~e|8`nJ{=w?hWjAvrZEW|{-dkYHaL?1H_vPk&3Liut9PYW4 z&0bfq5K63^o|js2fSaqZ%>70QP5 z&NsQA{@Lemb$tTMcaDd@mVCEXyc5g!W5agopr004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_uWr7mv(akpKV#!bwCyR9M69*iVR7RT#(dk29M8 zn@q=?!c0pmLc>7Gz%qo04006(Wf-Nq2&6@YwU8iMv}q9vDHTME0?EMakEUXQAqW;F zYQu~+n2L`7(fRYVaMF9v9r4xo47Kq0uFmfs?)N>gLyk2N86FLpbi(VycO1xdddxiE4A(Hi7w>LWdslFtGSAW-G#qX)Lu-krLL|W z+>0|M=kI=I@J@_$M^12e->5IC9TSsYyPd*}oZz#Sdb#c5>Mq7*7w*pqK2ibyiD{*( z^TOFeX~(J?e7JArUeY!+n3?qZ0S{gIy|sfoNG8o59hjB$+pJsDm4jV7cpt_lU!|>h zJn47BFO)7Q>ICoYD~F2OhtkxNi&J<{R^V;hn@AVxO?KauIb>n4Sx~rk^bTdsv;9xNq8Ax?-(M3x)2=`M1$d zVaHY8r(Bgr=oI}dlsS5YMFvnG2%lZ%@~th|uQOk=9rblT{>?gs*9LOT!!L7-HCyXI z9MZ3=Zv6u|&m{eObZ3bG001R)MObuXVRU6WV{&C-bY%cCFflkSFg7hPH&ie;Ix{mm zGBYbMFgh?W-*ik90000bbVXQnWMOn=I&E)cX=Zr=|uK)l507*qoM6N<$f?QxIN&o-= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%B4-silk.svg.png b/server/routers/bushou/images/60px-%E6%B0%B4-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3af8d0e827219b57fbe6d56df60156e11f96d7aa GIT binary patch literal 1141 zcmV-*1d98KP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1QZr8BNcPt`~Uz0eMv+?R9M69nO%rgRTzdJXVf%J z9koD3v#imnB#R+L)In4VCdZ&)5Q(`E(J-6T!0bl7u(|L;1;yVqD)XjtL=BZR${!HP zzfp_yLW~@Qa(;9i^~}ucg?ewitKZViLt?*xq)aTALv3A z&4#{7X>9Z%gm}}ohOpbvbqtLQ{uCi*<$Fualy~gf)L+$!@tMSZ^uP{XP8Q- z^r8kKPLmfC`~o)-BIQ|05jPNGT1Zfr`;^b^nrj*4v;_$9XS*Gt9kqvrX-W?+8u|!b zP0Qm~gqRTyycw~AP6=%sDMPPu+VfmTT;z#R;CB(?%d|oK%=uQi)8-;XMJRAL>JXxu zZl0RQUIRDqqSFo{R)ibu^@cdWQ=VGDS<_FrpHxUA)5C#_Xf?z!`g{6NYE56~J<~yJ zo4cdu80hK6Tr+)I9Mc#`gF~NZu(zj#CWL6DFb=xHfyJ4`fKD{mIz{(5=ye`?Lt@Xu zjB3CTu*rc_^z-&?H}&6G?V%I%-DH~J&Ex-a$l92_sSgz_q0)IYlp3~;qTEK_<+({9 z_t#GbF3UCe4}|!e{A|AbFp=eM82FLaT!Y&HsBzmvC~bcZc^Gg#04;8N47>P?53(Ej z2dR??QRVgTYF39okr#2oG7-M>c!Q)ATuJqJ2H>z5j9b zEDiGuJK5}n{*tNhC)8@^XRn256L)jgZAK;Z-wb5FBrXfpm8)%S z*wwoQ|75skSc4EhgtCkRTRT;G+DwFKNsI&Zp%(FTIJX+jZA2@RJ<~mk5Qo!NS+B5) zNg<8$6NI?J05A48Wq6(=gisCnQg1)UUAX=>`pK8v>gbsId)%qm1~F;#ZKwZ zWrUa-8(l^#;;h$uC((kq!ZWeaGe{*;HY`Gj?eW9jaNeP3V%mL=5VOd6_2dkqIjx7~ zqzb7={7#SDqf2N;Y@-9}Et=x{Smqi}0}UbnNO+JLf5^Steq0?}cL4GiiLaA!DP8~o z03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SG%YePR5CI;G&edkH7hVMIxsNt?$xsZ001R) zMObuXVRU6WZEs|0W_bWIFflkSFf=VPFjO)!Iy5&rGc_wPFgh?WfU|8600000NkvXX Hu0mjfs6Yj4 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E6%B0%B4-slip.svg.png b/server/routers/bushou/images/60px-%E6%B0%B4-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..55a0669fb05a4150813b4b6af1242ffb99caad7f GIT binary patch literal 1240 zcmV;}1Sk86P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1QZoGD1~GLy8r+K;7LS5R9M69nOkTTR}_Z7XiU6S zQ`D+e8oX3WZBc|;(N?4o6{(j8QPgUL`k*EHQtuiB6%nhI`cT9hqM%X*C89>f+k+a6 z#X^+Q2-*~*2{9@sM!e#@7asVuh8Of{30Rv5zO(6N-R1COToGTh;x!n~#Y5Y}dcSXe)$ycy zG+E+NVj&(XG+FTweUjz@QHU@+8E81?;sX~AxEY>x%;Z;nTiWjjOvDDQZYb=}kPOp3Af z&izg6x_}CPrfp{Nen6x3%sU)worrjqSYCfR9%b~)B;qN7xm=SrVk7R?IhwDz!SwXR zGXj=dX=pUfF-|#}t{h??ol+&b8!xRSCCPW})gsj^6qG?c7k-9Y^bU`BD(x)&RjMMV z8laMuiuQ9#!fWKEz%x!0_9_v_aup|w(@M;Sv3kV$d>hz#4`;9?7?s#iNS&e|tP{_& zfEy@OK-&pTc1Z4O)bSy^_Z2@SPu-+=QY(_THpNuk?D*EwMR$DSIsC)$5U6@VyeVZx z++%q@qae(&j4IBvfZR~1CuwW7E0ZYUZz|c%pq6Zyje>Z4JROKE__=WqXOSax?cWCR zJj(gry6>Q@;}#L?GK3cxUNPS4E@Uk_+1j*iy%xq$?ML;ALVT{ZQ~iVALx0RH@2aEX zmn#~@y&Pdha~DqzcdV$6dD>x0#MeU_#Uuy$C^~VGQ|jKxHwtluGxDNkd&taaw4DOq zzy?ES046BJx1F)YqQFF0=}QHCUjSw*#Q!;CKNMZcHPOd}_L;Jm><++B3URF%{~b+^ zPhH4f=g4XSUgs5#RSNNA1!2ALYN9w@eaz#L7{;E>n^_Hh47Xl889czgK zvNcWXuuY}j>pC8{j9UcEb_HTi+OB1@GDuSpACwCxQtEM%%Rp3*yX=ji=J!7ugZf+o6OrJEOFE12{z!N7Eh1=wdIZ zmyC)$KD)Wy*#c{g&xrGHfu3F&Y+y1m%MKp0KhvJ#y}UE>KivTs<+Ike_W%F@C3Hnt zbYx+4WjbSWWnpw>05UK!I4v+VEiy1vGBG+eHaasoD=;uRFfgUaXZHXA03~!qSaf7z zbY(hiZ)9m^c>ppnF*q$SG%YePR5CF-H8wgkIV&(QIxsNQmETJM0000V=}AOERA_~R==?@$3x~#p{`k#HyUVE>-As)Jb9l!)|5O^e_ z@0Q>^pqgqUtq7tmqOWl!&xz=}hM0tB1pX)7MCez#JEHFzViG>CBE*jK7?1~=pO^N0~>+6fa`%vfTh3yk+RMM zDyXd%T_3{FD%~BxX(eL~g5}f)w$q|}Sn1kEWM4{e6zB^PYzXvGPvSd^t|r`T&}%~$ zDv91(p@I$Z&L0L2rQ}5c>@EgQO37c8v{yr@kNm6D?=I~5*aa6Td4EZJHH0GkgOd9V zdPg1Y>Hc5)g=0o2!n%54`ZoV{w5R+3tSmy;D45u_6><9gu7KX*c|@C#hiN zpiqSMBr{gh-aks7pQ}{>p$MO?;_epC7*NR_ngZp<00fW2giR)P1XgS5eiFu?r=UlYKm z$Pvslzy{>}Yc+78C#PIohY+$IvA8^SU&3>Mw=I56?IBlU8cUH$$Ygj5c#g&+o4}Va zz+B)JOALAKeaCn**lIEQ4RC{}y&{AYT!Z^5;>#u@jdI%`Isg3#JOw;Y`SW1c{V>4b zbZbXecgv6(_=0IW$!f0xY%Utm>A?5MQyTI;#H>Xx@GJQ_^B{6<;el#;pUfmO zc`ZgN8n)3M1~!pRWi3Y+a1-zbGV9vD)0_ixxj762vj_RnE+m-*o?aZcoVq~;_B}RQW;r?dodz|Tae2nu1>4S{&^#^Pc4fj z$i92XGlq3V9S%A=H~>5WTt#!%<{ikIdmH(cQr!yQsNHNZcpP{Kco3;P#6&Mro!pL` zFy_U#wy5!L;8o;m;a=nctfKx(U@OsqR7@TNK0xyJ78+D!{sR?GH2mA~_g?@2002ov JPDHLkV1g6_d6obG literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%81%AB-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E7%81%AB-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9aaa5a36e7f0cd1a131b9b7eca2acd5836b7d144 GIT binary patch literal 1484 zcmV;-1vC1IP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 qF*q$SG%YbWR5CLl|!`v literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%81%AB-oracle.svg.png b/server/routers/bushou/images/60px-%E7%81%AB-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9ec25d310e10be0b126e2cb72987861ebda333 GIT binary patch literal 1393 zcmV-%1&;cOP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1rY`!02CsXF#rGrc}YY;R9M69m|bjCMHI(>U8owd zl#rIMDzs3MRulmZMJq&2NJL{AAUp_0gNc@qpr%cX#-tBKiSfn6kQj|GBnqucHO98# zfeKix8b7uKMXEv5FAEjhZEXvsJ3cUbc4qJF?cKE37yG{td+yAc^S?85=A1JN)0oE8 zp^OLZhAd|P2ejAGOGhg47zddZ`g|3N1$JW$#m6BNKZQc^K;kt5z!0#7O`#HJ1F*s- zjsfsesKnQpO6=D`05(t%BJt()#1S@!NIa097|KH@E=U|*n|NJdGo{II4~UrlEp`zv zd6fc`CV5zl0KfMf9~6~JuvXGHvuAF(w1;5jyGX$N-(rd`AlEft#0 z&!hCScLDM*(Tq(=B5f+%qnmz{HDILfOJy0cfA5nT5cpcTKm;_cZ#N$f4hu zuR?KXLXUV$YyLtP3dJy4$?k^@Q@ef4?9n=%T+!0i#PLY8F~`Mj4eeT*pHwI}h{t^5 z*Y{edng-E-JFWJ8dX5UkCFatmWy2*`S<4q=jnhy=PX-4lLNr#vQdH?Jj9CgEVj&T*6r`>_pOHR7tEA0s*1~&ojkG@1Rh`St%>fXXqXwA1I;8vuP{E!cpCJ&?NrLL97_yana~Rp*U=edEL^zLXT(s zMOGR5i9K#IiGLU6ABkIoYbgeb^x>J(NZZ_6C@>3ag zj9CV~1@K(H_0WFhi~{h3?(a4m-<4r6TgrJn%Q3EMk9Os*S-i?68GVXJ%p_ppCvjN= z`(@~B&S1ZTeQfi&7nQM-opNH`=#|7`pvorzP7Sh*ZOcv+0?=nHZaA1D(QTZuByqP9 zx5Gg)3y&sCA2=t?w}eDo=qB!9SQN5DAzoq^x(VVqr=_+o3VFu8CNX?z1dcFpyGY$O z@kx<3hC+O|NIj|L%CJ6V9ga9VSrix{wZ@+DAfIXJW*(bz;(HAFtWAs*HB5Ms$sFqq zIqLnFA}Y(VZHkFo#qyAABP*o4-|)i8VII5qMCUh!;)FYpCvOOSJTxi78LZ<%iabC!=$_E=tJ;a=+o9H*H|^O}{GZYhsaLz6XH89V!) z9hh9z!desv=9^3tEs9*!D^^MPkKWL+k zC{cbT9=rq#dPs^{%p&F!A(se$Gfa#gy66bzHq-e3;a>%%-HMyd>y7{b03~!qSaf7z zbY(hYa%Ew3WdJfTF*q$SH7zkWR4_I=Gc-CdFe@-HIxsM|1K#BT001R)MObuXVRU6W zZEs|0W_bWIFflkSFf}bPH&ie-Ix{pnFfc1HFgh?W#$IMw00000NkvXXu0mjfch_ve literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%81%AB-seal.svg.png b/server/routers/bushou/images/60px-%E7%81%AB-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..663bb858cccaa08e1131834e6f9d54344136607b GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJ#ARjg)pwxTnCtz%1hF;usQf`0Y$@kB~%>X&?>H&8#KZiD!f{`*`K)^;+Rb~xHvci#RI$}ub`ExmcOPhdx{)ay$$F|vG8!`8lU@^v~r=&?*}tfA7A->W4*M^Le@;e4(Qug+7r6EOZ-rcb z&~Wm#vA{KMKGm=5U#<VInk}I@sawFeQlo@7k6}UR z#?WO9-0#0M9X?=?drDN#|Bmg7tgGDX*ltPqZOZX=xwhHqV-3ri(o5^-Hm=s;-kbmG zYTVI(lN5_0)^f)%*#z&pCipxr-NbxGgHnSNt+*c5k|T>ldXvetWWyI9N>K{lMB1uQR`@ zUVPzYlchERy3QQxlXSiUwSANNBk*wR%9?eGE_3Z$3Kmc1I6TcP@>qDw>wAgY4VwzI zj;bFQXgPc@L0s5zN3xZ-|0_Eu8^fbpRy925kezbQVk5i2t*@r1PsV*^SU7)`iCwjX z`wq*)T{|ZAOLG{S-Tbjtf#dntMt$W!iMyLU%lREMt~KxNFgT*u{`L#+A&%YY{ke`m zyeB9BSCAK|yKG_oMzTf1+Nf*gLh*(3f89K@P~vXRISV}>mWSM{?<{84`@eaGYSV>R zcPA#Kg?^YJ$2H^no!9m+tB%hVuw=gt%rdGat`Q|Ei6yC4$wjF^iowXh&_dV1OxM6X x#K7Fj)WFKvSlhtB%D_M%#`Y|VhTQy=%(P0}8WI^>3xOIKJYD@<);T3K0RY-`u?7GD literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%81%AB-silk.svg.png b/server/routers/bushou/images/60px-%E7%81%AB-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..49384b004a9baa799c2a231799d96168b2ba4688 GIT binary patch literal 1278 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1QG@j6H6jDfdBvm21!IgR9M69m}_hlRTO|fyQNT( zg4z-Sl2RK|lcN?9=RRn@==D3YsfIuMVV4}O=IGQB7!tF6{li&wD>n?bP z1PkW59qd0PxZLeve!_tG$if+5DMO-n{)|cU5;^3OLoO+{yZRn^T%^P42vgWWYlzJuxJfzf>R&cq1h<*$ z6kHJkIly-m;sLfRT@mji5VVr+44fNey!})&P2H8R^eafDS=M3>*YsePu%B)N_6J@G zm|6dokAPzN+s9kZSMw;97=0Fpfroy1buHlG7d06>Y;svxGM9F`nPhp*pGGzSFi(rl zC1yHDuS0N-7c6RQKW2^895*b&N|K#{XCn}tG=(oyLEe#?Z2AnV!p8;@qX$ovZZ-$# z7b(DOr7Jh>gj;+VZ7R)>F75<8eVKBesfGWH#Wwt%^mq9D6nGXF(3k%2@RkS@asR@gsRv<>+41@%ezQ40nnh!Z|sTwVHN}2K$)d>{8px z|7l|*Nlw6f5D5AxHmvcB3UF4Y!kN^Y!tUc!UW^V~B44pAG8DKclHo^Ni!s1AB+)`E6>4lDc zZ<5E?7Gv*ZOL&1V;Gt$#6>+QgHr3n>fWK#Nm_w&#a6HPwHJ*IF;IwM|cG(%E^OuIb z5OPt4BZJ6g6{T7Z2vX2r*RYL@bn69igNFUlwpopl4Ca`It>HO$upSO7Xb&Y8ZTo*D zWvVf)VX~XA3{P=~T1sO72Ir~#kMb{VgskA5UGA9x001R)MObuXVRU6WV{&C-bY%cC zFflkSFf=VOI8-n;Ix#moF*z$RFgh?W1Y&*&0000bbVXQnWMOn=I&E)cX=Zr004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1QHfIFBbqLUH||Cdr3q=R9M69m`iL-Q5eU6gQ{mI zN>oEAZBe2TQsS{dgx0g38$>h`f-MQ+9pVwh!mHk5!A`p&NRc99K@e1kw#1`NP@$eR z$71eW=bm%!xOdu)&3t$F{lD}5=A8My@17Y*Si%yPu&~W%$^XFi1cKS|2A3lc{Gd~Ov2zg!1f}uCw&s}yUeFxrTaxUethBJ-2{t`8iOZZc zDqX2-&VxRNpxUS$wXn@{&}$F~J{y!gej5&YCc8;$ikb~s&7zN<+xC7-Y;Rj?5R^5x zwT4h{rGBYti)^esI%Zp*yL5>in?|*r`jnytd1q@iw6^^RZ0|$TV(rj!X-^{+b&sU& zlKht>e+AuR0Uwr9TvfCI{FKxjNhy>3f=YV(#V(hYH!ws|uSjZ{LpkjL3to`n2Rp{G zqiu>h%aOXkq0Ldif-3rW#rC3BT6j|`9e@<67Jz$(+;BZy6XJyjlvbWq|flc&#PuVf^?z zHFPbx?$`nvq}>kGhU6tJo!~ZYjJa0XlRWagXM`EsmydSPb3-kzHDCq8<&_DOqj>y4bcL!<^ z2!655xNN%8yCDim<%R)$+;Ccvv2;j^TNrjuMIiXVc;k{xtu}X9ca8G~^ffxW?mM4X zR@AhxqXyD+hy{FbfQ!8@ zJZSY{Zp_0cgY*1G(7-L`d7omV*u&(;3_YvChQ|9ZsDvdfVezy-2NK!4ISe1E0000b zbVXQnWMOn=I%9HWVRU5xGB7bXEig1KF*sB*GCDOmIy5&cFfckWFq3-bI{*LxC3Hnt zbYx+4WjbwdWNBu305UK!I4v+VEipJ$GBP?fIXW~qD=;uRFfigLUWWhx002ovPDHLk FV1iaD`gH&R literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%84%A1-seal.svg.png b/server/routers/bushou/images/60px-%E7%84%A1-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..569230fbd23da10817f592668432d36016265e00 GIT binary patch literal 1867 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 YKdT_xC8Ek@Z~y=R07*qoM6N<$f(CRt9{>OV literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%B6-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%88%B6-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..81ee3b856af99445d60e51225ac34b80d1f49ee7 GIT binary patch literal 1013 zcmVi^kS>{41f+8rX2#T~#L_t)G2nvFt zMbM&6w2d}Fi@GVq#)qVq#)qVqyZJL@}ov*b9sS{lS{^Z*mSu1LMH%h;1pDVjpwn z0>=Wh#R_v2bBY|_*Lj@N0vrcwGxK|a9^gID0ki`n3R|p@4e2x{kG*iqF~{u~2c82L zflbW(QzPdzGmWkAFed@D0)x!%c=qT9E?^=ea*i_7xD^G=Edve$SAmb@cYG4K4lD`A zbRGMJQC{=djVfRta2b=wQ@A_c3vBVB#}~VVF*^d3U5UB5b&%_HKhPMUF3)ThhU^JJ zM+tBS6Vgsyuh11szE~@aI1r+)6XdS+p%C@CvPu|mBxHSWgubVKglQ_Rlo-$RV}J+l zi}6;VS}QCFhfB4}J@QSAi-9JsFpa~bVqB(G?h&^gS-n=6rj{PV=BUY|dk9m2SmiS_L#z|?eD+Hb(2RR&nLTa?pr>Fug%QmG%P$44;qLGy zKZ3P6oOXO41)lgZ!i5xYmk_!jT8Etld>1egfGt_J1CN0lxIcdK<@l^b0Yp9I$AxpuuDMNv7N0JdS8do8#Z7uk)%3*a!YEOWjQljEvKV-ODa<+-*7SP5*v zH0YWzM$gu$dx&WkzIL2D>(JeR>39}Q7%N;2v;oU8{VuPYixhANxB@&AzkLzodLndq zK>XGRe8Ozw@@*Zvfd`r65vDkCJ|@<)u-O$V*R&d87rfiRE`tD6p5hn*FW zjTM$5ZFPl9#XK8(<49Ln*0(m^^vM;D)L|QM0@7k^HKe7(3$)68AVb_U+8lOLrB&_& zuP@?r&^Rn}HlbDS1FH_pa4Od-F97)`k81^K9F}*?F0FDOSY6>BrdvAgz)h|40+0?4 zY6WRF4+EHud~(p#-UCBtGIMH*S91QS_l%uTZ{Qfn;Hin(F7 jMQw;ptiL9W`QP{p6I=|&$Kqe900000NkvXXu0mjfKtI5^ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%B6-bronze.svg.png b/server/routers/bushou/images/60px-%E7%88%B6-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ee29f693dd8e4e517e097ccd27ace99ed2c7636f GIT binary patch literal 1120 zcmV-m1fTnfP)vKfs5; zZ@|I||9T<>~VrWH)>l=ab zT+CfVTvhM_1v9%1aXWJ{S!6Wqq4K#S5n3o1IT{fAr6)EEoC0RM6z76f6bxLkh(Czm z^bMfZl{gn{$3Il-1LCIuC-9rT54`PAW2AhKUwpGg&P&L0<;}Z-%m=CG5B$PAEb~57 z^0L4I7XqW^CVtV|E%O!vqe|`w@VWzyMTA`*8i9FA-y+N0>%bwUZz`}Qq?WP>Yj_F8 z+rHHOqu7GVv)qvAl09l6eTmY7$pU6_d3iNk3OdCOlcx;53rOR1@C$n3#|=3hC33tiwWc?q7yPjyCxh&jO@_yi;h##n@Qb}k@U~LT(Y33j^zDdec>Pe5+#t zGW7F?dUO4q=neNJpfOUq(Lbm2k@Z_=dQn75BQl zd-#nUQDU~DH=G5Qhtyj!KjsAd2mAoMk9j7oMT|VeZ=j#zf@LO!_sDAN5BMEt)B}g{ zPdrzF{lIGA4GM+Ax5z(675{+JwQs5YdC(5dIZJ>Zq;R*{MC9Agn0I394Y|X>tmv(j z$E(Opdm4GOuZp~boNsjk9}!%4PosGFds|o32GT&ODlCgU<4ws)bHhr^kHu}^#l+M( zpbptbn@oR^lsH!eRa8%yU?00R0*^48{+$Ze=Gw|NM#@v*W#C;yOf#~kpNmCN49o;> zVZO_wKwDA*U9gtY@2|W&y;xqN$HhK^cW^z4sdGRE*}n&ww*7jjDyTv3qRH@IgnNUM zTI!G*+GP5Z#MC(=1AI;K_g(q+CllnPQ>7Jofvz(>p_VBxHNa-%8%?j_y*A0!JPb0( mnO7UKS@{*XoT#EnQowUk>e^j$1lFxTy>(rnfnHP`w=EkTzamotLJ!B?0<=U!_rbUbVGowW!l7jTI1ZOT%nkoPO{-N8+ z_s%r4RetZ|{-0l1`FzjJ`@5gtD}KL|UuD*H>37;j>r#OFe++E?Il<>3bL&jF# zcMf0Jb#6;Ibr_c&6c`^-<`y_RnuGe7?m&&ROgpxcK1Gv|o~osP9B{(fOiWGF}BRkk0w z3X@;IH2(hgNaKw^MV9v6>2FVQr3PFvmxphEN}+BbvV-aB~>G>wnGLQjsscdro4D`{MkY z*-ZQI>h0h(6yZTAok$I2V#*cJgrGRJ)s5Cv+5c$2LFYWT?K=|EX?rkm2nC}Q!>*kacej~;hHH>1B0ilpUXO@geCxb6NOa( literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%B6-seal.svg.png b/server/routers/bushou/images/60px-%E7%88%B6-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4655f8b9e42b6b74a3ac259cbe20bc4955867037 GIT binary patch literal 961 zcmV;y13vtTP)&W-p{>vQ-M9_&%` zwM6Hw>>=jQay)~dwHp5h&x?_Ip{&(7a+m71PB{k;V~_T)ov(1k0(3^y=jXHH0+gPO z_yjW=O`pX3xUkFl>0|O}Q9%~LT70TC+ml$=;ha(YmGph3_%QQl6AoxJ{jZpwHnX*< z-tO0xW{Naa`TlF>Ka2SRK}V za4VEAMP>3iT%Cj7W=!k6dU_;>zmbU@8UxxRmWUg1evg_@X>az8jIrjzGJK?cfHUF( zyo<+0HDkWPW*r{G_iePsZcO4k@k*K$7iI(Q>(GCf5-tnpxCw9L zsQJq{XR@8bMg26<3(Ld=;&ZL9n{L}ayoi^R-+EnTwa|}M$7SM6#QNH{T4ZdwSm*vK zR#g-D0$&T0WB6Uvvv!Em?xJV6`ujJR#} z!+$32%>PkP1;c+N?aZ~TDi}VJv{z&mtAgPZNqb3T_`jrmZdS1>7@khrnO96zFq~$1 zNf@5)-euub!SJc1eJrb36%5ZL?WwF{RWtl|RbnLZ=7!_GQnwMDFnGvPj jor4afpWG?x*_rttj;$c3@-+Ei00000NkvXXu0mjfkwDT* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%B6-silk.svg.png b/server/routers/bushou/images/60px-%E7%88%B6-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3d2df533f3d3668cd8f978a0ac1d0c63adbfd8 GIT binary patch literal 1147 zcmV->1cdvEP)s5ns2Lt;qLLm?DN(LiR>K#|cy zU=&3JMNn8I5k zU!yPVm(72z^;>7}{U6pk{7+AuhkmTb9T-!uobtI0&6ewHOsi8+*_>r)!cA<#aW!hn zWK<$QQ!?&N#cK&;Bq5cUxsm&4U{RtNBZh|X`nJE)gV)N4%?`YW3oB8XkkiGJZQ}We z-HR<_R$)@3Df|#A{CCAO5iy@*LZTQAVg1gEQ|TJLBqHKx>Ce8aBC*~~ z94E?L{1p*V#%bu$NUXiOTkd-1jfjB3?ch@MC5(4hPP|GcuiZHUT3_uYI4nWDJ9FYx za==)bBcT2I77G=dQ6J3le|!PI9n-+YcnU8G2lrocL^ZKaSYmo1HfinXIfF#Z!cF)@ zJn_{yrAxnGMtr@UM0FzO;A!kJT0K>%;0Lr(uD3;UMo?SclkDOvhI`Pj)K~twm`P*qOZb75f$M5??Zgco zj{PBJ;5s{dlRF&upJ>KS5Sr$le#ckTBQp&Xu~v7p^d6j9huEUb#y8@L^<$ar_Um@c ztXy%A^a*?DSb4XJSA=~y%n%9+?PE5|--p-EC}G>UNj%YQxH7}`9NBfWw~WAbc^s}6 zdQ7oI_u+A&5DxuibO;t^#NDZjSG$*Aex{+lq+LS!bg(p2HY;## z+r5{K@IS*8p%0r4f70jIDXMJd8NMQHz~KinJfvJ*rLjr)tY){|nV?z^u zu2w}AaJHe#)P{QHR6}bk=g*q8RKf)RHqy7$tfexh3XQk>>lQL%_y=q?R(;fjWj6o- N002ovPDHLkV1hn5DdGSC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%BB-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%88%BB-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..290020d3117d8719d885e0e616c0e50a305ed72d GIT binary patch literal 1265 zcmVgOQX}6a`jL znM6=Mg>O+rNg&$wA)+*b$kH$=jV3I*Qen`&tSrj1G)m18kYCMeN2UttxT!hW2b$_lISUJtG)V>QF*?3*!A7(j*#R;YFT#CPByVr#UZO3&#ueV(zo5^GG zl59{rHICqWaZ}_tT4Dw^=0v@Z%On|?jE_>!yM(oJGw#v6tJknY>#tB{%##hOhM$E+ z#*WmzPcXg*KhqQkJg*|{ZPS69g`%OE;JujHi;w3EY->WV8I)YCx!`?zo-=PRu&aM| z8>Gw4i5jPn^pbK$6Prb{1JoKU!>%Si9>wrVBWRJOdd}1@l1z^jR!;S2|H+QR$Kbst zKDvZyZooNTlHL8dPssQbJS`EtA0GT>* ziMUbmVkFOep=Pdi`zo_p*cO*dgm3Oez*U-e>6%as^!1&bENm7|ZBKIhjF)8Wdtp>9 zVkEwl%&FJn6xr%&MTJ_UFkRSXd`qaHdSZzX)B!9=-JgihB|+aAUuOR^O|s-%*5vtd zlEG}hP&OX4bP6?d4c{r=P`^@kPCmIm#8tr^is$A$>r-vNmfg-hC^%BGNw7ulYv7r( z^X!9_s;hwXfmm-ll69U-+3eQ)U^r+vTvF})pzphjvt;Mz`zujb0rhF9hTB@S?Mm5h zRlIT=Gz`O!g5X_RAAAi>Gg=+g5fqSi(5*Oj^+C)Cf;h!OCmsq3{7{Cyz|fOYzEO4)CWk}M^+ zi?@aPj-*?!kK_~OGdx#vK)pezdSZ~C+RhO1JuVyY{M7ZUC4HsYmbyL+C&hAHHsA|V z*BeXvO7lnVd$gU9G67E(_N53Laxs^JJ96J=#d2IG;Pf%*%VmY+*q-|y?Vn7`1e{(` ztu8Ah#|Od)U1v*V|7~%vAnIGy6zlcV!=HqG>;Y%7)(*v5WpuaiDHZu|nGqsR7efp& bL|gn1tP8(0lr*2Z00000NkvXXu0mjfWY2Xw literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%BB-bronze.svg.png b/server/routers/bushou/images/60px-%E7%88%BB-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddd1cb58df062e18156221ce716f08a6265a2f8 GIT binary patch literal 1207 zcmV;o1W5adP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Sy8uJGX#xqyPW|zez+vR9M69m|19)R}{y86Gx54 zr0!@`w8f-FR8VV0O50UB3Ic9Q2D7LC@7H>tj%*zn!D%4FBlLi#%YJc@QdOK4tR2SK#XM3sDxqBe( z*h-TSHh=!4bF#9wz(HF{r&wI1#Y8;K@x2z4to3dR*=WNbUR0~rvPubSG`J4NxN}j+ z0u8KkvdE)Ke(m>`x={0WAMF6h;+Sa8(%&oEl{5-Tu|w;sJ z_~N7O#0jAdkm~|Jl7Qe#<2mgN&WM|T8Q^G+MHEXq1?4mS)|(4rbDb|@qaDQG;^L0d z`q;t?42IM665SF4G&t`I5|73Fen_02(vlfq6d4kD)h(=-@!&||X&R1q zGgqAycrEiIV7hZjX&abs8I*n#R2@_7v^m@oXazYI+)~Gii!3-FTXfXl7`cN@p+;ca zX>W0t&E1gAUTy|I1j8z}% zd?|)|*46gqy3SVFVYC0Zrp;>i1+p8{Nw;Qql?I+a;zpKecpjlkB1VBxa)ym8Zv(kZ z)9WTf;-#I+OALlL%yohOhI%cyh4IkNmaMG{xi8t<=}X=6{jp9VKguPgHbVaiFQa*) z)c-I%dfFo0v+c zxM`c4XK+$k;0C@<-?J_*+U8OBC+3nzmK*Rkp?%Hdz!Vox&AHY7ArA6uSg6vAMX!^7u&Ve=VvfflE$da5$;^0 zOZyjV$`Y6dBZ8?;hIf=FEkE|_Y84re7>aW*lzA5v_(UU|5*5ui1Z4w@bslKo0Auu+(B!Yj!vL5?Cfs2wUaC203k-14I-Wxc8#nT+;G2w0Az^iej<-?sq zxwl&|-w%)Ays$Aazt6F9<@ShUt-=Xxia2KF8N%abi-^TDc&Ka*4vhzbH|8vOuVgnx^*%d(;br6!#Q%3ja|ZGD|iHzSezH z;40o$@m$;sKj>`s4?I_%wD>%W|Fk!I*3^rR8NsmDsw&%ZTWpk(mR`U?+|ecGmV&h8 z%2FZyOl1f2NJ$!_F(MQKS!16GJ0$zsT)Vdvr4e{kQr|Y)-`JXpnS+lqF>jcGxp$RN z*QSk(X@AgVF22viZfz4+S(XXuC2inW;YaAi%bECHIcto@AbvF2?Df{fOYw86&v7$g zl{J9R^=`JwYON=LD*sr&W%_2Dq&M=vjH)g&Pipu47N{&ga=v!S5?39>2C(h#kC1LA#Lxi!SGK_yDX1k@HUfHgKht+lnW`7fQEn-u- q^IHdTOn-BBMzKv;G}P486wCh!zBj8=;ZAx00000HP)%Y8IF_Wf#Y!3@b59%!eo_x;)lH4-pYv zp(G(9%%a;{N%SQ2R1Z;+6%`big-w|~gk9|-7D|O$VtFZX!csgvtOobq>l{6ob*5e5@ zCg)kP>9ra+eP1EQ$LLR{G9kTqMQnN9Y~j+a)w5eRx%D`cn+l=yMVN%C!9nGuy5-A+_%GcEMbh8Q76&vjt~%N@z;@gzT$m zdKa$vzfC_r$(-AYvpX#`C4G2ZZ2B7W*Ie7 zQGAT|;u(RN-;X8hJx(dU>JEZ%Xt&xKRf2i@c#X zg~xjmUM!s3A#Ik{70#7^vrxge*i`s!Cobrc#^fx*-)e8*?G{qhF~zN_n>~oDIw7Fb zpBZhc@%yka&c_s|;YYO}=?$9yJfd`*FTC%~8ayOUABTkRzD6}yVvl%lY91Ei=fb(w zM$y)6k=uk^xR`ikQ_LCSb!-;j`B#b#GZpES%BkLmpypBtKHK>V*)@Qn5qBWDR8y%cNbj!a~W3m4vl zTRL#vsp28jkqy3u!Xvf=&k19>QyhoKghXbak|!l8nS%?P>G&T%Fxv?5UP%f70000< KMNUMnLSTa6hBVdy literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%BF-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E7%88%BF-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..416ce294272ab9b8b7ab9fd3e6e57fc8695bd755 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k9b&k#f>D~bgUQ{nAdo^IEF+Vemle4BP3Abc>UsYJ+p$7S|2MdU!=3BsjH(y zY->g!r|WuG7Nskz!nSI18F$L*DXmx#>*CVy$`W|9_;T~2O)3kIXe>67Hl8CXd;H4n zM{)kwXBMZulXSmbk!DyBxBvIw|IdHFo7wo$>|TiO>;DPi7f$@yc>LS~*=7Uj<6_ZA z*m-z(*evbJChe|FNIZMKRIP{iN0Y<1==)z;+~li064o2}d&s5SeUVhoog*7};5hHY zZ<#iWTkoD+&|2v+@5Hmki@vKCyD>+fY+$VrDW7xga$c{?O@F_%jqENl{3rY+bf0ZA zSU690W>Z@6wP(5WO8UBEOSt#1H_Uz#VPDEr&6q!FX6hY5hDvQ+YGL1mMFP%bRXT-8RTL*_b}IM1>Trt zZMJU`+Olru^a+Z1SFJoWmnlTyquqS3IR0k-+IvUE|If^M#KL=6?W&=5YE3cc#jbdx zO+w7g^G!HU^YGX)P5Zhv=Xk&OrY%j|raU4CwgZ?m<0--teE+>bFDZ7bH@db#kCs8wW^{EA1|A$zh|Lj^V1M!w!56O-zF_5AvEE`8vCO>G4}v>TYE->faVRV6-^tSNYMH)(e3=9jiT8Dw$mo zR5x4C^ru~q>tnQjQ_Y@7hL_ zUnzdjU9^p9lLMn!$3*S@LMsncdad;R5H~A_Gi>!0J-2mx9;{mOO=Ic14SiGp9#~oa zO7vB)!Q2IsFCK1QyF9*fhtCFeW4ZVx9nVWFdn}f5hq>Q5esagWeozDC7_B_qpl>`iTg}^a2_K`~OsQQjO{Q+&)A2j^hq~*Ln?@T; zZR2|Q#j{m|c25!XK6>rz4egs6Gmi_#7JLeh^;xNF9bBoy`g{p%oHO@_X0v^lv)(GQ z&lb&_l=t+N-^b!}=NByzXZ*o>AZ2gI;%U`~?{8r6-{IcC!06=~JIP&UOOYe@nsw3d zR|pnP+tB5$c_4U>{5l)f8>(6#CNQnNqCPQ7vM?-4(B1Ts<}Aq#mHBT2U z=k;oL5*xVwd21)^>D?~4b^q(;#Q$6~%@+W(vTBKIL`h0wNvc(HQ7VvPFfuT-&^0vD zH82S=G`2D_wlX!)HZZU*8Db%1!`dMboFyt=akR{0Kd@r AjQ{`u literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%88%BF-oracle.svg.png b/server/routers/bushou/images/60px-%E7%88%BF-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9757ad224d20e0ee081ee2bf3e3474869450a0ea GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k9e3l+1Xyci`vb=!1%+{#W5t}@Y@-u^^PQn9IsE#JCfU$*CTM~*i%V?H*Zvo z&MVAwJS2RBD_>EF-{HoF1V^PrrJO6dLf0LiZ^-{ck2BvwjUeH3XG`)Xv(9=sk^Mg71x5aS3<~0+JI+o$x$)SXpU=F4 z+%`Tqb!L%u+AsU{bx;2hGwS+e8Mb82x3(EqKb%smezWN`kFZdfdO^UNz~2)i9SU>r zy$a835b+P?)^WaMvLmT%_3J+}9igc_P0=<9DhIZ)@9Afn{l94+LM|5^(EXI~`@Ck~nq$+aEDn5AAlv)s{On~CH~x8cMMtLkFue)2 zImuGVxq5F`vcvS2M<%?XJB@1#lmsN&cBuN!QCl!kZoy=!Q)=-&%KPqL<8s|yx%%(o z=tHkm%PJPMEaI@)bV4CEX9i3BLxJ?!PglKRY_58{G=J;=yxKLluRF4})J1zZGUfdK zvqH3Fw)Tpo)5l-&&5bOG2%G<4!j;IAiIIN~t(s?ES3F$Vh^LGA!SKw&Rm9z1j^8b(4k9b2COn##>`+zqvS*Vt{MwFx^mZVxG z7o`Fz1|tJQ3tdAaT?69~14}Cdb1MTgZ36=<1B1Uit|+2t$jwj5OsmALq33DNT%ZO9 MPgg&ebxsLQ0LooDNdN!< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%80-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E7%89%80-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..354035eb1ac6f5d0ad94c5bf45a0b6d187c7112a GIT binary patch literal 1016 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k9e3l*;G`gYRNG$Ff(|%IEF+VetW||BPLXY?L+*mBT~spt6f*Gymf1do==m~ zQL*4yO}FmQZWnXCRa>-ImIwz%$CN0GIKFZU2>-{}UGEsfF>RU@uh(t?m&IGA%yQUb z!aK`s>I@n4^@q=-JS$bJeDSPSysiBF&v$?CSr)(B{oS_c$%%=|?tNMrXL6P;U;8om z+V=9jjMJAJ?P}d%n*Gqc)mbV?qSon$RrbT_trzAW+Hq`-!Rp1=G^bxV@=L~M)**{z z7H^wrrDxPzK3=(9HykNMniiHxn!ZoO(%`s&is%UNet=alD~$F5b;T6k2XSWpwaJ&uOll?c~ zi~aY^4gMUzbz|3jU{qYQ^2KZOz@UWljdz`X?3=f1onB3Kt5xN}oXAvu)qUw_In&oh z_k2iqdZD*@+s_pW=BWyvKjwsX{?|1Ax3SFdkbCQe(4^?+$D7_1?!6H>Dd)x3mD`?P zd9|x@+vk7Zx<#FKuWb72_PCH!vP4~acD_(Tk=g>El7?w$6+$18XFm9sf^dY2bE&Q|NH+g{1w|6@Ui z`6D%Xsgg}OZTesIRc=l#XuaRc89psCT5FTM*QC1}D;{od{ZP~UhD~|8UzzTWxjNIY z&2oPe_2=UHo7qk?%G_laPqS9<(T~}7T2L`&!_spT&s(HkKjbp~R&o@F@Vo!-?o2~g(0@IO}VQ?5!& z7x+p8vxjPlYeY#(Vo9o1a#1RfVlXl=w9qv)(lsy+F|f2UFtai?(>5@$GBB9)b;lnR d4Y~O#nQ4`{HN0KH-~iOX;OXk;vd$@?2>{a=!t?+D literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%80-silk.svg.png b/server/routers/bushou/images/60px-%E7%89%80-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2566ef37c91a7ea5c14e9bc92cff4c22f10f208c GIT binary patch literal 1508 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd3`6pHR9M69m}_iQMHI(>TWqBi zgzbY?ODHJ5u!vS|Oh{1+X(K36BUTh5Mj%2IQ*9KZXk#RrsEJ>U2^vt;mL?LkB$R*} zBorI1rsZkT@X#7*p-Z8(-9C254?CTEckZ3-ZPMMugtH&^-Z^K^f99TD~D%Hd4XeT;UqOozi71SuuPpmsWxxQ@jG- zF1uXd8NmykkwaKPf9QSAO{$Zim1UZ?Qffln7Q@FO<>7>P;Pp0OfzURP zU(LBLhL6p*{#jmu3pL<9n*L+8bZ#{ID7W=5P^~2#VgpI0PFKvm}c$R1206rD*$nPNK_<_Gv%WG-_is3e5 zhG$^GR2m&^-F(U!^){es50h=KslA?o@8N?H4AT|XT3muQ@>D8F%{b$0s3Se9WiBVxtaousEK0sJYQ$R{#cwR1DD6v8nyaFSQ-tn;pB*+b zmFEN;lB;QsA}r4mAer%`GLh-bpn!2o_k@ioq)_;G?NCnKMU0SU+0UtGzJ;-!0&@y$ds#YuhYXpM* zTHo1n*xlUVmbt9lg<@Ei+@YQh0B|3llLQP>!4jE#;EYV6(bCLA^aA797`sde7eZ%I z{u1C;8M(8H$VTLK1cL1@z8A^wv&aqjC+WI}6r-+XTb9-x=c``G3%*77tl&#%c= z@lZ{BhDLDv*fp+4Ht=ywrGZuSvq^3qr%a#=!3yJs&83AJXY+f~y%ha%M;-wt$nXC_M;@(3?MkIwHB-S7RT>yYdeB%+Ryw}F_Qf(R^ zX=Qu0ViLKDyxq%@lqSq0iM>{=mGgZ!v9M1|*v*EsMVw@oo4?`(uNL9zwGuK32*{jw}Xm1Iem<^M1L0iw1ThWl6D z%K!iXC3HntbYx+4WjbSWWnpw>05UK!I4vppnF*q$TGA%GOR4_R@Ff}?eH!CnOIxsMx=&<(y0000< KMNUMnLSTY^E3qR0 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%80-slip.svg.png b/server/routers/bushou/images/60px-%E7%89%80-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..14da129846238d4f41ae8caded5ba63e0a434988 GIT binary patch literal 1325 zcmV+|1=9M7P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd3yDgVe z0WXM30SOwBXv@W0wcaJ6Mw>KZFlhpYL=2D^i4SNDk_r#%gTy`{FPa$CXd0skvW7%J zBSfvxL=BR7p|JO>(XKUEVwBl{`lPLYWA&9%40*Y?x zinZc$XHIf3RlHtnY5Ra4A6+zr0{Xd0G#XVyv3*xSk)^cN)in7&VniYsX3K`J5>svvRRXphA8ZG1zG z-jVl)<0b7qtD}5Gh7+tMZ4nO|s4{Ap>?OWL!t8+Y5_7rJ|K1a57r{{Mr-~MNY7kTv z?I`+KV|aEMexCv2X$Pk!(a&ll`k^3GTf-4XnGo=uQhU;zUt6j`cC(cqlX z@b6j+|4G9B9C7q3)+TWjg`&$)*}K`}gxb}PR~=t?Nb@w0PHMNKP;_&P(_hUF{+8+D z>hTi3jUnzFoys<9+FN5sUyJysPdA%jV_;CF+iNtP_E0p^WPSzFpM%Z&sZN z#97BQ3;md*-Mzls$HN-%0jt@@i5TKPEc_!{(N0VLUuvOK%%#nVm{@^o zMWHw@my-o-C2KjJG|=@7qENIOx9JKCod(A9s-^bXXqa8h0EzRf@R0TTpSf4e)hHC(yb_~O{3v(D9ux&$jO2Bnp#mvGl0P@7m)b6SQFM6j zfXgHwhiwmvewN1|vqnzalG;p8k2KpGouk10o_Md9!an?6l;^nIzHB=w#NS26=CPd~ z^3zU#~jugkYJOyc@TNoDygynKQ*}lXA+iqlWQS1~7#oLLv zgPL|QzA#+qXDWKF#}aYp^#2ad7H7q^6v!E0{65=>LUA^!8kLWl_-j_s%dd&JzknP~ zj<}A2Eh97X-CwejmF&N4{{X$9`KQ3hZ{Pp`03~!qSaf7zbY(hYa%Ew3WdJfTF*q$T zGA%GOR4_R@Ff}?eH!CnOIxsNNwFpZ9001R)MObuXVRU6WZEs|0W_bWIFflkSF)}SM jGgL4+IxsalGdC+RFgh?Wpy;so00000NkvXXu0mjfyr*I9 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%87-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%89%87-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1446ab48275db22cd52282779f6ce88ac87bb8 GIT binary patch literal 1041 zcmV+s1n&EZP)8#11$8IM@B3FhJ)*<$9x)sJPvxyBO{6l4R-=1 z9`e{E@;G86FhQ{}?Lb!$7Xo_}wUZncahnJIannRt19z3RD}W)PzeHKzid%#Q`VEvS zYM&9>jf%QXTqG>iFt9~QcO@_&bZcydG}|zYZddaaG-m^sfczl+6sWZo(>B}@OHXpt z+W_1H5<$8L*oA2>R^*TU$hhcs{Qm@C1+Wp*%dd`U?*^W`WT0)hH_h)wnD26N>?#Gy zfig_5n*b)K_bAFE&%nIQCJtIW9tR_FmFI7&=NfB9p8rc0(GAA7#G@~B}p4uW)}P!R&ReA z_%z((QQI1yhJSg~wkB7@j>xg|fU>p<+J+01_0-WeJY88&9iOjsR-!%9nkM3{m|0E_ zrpK1|e$22kIn?|a+}{H)fOpE}8bRBzoGcUq%Pn=ffhWKf;2iMTv0NkMX$b|?VkYUS z7y>>4--u2m@-c0H2ByR9m_B#2Zh#kvapZ1 zNm#(+xW7R=iJCs)sHe^|Ou>3Fn`;`JCNw+%ELGA~p%qiGH;S4in8kvm=~If@PUI7A zh14r+*AW{2g2VVhbKp@z*k)T5bpfu5xD2xsVTGpQauI)3)CIEvE?H$Oq-j`goM{_= ziy4h2sj?N)G(1Pd9~51`tRc_g6& zGaF0tPinXna{wiY?=u*(maSG(Tn+CadQ@2ZxM3VQ+Um0ra5XGX#InbO zX<=s}7B-T`GT7-q(B48UENw&^@lV9ULIev15n^MZokXyZe4v7c)fmmjWKFUbGvl0@ zHI6&yoXw4y2Nv#K?s+-y-aB^=_byaaRQv-6fV02}g~k~00N7=bkS8@@5@-XXB{j~( z@onI$QCE@m$7wVR>Zf^zveQO z*;I;<&uu?&3wQ?15E+;Un(??=oWme+61V~ki1^2J|D*Msm!vbK`78pbdYpSHUZFGE z1RmmK)?-P_XYLblA9xR}#NVv~b8)*xWDuYckDCI1I^^X>gLJmet#d9tVVTr$yc9V|DoGn{YtdLjbe?DvSqp2!@*MiJLdUHv zwKgnw)aII_iZMNWmslH?7hyr3MR^{?=kJJuz}oO`(f+Q`*)U6bn`r+~=&TeEDTlRT zd9|`Bmb5&C|EADc7VTAqP6wWw)}kU-zS1;%K?k84cEi)KW=Xr@Wmr4AvS=~=;X*Ym zuUgtltqfjp13oCVGFTf3 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%99-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%89%99-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..44759970fef14129868eaa56dd06333848934e41 GIT binary patch literal 1091 zcmV-J1ibr+P)c7SpwY9Wk!YDVj;_XQur!c$6);8Xi*U`GRJYo<>I1Qlo5!#ONs*6Ub=oE1J*}q|Yw5V8<}>up+=GWd3~& zbOGHK^sUiD_Cv}Czy`k@nu~|{6GsmMYi$^;4K2T=_%8zVA^m(DG5lwW^NWEpq>I!c zub(lhfHq*S##kF%CB7y)fz7~TrEUpu92po*{U)WZnv=vEwBNG+U6=k@t)ONe26Q5%EpB$C9>+R^p8s0?r_g zyK5*F#mH#f1hfEmNSvNtYK_%KS^)LPB3nt4|6?!u!yfmpM5e~_H1E{~?3ss+);W(q z0myZ~9GZ&|-c8W}O*HezX| z)z!KE{lWZ z@4!&~c~TH{_=fuP`lumQ5p{TV{drx~kgA9}d|v%Ij9Y_Rl`s@6zZt9QpGR>aR$>Vb z;&4zuJBxzl_u-rt-%sOv{EUfu`W9c|K=6O}g(EoDMViHSJcnB4R(DBFcg~j6`&Al! zN}%kSU6k2}J@^qnU>80P*w8UK9iGKUQoo(VUi>0CIEg6(IEZz^jhdV0M1Rd`kH|b+ zuHmVOAypA^_>5A1GGa(oL>yjL%I}RBQWX)0%Zrwi!r`2w^mH3#mf;HAgsY^b=u&AU z-+?jg4A|6Dp4L1{Kh)ygQT(L+g~-LdGCI0jD)MKG@BWfD6Z@s*Xe;i+m$)mFUDl(cUl{H5+(;P;afY%q(i|6dPxbBhsX2O8K)QhDd#U z6rUFUb|oGU>Sp5>&9$*9lkR%W+s<9$`}Ti{)bMYme6EpoT$-L5T!N8I+98K`m-6c( zhLm`tlz%Xzc8LAvn%EP{7tmr^@OG#^>*sT5ImEF?9;#EA0N2EA+c`Nu#soe5j zJJBgyoVcdj{UM5hgmM^Z;2b7x8^`dw?wtPB+_`mjhqFc#>THu1AVbpOcq4v&L<-xi zz(rDoV;wH9r_-gl*jA~PkRqD@E6U?SxQ25^EqlRfxdjK^;q15kayYyOFH09$a&uV^ zG{f92^{)@4>r1&OSfCDQh4chS$wMr%p&ezzb4KXm?pT zB1J{BJDe-tdn#VSQ(E8KB3)(~$9K{tmqxgExpbO1BHi7b&$hFrg~`BB!(&pctJ~#e ztF*B?S32h!yeJK3#c*yUP2v2AQQ3|#+F-3T&0JbftE8~*N~t+FrpOs7w6je*Ra}C1 z&E4sI8xK@wb)UFd3IH@}dZ3O`d&TY24ZdS|xX-p!#*lP`I_OK{1s14^e*m6iT=oXo RSNZ?|002ovPDHLkV1g6M8RGx| literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%99-seal.svg.png b/server/routers/bushou/images/60px-%E7%89%99-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5e726ad6c494406f69f28e6f86367cec77e0575d GIT binary patch literal 1038 zcmV+p1o8WcP)Qw#zL;A*yoWP$}KXA{7)ENe-jK)~i=;FERT4vYb# zz(@c)Ux99*3upq~JJRQzYRm|``ki$pZjLKM7Qd6O?*k7}!b`nh84&YIeQlFK&5}N# z1-K=k(-~Emkr@HXvn$6>p@2<$ggb$60`~}wgu@A8`;m}%hHZyyQBiv!>7II;S6cu7 zM6KUH1T={fBU(g`16P1~nHCW}*q`u&zHlQDh;tZ1j0$B`T9j zmje7z`nfYj!Zc&1EgDdwC-5KR%*1(wr?k|vRO^-9n9Y7V^jh@_XKE~@ z9M-X6VA@uxe6Z@X%3+YOODkZ^c~Rqvg$)zsM8ne*pZ!eKkQ_Jru) zZ`HR%)RKaP!*;Og4$;5Ms&9)XB^3#WH+tm|;eysXt6m>njy!Fs{cLN<{`PlX{Hdbs)DLjvb&2zmf`2iY=sD4ju|+u#_hJY?;H0HdYFzU; zhGD#gr*LDFzTV8pJ)LPE#6iq7(XoIryo{bsIoFIgS}4zReTIRkuh%o}FGX$pFq^aA zUF|rMcS^q|OsOl;7uEL(qu(eGI5Q9p;yK)%JkMs@<8Syt)F1qaBN)YBn8Imcl)uVp zd)K)PPfCx*NYwsfrtO8K{)$Zfvsl+@}o zTT8-K(o_5MsGObBQ^|cYQ~#hYjPPofrMQplum?MnYquq1=cNNvc7z)a|Ac8vf2jS~ zix2S|zQsq=e&&R4x)mF-KDlofwx12g+qAtcc4(cxm2r(pCmE%%8y^cJ zSC*r5IE0(pHM$df)qY$fWJ#n`#%Amk*473icw3nEGs%5ADW6Enr-be0xcuMzS;Kzm zQ9D?s@=_1b5-zSl=OR@&yrlx2i&Ww8B^Bsgq*GbPI$x`>Nl)e!6;ASCN*eXoV4O(YLW$}*XH!zD78R5Oc!P=&F zELtTC(tGZCA)y!*4h0V6?WpKF++*n|c0)ng28V>%5yj`UOge4ea%Ymz5ka? zNw33w%fH@Ps)*8+e(z;F+@pf?sF<=Ht~#2R?r`tQuXLAsgu6_$5$^c!N6S&R!|R*W z&6jDw*)YO$Wg1Y$vXo^_kMK<9dDhxp%@tiQYe`qP51gMBigi13)$d$BHBsVOm~uoQ5{g3X1fYe6RA z6fnnvT`Sxr8(51)ySLDHd96j;p=m%5YP&_-`-JV?7Hx;32zW*|pikJnc{(uejYCmV<>4UnB!uubsYMYz_frhBfyg!IRR`NhmU{QNVpzYD(2b( zbV`6`pcCi@t{V9HDCET^!NtKP^uu`&C=Sp`penJ9&Im9&K&M&wX$}*tjUBENatFaR z^eE6J;*fSE--KKi9GVv!2`>|JyP@8DA+HWtKTF7^hJG}nCR~i_igI~vsQXUHRRQZ| zb(J#oqY*V>KYi2sS^hB90qf@pdBD(*M%07{(<7JPhPpE0|Lt%Bs1aO)7!Uc!PV2dg54(w{QUH6YKW?O?ZEZ3DpZ{s7J4l!wkQ} zcS7~Sl10FIq9r}ncusJG;fyBiB$+}LD3>w6zdK_ca1qt-hDo#$|MNZ)3EKvJNTSNZ zT3`*ZDm^NF*0uwufJcO^q$V;Izz_7DJruW78>MAfdhxb+U49E~;xb`BhT?YMI$>Ff zg=*@@gUf`Ic%PQ!#i=V+y6~Tm+foUtN3KB?{iW&A0IU#eZ=xRVO-1c~61}?mf~wCO z$;074UW$Md_%{_%MjP(0J-%GSZlZ61!>A)BG;tl$WvC|~VHrlfTIm4pq25)sqPnR_ z#CZ;H0(POk`6y4%4WU}dAEN*9+4Rr;&$rtl3o+L;TRVPPkvllYWO~!jpc7e+pUt0M>Dxu>6cczVx<^>xAVyVtLiJj_ZV9 z3Hd|Z4qYewGUx9U-dCuTju~V>ID6nYmb`HmmGoA}apa98d3+oA7uC#UU-ukR6951J M07*qoM6N<$g4i7F&;S4c literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%9B-oracle.svg.png b/server/routers/bushou/images/60px-%E7%89%9B-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1f68f0c9dc2d698df224ed2247cbab5d3c1a91c3 GIT binary patch literal 1015 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k5~m6Ei@m0ddLiv|L^JI7!q;#?TzS;tDz#tKc1hNCS$63NiyAO*8*RbD902D z7NL%Sp8@%Mrv%x0CIxXcPWgJl*^ysNRE6c|1?R@?-xYEUv|K(Y7O}B)$xQlWCZ2ij zOr+fo+j-Jo(r=~vP2A61Z_&N=|NX!Br*FM>@6Lt#5Pzwww>dwA9|{mWzRqdA^q0P9 z?n=JIO1lrnaohJ!cz$Wm1IINwPi}S}{du7Fg(lB5{yj{aTW!RjvVKqA)DVBtDCAR9 zI@gc8YovvL9yra-_f_`^tN!7b$)&q(y?kY#B<-s(QQmVaq1uCk|N6~&Vux~f?%Uz+ z&wal1!8xnjdv`pk(JQ!_(#>!wer`+E2Yt)!m)A#JO?bVoGVXF!&l8sU$CB%Be=7U_ zxP8up#XAoFYD*~mTN!#@>*4P?k!344ANsf}@15WwZqw*I9|?Vl%iMJzx6HlqVCu4I zfq(z;-|786rTDrSd#mO7(Es~2Th?ZF)~dBUY&$y5^{-pYrs{D%dUfBP>*Jc=8Pm+1I z)U{9bi@E9UuUQjn_8iNf{Mo5O_x`6>#*;3zufF)BLBK4mHqJ;nA`-?YnC&xNYwe*|&#Cl$UrGG+O#&GXG?_`JBQ>D%W1y!A!c2}I3KAB(rLs#p*^HGz!7F6;VU$?m(TQ=>Gxw7QJ>wNnE)eFS`X_XzG zEFN<(RZPyNaiw2_e!?!{2i`vx3qP>;tgdW4sQ#f^{lM{-%T|k&Uru`4_V4a4ra9Av zGbXNFeF2y|R7+eVN>UO_QmvAUQh^kMk%6Iwu7Rnpp?Qdbp_Qqbm5HIYfq|8Q0SoW( fUK9kh4qll#aNV6!D|+yWj59+xX^O z&GETu`;3Ln^7S_7-@ASO``-7n-&Y$5czYyOe0%d)I(H4r-UHifwqzU=th@E*oq_*$ zyEmaN@?v+BTlSp&#Cxb^_I{sTKH4fGv#(@s_FVRAu+w2xvHaYZ4QSx{U2)t^!y2h^b+R1#4FE^IVW({Sm?FXZ3EQ+Xumd zi%HoU2iP+AK2S=ybbHI*n1!qs7uoMIB`nbVA=R*`w1VyZM(#WLyN)X#V6>bYx|b!z zbFSn@N46ghk?HnwZUSkqP4op?`mD~1G#Mu38}n}8Xpx_oLt@dTt=xhd}rDBskaaI z)$aBAyq7WViEV$)nbq~G*CQQ%9CiLR)z{czrsJKtr|NDm3O#av*Wbq4180rr-+iQJ zTY7nOz?!@KOl8&qses-SU_FiP;pYBi6M+$b$-F87^IxqpLmbgZgq$HN4S|t~y0x1R~149d4 z12bJilMo{VD-%mAQ%h|F11kfA+SN*4C>nC}Q!>*kackiDHtQQu1B0ilpUXO@geCyc C&`Q|= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%89%9B-silk.svg.png b/server/routers/bushou/images/60px-%E7%89%9B-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..280b6faf41d81f1b9853fc16b081722129321db2 GIT binary patch literal 1213 zcmV;u1Va0XP)-Yct=d88&f33Cok1;l5|J$$`3o!*f*pb!LXy#K?>e`B&W4wmXu?pv* zBWL}#nXfU~3a-gH&V6-GGx4>b1>5*cu7?{4jm4id?@1$E1iq39BP| zyK!v_y_T$q1bbI}DA)3Gq~9j#Z$b}7^!jm2O1&sk@q1m6uW?ixeUHPgh{;P*dKrgr zB6_`;l~S{T$LqwqaYBOrD8U%h+YNHWYFBtS=d)2x)UcS)Hqb*ue?|KyY~|D zgf}+pFeZWcqXsLp3a%IKzDf8K>*_umhYJ$wRB1MqzDTLJpLvG<2OrCzwNT?PvO1;K zs}Ze!oSnfRc&>lBB6b^`CyR2@jFp(xB%Z`iO}?+T?YJl> zFAY?ObVV3ix8|U^-0%qv*Ivi5Ie2Kw`;nk)g#sciOCy@C+Ap|4#yzceb}c(_W!-0I z;3muvhI)rkob0W+W*m+X7Wva~B2E|fqULM7K{caSsN=83$8Gk>%)P?=N;?eGw0@yX z>?$C?C|!6;F^T_xa|_9;4W{8{VWko)@v^qJVHex9G)SY{hKoaYu5xXjg3l^)?0#zH77;o1`M9R&{OvJ#$I z^Y_~&c_@_649?#Xdu4F6Fh+Qrry{J43lCm2#~VCYFMK$ck#OxDy6|$cjD)Le+CE{k zpis(4xcW%igg=T7UgnTqUqb9s=oYqL+j-^qU(a}9_hN0?Mv7v(@cf-qwvnPZS~yhy bpQ88&teZiC^MPSd00000NkvXXu0mjfs>@SR literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8A%AC-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%8A%AC-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5e22ee957db31358c83ae3d8929e971335bee943 GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4>>qRG?>1eSoDm6ftl6Q#W5t}@Y@-_9wC7u$LpWDXGTWM%3NS3=&E-{$+1JH zWdX-qXVpbfEmJjAws>-_ad2AQo0zDf%fh{~cZVj=BA!!XxjaW!=p6K!Vsgnu);70q z{lqziHT!n%`0(E>|DEmkzt8TJpR@fQ8*zmx&`h@H(s|)N;T)lurigIs-Dex82Q=Px z@(=Kua6h>`@aV~(2ew~+^02&j{tMKYo zY?^Np<5IOH-d&*T#w+8wEQvQxuINkUNNn1>`Nmfzj*I6S<&`*|ZoYL@kz=J_qPJj+ zJ4>*q@^p_+fyY@DPtWwsa}b!tvDrrIdDrwPQ8#g?i!}@N^0JHWUbW$PzESP0tp1Cn z{c)ZAxeFROdoMBde^WRm5^MH&2ZvqpeLJ(s@xOkEnf<*U-Kwy|b9UhyyH{_UR|~dW zPdRI`@Zv7rs>i8c+kVAWrv-~GAq zn3`dSLXEOm1J6C}Jyo~9ohUTbdN#-X?%reacORv*aqafqczDg6Yx`!V&HWS=#>y14 z^1;lmSiZF!hdw(r+!l#>@m2blkvdbMhG8g^@tJjJ4a1%tvwqyZ|5rGd+nFZ!wYyEz z4%$mx-W{?z!94fcyNer6neJeVNE4frbhLC~=KR^BcU)&g7R(ZJRlL9DeDLe9<>`}7 z)wf2a&-%KoHqL$bqW)QK$3OBpN+{hmv2yZfsVnAqd}+Ure3yVJf>$R^n^@ zsmjSIs&_z{i$S%-HKHUXu_VE^QSinUdxJFi{}`BC)P>Bp9D1+#-w8IPyC_~qBXxcYLF)W-Xwhb~6l zn4_QGxauxn<<(r#r7x5fWz@`h_uSpgyX^D~Ww)m~n^aW8{a&{)vj0gsW%d08XY|*w z*>c{O_U-YVwW>nz)y8W_Q}fT3FE*Faw^Unm>78fwpJ>t5FRZ0kEz~Uwx!HFsap|6) z*M4uk@;m6%sdZPTTm15>EnZtV|9ENjE#Y@7rdDXz#o)BE zsQvK2r;OMk&h5)%rk-3L5YEqWf1c!zr!2b_Q~z8_Ssne#ZKvChw>}&CRVwdHe6_>O z@_%pX<1Ji?k&ADXavf?AEw#BV^kKm^t983uKlm(ua9!q7s-NufPn(zw-|P|zKNqLi zbEf2}`6|z%$xP>c2L>ex_8nK)y3!V{zz8blR7W4Uuk^+^B&KG-Et;+f7TskI^Obj^YLfC zR!gN3-L^Gs$2F@w?Hg-e*lzH@QDmn5&cEQh^~*_@e8Xm*u1!t)e4tw58c~vxSdwa$T$Bo=7>o=I zEp!cxbPX*+3@xpUOsotnwG9lc3=HP(n{xz3LvDUbW?Cg~4R0Q+Q~)(Fc)I$ztaD0e F0s!J4!X*Fz literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8A%AC-bronze.svg.png b/server/routers/bushou/images/60px-%E7%8A%AC-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..331284e7a85de1f7d346aaed6dfdd976d93f9754 GIT binary patch literal 994 zcmV<810DQ{P)1ofhbcn}W(Q4|bi{^WvKM%_V-cE-yh4`yXqf?fDmJw~(f9WIP#r5yLE-)QG0{t%9dWvCw?>Mwc*-{adZ z`wz6D*KfQj+&0O{W=~Ui8&Bf_T#pSnHq-uHc{7){_MLpSkrt`mDfK?Guk5nw41}uPQctM#=tXVF#XUL|x5f zs~w$jaXMMeun~XhZaC`Xq3IOv0_@d$Vz9Ph4biv+zv%y*elC^3x)>3jr$>~_roK!g zvmPe!y6$P>biwu+oRmUrRjw1Vp-w|z3D43MI1h&k+FY4H@4$=+Gp0@xKjNO&{wzBS z+U|@cwki|Yr(OI(JSd#eB2JJ$%da)Av<4>dxp~ot@VHR*=*RQ&f6{`la=c`Il--W; zqv(61{AInNZh>_(hT{k9J1%edmYQ_+q{?M9jXwtL`!oLR*w(rB)Cj5Wn^F12@pZ8d zoPy0l?K;c47za*ecw51?MZNOSi!F-t?0qRkHNk43xos8=lsGdbtJf3pMTqw{Bd9SG1dcqDR|HwJ*9ano&K=dSQx~tzK>| zXm>UK*8bz3+$0#ynt2h|3Pzt2M)1zZ*q#((>tc}CCUzxJS|fKjx))<^NF%de zHsK@v&Ay@eNl!GE;%;GXJeRH>5nhOSR#@Grnk+3?MuejMg0EK(8Iq9y0Y+fZ+RCsk9BP}`R=H_NI)k<-$Sy3UE4?zI z-8S)Ne?U+d{s>a=!YoD5E+PmCCW05TU=++L(_QpL6(ro@eKI z80>sMXC3y2FXyxG_j{i2`+dGYKc903OISjxkV&A;D&R6O0SqP3zBfEwBEJpD12=$5 zJ30bi4L${Aft?X$;e%KOZ1&WCN%#_+3DO~C2y5I|_FJCXF9~0QXM<}q@NQArZDn_O zYTq0cKn|I!{SjpoLD{%5FR%C+5tRpCE-L#`m94ZS<#Uz%R@ujZXVu>ql%1Mk-2nWF z>&YqLQ)FA}Q2G0lBIpAffiax8Fx^%5O`yh#P+TXi3SMSCxxYxt|tsWS-tfb<~1=g7lq1J(!E z7GQZ$o(<|B2mXtn^1@LK>;Z-;-D^61mkiDLQ3>nfXI^Zjn z-(W$+${!t7cDV3707g{)ixxzz1YcElo3j5q z3I*R(cB%w}?4tl{aYszu!{zqv*pP(aO58lYg*!K|wjg0C_@c7ggX=7Eb_S@&&&jU< zmV$?X>w&#a1MEX09Hl&> zeqbwb8W+i2ugcF`la2!!;2p$o9jCN2p9gjWpQ!w93xd9fP%E;Sy@bS{S0GM(GcvTB zka<3eEMzmD`6Px~fsJs(lttnBwZb1@M-hP){R`LLxJTJUSW$yf-^1HT6LD-q>d@JK}Y z{}N{q;W_4pVz1zwinon%Wih=KtR-x?n*|H-2dck0R^Jzj$xH$TSc;IV`yqzsP$v&{~D1ek~C00000NkvXXu0mjf D02uyC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8A%AC-seal.svg.png b/server/routers/bushou/images/60px-%E7%8A%AC-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf2b1a00e10f821f1592f56e5445966c8e4baea GIT binary patch literal 1134 zcmV-!1d;oRP)%WY@#eG3jC@Hx~;mw06UPyTGMiRvXk?=r7kuH}MMcr_Tp{gIz1QEppiG%EG1w100;ZH&NC<`jne6qvR3cIV z>#Eo8djkUl*8QE30gp1$BLmj`osa?lW~6(1_{;*<0cm+T$#aif8_oc$Td-fQ*-lMX zS~9#KKj1Y5Y{vm#vUW{CHz^SzKk0Tx`bz=ZO+aP#{yOklN<_$jO+G~A*8!8Y^m)lj zOBwLzi2S)m`kZ8?rR@DaYWFE%0BY!(W!PPkth7S1FoRCOAfSKt+5oiIo?k)*-5aO@ zIy=gE2mC52N-E$qFb0?eOaw-t#@)D0<}OehvkWoX0W*Moz+3W%9I5L@uxLCuK{7$= z*CT1saXPIk51Y5Z%WOS0#|k_2O%EGTV*dmF0=5G4 zP^+QlKB5}??d^#u_po7CmyG;m>4qKfJ=~qzBExP)7>Tls#N9^!bl7%54Oh)JqBE^f zti&DgGwfv}z+TO!3Fs3>rVQ1nz@mEM2S7i=XB6;NvsoNUY+NdVle9eiJVq@Ebxvu| z&jivNiwa;D{$uV(V4>z;uRZ&OnyR*0Du8Xc13QA6oqdRSzM0%`);vTt0$sz&Z#|oF z2XmI(grz%hFv4z2)+P~Q!!OhTmO7S94;h$DY3aHR#`7mmC{0+!@o?6-6szZKa=hwsW{ zWXe#ByW^SW>3`he+h%q;Tr9;F{Ew$^CGg7d72UYgk!r)E9eKMweaDhp@Hew7o}A>l zfc=JjS2*T4{0{gf0ga+GkT3ear(X(qYWVI;LZDuu1YL~uMNhx6*k8iI_;R9=3fP=7 z-uCpH>BzerQ%gal0yh5+JofaPZlqt~o`i@Y6|h;3?|$;{M!HczOAyQ+dZ>p_+Tqtk z!aa0Sze`_w*krIb*i-n=&Ps~;rhNZs+;RAxNJ5}Ay5QDyI@_@W{tAqj7ATD__-ZTs zYEkXh4Eic<{HT&H_Gl}84`2tJ0oF?jlq7|F1J0KosBzoXW7ik(D;ZtM7rLy7GXB85 z7xo4iE+bQpp5%)x_Gs{Ia);6M>lr0Fh#Ex=`2ypdnwyV0&SVCC2j~?~rW|^}cLmCu z3B1P+I%;1#I925S=N=L&b0YS(PX@K@6g|dNEJsm-Rtc6l1o$62=)VQ)D4IdQO<=Ha zx&5$rQ!?1g${&i3sKYbYP;L7*_UZaEWqww^0mc=rlS7zFqW}N^07*qoM6N<$f~0UC AU;qFB literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8A%AC-silk.svg.png b/server/routers/bushou/images/60px-%E7%8A%AC-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f760f9a48f90e0693bdfbc675d72bafa7b629bb3 GIT binary patch literal 1293 zcmV+o1@iidP)r|PUnMElTsiZbMG#Cwrfd$!MP+3Ny zgkn*sVF*d~(gYDnQ4v{L57IzEK9o_35+P!QSTxZ@S!yX(nrYqB!}8?4=k9feefB=* zT;KQYzG7v?TI`( zYR|)I3LKm8Y%VU&x}#PRd~)RZ6z*Zcq0Sv$>`Ly$-9g{Fl7=9-R$-_D5OzHDCoG5&l zK7%2+9xqECvX$okEe&U!Ax;v8@ZYKz-G%$n(FDGkVTRi0`v<}Y>yvm;?Sc!~jXSl# zdRz-`6Xs@;pk4S@Jku)LD>$mbyi?&G$pZEX>vHj*YsXnwg6|`3e#Df!xEgK37{{dP?~%>Ih+r zn3T0$kcWtBF?m0Un6U3KM@TC-mi)F7hgR@EL&(HRqxjT}byS5p*ehA+Ufhd;-QFK5 z4C(Igy;wy*qw#Tq|7)@kQ4KoqnE1c?g%Ev{u)5^kE}T|Hp9AoM-lAhcFf$CrDsi#P za9El4-z2oTyN3Sf>zT6d#Mqh?)PV8$O0v*xm{y_vlt|lUHS(B(9o^c0B!?>JG@)>p zM0lkTRm)+3-nFr!y_tf~SYhfEeZ&fasjyI(Ye{SBY}Mtw&n2`k+B+$E4Z#Wr;zr$Q z$I=9XT|#uNwrIB~!AEynQzy^qLTWm!9w+^Tnp7#dwc-&t3G)+tl-jy_h-QIKysmdz zSL?brPx4eKwT+put^>;*$Y_@1{1iU!Q(0)yzOJ8geVBx^F(^gbHszC&B->gy<0hd4 z&#O&rF=Oi2c)InWKVDN_SZp0HU_#?5r^jGnEscrk!lO72WT878kop@04>^U=n^f4#Fe?chY%*()k z)mWr=MRGeH#&H?Kx8P4b|?2%&rwyEjs_t+=*16!XD&p57moi{Zj1BetO_ z2x;+u0j*EnfvSKrg`hQ27y-kC5wKd=gcO>_teN;1%p$=P^aqn@00000NkvXXu0mjf D#msr4 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%84-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%8E%84-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0ecff12f1646ac18952254fb88d539f2a07cd514 GIT binary patch literal 1218 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 LNkvXXu0mjfnUVI` literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-ancient.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..44d7b91e354a989e1164aa981dbcf123a0b8bd92 GIT binary patch literal 1171 zcmV;E1Z?|>P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rf0~`)E5^Pnh^Z)<@n@L1LR9M69*v)HPWfaHpPtv4m zRA_0iR8iA3X(x$ki>X3Ugl;Upty~CV#Uf%s>%zSV{s9G{xD$&m>PD;RLaA>>(IPb| zN?sb%*e0Q|X+xTzq|MtrE^;#@lSwjj?_|2^nZ<>3U%qqBJcw_dzX1dK^=fye7^%*-3U!(_c~!j|K66T&OD0NJA72RGi+gi<0&q1dZUy*WY>a#J zx>$d<&J$j7K&3icOt>tp#X5!!c1UT|tWl%tth1B)^yt;6&jo|h$qQ(MgFbiBtdRF_ z(hpu-?d_N4mD=rg+oi=W4a>fqQJuPV=+xnA@lri+Rhm7hMT@<*f=`{+t~%!#+JX;gcicWbnTW^G=7tN-ddod) zQN_D_BM82>8N4nC{))~%rnpHw9C+W%=j8r?R}Q z(t_Y{@~VDG6;8O6a~)4+dE2ApzrEV-ln)q=Ez>}5F7bZ}?(=LiaDzQKqiq@R)Dr)9 z(edSE;3vWHWn1RV5`TNtME9>eR;>npd{GqnfM@*-HrbN|yc+{9E(^}3l{%wiU3_qr z2C~-bV#}o;&PT_Z_~0fLB}_Q*x*JmSRi;_Cr-r&-vI_z0OuM5#`779 zR_-tBmwEU)^-(sy(&LO@{i16Lcp^TyGFl*Wc9&KUYq4AN0xgk}atOmt`_W0)GLeoa zjW``u_+d|LwJGP9fG+KRciOeg^$f)arx!##>8PWq)#82|@t+AJh7Gy8sF2cvvSi@v zITU5T{#7@YSrukh7Bb~|fD6~avl!0QMhx&+OmG^1C)u4wV}g;HKVyOW%#yQ?*BCtE zJcX+SW#~;d2(%#;E8>LU?};@fPp<}E&9+LLjyhQWdTh#{NypnO&ZR_jiy_(`SfY?tUc)0kES6Axr+{m>NqeMt z!aV;EanI${9VM{mWA^sjwpR8(ev%h<*%suQ0000bbVXQnWMOn=I%9HWVRU5xGB7eQ zEif}JGB{K*G&(gjIx#paFfckWFw&|f@&Et;C3HntbYx+4WjbwdWNBu305UK#FfA}M lEiyP%F*G_gG&(UjD=;uRFfgO{o=yM&002ovPDHLkV1lum8Mpud literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7f00a39adbae4a64ca6cc0a35509adf519a6299b GIT binary patch literal 944 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnc!+6<9yr`F0s7zr)kTF(l&f+nHzcg&ZZ?~27Y=~~xho^JviCd?^sfs4y2*nz_r%kv_kHzNB`ez8Himl~Rz8?z^FsEq^_@e> zn)6CmO<@SgVB!to%K6mye9brG9ZGYQ9h(m4e$T$bIFlv4VAi}h8&5dfU6T4L()0P| zm5Js@&;FBU%bC2u;zJMPpL@5o=S-`cYIbC^g3z5MD}IYkO!$%XL)htH=7ey4^-k98vc`?vIOd`Q*mxefA$&vbx|_R z&izFbcdNPbe(0UPN7Z|pjHKC`#=CQr{CGMU@>FU(eoXlID0Naq{IBe}rA9Rgt*M*- zZhc{PzkQA2<(QZ3drX-sZ!6ujw7Z?#AG!MVd%JI))jC_%C+8X3Id*MUnR&?k!0YW1 zZVP?7rAkF!t+;Yxb%Yw$1mp^&Jo|b%Fw8%Aa56ZSCQA z)bGm5q)n4t#$kAF$Gc~e<@$GWDr~cTKYAy_1;yTmHG^8v*bK#4nE|vS=YPjFN z$|9VroBz-1$VCmt+iid6{WqKNmtkoS@3B;!d3wNPtycptHiCrZ2O#vKn)C@u6{1-oD!M< Dntqi5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c09b75a24913ed9dd5aa7beaf8b5d8a352825e91 GIT binary patch literal 886 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnc!+6pey*aI6B#*Lk`)hD02GJ7a&|;Mv!?I;&VR9o8*)x0)yK)aUCgDs`k<1d3lm2N2S>+`j}ML>=DfN> zZT$}Swe}xWHv0&xxy%rdo6EnVU|z`b?mj*9zQX3!XAHbAgxm_ZPPUHhV4WA}YKCNSC8eOoc{x$Ns_O9IuS13UMsL_X=e^nsgm?cY-Y{kpMJ zB&J(BPnc{GdgyxZzwD%(viq9y+bsGcmoHLY6n$;lWvT49Mjsy>IV!;rI;+8_nZ?^Z`nams ztmm)4P0DQU=d!tUf4|Y^gz|d3e~uf%m0uobnkN%-q|wn;21qUc-Cc1+B`hWIs`OFU zxov{%$GYPmsC_>3@bZto+=;G>TsnnHrA~yb_{4bA=EiYWAYa(H`s2L zomNl`TyS9B&Pdx+!SBjs?yER=iM%w^%Qw@#HTktwag1Wy0Y)Lqq9wO1ST_cMSLlY}wV=Gew oZ36=<1B3ju?V%_da`RI%(<*UmkhA803Dm&g>FVdQ&MBb@0E4V%m;e9( literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fd08565e387f0867657b716155a4c92deb698056 GIT binary patch literal 884 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnc!+)cB01J$eO{ukmzo42d}Wc7}JhaG=QX`pXfM!i;AY9<#9u%yDf^3OKTr zn|s}xMcL+ge_6VIN#1#BUa(xFNnuA|mr_We)}><#83B)1oA#evoGGU_=h!wMwYNTV zx=o%Ry3=@i?){(hXI4ME!_EBpMi(`IeVUzSs=;{r$&BZG^1os)%-`NrdG-BMlkG=y z^X?zC-_v$RcZZ5sq4$)e#0OhbG=K8vbuw*tZQZ5H)f2J7B;bv>g$kF980)+@=dEv@ zR}ogZ7!bf=A-8sp3)8JT&-6Ced}7*n!uR^A&3jbNDseBdUd|fLCLNR5r997nMX}DL zv__N6O?Qpvqy#^bRp@f;Vc`r(Iph*BLAI-Y`P(2o zUk~?f4zE1sEcfA9GSh~QwiyyC1`>}oG>_$8Ka;%7uuybgURu(p!e(X7zG5b3-rm|3 z4s$JzSDZWWXY>6V```8VsHH0blcs8kYeY#(Vo9o1a#1RfVlXl=GSD?J)-|#SF*LC< twy-iZ(Kax!GB9}FoaT+9AvZrIGp!Q0hH3ZieFth_@O1TaS?83{1OP||cHsa3 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..883b4e78684773b16d38e84ddb8cfc8f5056f821 GIT binary patch literal 832 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnc!+)cB01J$eO{_waOa42d}WcBZetu%pEBdT(zXg}m@Z8QPglm&7?Z-EAe3 zdpgAQa@V>chU&EB31##P2uiQHK zZo=FdPiG$9HuvqHZ~tvJU;dx-P^E^;_s5<@Jt1|!oZEdCYa$r+8-ELGPOLBEL8Ntnj;=YJ5`8T`|of!?=QXa`_tb`}W5QW~teg>`2a^ zW`5@YgPCS&Z`45<#RXJeYm@KS;6#wGCS+P$oMUk)j#>>V@#WKfvLiSu2muV zD}!RfSoKzVm3r=d6kC6=>~rYZ_rG@-uIK;5dU#gxozK!aR>x~YyPBE*tz301wDY}J zqq0%*iH1@~@yljTatjqN-AO*P^M?gz(wwFJj7}{s*NnvXO^9=wso>kjBmAX&&tdV( z3ze5jnfZ-eyHq@l^n7d&l*U!BeW+V>B_{fp+wQk_@6{Yjyd0X zuEv?fQx>^(dWHAA^EH$2oBy3Fy?Ci@;iO*|ZWlcA%(=VbPgbN=ZM>24ssqcJ7FU=T zbWOb;A-Usxeu3-MN4ZxYcqE8~GcDio>d%Yc>vl}c@qe&EagW00`@^x|bkkD)&IHOcfjBAP)ek^)9v-ZrTRcQ3R*uTwrl zl@q qh9=qu237_J&zsY{Q8eV{r(~v8;?^+j-o5WY4Gf;HelF{r5}E)C%wM$t literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-bronze.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..88f4a6affbed94eb543274cd358de31ec97ce4f2 GIT binary patch literal 889 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PnczyrNw&+zbyjFH+s4_hD02GJHtLhxKQM{{aW`)$Btcza#XT9BC+zy!L9`E zCM7PuM~fb)aBx|1HCgP6o;yb-h9yuli2b0em1KyEVZdyjf8Cxr-abX*Li(A-e8*0w zdcKq2FFfn}wBv>QfB(6+`}@0n$UNs{*#ESUK%-^coBoKiO9jc>Dzzhp*V*k8B!cI#5P2cpum&rVi3SsZ7j z{nd4v@6+$C?lI3TlHZkXJ(Bos^K9Lmq~^MkNrATWo-@U}@;(xF-u8WszWf&6f0-Ti z-7NZ&k9LJiJ{GMwp#9;&t`ikUwKrr{eDqX07;tUzf`|goezSGL1-q{tPCCfD-bk*5 zXi+dHWj8_$KD)!N`Ez5F4=s)ZLHG|YXrN_xp$)6*Y2Mc!8)+qAd3X7=i3=~hRX zGQ~V6x|Q8K9DGOdpwQWMs(bs-zqRz6kl|X_)Ke0Y(bpL^WuxBrGxiQ4AziZW`(8ho zbi+L@`j1A^!AfV-mL~3d997AUq3aL$ZhWxnp?+t;hHLEIOxp|VHYV&3j~BAbFDac< zTxH{U<5kgW`5DefItP_VV`s+Zg(@O1TaS?83{1OV8HanJw& literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-clerical.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-clerical.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7919ba4cb538dc68db1c1f43de343b6d420b67 GIT binary patch literal 970 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnc!+#U%3&TE7I!U-EQu42d}W_L_f2OsL55kN&=D#*@$8@JyanvL#E_D@VC2 zLOf}z-W?7`bJ3-{o5W%|cL~IlYBou@lq_`;2<$MEb`5CKcGX^CB6{(b!{jX)Dl=7l zJwB%&YhB-ea=z#DRJF*x?^6>jzV9o(xBK~=`+JW-0LzHqxc?e$hees^@e{ zeRFU=RHwNyazgL6UjbKHt{j?Vxc~Q^_Qa?xy>)l(ierpQN_c}cPQO?aQGTvt(aHzm zCZau4f4#C@>zgK5hT2ws|{*O`cl1ocZ2mxrnsd zoEt5ZT6k_<(CHRawU-K5W&6Q--h}I#n##JW+KTEcOS$E*K3{rEoZoaobAC_#q9+!Y z4;a1aS5m02vS@lezjpPDSuInxM4NhMZA~~dLvg=B3YebGAEuU&^KWe~D7gN$%Sp_r7mo)C-OHUU7E8 z=YOB(3inR)`Br_jJ5j!;>i!CCw_a_tpw*W@ecK&7oiEl(#LQCU+1XjaCh6-Q#mqD5 z&Q$Gw_B5q*hxdTzvISU^K$$jWCw)@)MYFejn6&raqyfn1tVPyQzG;Q8Z zjJ|o7^VXN?s>K>@DziR)YFX`)@Y8yCg|PDj?=$(ZnUm*LCFDKcQst;sYPx<+ zToK7rWO!w-0FU0b*-4dG)6az4|8tvckssl^$g6t2$EIx?x9u&t zzV_>b`h4}~C>O2LW!8y0yVrkgKT(;SS8{4zitLBGeQQ3>&|a5#s5R%L{e0D1YmOcJ z$GB5-YL(n8xj4VuihI81Iu%$}Z{8d5|NX*$n_3U74LF~(P;$E%Q}D-wYqwsjsQJJn zwzr?ZuCaaAqT7+eud2SizwLjp^5Qg?hR!L#q@Y^j8c~vxSdwa$T$Bo=7>o=IEp!bH zb&U)|3{9+zEUXMov<(cb3=CA6r`|`=kei>9nO2EgLr9!%GEf79r>mdKI;Vst0P*lU AnE(I) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-seal.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f30726a9a70ffa22144829b492c40de5cb14d503 GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnc!+By~^d?_9#bz_`HE#W5t}@Y|WEy$%NmIQUOC`6l?=C1Plh;2|8&DF)0Z`Q&h?L5$tUgZX*`yg_0$7rMFw8ZO()HnrDfB87 zN!^*%YOJ>{R*-G=yFdTh6H_A=QRUw z#fVMwK9@DeA7oi&k{SG@v)MkXp53zSYN&iyyOn#e#Wd4(chC4~8mX)~x$?5L^tG!S z&+sw)-t*_e3Kxyw=WWHS7E6A=wx&T%?P{u)kj*-7mnPMUZwFSf^mDKA{IFw}&(&h} zYfqk=JY86JPb}%2UHlU7?FqNPcuB|_tnAn^WvSJLJq71wE4ij<1irg8Gl!SIuH*v_I|s;ZMA$qmE6nDz};gj6T&8 z*NBpo#FA92CkWnf^NV*VOMLvDUbW?Cg~ U4L+9r;Xn-xp00i_>zopr0L={p5C8xG literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-silk.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fd112fd1997514fcb745e3d6554e474edf17cf54 GIT binary patch literal 1321 zcmV+^1=jkBP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rf0~`+)7#PM2e*gdkF-b&0R9M69m}^WFR}{y8!txN8 z1*9TTOpNudScOEa7E7@fiPUG+#56T&XpKqHgsLCfnA*m~lthh9nx?O$t+7;$en73L zQH&aSRC%a?ZfI$MP*xDF>>@6U;|JGqX587G$1a~ZHzCVCXYT*bIcNU&oD0J;EFqE+ zL0Tt<1V-a#02gjtxI+s(l?5zdHd9EJ%?otWMjMq}ppGZO^3q6_u!~c4BWM^6q?!-Q zJa%xFK23lx#uZbk8mv_k_PDSsgoM!%}iE4U+lR7il$t64i;?|+MB?FSoPMS2Q%voZC z1G|`h6^MQgvzj^NQYM?PWkN8RE1Uv$FixSj^9w(7SF|pmh$vCp#RkeH*71yG3^wAh z5l=iLfctcCgIf&x+eQ?5d`k`8xTxSD3w_wU#RJJ(5AYMeahh7%dF&@Jt!y?=&zp4; z$n)`;IoLEB3|j0|$4- zznwVn=-H=*MSMv`Kq?Usc*G&{Nf$|F73VoZuHGn)Vhz7?Pe<%tRjlx-SM!HflCkn3 zrK-oChiblIBeR&vR(i$xe_mQ=k*K>(Mqtn){#Su~%%9{lMrQxEL_bxr)+@5@?)DG7 z$0uYT$JnTHAY2r!K2d1G6q)g+Kj1iu=#dyZDPcXM{5(-8+LkCZa~0dq59ID>RkcC5x* zlM9-FpD}qP*Clf&QnK<_rDg_QXASP_j%)1C`rRIMu)z?uJ?ldD;^175k3@+ zeYq^|ZDbAAjY5?K_B4rl3LJAXR{T}WCSpisA}QF2C7M`bu`trhYQ4B=p^{VjDlp%Y zA$i|=9Ga-6kxAx2C$N<+L-lnF79*~XCX*a;m~D8=iA3sicQPMy5|_a~LO`ICYy3{S zcIKMSN>(vnQxD;x2|LZS(1VkH9^zzx2Y7g>oif8&NFFPh77(tTJKW(WHQb=z%*|dr zIpmS+=gSKpoo|A3Cy6Vz=yW<5{(Q&|A`kSQ6O6Wd;yvU>{k! zJAad64W(m;Wmtwlo&o_gL3?GXN%8;y03~!qSaf7zbY(hYa%Ew3WdJfTGB7PLGc7VW zR53L=GBP?cG%GMLIxsL|Huod|001R)MObuXVRU6WZEs|0W_bWIFfuSLFf%POI8-q; fIx;dkGBhhNFgh?W6KhYH00000NkvXXu0mjf`m{QP literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%8E%89-slip.svg.png b/server/routers/bushou/images/60px-%E7%8E%89-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6090319e1b593311cf6d0f416a8f1c666da55c82 GIT binary patch literal 852 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 Hu0mjfW>--u literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%93%9C-seal.svg.png b/server/routers/bushou/images/60px-%E7%93%9C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1587112c7ee3e0185afb653ff0bbe9797c0b887f GIT binary patch literal 1452 zcmV;d1ylNoP)F)T`Fyg zU7}QM>$0`&Zrgo*IA_c=^UmeWnKSRZ!9SUtXJ($~eg6MB^PcO#e++fCCIB=6hwEcJ zFjkz80}choXnO?M1AGVc00*-sD_ZbmpaYl=OaoehiTaqJ%SOxJz7|;NfTI&!1Z+Un zNV%Y6g$*&=ryGZ(fYrcx8ROOhj|1C*L2Y@yTxi z>QnqrCn)%wLfHwV5i>=ru-Bkk=OkOTx>$_8o%WD2i=`$b%P5?BDN2ZqG;I^Z_o4qJlYR&bv#P5;9HyLGuMbbUQA4>i5K zonW869GGFj4{$4ZK$nMPhzSb~V>fUQa2D`~zSaQTn2nkbmx9Mw#FP#FHUd|O^Vt@; z0JnlCTf{VE@O=&VP}|cp#{L7Bf{)Q5H9S?=HLc+m{MLCO$x)ygwLX<4<^*9|ad#zHzQ%tV#>^J^ z_a-?C$Ufd`9#Di})7qLR?EYA9uwhI9wXESwbh#h+!7wKG%7`n$&B8Vj+==Q- z0Y1Zg%fzZ>mT)ClK6#VZvrE`LhB<6Taup~-@QxJU(}1Pg-i4YSnV^)FR1~T$xDh4L z%liO+Bew{67dRpzcGTc`{E2$feE3e`w~b(}_2}zQ$HcY~To7oB@v90x(j=1l)42rq zl+F#^zf9ckq7v1$2r56hlH$~i^g}*UA1e}rbdz0{2Gd~g6!-A*Skaf{Y%P0MD#Qm%B z=g7-Y|Mw*91fJ7&CvbF(-&j+E5-tRLgoaU@WMQ1I%YCR<+XQQb?R4MCh2VBweopj6 zzDe9Somj}lJtqSW4=x0I4a>Ti``dImDMP+F!uFPOt!78AF%!QLSrFrMjqthB;5Sdf z@8;sJ?aCqhkSv$u>(0gA0`fDZ6Afb~0(S%75-oNU$pe$M!gsk1XXD=}(uz#d=tYFZk6ObEyhWMy;?Ut(N}lFcY|y;FkgaL*j4mDu870Bf1y>0000TIh@^MEluHROjOF>xF0iH zs;Fcx#{pA8PhcDF#YrvHRVp`POg!kxvK3F^YAkG(z$9G-_*jJ(F!wNaBlxjWhB00_ zKNAbkTRAt3@39Hr6`-#aPQwO4a9V9QT6PMpWJOUzi>To!vvCdvg^_ze=+8?kpR;oK z{y-QXw&W35bijvWz7YIkEE1aXVxf;OtbCsnDaR$QKZw~Z{{E6b=b~~ zr<@ze<8Vfvi%X;nC*vkul=$t{ypEemm(X`l#L~*~WZ&(tl%+UJ`T+M6F2rb~0?Ml4 z`M3fX;5?xj4hR7@nttxWHF5-72D7jp|0(u;{I<}&8oJ{buM&BKg<9&7b?!q03a|iKd9oN<*Z@^=T?>A@IZi^h( zQ%mcF>?_Jf{8h)brLkK4JvlC9U1=;aHPU9SZS~+jp*Eww4+yWRmeQ|U*dg3f!~Q*d znBi{~zE1d?EDshVIX~-!Ad^AglVUql^(100ZWA6vt?A+VGKA;hTI^RX^m&|`ufy@^6llm&3%Y-e`A)Jun>rG*CVWdR8En_8~RlNhb zSy-GuYFQx+Y|)^fX{n+nFepAC9#YUgaXT}F-%SO5X=~*)hXFi}Cmm(EdFlKQ2-uAa TH0^@m00000NkvXXu0mjfV5=we literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%93%A6-seal.svg.png b/server/routers/bushou/images/60px-%E7%93%A6-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5e020c9d756b21e55e6abd7bf07551151a0ac5 GIT binary patch literal 991 zcmV<510ei~P)L;KoHT zy2(OBf*?c}ZbY&$x==wxL5w>EH@?LeilWRyG$b*1`KG5C7F+RIxfcuPHHbF&eHZD{5{9x79`=H*>1%_TDDKYSWK#j+mTAHre$+Fl6 z+5Rv7!XLt1FDd#6ZY#x~(vI&-)?%NO*5Ang=PVeO;5o_cZ@9EkMHR9PPfKPW7pdHr zT!!7k=%mzt`;OyqAEt!aA28mepek8|kE9gdiQ^kpR3TeLrB#^SFJpnRkT@0(n^{r) zg7X^GRS6?_T{8JTc9p(QV!QZJ7CqX;^H)oyM?i%u>v0m)1P3tQgxZRK@|Q)|6JW;+^9(V79OoeT7GVp ziiu+R0w?zve{VZx3TIX!FejVDxb{zx(yvOUcj?}TkK~F{%=T(z=3$)}%(rk$d)ts0 z-xdbG#@TZm=h{;H=POZ~fg$O>`j(kv*xRKv-!HD-v$0Jw{A_lmnYc~}oEB3w-PkB* zE{gtnr|yIMS0uw*vn$QSP9gB+Iohqo9?8&)IJLBYR7?f6#E;YKg|2qK7a}+H&~`cA zkW3%IW^tdszqEZ@B}y}}N)kENW6Y451BpGNOSJHg1zcB;OQN^TGxkZHrdy)!UXf8> zc2~~_Gd%^RRBzp5a;vOr-{fKk2E31eLbzWVs?;&PPx;G!d1(m6* zh^;!)^Ch#7ZCB%GY5w`5Is{h1U80sQOn-|@j%c$%%uu#ORvfMBS`>`qE6Ma>JcJwD z>mv21aZ@uA^D`_)I)%Az%RNnrtCI8av6*HkMDfv=4C8H`h8OKcs#nHzP6X7>ToY=! z*<1SjTFvK1{e};gK7U^GxlzC2qR3EM*Gk=nC#Cl^&Zzm^sNXR0rVleKuUcrr@I-q( zu7Ss+O&I>Ly*@#_=Fs;n7k#;f7aG=58^x1|DK$SVYa*rLnf7`J*EFP|R+fr+tKwCM zUY<2Add8)`{6w=->SKr0m)A6`r4~k|X`USoYpIR(;_>N*riJt+{{s{M9R!wY`XT@T N002ovPDHLkV1m6$tuK%&tyQB?AH_}+?ZZS<7iU5`7^jx5O3NXa{i9tf^_jfMUfC<1{RY8T4T}?p>Ae z{Ww0rJNO#kVPC^FJ?O_$^x-5d!=<&q!J=9lJ95Mrl{Zc8l`pY8htD27slJ!{^Mx6Q z0gR~^J0i@`d8r7q_k`d3BKXYByQcQ;OObpJ;NP0hFY{Uq~r1m7KazrpVq z?ug(!6UPgQ!gPX1aD(j0Oa+f8_}-W+>KweB5YS}XDkKfp3fb07RIm~cV9N|XABiO( zO>gw!2OOTVjeQtWzch6U6Wn6Wm&W}#8Na7&H#c`FHql73r(%leNOA4L=9ffg7aoo2 zFiocQ>onh0F(_n1qcwj^gbeB&oRTxXhp{K8kIbx9|EN`kaXk}Da6KNwCl0Nzt=MPM zJ%Q0_+!=k5!N*eEFXY%Wi5ohfmoUpaA0?*2OTAO5s@Eq=xPI0Kgm zWtk0<^XC!yDx7nc3xslOqu@1V230ic)r%c0H=JTQOZ~()DwJ&IEgz}x-Sy>$Q!Ewi zRWJD5QX?vuUiD&s7Vi)~6GfL$8uzuEm7Gl#E%=Cr&%YGhUQ>z|+}ZH?xPsd&ofYcG z@P6S`f8Nq>YKFB{oO9$k$&r#b4Rh`dofuS1pGO}QP84n_FSO#=Xyz^A1{_^lbOrFB z=KJDplHUqyJ9@EObJ1hMN#UF;onXh z-764DwnaFmX^Ue1&GPm1WUJyCZIGj%FZ_=~4ADEa$@X)Za2TFP?65W~5H1iN$t+_3 z6iztWl6!?&xK*)xa9JslM&wkyt-08bh2b!77!Y1X-Yg_5yM=1WE4We{t-+=7AF+O# UNu0vWaR2}S07*qoM6N<$f~O`IdjJ3c literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%98-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%94%98-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..376c2fb08d0be045367f09f10cfa95e967752c4d GIT binary patch literal 909 zcmV;819JR{P)x-kBq(T%MX-rtmBLE2P&*478@p(4 zCs-)>7YMduqm?2AwXqc&LGT?PXr*X0J}x10@3oj+?#ZxM&dy`AH`x!Coegu&%rEEM z+1)b>6%`eoOwUSBz=H|kBG3iAi7`MAus()kM{WSkk`_q9gd%6{Xb|IU2#ipGFw@6sA+1#cJaVXgCs^s{`yRR=*UxL>r( zkkaq7uAL>8wk%uLFN`PbVy08Gnl= zcu;9mG<}**+LX@vkCqLUmenL!HAihqOJ;xv4tAm020Rkis^Gc&hCc)Ely)(xS=Xuv zuep?7O@f0iTAe@@VdqYS6+9Numn3L}LvaxJ1e}TByOb$?IvMj^Ab*mef}0)_kxVA% zDZ*DyRCCk{UhBkR;OHmCPU+G`__t`+fme=x+RYIF1Uu-aR9T$Q3j?(`=iz<&pq{Ra-PUx6N}xz zQE~lTYnVsyTymZQhH}`2W+QNu!1f|J0@ zh=Q_?2JjR(kH?0b@1D^ZZ~*f)>nN~;){|J8u3*yBu39c(-ohG~b%5mDz(nv{a(o5e j120(q)>ctbu?G1ENdeFj57#G@00000NkvXXu0mjfb;GKF literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%98-bronze.svg.png b/server/routers/bushou/images/60px-%E7%94%98-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..97807ede5eaac4465b9876f2c67c269a5af2507a GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJy;G1O(MR{t5x*A9}hthD02Gd&55?CRF73$MY%2wr%wM?4G?b(}Z=S?yeQd z+2XDRiaP{KAD)`Kh}%5L{E}<9>xL4=hzU*$qqpWw(Yfv55GA-|;}8BTmo#RDIeP!| zP^-W7Y}X0Xxo6JIHlHlH_{8s6wtKt3&-uRh`=09ad-G3B(F|VZ^S|_I_La9KQRlY5 zzB`p~I?LhzHp_y3zdd^8SF=2$@N52k|L-&1XJ5BeaiM z%DY4_EOz$O|FkWk`Rt1=oU?Neh*f?$_40!9drnL5vL9Pzf;}WY9)EF2ZEkMYn{~e) zG`&sO@K(Qcq0pA7zox-n#@NRq-fW zux78_4)&S{p~ksfAMYxJEL(EwX$kv`OzCg$CH}p1t1Z}f%_YOLywU!W(227WGrnb3 z*2efT>!07-Xx1dpazD7f$amV)*CuZROcwYXJncH4{Vt={@QVEsc^eV^&-D~}q^*>&uU@_rF+!tTgPi29)_3cD&D24At{L&_Ao#TITRy*E<@s|2s+cW~PQ0_pv@#`ju^cUFO+?iqGrr z9$WPJ{k*(O-_O4I8F}aa>?>x|!zLZ6HvLqP`?b>k*B=@GHQ52vABvWo?7Xr${b0A+ zqQ5&9UORWV{q&{By2^202i}(*nJRkv;uc%m>kNMw-&bXYp53uNrp%W!cH6DR5!dEM zy6=rGy%n>VPohk_(0WhovpvbtyZ5uQ$$VOQl;ufNp#JOJFNr&seVi*7YLenmZ=)0Y zb+V!O+4TQ!Qcg|Ly!_w0o^f5ILhZ`S9`}LiU$w+Fq9i4;B-JXpC>2OC7#SE^=o*;m z8W@Kd8dw>cSs9vZ8yHv_80hcWb{<7TZhlH;S|x4`aS!>5ff^V*UHx3vIVCg!08it= AasU7T literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%98-oracle.svg.png b/server/routers/bushou/images/60px-%E7%94%98-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8c833f459dec4a733e162ae69a3b4e03dd1092 GIT binary patch literal 1393 zcmV-%1&;cOP)g;!S2OTmioH zD_3R+<$e!1$2Q2cFu+g7^*WD2Wr_2H&&|N|^-O$#Y719@WnM+g2EQ;P?^$3_8>CtI zgu=VtpIn)t9Qob>+@%fD6dqA{H~Nq$LzI9{gLkVoP*eDCg}13ui897T3h!!dU|I`b z4lHd%qKt8|!YcuNCR0;*RN*b4wXJOPBo~+rP2ow)JD~LVAb6w#clQG*B9tF-M{2tS9HYq#;ybC-9+<^GwB2vG4 z%`zuuVH@7Z?#y>1{_#@aQQ#dUhfWFrT3cjO9t-tw2y0 z1xJ97fTxihJS{r0ClFO|2|NxeyeXud8!hQBMIxhBzzQU&C<2Rt@nFme;5cv;_!;WjE!zR9=(j4gM=fUcdbji6@qJ!ZFv^SyT1Zn1in}9r`5G$S)WZ|tu`H^n`(vIkWg}&(OVPu~yP(b;6CXabfTV}( z5x3Nf6bZVKB0vukq^v|j!PM=K2*!ZtfR{+_CAB1$BO&1s>8!ddm@_A^4gD;bMp`bL zeBUsuu&^F12Oeamm$V;g(EZpniRLkn*@OQ9VgW)-&n(L100000NkvXXu0mjfUYC2} literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%98-seal.svg.png b/server/routers/bushou/images/60px-%E7%94%98-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c32aa67de0295ce44af1db1f6bf4552a976fa019 GIT binary patch literal 1069 zcmV+|1k(G7P)3SQw2_3!@E+Cin>_UxFNP7Vj?X&F$UZy_sbp@=Gqav)P?} z^WMDKd9x2zSfLz^KtJ#X=!x+;2Y_e5ec*76&xzy=kj?!b#Q2=Mf#>|eb+i|&lnn{? z_Fko~a&!fb8#K?-8oVuVyiuvE9Bo2w^;M)bcwLEOYt{={c0k2w4Ne7)>y)}mv4-L~ zo7f1i74jOTzA#!Wm1zyG7xE^hzA!deDzi3tzfxZqOUhvB(&v==!sxJ6W#()7}5E#Zq=HtMLkY{*j zS{j4PMdTjh&8@S(H)>qEL2<8^G2a_C25YB7B4`>NHjn0kFTe8AZ0w;ScJx4nOX*W{S>yR0=l*GPsm|={gFF z@v3F0#$cK4$n~)m^2>v&cBU~{=Cg6R^bR4bVui+Fv$9JBauZr&BRnT$(~n*Ox`dqA z2+N+1YbRc(kX6-Djlti9yjjzbGDw3H8{w})mchk>c9zf_{!U@wI*9##%U+7xX!>!j zTKZYo$DGBLb*yLr-V6O%;@zek$uZHGhu9<_TY<+E8~egQx0**3HmZ-pWWN$>fo@!B z_a3gIA&t%ATwI04XtV=QDU7D$z;oa&E}D`2~YRmnHy#mv?SK9>e n1NaPl0$u{|P!!x(_+R-4K8@6E$#_-L00000NkvXXu0mjf!RP}3 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%9F-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%94%9F-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8db62b115b1051162a360344f2af79c59b51fb GIT binary patch literal 974 zcmV;<12O!GP)K(H zk@XWq5F9w*LL3}i2seql3n$6CJGo25&sD^M1BtkjIEaK3R{UJ-#_wWh)-HD0b*P@5 zo@b}KUw3u)kp7aFd2gn=U)8+o>Z;cb85tQF85tQF85tQF8O=pIuq16IlA;$F0$u?N z0?6lpg|TWBGlRga({}jC9t5U=55VfE69@Ts<6x(&ztKnbIM50#1r9`=SkvGZ;0SOc zfb2R~f0>W0`wv-ZtCWeR!DoOQz&W7bM|Qx~Z}*WcxcZAj=v9ZN!N*+vH9oR=SKrTw zP77IIv<&W~-pF1L**5A|wX>0+L(bK28iUR2(94LtF<#^$n={58fi-G?mcceg*sPLy zo=J;i=OwP&lDRT&3Ld|i6piuE5W3V6m%*(bzj^%`CYy}$Xb4^E&@#Bq7@IEcrYqn% z^T282yOF>eHNa~nY%q=R%6m=Oy}(7+aRs0oNjXb~?ESC`R?#weBEqqoo#w|wr$s`` zrKc@qz1)31egij=B4XC^*uT(P;fjT<>F)P{tHyU@zzpyfcn*9CuUb7?2HUK#Ip;Ir zl9C?2Xt}gaLSS=SQYQ_AQ$;gqO$C(wFIE`feZcu5S3FVB3R)l$b(PaU3hYL5;S#bt zS;8)ljs;DFp8&g@{x+vI9hxqETk%}6p}E4hfXhe@+<{a!qrf|4i**<&GPVLI73cjY zcu8$v`h1cTr?oGAC#88)Gx$YH^QLBSY7fyggH{j*kTP#D;d$q1iFo`LB z4kXFQBUx3o^)r83SwW)t1d^UkBAa#Jfgiv(=d%KQ1l}M!A3-uZRW4AAv`M#L!1gdo zM{((Kq)<2aowON8R(Kp))nVW+lG#}k)ull;%XjFm$15fyz*FEg63D9MWd#Y0Wh8o+oi?VZyDx`;E5HM!-kl-&OP<{l6Sk?Ty~76k&U+b}%Y6 zfLk+K#FgbH`;-ftT37cl^)5=464mYEi3-uv(o)g7)V0FLK&j<|oytldmC9+q@@Bt& zd$!tm@%w!z|pW$gNV4FCDq(%kt>r*e#_TEWUkJLbFRZ zmbScHbj2~(QDMjHigM*9DccXOEKQ5~Ua7J)<*}Dq3UkO=o6md0bdD`yck?W+14-j%;wSzpN$0lT z+5U?4dR5DvH*w#hSBBm$$>eB!An954K&0-(G3lHu{z128pZY%+WIAZE`m68>%bP!{ zpB>LQ9AqtX^``Zudaa3Pwl;0Zd1e_Icxyq(E8UAVzNMzN8<$kN);`bsr0cc(i+q>I zB=IHrb56NzE?ro)v?;DjdCKZbyL~JDR%=V|)ezYoQrvVtM5BK5m$g%$yI%=iAKUFM zQ>MlwyT~tX%kN8@r`miga-R2hNvqTQtZ!#Iwk(+cdXB2fdAFG%r&g3-SULa6Cf2uG zOn(|`+&Fx|s<|&exkbBR zSsZhf*fMun?#T~M2v#nPENHXhn#KBj)#9Md59*n3du+Sm0dh!EZ!T*I3?^9n# zsO9VId>wk`zzK2hr(r(p-c1R;75>Kgwo%~g@(}q2r>^ZkmS3>7+5U8X!Af)8qx^Cu zF;yQVW6o#9$bPzT>ZgS8<=jrc$h5SdHX9RW`|{R4aAEnj?c}Q|iIEi?vzXJPrajF1 z$1gEg=ppZq-Ig0lKYm?pS+M_U&Iy?x^G<(0f8vq;{mhV{qiri@K4Dg9%_-sx@?kt& za^dB*GhbHLD!S^Va#lW>;4CP*M z<((?s|Iu&uR~z-;zVfv_1}8ZfZ09`h*W1zP7#67XF}dZ+_Z9*DjC7~4NBlJxXB(fJ z#rT{1pXh|Y3Eyw+1m+Xf64!{5l*E!$tK_0oAjM#0U}&LhV5nSnU}OOyBG0B1%|K`emox_ z!X@M)z{)-~$gvIt|{qZxUCckr!l=Or|(%HF14=&|9)=-k67~#3fH{RywW@V>WQ>g(IZp8a;35~$!{|}mS{Qg0eADU6Af%~6SfJ9EPXn!wqkP7 zWq;}X>gjBJr^Stxf8U(-wQxZouffvX70#!k)EHQPuFxsJ%lXnS^M#0_=!?*t{|pst zei;|Bt|^UT=8p4vJ!4Z!Ba8N``ipxFzRhi{V>n=W^}p+!HLv!T8`s@iT(;U_gA>z^ zHNWgy_L;%k9@;y^5$eYp3=G+ zJH2o6#RK2xrtN%vUB!LN>U|GnC5m)zxL!SX`1T5Wx#)DiyawB^774R0Em_;QKDYU5 zv1+UB*NFWL+;xrJb-G{OK3jxbw>o2Bm~`Yxg?#L>A9ibN=h;|JI~lydW1i}#wR1g! z|Jpq7`SyIK@zWXU^CFFw{5%tW>a4tEwm`V0Zn4VCOtyFG*V(o_@GYL7zl~MrMt0J! ztOLP1M!SwJ+kBDzQm@(dRoe=u#8pN)Z+bVaeMQjs6Wxn;-BY<7vRBXWxTjIcllFhi zA`K^{t{Cj92c}=u64!{5l*E!$tK_0oAjM#0U}&LhV5Vze8e(8!Wnf}uYOZZyU}a$N iOW=(;iiX_$l+3hB+#0%lL%M+)7(8A5T-G@yGywoP#gEhg literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%9F-seal.svg.png b/server/routers/bushou/images/60px-%E7%94%9F-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f947e39499108ea18660d9c3fc368a2de8c75ad GIT binary patch literal 1081 zcmV-91jhS`P)r5FoNw^j`26SoY)@Y7-0yq!6 z1eQefD>fV^zw+)3(Cv|QANc4!k@U_O@X_cD%VD=WKsTj1=4z?06FGq}Nw`t!Zw}C1 ztT|@0)ZZA+o#HS_xK8S?4bZKPFn$|Q72!D-OcKsY{e}Qt`OEp|qc<(}Q$SN#r&O3E zJR|jk2+OPVsE^)|BA2{U$Mqf#a!mI5icdlZ1aNa$`}g!o)!hTN$0v-6;-}ga;JaYj#>S$4gVVfyowA z3?b@S zzxE#3k|=`+I7jJ3yMaUK=g!u#7x+jxlAnN!z#0qw8bKAJYS9Ip!h1n_1MITnV!UWZ z?73yK)97bU^AeA66YfdUxQ)7Ww<3Q}(zp%6y^5@+m9e562#+Ue+y>!63pVFqgYbj} zn{%*1coP58Y^<=cZEMF}$g4rTpBo*2(&TH<)reDyl+&L;q=|2d7%3%}JrO0FR@}!Y zDFlI>!_`0wumacvY%0-aAFve|DRG?8c!=4|C`>yZ#o0p)kV1ux&t5VjCt7lG8u0KSE)o(lE%t` zu+CYNF_Z)04q#zY#%!dA>ZPKA@bH7iF)#@ zuH3IBe?Y#n$T&BE-v}~I(%&Y$ZxVnYeHpkJ&HZ3h0oM^nC|T^KhH5(y7vat_Ag8uT z;Fd0du<2nH;;h%m%~nKiJB3IAM-a}BAwqQ$5k;d;e^inO5$Di@zz;(Fj-%wmDc~TY zRMUp2EoBjh))~j4TpMv(P9AggCWzq{RK{0u%yW{<00000NkvXXu0mjfqv7^2 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%A8-ancient.svg.png b/server/routers/bushou/images/60px-%E7%94%A8-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f3c6d8f30ed94a6523939f004617e78e7d02fc GIT binary patch literal 1288 zcmV+j1^4=iP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%A8-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E7%94%A8-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0410a96ed13ffbb256e452c86ac2a73350b278af GIT binary patch literal 1387 zcmV-x1(f=UP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0to^pDvNQFUjP6Eb4f%&R9M69m|bjCMHI(>T}rX- zRv;DxTDRK|x@A{I)E1-_j07|g&_qKFNmIoHMML~bOnA^2%Rq=MUja!Pud&Kd{K|> zY#U)NGr@Z%{!;mS%0lm6c2H;!oNF^TgRRU;I}-=)vCv%3E<(JXsl{a$uu$s&TnKDq zMW(>j2HTC~WrG}Du+SU_a%i;+Hg~|u7qUeK(G?5LVF2oA%*^pVm%c0b%)ot!tBQY* zg{GI=2n0RWhS@pSVl{f1NiI`LC3P%N+%YCBG{-nk6%b%O2lXxfU0Ig?iMq&a9s01j zOgR8|*=WBcWo}cd>sD=+FYV4s@gs-2Z5b*FI+xd#9WxP*tpIhK&rF7IZ6Ex+nBMdvF8G&Gj+g2x0 z2I`Y$0vvDwllmNYcgN3Dtj2$^5I=q@sAMGp$4!s$3!QWlCQ3PP^M-63YAl-u1AVJ) z(M^uCn?{zTL`j>J_{bTy+~8PFPe1Lv!%EA#3>9*^a9y*5XU*oYtz@VV4ooD&@D?i)~g5zm_(uH5iWB9la^# z_uGqoFU5Ydn15UW_gb#uB}fIul+eUJ#-;oydDeFvVznH#TP&K$&n5WjljA(92@)ho zH9qEAY^R


0fU=y2N9Ut*{ z;m1d*ZBOb z$RIJI^buv$BvHu;3V?TMNmbvXohW;Fnk6p32{cR3E;n23p)09HnWmd=Vnm5Csdz&S zF`r*mAGyr+sVpLf2RO(^bH^c61b;xiYJAesDJeOkbs;}WttXAlxm=O#v$l}`(8p?% zi!^|DN}czO%-xcCiv|}<)GFZ38o(i`^F@MnKhu)g?DFGUOv<-u9rif{g26=U+$fic z*woczil5MFE#Ob2)+=$wY6OB4EOfoZ8gkD=;uRFfig2MKJ&X002ovPDHLkV1jMDZQ1|; literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%A8-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E7%94%A8-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fd7e5204c7842c1b1a34e908f27c65a6c2b6a8a2 GIT binary patch literal 1051 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-@_)U^MUEjr1-z^v@);usQf`0b6e*)gFK$3ObdQOV5_S~JTh`nS+zi6}wN zYe^2_fjUY@TUTu9T6eePF}LV1b`GUiUUwoz1j~;$Nw3uw%;k)V3Gsa`G284`QqqRW zUsNsi(t^^T-Q%1*^YW4DHs#-~zt4GJJMZ(H&vS|+x7P1@TV9ZQp#ASIqX+UVvf7OE zM890W|F_NR_u7qY($nN^)E{j7<-S_H=IT+A4{`o+|1Is5EA~45j`9nR>5sk}YxqQE z+Z4^iWjE6d^nN7X&(aNEwqdPLCF`3G?tQikeZp3Juj0t*<$mX_5&WV^{KdB0vt9Qd z^If{rtsviNCfod(n>?#K@5zbZnZBu2q~`6q3;8{qd0sOg?`IV6iOyaya=$ewh&1m`IL@+vy5@IoCqem>kDu^tf9be zXA2dV+ZS-%-Ly^WLQhYi_@B<6xVcCDZ#~={v9QiR;?QR6dB?dI+U1{#6gI1P5_P`t zzVy_|#?NDOEyVP9ss5_URCTqe|Ad7{t9;Wxw_S#Wt?mZ z6t^DJx}w(;o>6%xDB5+M?46krx8LYQ-d-zb+B0pE>a~O-(V*80X8#RwNwIzFc<12+ z{nXrTH_v6yH+!(!V&&Iwlf;5Q#OU-_cYig{KQ@K$Y@TkF_?&`UTQV!({^HF(sMr3e z!bZy?E^sZ|Sx!5zyO;fs9yHsnQ(?C7Ijg?8VdX7u8+8_5vjNhmz$VZ>K=Z^vRG3%uy_Uc z^mG2fx1SZNZhg9f`Nij;zjFU|EW!)bb^fw%+MjjaoTbwCYvONK<9DksRRw+cqjYoQ zyce(_v^H?jZr+p+eihjYz|=iKmL z)?!W7pZVV_?oHj4eaEQECTZWq;NrikpLJJ%%ipk{p?Bk_sL~pn3BVkrTH+c}l9E`G zYL#4+3Zxi}3=A!F4UBXREJF;8tc)$JOpLS*46FqRrm` literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%A8-bronze.svg.png b/server/routers/bushou/images/60px-%E7%94%A8-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1cab519eb65794a8ae96d645856d4a8772534097 GIT binary patch literal 1258 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%94%A8-slip.svg.png b/server/routers/bushou/images/60px-%E7%94%A8-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fba0701def434943778214e3c85f20709506a8a6 GIT binary patch literal 1236 zcmV;_1S|WAP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc3?2X^75LApX8-^L+(|@1R9M69nO$fUR}_H1)vP9Q z-I(7dF^h>}309J*4fQ7$sv;;9#Rv64g-QgG3i@PFAAL~-MJNiTg6M+^DvA{iPK4xc3NrWDlz{bc>_HdF4sK@{0F~s#Tppg<{Q7kdpv;+hB!m5pWvT7 zf(;Df{7RPn_N-xpXPciZxB%pnO^7fhOretb%q3_G;YM!rn?I}Jh1r|(l$?zDY7!8YQ&<(>NFK7VNKgCZ76H2psr+@a}1?6#W&;e<%7))GTLVZ!87 zNC8C@QpkMoU_H)n(U#OcE8+WPI>}`s;ebZ4! z<^s;v^gkuAzS}>X(p67dV7;~cR8nZt%`=bV+912<~ezcM+{H#Kl$=CD=76*j6JT8z4E)%v?WlLLKH zVGof}xn^RIr98|UMLCUu!Tu5bzhhX^L05UK!H!U$TEi*7wFfckZHaapfD=;uRFfc7g9Wwv`03~!qSaf7zbY(hi yZ)9m^c>ppnF*hwSGA%POR4_0)Gd4OhF)J`IIxsL?8l{f_00003a4nJa4ShFGSUS%xKc!(~fTh%Ab(7|~@B zBuEPCLpSqVWD@luw1f(b0<-#15k+YQWx1ARDdPwb`9MJnuBmdFQ>~ zWeHnxd{$a1}6w81SqQcRtW-aSOombfqPaHee7j zpcgp9gL@fp+~SS_9jU8J7*_!Ohyg>uMIPK`l>eA<;C`RB8-Te9XiN;Vfj-25B5=bZif_h_N7Uo?1 z9eKR%$OE4!-U;Armp1PJ{!!eAla(9~8!<Gx!M8 z;6)Cc`M{{+YbyQcYyElH&`Q&Bmi~$>td^ph>4g66oAL@_LlY%&S0$e zO2;lm#9gh*X~c6%#0YRpfI9nBo%=%cwF+~T50G(+b^&H!@L<4t`tkQmwrey3e_|Tl z7NUM^Y*iiaB)9{kW8$v~esl`(8m7S;Le!0gshCN)c5nLs$RqPyi|zy7K#olO_Sz0x z-A}^`kBXaBr=2dGCM4an3RzXRA|vYOXmkOafR$9v(FHc{{-g}@!zR^fDepW1xE0AZ zc2hZ$QLb)ap6a&=bKUqgiufqu;T(0p&-y$MNz0rWMT7%RApu0c`fU_h14?}iMrk;T z!86qTu=Ux6%)w>AHOS+<5clH~JBE-bsT0_PoHO-1@J7`A@!*onh+?o#uIX$=0rW+gPcN z-)l)rfiI~1bFYn|Ju+rc8Tc2GL+cedPZfJ2{uu|(6yPr0-Ow#@g~wS$S`f#7r9;_K z63>>;CkRj#3`BU(8nke2OmTH;op!wwHsL%dMr*VNc*T|67t?g g3FDZaS{-TQKQd}65E`MmmUp~!8$ z2g2r?GDpiE{de%QbTv{;A)7!W_ zMdr2F9+Qk}o|WG=XjuMV)fp>q&GhU}dhNQz+_-|NlGA4~=>2}-$LalTmA{Aktfb(` zRi+OnOpaJC5j{6y&Fw4ulXCuw9=la@CoN>QX{qLl2b<2!jB;EPdu;7Yt2c40lVaXj zB)7UMa~%tuwC_OR^m$))H-=t|G>`ZZvg5<2jd>rxY|PVSWzAtteN}%dqO{L{XYK{N zits-beXO4Lk6*B_5G(k=9!+{Wj-U;DFv;GHQS*6(@1wb(R#ho$`Mb63LxdU&VV zHO{nJ(qHJ_bb3MmZnIUUV%56FeOr!Nc-=9aoN`A_b=BIoT|7do_ZKss?%}W4Y#;VI zQsvFX4e8rcntRLg)MtJy*?#Z%#Ra!~H5qNBLtYwZiu?%R+1~TFdq=wKInB>H6V)Q~ zm)QlnZP}My8h+4kxux}1u_fp38;b=zJE_;Vs(sV7ob$mCdv$DIcIN$LE8cayAt)g6 zH!z*3mbgZgq$HN4S|t~y0x1R~14Bz)14CT{%Mb%gD+6;Y10!t%11kdqo!H5SC>nC} aQ!>*kachWW(C!6lVDNPHb6Mw<&;$U~004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re0Sf^wCESULq5uE`_(?=TR9M69m`hBRM-<0@l*{E^ zrL?i2QZXv2MiN^s34JI=e7_f(hBPTLy0D8T#@MC_Y3o8`)6g_+Ow%?ox-t@7Nu;rh z#%PO=D~XjZ6i`bcw~7*hP`O?%U2yMr&wTfL%qXxRoY~Ab=RfB^GvAprX9lKZN+z46 z8DNW9%zTQNMK*b40R2Si=RQ4j(ncG7V@o`PO;l6GE567Mn)!osv_J29yudaZdCG`k zY2|ZfK0ECWT8$}_@2hDxH3%JO%N+(BE;e@G5om z+Q{qtXm^U)4zSx1^PMnw&&AHm9Jf)|deJUqzygL@>Vo=KnCtYg_CA9G8R1R$U~7xl4F3!vo|dmnvsMQ))q+F`>l4B=M68B_2o; z4^Aj?f6}Xati}jGisL#U+z#^N=ou^)TkGcNKNC`r@=t>ecT2I+FjnhC>*b>Ui>i70C&y~)gJpLA-i>_DdYK1u0BfI=e zp*`U~zV!?%*ORS|s8tGazU!Mpqk{X(V~D_)w##J$OC0V)5-|-Yf2n6kL3K0VFQYh? z@|bXm8VUtwg`zF6owb{3;6Iy%Ft4XNyFDuHVwhb@TP2l@(8>i`33Hzk+fd;}iYVhP zmQmrb0xfKFy};Y#V}rM?E}nR3WBg#2SS_Pv44#`>c*i_X2(VY#UZy3)cB7Y4o2%4v zLD`EsCCpL(!&PTYrL1Q)@A|&cJ>W7|Xd8!=jp63Qv1m}0WYCCD&+MChT1F50=J z@hmYVQ!=ULf35k}Rk?_}U;qFBC3HntbYx+4WjbSWWnpw>05UK!IV~_TEio}vFflqb zH99jlD=;uRFfi(HpQ``>03~!qSaf7zbY(hiZ)9m^c>ppnF*z+TF)cAMR4_3*G&MRi aH!CnOIxsMsEhiTM0000 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 P00000NkvXXu0mjf|2G?K literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%96%92-bronze.svg.png b/server/routers/bushou/images/60px-%E7%96%92-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8c4ac5c510aeb5390ed740e64736783281720a GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k9atkIe3+g=4u1wCwaO!hD02GJKZ}&I8mU%{_+yvU7b+^U0orWK_3D|7H(Ow z(zc63u11DM`-QKjoK0878u671PWh@UriTd}>0Tfp;I*Hv zUwdoUQu6rUZg%79lV?)CC#R)9pWnFa%G38n69S9QOi0{6|AwDeN8MkA*we~Rrj7c7 zrgg_H-pW^;T(tL_{?$OEDS|CZ+cQ3F-_xha!Joai_U}r*;=@61stii6lx?~VQZG&B zIJD(g$L)r>YJY`Q6ZHSCI>?lvw)c!QgVB>6#}&6fC=ji05iwLc;>naK^)vNH+{+z& zK{^KS-p-aaunKvaW%%<~>23C1AtIr(cJDDiaNBoY-rcg;R9|&THvuc3ZDO)EhZ(27 zFy=^d)_L(l)mzPG-K*3MSHIr68~8o9`0oR+5z zK3=pooPTBwXRx+tnB<2~CAShUpA{6JseV#G)5Ol`kavFcQ@eGaj%4)l>+D<3vHJ?2 zU1HS?XNj#5?-gXitsB=E98{UGJ>vL+YZs6AehFN1Jx$tq$1=IMXZ(#HbC@^ZkTy4L zEU@D!(Vic`BVAx5P%`5EFT5}y6`hNu9^}BgM=6sXqx7x0}YkwxBKhS*Cr+ifW zL-=j8m(o9G8|tty_^~j?@o>dRzF}tQ-o3n%`=9Z_(n;&Kg;vadC2--0^1X>`&5Em} z3z-d0XzDFCT)i)HoAH_GPaLevB9}SHhu>MZcB{uZvoG9EjkjL~-+i^gX8BzGSITxL z%cJ+`-|$^?%koug#+(J+YmazLNS~LNw$mZ@U-3`gM|Tc?^|myz2PRn664!{5l*E!$ ztK_0oAjM#0U}&LhXryak5n^C$Wnf`tXsm5uU}a$NY3W-&6b-rgDVb@NxHUBY2;BtK Oz~JfX=d#Wzp$PzK0Cl_o literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%96%92-oracle.svg.png b/server/routers/bushou/images/60px-%E7%96%92-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..62c58f6515288960d2a1f6345987355e7d813979 GIT binary patch literal 1106 zcmV-Y1g-mtP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd33Zs*fS-HL_s^NisP$z|UlJp^x2ZlulK}l&PNMI5{Nr@+7RM?3{nnXld z;6d~;Qf$qLxwf_WZq2)c#(Li8d0*eH-A^m;6Cd`9Jq{U-xxAoU{LxwK{Ie za1S~(rW^Rak3h^sJjI*6e@Z{j)&GO=OIic37(yH*uNo^@DN3e|_^xCf;} z@Ig`Jh~VNB>K?)2*oxDbW-Lshx^aG7;(82L%-~M6YMcylO@;NDs4l8XRj5s&x(sS` ziLc}B@p_@euOovyC|Da)aUG8PHW687j=Bu)fE7CIh(}zH-JVE9KGjx&_%qz3!BDK^ zs=?_@v8c`9ZbzfL<7IXC*#B=UlpvmCHFzXma<$l#I<@Z!9!jCs33`nPmgjfr?-e|n zI@#X{p7x61k-_R*X@)|u65X{$FDYE`{XLv#BHbGsf2%-GyZVV zn73cBH9y74bNrYp`}{cOt=46|6?rIrQLuU3o2y@NU1EK?VLw;yz^1BrjV4EZQdHSC zS!9>$*u=#Jr$44@= z(rNu=K3kkHIML5el@&Lp6jLbkRKd#{+#gHvcY+&=BEO_Y_2j3h0Y_sIzpbyR1L1_> zvgjSDxnc^|?21(6bKjRmFBQC*S1Ytk+gVmWG&FXH|I4;Y@bGjHSL@77Q&IZrN;Ybv zf^+uYu|EN8Z|ke$khfz1001R)MObuXVRU6WV{&C-bY%cCFflkSF)}SMHB>S&IxsOh zGB7JJFgh?WIj`si0000bbVXQnWMOn=I&E)cX=Zr7c{UVpr zW5T<|%db87V{&h2d!E1A&$eEl*@Z_7GtK17J!U=LoTJwDedlA=ikX$iYGxPd)~tNA z|H;`eq3fpDoHx1_<+;f?t#IqY+gu;`OpZ3}Z`M2EG^3xfzmf05WeqVGt-O;}%3H%@ za(4u7P`8#T0y57|3wd)?*>Is=Xho3E3i0OTyzGOPbL)Rh+0}6Sfa&$qS>A>V^H}F^ ziVK$6ktH5Xi^BDNa7`ie2cFRV=@@KbmuPhbVJf|GVa|QH928iDp)r+1Ko}Jf|Ix|8maz z-LYip+6i+y*}r>Div224_3HK8yq+C0>wm0zl4P^(#quWwHa})OneF=VLEXvLik#gW zIj_1bD3!isZ(l!W*5Ceb+`^l8_?}-?kO53^swJ)wB`Jv|saDBFsX&Us$iUD-*U(7U zz#_!J*vi1d%Ft5Vz`)ADAnfWU2NVst`6-!cmAEyicX0gyYGCkm^>bP0l+XkKh{0lM literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%99%B6-seal.svg.png b/server/routers/bushou/images/60px-%E7%99%B6-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..791f0bb30672095bf1c95092359c8f14e28a3b1e GIT binary patch literal 1431 zcmV;I1!($-P)V!eIY~r8RA_~ngQ6~iZUh%1f&_6R3KB$&C@QGQ zpi$9@CNpDvjN_uZz5hMkRkymTZboo^2z{n*_386>omW?PU=^!aMF2CvLEzc~x;6vX z6wotNybLS@?-tPYChq2~Eud>?cmqfH`%FEXfTc>;4Y@`s)|6BROjO6Mz`6`QJL%bW zW0pk*!y*hW22-&^ILh&Z5#VBk@dHuA}it4T75?1 zdC7#wtK(>3j{bH`WF?&1P@HhWUE9Wak;g?o%`@LOUgLx(ts0>fR{ScmCZF7p>Wo~% z8mD94S^X}pE3BDWZ%XKVh`-SdlyK=f4t*IK;BS$&pNRxzdy|L7S%9&v61B?#BaD%Ah_R#@w>CMKQ#UCViM!0&@iYoY|Nyd^1$F_DBnmI28KEb^MQmpsL3nDAIy7912P|Lt0^zy(m@NpMo z6{&@-~KN=udhd0Y446o)@Vuy^n64j?bmrniU)GHp9Qw;kpf^ z5}pHY2R@CQud%8P#+sIK-=+XKcYZzcnytvG!*Ao>6HNmz(!Y&kp@e;&Q8ymGcJmwH zUf}(B6PrklVa0yn9^fnBQO_LRi}uCvqGx;`t`f9u0(3^nhljnM@on_Sr4rV0ZDthD zQHU&*C47kXXH@%Y^N7ew#P@vrMUGJxrFT56TaEw^nXy@se-^oJJS_2F3fT28N)y&c zwza@3G~d?i(~s8Ex^&t7tEAmYA4()Gg&Mb;W({4Ue}xZYC1d~q002ovPDHLkV1nfAy<-3X literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%99%BD-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%99%BD-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3531b118d818e47284d1d90a46bb1f851d21acc5 GIT binary patch literal 1032 zcmV+j1o!)iP)`4 z6hbdGTU8bjty#GC|UfrNyFgoK2IgoK2IgoHv;G3k~Av%pMD z`c}CK<)u9wLhuZHgJgJAg;Px`6+U0#AVFNXut|F(40Q zJmpp+`}CTMlDzYOnU^Uft68u{Bl@7H`j3bcICby%GwMm3+09bJdj@mdj9MQo8?xQLJ6 zO1=fzK=c^uR{~|oOrLSC%aAqpD(AW!8A@enPEbMUI;_r;JAp6A24Rrk_hJfhAdNWT zb;LTl4v)`qe}j|aAg5DUcMQ8*yrqQJYD?GQJQ8zSN@R5k>vn07@ml9x&mvpJ_edaa z9N8-BuD;xHu2PDBVR0Nd?a5E-YMD4Z?+*o* zng^Cc$j&Bx-`rW58D=!2c0=2D|`%gkT#8 z?<<}Z^6F?rB8ydu?Hm#qaG5}y8+TF``0m_G2$O%?17<5JXd==80000^*1gIX9ReEQUFA_WrLmXTR3o2Rd}<(4oWlrBbr?DqtG$ z6YzJ5zC@=R*a{@6odVtf=9cMHEGod8{1PY&)wpDh#tg~%DvY(?oEIN?Qpgz%g~+Qg{-tR zo^_OYDz>vlnFRcZzLJ{Vr0ji4x!-_^k$g2_Bl?rN)wBGoO48ebS|c=0s(U`K$N5wtcb zT31BSak3D7%jTm;dq_pCtZ^>_4$!=H`~`dse22`VLr4ZRlu7Wl?kGed8d&tnG>w?3{5BoMt0HpHBdx zhgMfM`F#ZGOGl9Ynxzlvs}qqvIyF$=MJ4s^gJw5|27I~W`Y3QGa>jc+puP)$n}PYr z0M(OPFVGK6!GE;B8jpZOc^AD&ZM7C^po;8qT?$-}OnILwKD-`7{7XeB0k*^t8-oh4 zKjXtTpMs$)t$xS#lY#XVWfa(%xwZ(8ctQhq1!kH1`cln&@55t*FErpG$My3A>#<;o za_zLW$TR4D_!n!TCY-1EFz8b-^a;Cm8D`M@%*c}4m22O}5b8(fS?wvWiXo^_0}d2)ha8HMM{=$VhL&oT?z8);H+4pDKmlJ73~D~hJ*=g9irOFz7^f* z8vym>VM;`8s^nKX2{KP#5<#z<{C-xWwPnlpDx?`_#djlb09Y{x_*~Ixw7U)U#^hm# z1BZ~K7FTxV!^OzE9j>>4>h?Bmd=0t+eB8vLgUHB!7jPN+)9*r3#HGMyWG~Do@qdvL z&X^_vJ3Jk%+W_*?*&bjo`D2u3HVCYwwM|G9dVnX8-OTK* ziU&E0w1CwZy+a+lNh|%j;zAv1`o0)U&@64UKbMLv29zA;W=+UD`k1o+)W80@= zC$7Q@d|#uMuJ9rn^XxEgMPHqws$v*37A8Dr`*41J(yHNY@nq-hC@!f@U1n~yc(QXg zinD6cn2mlMu(X65c%>eh`MAx}lby4zwJ6QNDvT+f@RwLwgWl5IZSllr@Jr&{9X04J z#cE;XO(pvUHsS(d0@8eb45xHmbqVg3PWBMi&bxMd;<|gfsJ9fSVqE&u6Psl0ja++F z7zdU;4~Zu`i46&#%?Y2|E7n??(=ee`_$;=y@%=2~H)@&BwNt(O%o2PbO!#iEL}>
OEexpdvEudSbi63%=6y(Je|Kru@dgy&Lx-Q(}?0!sVihqT;*26^u z(d$r1**=Er$j>y2(pt{(og>G$86;=-l4K63nh z{F(VhBrF$c0qj(zE3cC<1aRXiw2E4_5 zcXTPIw(M5@+V^Amt27-mfLB$Q?6^?(T2}PqNyQ%Tb~cM=72mb!DwhibPpo8H)E?-v z_EK!Z%i^2j?Q9Y^bzN~L285dRZoDfL0b)r`<0IUMGpi7itBBVL>x7+y)i_z`(J}d! dls*2J{0pKMK%~I9cf|kz002ovPDHLkV1f^m2fhFR literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%99%BD-seal.svg.png b/server/routers/bushou/images/60px-%E7%99%BD-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1d63b6a62f796f743132eef39e83d08ea717e49c GIT binary patch literal 1030 zcmV+h1o``kP)_TS52)05fKp)5fKp)0Z|fC-a25XV}A{)41sb3 zm;@dKowzvYgbppvy&>qtVF_O7+$Vxg9ERXBAm-SKpp%CoxK6W&gH9fX;J9WF1f4wW z8vYq{@-PI~YPR1RZUAOTB$pCg0vrSO`S7jLY(Ijx1D}EWIg~4J97atfdVTn|JHC^^ zAs_x{9p4GuFDoacYIuutpY6j}Z_>Yf_!nvS`37Z5iONCJkJ|}>%a%#h){X5B9Xw`GuL@O?*Q(QeMqSSE(1?+H+gaL z@kX1R`);5ExJ|Mt_M#>m2Y?Gex97X-fakzU?O81aMk~pg(caTnHmjRBX)J_Hq^=FG3AiB-^o$AG)Qa)VfSJZ2)P(CPPptNDE#q98Vl+!P|gY!ZAfD6^>T}yg<#3 zKcR*dzf|L{fJ#*PL>CXzf&rE|S3!~w!BdQ)Hrf-;ebBiQzz{G(=EJmNRE@`hwFs_} zr3K#vt^#j?FR1CDEpgzRV~^MdlNNlA)J455KTzXuDe%WOm~<~~Juyf_J%SY@Az1$% zE)a<4rAf0#ZG%Y&)(epj!SghG$TpaSV7(A68NG5x-_SD|*V7^)xKFb;3B>cVMzaI| z$3Q0fN$yH46OP@d#rE!b8za?AcWCxrp_rhyfTxz6L#P*95Nse>3klpOgf?8%;yx0J zDaJLDh3f}SlKY8$95{n}GykZ45#9Syw#0x=V1?&-H|qGL2Y7>e841*IR*X7stw0TF zi&33a8}5Jl_Mq0<)>}N%%mrSO{q(@}>cl$tLZk4Aq&n zqMBnPFo)zWXE~~g4xq-@_o$}Z4Ln92w?x?T7r|`gsTem%aR2}S07*qoM6N<$g2AuX AqyPW_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9A%AE-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%9A%AE-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..355433f49fdb19434849c7715919c1e72a9be0cf GIT binary patch literal 1448 zcmV;Z1y}lsP);)TvHqe@J|<7o_boe)vCR%t)8Y85rQbOMoUOY|7k=* zVvAV*p&=5fB^9v~B1rg)h$TXT*jo{?Mn%Q5)>19iP5Tyq{N{1rojdd9&YhX(HSe38 z%*>s0&hPg-=XZbGISgYM!x+jKHP{T)fje;(j>ez(u33b3!5i3u*U`}|LRGL2dJ}Cu zc4!u{c`0IRv0Jlj6*wiEdAe(ol4)^#NxJLV#a(~&l-k%m8(==+ln<+T6dMPMcQr6 z6!^F%Fu_(Xdck~E<+4orlXW^ODv-Jh%91zolFHWk}{ALpsoAb1CmAsG=N6CSj0Cg(E3aV1AXIs??A<=6shl6!98`F^TVMg&+grC6Q~V(UzBZ zs|6mTe;s*(+A0>4MNK-5mm9!SQ*oMdwOk_Gcuv4ExCuXGjC)ni@{S6G8j0;h@q7-B z!nvaSnnou+6zV-y1R#}){M~p|xTadl!cE0!aYAtyJ`fBwDm`3<`$bYxHyX9Whu}&q zz^(=7>Jl+`rzq}!j<M1yPVS#6he0aX<2Cxesi707hseL0fV1sZ^8-$>n3i8wx zj1k7BOSbxTiyZexq2jsSM}p2`e1b1Tbak;vELw*BMFA}>WRIvy^cC^O3d8cCs6pL; zGlcc66$>-y^or6_OQNiU@MDU2mpJa&JJt7&3e0Z7^EltYXS*ZtP=$GV#UeHhdx_J8 zB*Aq!p+f)hD*Mpn_(yQ)0JJX^hjm$VET~tYY8Zi6QiQhR_!`EJ!b#%f@q5`!_uvK0 ztuoJv;;1G)_FMJah>BR0L1=Lu^NbKe-7GA1mf%mTT#B71JBhfw4qmDp=d8~#p(}X)&CbF7aakAQt%Pq>aD&4l? zf?9>hgL_hhYPq>{u59D7MFb~HM5?&2@`}e)JeM&x?aodqAX8N=O%YpI;{O_uDMa)PIM6(YyfYe}O}kTkJ}yX+;di$wR&PPWdTC?ihL~3H+Cc z(vny=7>u+Mv&9XcUU3_6n|_D;Fi!tV>cbdD0{;My7jc@jnRGe;00003P)8Lz`ViU0OJ+h^(nT{JFXNP#>0!^|oNu4och2lH zXN2>I56=GfTI*Zu?AzLV)1gC$4jsxEg;((-7NM)X?$l>29>D_iG@(Bi10~P1$vkTT z-S|Y&*?XF>@wIHgy%>|q!PLx_b@r_W^{{wn z5SWIGaaR?)|KxWw9eD!Y8$3GkHJ1XgKIG%(&@oDn2$q|-jTt&5zRW~0pFWb_x(uki&i+8m+qW$o1${B z{N3`usJtSlUQ5Uu@J~_sFC5IFH(KcOwQP+@?w9SB`-Ekv9`hr;tvIGdJ|<+!qtu0LP|O;pY7OOMAq+>Fa`Rt}vb!g91#ahWR3%=!n*2J3sVN9a+#*eT2h zZKoRxg@7uxY|3W`R^d%Ng$r9BUUim9A7G!b!KhY$SQC5mR7WjSu`znLUpUs;RPyZ4 zX>UO2&Tuwv6xQ@RBq;Apb|ZpiLZpA6SKZiW2uP8=Xpc0H61qy$4RqcOCv3x~ z_#9tKkg=r#uXLn zyA^LVM&Zf|GF?LJm&UOtm#2yNOtytQnE(bMbKG#N0aauSD`I6_cR{qPhV*DV%ydU-Iq<9#0uWBgA8BQ62dn;TWh?=LcaI z)UQ0?_}Pm&se@>Q^CO3z%c*w_UdOlU2U(b$Uc~7MeQ%0x*^|bXny_)5u!*P?=mue( zt#!pS?5tLF@Qo&I#AACv7`H=SRZ=fYgxRz}s&lP(g^6iI?y~MwY?WnA=y&1g5*yov ztJe`rx8me;TNC=BrzUM1vs|%t7q;1#VPUJV>@04#Bg4gFAWq002ovPDHLk FV1hQ|WU&AM literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9A%AE-seal.svg.png b/server/routers/bushou/images/60px-%E7%9A%AE-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..93a1dde3669f81b22b3df8be6fbb0dc7043e4ba0 GIT binary patch literal 1560 zcmV+z2Iu*SP) zDPSj1XG#8g{Gh0#5_gA>fZfKK2p;1Xc670=Qz z8+Zp84KOIE^#NB#&{KjeSI^>2ntD49+?-BO+>q9(2IeAjY>LzBfwO`0knFBA1YC?H zy(r`Zt;n370W5X&xr`!_u_K~fYn+KhfoVkEvLJsN@U15I0}FDq;xyn0euqzBXGvR$ ze{LHwg<29EM>4lg5fTA54cLoh?GZB1^`NZYr?eM=vP8TJU<$HSs7AGFee!|t zi05FKcF3SJBXPs#I^cEX|6d|&u+DU3l$()FhI=v^M5-9-s0|>QTrJsDIWh{7vvn&{ z3~>1exSbpn`r7gS+K(iy(4hj@fH%5EfNPUh{5f8Smn5xF<7&K4_mE&cs|D4 z*nymcwjo(p?e`NBQ6`Fz%|AYy>E@a87HuS#{_&9>SS<`_(yl!*;Rs;NP_#AqIaG%K+l&;FarXmnBJ*<@a#Rc(S#ucMx99YLQiI=_ zx3xZvNQq}X;#dnZQrY4b@(&UtNyX)Q{0^_qk?vKB&R24zlgIEod{K^cS0HoV)w?nm zO7;D1im`j4T(Cva+lMS~iJ}+d29s8(u}IUuJxOJGcta|M{rz($ijZ3i)rRFsDXYXE z&OaojEDi5zHXKDZH`bYj-(l1D8cEZD|HGI)`0ur{rWwD(AK6wCl1uSlmT$DJqz=Es z9k!K3V6A4$DCUYtY>JSgnyTa>n+hUQ0KBW&^DCC?(wi0G{m8Y)cv6WROI4@W*;FtS zIoWI?q0AVACcGb-_9I{Wq~(8i2OE(Z;8x%qq=>%;aeji6mj3|TV!+>Z+Y0000< KMNUMnLSTZW($<^+ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9A%BF-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%9A%BF-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc8e1432bf2df9c1f870f287e2bf9dd30bcfbd6 GIT binary patch literal 1349 zcmV-L1-kl)P))J?S@O8uaS3WB;YZrrIG5s?N|irUty zNUOCasZE+DOJ1Jr?YKu=jl`+&b9!#@B+CE48+*^IBHCD~xoC0_s*dXdQMb{kg3-A*#j+yeam>bb+=`V}wF2RiA z#lT{P?H7Tg!JY@A2l$lqD7X5059lg^UnV+$hk)O5oNMMa13U+GmO-otUBKPI+nDLw zOrmFjeZaM)vGGI?hWx9ziA-Z|&KPhyM`u5DX1fIY=LNt(shja8K;qMfEe;?`YQ~DBwjggV# z7$=J$316C{w_fPIUeNDdmhKLPA3)glelq$U0^U&Q&k1>4Y3KKX|F>D? z#&`Gj0)2b;opI>N5q`v>+X?(_>E5AnJZ|WVIg+Q8?H+Byd1c}p*v}nXB~R-rnzRrZI1t(2qk<>$Tuq6 zo$;{Ynx^uErbZ~?F%Ji9$6cG2#05F^y%Yx|xdUN#8hiPCS(GWkUYZp=&=QU29nS(wnJe`Zyr!T0W)MTjd(?wX&USmzGml zE*l#oLcUUIKZtM#aH}OBAiZnn!RN8$%3OYoiJ@a$hw>#r2;mJRwd6hMc3nFZl<6K9G=wLBXD#^_kN%xl9d#b3R1V?ZMPqc4Oxrx} z(0x+qo^FO)wn$O?_HZu?n@SDXiEeaP2-$V0mp4!|!ZEgEQbO7Up%ZpGv<^Ju z(e`@LcAG=@X`x$3_uAA8nl=1X^m_`}4ZPsdzdFXvfzK$bpdq{)6UD5;?210{c|)I- zh-*4w%^E(^K>urtRsMqvJfKY@+z8e+*uE_z9EvW|Bb+sgF|rL>yaE#du`Z#IT7!N34!IxeQMjpZNAG@ruE znpqasX6*cAR6i5xO|$Ub*H~0Of%zt^DUnu%3Kc3;Xcztkej1PVClT~@00000NkvXX Hu0mjftSXN$ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9A%BF-bronze.svg.png b/server/routers/bushou/images/60px-%E7%9A%BF-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b643a342f8bc3fcff15421efb60226bbd1fcf229 GIT binary patch literal 1186 zcmV;T1YP@yP)PL65z zAqkFX4Hy(?1d4sUh(e(GQTh@DzKKLHfxRdc^$XK4-6eo#OuBz}@@Y{a~0OvdAp?XGw`^9Ur~4wxP>@c1eOJ8 zO$JVtbp8OI3HHvIMZk3`!Ttc`0yXCWg_2$$@NA%-8SOwXm0-Jp$BeX>Blm+Ma1B^! zq+6FyfuDeNj&p6m1uDVz15X;;e>b6j0hn#9U&FqH!M(`!1uz%*J#nrGd=$Zc4(LeO z=t}rdCXX!nEx;yVLWsf5R0nkgcon#!`fmfXLJZa6DPS;RYd4ZVyaaqs^(9pVc7+(5 z4D={L*ReaqhzFl2dj;Hn+yq_-HMWGx&10lvMW~Tcm;(&gv402n0>gcKYaL^kf%~is z)#0$i_P@XmWE(SO+z19^-K<>b`$-Wvm{!C$UmXJ8DjCsypVnwbjyn2!(~6`?(2oIM zIr`6}HJXu2j=t1SWNDvB-gop3rZt)oSGsyRtw`E{yOF&($+WaaGxCU|?|fR3EYF;J zV{gx(k%dPceGLitTjVBIW=RH(EIhB;gTT24*`|}~tmpp7_VU14s<$M4X?Y7}p(F9T z6{&W_WIeUXMThH;u~O(3WG8BvmVv8AZ!Z=* zbW9j40e2y*8e`YZz>83hGT<$sU8#V4XV7#?+)-ya4SfKg}o@4df!8yRjV2>2m z0dH{hUGp4!(b2aJ<9AnRlD1zRr7nqc+4^m$~N4kOi!Nru`WADez@A!J?RNz#HW^%+R^)dD<- zT(>QyLsu#Lkut<8 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9A%BF-oracle.svg.png b/server/routers/bushou/images/60px-%E7%9A%BF-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..381a22bbccaee5d9d4f6d51b79bce249cd5400a4 GIT binary patch literal 1045 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k5~m6bOpK^o@y{KFw1(nIEF+VetRRfV@jyZ@sH=0~2{0<$cl(&Dq6??%?67&@Ja50vgS~w( zbNsK%e!j-Hs$$2>ec`Y3#A+nYn|1EJ?TbU9VuNwO_#2j8YX$tO9jFxUaP$JG`30_tCkSk#nDzZmNee!|VAF40< zCb88haoS9<G?%cjoK%b_wl87H;KPG{xRi4Mc{`9zTi&fce$)PnkIMN z{%JZxhif0>el@lUsuuAgdz9kUr+)!D-}T^iB_Un^m7)*&Qa&)O5M_-&lN4Tech1d6 zO%IGCCO z-%@YkewUNWx7VBF{;T<$|M4|DaomocyRZDVZp&r4S)rTH+*UJs)0e_N&v|ZKaUjR< zJ9DSTzE8c%WA%1wS;Bul{{5*l;`gMc*Dgss(e_R5m`$+z-_KV0)$bTCZ~4ZNZ1&rr zI_>aIwN1}c)*3{fpXPndTBn8mHvc`XmgBGY&lfp#{Vn@{g^;g*wCDWOXt{m6dv7Sm z``Dmuo*eR9#sBmPyqha}xlT+?_-)`MF$>i>Kl%%A=(L#MVxM<&`u#b|i)2MtP20l# zXQsflvw@%I2yENJzWdCMAM(Q2pU&{Gk2_b+wBM88Zf@wVh{(wG??XcNyw}KTlPS>a z-K+~EuXDg7xS03uk8=}{IkwEz`Ubc;u=wsl30>zm0Xkxq!^40 z3@vmGOmz*-LktY8OiZl|&9s3G1B1F$FGUm$x%nxXX_dG&@LPPE3)H~i>FVdQ&MBb@ E0Gv_8S^xk5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9A%BF-seal.svg.png b/server/routers/bushou/images/60px-%E7%9A%BF-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b579497632b0dc9d7ae8af074b88bb2cb8121341 GIT binary patch literal 1183 zcmV;Q1YrA#P)zotu5YBygnw*_XZSOI8A> z8^~Dd)8jz9fjmjCPuE!qv@p2r)49M-19_5Q@G>ib76uQB{8j^bl6gLzVI|PQ;4dO? zZSVqPc_s$G$2k^&Z3glri+ws7TWbnxybJ@kkZ0){iJfK`{SWYR5*P&?zOQJd ztins&^U&{Mhmk#u0)+h!GgF{R74|VvAH|FI`LQ-92`@pQm%R7fEKPwB0ndS zMlo0z99pm~wwBIBauxMsX2!zc(1LSwzCWB?MIA1gvFy@X3nzu0G%cJr0@PvI!rC}X z3Om|_MAB3(EL$+@FfD15LG#kmY2^)hby&t>h~9)x8rw1sYn%9Hr;?Uk+Twj_SViQm zPBTpB(n)AzJZbS@iiN>);t=OeXDZLNF)W|wjq!CfLzmX(((-vzO+1n&|5-3Q_}2KB zV>k_6A}?oPO|@D|axP))YON>Zt@P6J5d6Oy!@)au#ny7j@FROpqkiHKma8SGpBHD9 zFW0?I8O`atHf+4EY%t7EY@DX?hTnC&FXI_BS<@*4v!TC`{`egoQw=EPocPvrmr002ovPDHLkV1j!4GpPUo literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9B%AE-ancient.svg.png b/server/routers/bushou/images/60px-%E7%9B%AE-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1b72988229f11a92701aea0cb67b389476652ceb GIT binary patch literal 1499 zcmV<11tj{3P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0}U1gH3;Tx!2kdR<4Ht8R9M69n0-vuWfaFhT(9CK zta!B`NJp=(7br!hOy^74AHBLPoi44c*lbH`>%ClQ{?TNu^)mc}gk-jIi^^Qd)D=^M zGTaQKQmGXoq81@A5V@y6?%~Jp{(cuOJ-^F8jdTCFzvrCuJm2T#Jm)#*z!?4CDbAqJ zc#=sWnTgu&pqW;JqX(SF0tzS~GlJ|qE$pM3FKCPH&fG;kGJ;<(rKH9RbQ0T!1nQ&P z#rvHrV*xvjUv$8B%2-7n8B8LHjR-;w;3JFq6j5nSqJ_y`VH0RV5c*k1AWZT$f>0O6 z%i>#w-tHB+SO7;3c@*uX%%ur0S~ZMzYZ}sOy^$p+i_;VIS9f@8z-G|f(ll_MBpLIP42R}jJe9Y z*bF!yLHNyD|2qEB0Xuon(z>2Q$_?@fxoVUlj^QbX=G_Pcc#2cjnSRdHFg-uTbXee3 zZcKeVjCw{ql+Gjby}fyJy4Nq70Y8f% zJYwV2s`tLtrMpsXKSSH65rpT=&e*5tHTd$*1mG2_UAh(Q0TNiF?V#ot9)Rul8la6g zEZbelYAf_9Q*SpA8bty2M+J_vJ%|8Rbn8p?9oaxX4^siuXk=~g+wEn=KC6|Z5mks* zldWsps8-$wr0PUND?Vce+#9A5)UOlT&b9@9aexp9wCjbM;03tLaTuYEOS3F|fOa6j zW%z+s0Fu<*{$&On0ve3C8ZTFvh9G6Z3h)qWj8Xyby2 z3#hX_g!A+nH4JY%0l3_1Z$W@GN+KqA`9Kr9H1z>EY8qwcA_za(I92-Ul-L|5#8Ir# z$NkEA4MBL%TX=ik7IkE(D-?d@QKk?egL|yRbenbOcSd^@qtTxT!tG%XV8;+eiM>|f zFphQv;U;t7?FhnKj-dCb3pB_k+vd+i5KgNTF`_5bj^iBx!ZS2lpgp|L^e}k|g7ATt z#QbU+=RlPbAVgnq{r?&j5 zj3r@tZz{L(A-$GHtt$cWKz`O+<)wj*KhANQwOBFeNH&|s(nHe~yu*oMOUC<|Gg=jT zAG5fd8QjQ4Hts2oQNu^nk5+}=PE$w$;_0Hvk>rfg7%BY=u5?Xr&zB9#0000bbVXQn zWMOn=I%9HWVRU5xGB7bXEif}JF*8&$GCD9cIyEyZFfckWFhA2pvH$=8C3HntbYx+4 zWjbwdWNBu305UK!I4v+UEip4xGBP?aG&(giD=;uRFfdMz{SE*C002ovPDHLkV1hz1 BpZ)*< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9B%AE-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%9B%AE-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cf697dbaa5b2bae9c123c6bf3a9dc30b6c2cf70c GIT binary patch literal 1189 zcmV;W1X}xvP)ZL4taMn_ni5@xpVK#x%1!!&o>Q`4r0hP>2|SF^fDnSG0Usqc7nljO z0Ml!n*9}|)E&+c6KL9@>Ur1dt71#sx1H(C4A8;605mAQ|?*JX-CseaUbC zHF}w^JYZDym-UQA8e*q9c|?`RdxT72g0qTBv3)>O;JCjkao@K(8RHRnqf+)g z@Sle-3)hvh#a1U)!A-!YO8GHsU=MC7Wx)k62VPRjPgnzcpbZ)G)4(ctiBdKUoUsNr z(uhnp(#-O4WZ_++ufRP6WoA&<7wsr`*~JWQ*vBHo}nR`g+Z`|X5y@fthT`- z!gAAUu{e&1>BeOdTq{L0T9`V*GKQ_ou`Xn-dnd8Z|4vRc_E~7ez|_O_ zD#F4v47oXr;NIF*Muh@0*>S=mxI5$dA#uK}vkH!qVsW6^wPIGmMZ@_aah|Vd6&yN` z<;r;1iWb3rz(A^O3VH@4HqNs^>rE$}NE?fu1&NLGtj?MM=%8|Sas)VyyxZ+6vl68_ zGq}x_Yq3x%>vuibM{t@+jQ;yuXTjD>`kJwREVLA^idC@I!}Wl3M`XQe)dM}~k4zQo z82(2oyAND2`thZe%0yz&*z>7OqWu;!V2bTZ`~wyT)=RpbaG4BW&RHs31rHJ^2keNp z?)}N)z-M`PDRn%_!-p^F3}p{+%Hkjo!81L4__928d<^53MIXTzQ^!q6nk6(#fJLdY zqY>h=f{d>_JZJ=tD{wxjb0Eeg)8{;MX6ON{WKLBP2h*JcK~G2CgFeuA@;v_DiPsO?{rx?^LAcPNNGg*{Y0jy!aTIh?F;E z5ZI0EpBkwLN}EU*Aiek{un&2}r2T2OGl&{THX`Gr{?9xH0}sEHcxXss00000NkvXXu0mjf DfCVPb literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9B%AE-bronze.svg.png b/server/routers/bushou/images/60px-%E7%9B%AE-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee729e908fcf0c099aae398e685d94b475cca4a GIT binary patch literal 1133 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 L^>bP0l+XkK6v5lJ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9F%9B-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%9F%9B-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6217df863be8c10565cf077a552dbe89c2894c0a GIT binary patch literal 1103 zcmV-V1hD&wP)5(z!TN&s zMN=%AS~SKcO0ZckW|uSP>?StJoO9eIUs(3cKEuxQ+d1>hGtXHTS)`}vE8#nr;TCMb zTAbT_#hio*jN$j@`yqUXVeBixuhRGejRn5;;M%GkpD*_dv$assQ`nf=xiW6)7MEZ( zR^e<62)Fpn=f7}LU1Xfci}@l%O@mdoj- z@>GK_N%ci@;G05wsL*cUji|i>*QFY~4#D3R+Iu?m*M zs#Js5As7xu*PV8Xb%l2E2k1J6WI^e?f^Cx^uw@?;wzMRioa&3_NW4ZL#cp9%@5WVy zzV~4?)xc#Y9!qcot``!Jm9p*SLLmwHFP_KNQoKvddSUxnNNTwYORIK#K3poSyP|+e z{MF&}2L8q`!j|LG68{uzFX1B`z;D7<_AwsDsnxnZ zKl+6PVxdL620oDwg#TLx@TLZ)mtG~Yk#U|WuhqV^QNN;Pm@f?L6|Sfhqpg(r|L_6XE#ew=arV24*JLyIwwZs-FQa}VGxX^SHV6guZDxOR|ATx`>v=|Hf;;^w ztyJnbYsPE%P}PIiAvi9}R{po(x~mDF*F1hD9G3;GuJ~KhLU{-8;o_S8SY(l2;9r7_ VdSNXe>Vp6P002ovPDHLkV1n5^AC>?B literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9F%9B-bronze.svg.png b/server/routers/bushou/images/60px-%E7%9F%9B-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1fb0b2378290a78d49faa350c7f7a21d056ac0 GIT binary patch literal 1084 zcmV-C1jGA@P)D9d5cJS%MMhN8<)tWs=s}`_vR<-?E|3^eU>5`> z$04mIau}zFrOZBiuRU|-?AvjeFRX|Cpa0qW_d9!^wg2nC_b|isW>!tdISn77g|BNm zW~1DWv4i8bhPBkfi^dJ_LVvSzs$~HG7&knI#~W2tA&c?7cC%x`7jRjFx=QB~Y?3{* z>G2(2#Y4guu&@cSMK}^0aKOYyCmOr(F4p4cdgV`za^Ph3e_xERk1Uq*U= ztE;uq8GU#|R@}p~XLVB~FOO5OHI=)qOyS+KPS(WRIk~Sza*vr{-`7U+mlqX$M8VHL z7>PZXlRFfN9W}weW54^$Csi~FMGY@XZI9xcoZLN;*xa1lS$HfGAL&q6E=3J*jqGoK zPVQhN*2>9!N|^AHjN-k{rB%Z%vcI#XIk{^hxyvGXtHcYJ7s?dgEiG)#CkngV!ou^$e`?mv`p6Utu<;y z@k#3t_u}=$_6f3QZ(rnd^GZ5?$CPDw6nEl29KbAPL>OS)U;Vk1r!FC`CaVrMux{>2Z%j9++>&FO@_kM zW%zZTe*~c(T8dX#=8?_t$uvt0PGDqk;Ck=Zg_p8iYjKU?BmmE`^s>i>^oLZG^(g#uF!7wPaNNpBZ{AVd++%G0000+Ixiv?2Xfn9_)n=h@g-uIG?h> zm|CpVt!?JY?ca;v|8md0|A*c4aPQr~FI?{V-~0Rh&iDI2=brmJ=UjLQYt*DoAW6If zWPo;{EM+c<;4C6I1MEndOJ2Bcg(bj3rCbM01Ret_kw4-e$8~C<#BsbT;22Opid{d@ z2mBp6_h!#Sz(Drs209$`bczb#3*bNe?rnQ~;)7FJOMGyzW`EngL?wWHi!d!4X!i0ufmKJ=2A zSAbg-&aei6w>4uXf>rn=pN{CWjlx2^fzN>_oHKQV$@twd%CvATxgu`>yMac=V2kF% zNrdW?(|{lWGd*{eV+`qc;F={8Q{$#c8?S64UH};Pb0f|9hjaiR|7u-lYsfaTx5mgH{c#J z=q<|H)&O56%G3cKMRMk1qw^5{67F*4`U7A}!hEf;fZR+he4Ix_dZ<8J+PnWjf_#nf z9B`2Qlly*P53m{;sPf^6V&4@vSsP3N4pF>CqpW1Kg?#4QkcwkbtQ6RY%+hw zA=};v@qP&Xe!-lYdn^EcBzJ=FA+l{+MsWM&y@+wu8P)-}l+DqMO#W4|$AOt4yEDrD zHzLN~r}$iOz||Uc$V^8~2RD=dkx>(mLYY<=8x@}+WYr{9bP^Q%RuNkh!Sw`t&TM0* z4lsk@E9cWu>`erhBZ-IS*J8vJH>31AB~A~pRl~P0qTRp9(yfQN8g&HVLa>?{wIk$; zVYK^&a7`)CF^pj?crwAc>i!5mreE=l3Bk*h7?*+5n*M_twwIN1)ZL97*a}v=^L_*W z2O73llyWtOE1b51pU<8%#6MTP68dd4m$wl-4S%z%3)v&q#ejzG4RUjFZP*BYMk$9A z{HPe#v_GCbk6<|X*`#Q7O8Jaoj1f)yO~{mU5X0A-E5W88oAhhi-$vH5jbYQJJ;C>o z>D#z~so+Xv7XkdeUK89m^fQL3;0pZL!cP|U4_Wvc!BnuCFnniGziD2b3VMrM&VtC chj5Mm0c84yP51J(KtpET3 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9F%A2-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%9F%A2-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1221b29a9338adf0ef081ff112f29b9dda33ddab GIT binary patch literal 827 zcmV-B1H}A^P)|;3^Id z99$|X2`(-;O5BJv5+{koOxdoNokX_z-1tlv=9~VfCb=0(n1tufhxxED}u%6Z{1*m&kW#Fe3leVvF!(f`3 zAb*sFCt=v8>kZpoOM3+6l_U(?!@)RxYiD$V;eKV|olvE_dIBIz^VDotKjEmSnO6!> z8(t9+8&wKW8y<>?jVJ}AhCMSF5nHVkpfOg2kE;!@jEMDN z=D{SW4X-sUKW&{qCspT|VH$fY7l4;E&tVM%zXEx_BOWrkB8SxwChq(rZytCb$XfyS`4;FB`@Q@`>w!a^Lxh{CIZSo$c#dG!i|WFw#NRc0iSUh@ z_94(EW0;Rl(Cn#2T%W`2$qJf2<5;6J^1uuYp`S53dlpL{a5wNf^K|I8r7IYLCEzOU zbs#dB_PAX8%^Ac?GI6+2OD;Ey7BG7;@3BNaU@0kL{sJmb=*R>a2uA<_002ovPDHLk FV1grfd*=WE literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9F%A2-bronze.svg.png b/server/routers/bushou/images/60px-%E7%9F%A2-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4a7b158adfd5507465ef27a083d4e7652dac53b4 GIT binary patch literal 828 zcmV-C1H=4@P)I%Q~9LagoZy7C(nnOcS6B_>CXr1Mr&ifxiQJdEM%0 z0tWFzjAE9Nt1v@R(m0Z@ndO{9uTwRQKU_JaE-tPt1Z6cp%J*%YOj(WTqAJaYOh3i zfuRw2yVY(6HYzxXu@smgxQslaYLqg&DP1?ekQ9)f(z_ge-3ab>NC(~#(cdR(A;<{s z$H7mUQfV?l^fR!?s!MuGx5w00NC-#={uxtikr0p${57UF8&gY+#T0l-LO?q3%ZUCt zgwC)uJ-DyX&!hyT&+rr6(|TA+Kss;%xZ~&_k`mB(Jbdivdm}ZtM&J=g-=w3jZfF61 z5xi(EQ#BG`jNt1_VrWchfNx6Uss)}4Ib@^;)(UJt8D)SDB@YogFyCAIqP0)eC}jq4 zzmX?4ttDv#KH^?a_bYm(#u=iwcxHetdTPnjP4K%rjM>Gs@5w`?^DkU+vcN0+VDtEA zvzOqRKA|C)H1>t602~O_PlxI~qILOyD0C9A7sa#Jtk9Mq8vot??H#wGKJV-6ggF0000Mymkj6FglULn02pz2V()E>Yz8$MZYR`t%s~?A{=GU5Qh($g@K! zC`a=o-@-RjRLw+=PU_%Y>S(5<)4AkMrqZO_5{Yf!Z|vEdIOXH>|9g%^+CE=-dHZuq zApHLS^ZkEJw^wYkd5}IWo&Vhw%S};xC7&{UKf2({gL7qzr^p!{ktD=^Xt}}ElsSA`cU(5##E=t z>ogCtx3KQY7Mr&0@V5((8qc|&t+bG>=-eQzBQ|UEU-1*4<}7=}W6?h=C&`Yxf+w$G z`n==_tpeG3)22imQ=6i?LfSPqbYcCqzPYS_mRKlBtlizTd*y-c8h!0McYM(f{`ov- zo<`W$(8SnX_3Yi_Ct+N!nCXkR2su?fXu!H0rA2)2P1 z`eCJ&K3OREASn0&B`-mIu(bG4S_}0_Dxx5$AksGJw@uSpKiWnFg*J*Mek9)J=K65< zvNMyrdpEl?vkCMM%RRg2%Af%e7F;mSAN72H?}8sO&gXc(zjwh)jPqrl@9!1OKp$bk zssKa4ZeU@4wCtk;=msvLi&c;RfWyEVpdlZc+0g)W0b@i9t#$MR8*<>A8Qs(uHwFv< zr5e637@yTAE!Lxx9{_d$SB&eQ2k{R9tAXzf|9+pO)1na(SZ%>=!8L$g=z`ug%FY6Q zRs18seD{>I;Uz-C`wZVkbir@bDBq6W@85IA)Dn&nwyybi(}^xPYQ}U{i8*PLob7=} z5qKf6`+;kQ|DJI^7E#YZ#qPl3UzKga&jU??eWr$g*f=jo)N=%BU6A4Eg6z};wgo?@ z*k9N1n=KmE!ncr&UWK(uhHb$s6#MrC@lh=d@UvoD%ha|7FAaXnz~uz-Q7sIzGE#*( z%SsK~f~ynyKY{xR;^PGWrP#MqGcsUP@J!(0z`mHUOx!DdL9vHYF{%NZg4NdQOHsze zx4?}cCg}sLi^lpPiBSS>0&{_{5|)V*Tt-H13xL0~Q43*HFu(y|C2%^zZ@y7+f&sqF z%*cRk!8_{si^h39!Pen>P0L)gi%VKgkadhY4e4VAr1e^mOg$^`R|OV=xHZ5tMja#Q zL(U<>2T=~rhl98wBv`D~kPuJ1PR#f?E~)kBAs`8rT{UV-2naFIDVcB4WN#><))q z0Kc#FZxJy+5N7HXjGtgkDX8CrpNfe)uf)CXftM3B0(TJ+gTzl%K1Kg(I3=;1P{ffs zv9BqyBUoIeG~u!jKdsn3bz)BvE(SCK>zpvct>AXWK2;}n5ItMJYM+jK^dPV3KO}pw zJJDb3+3u*>M>F9V`cT3$YM-wFZ@Ho725Sk4Z<;{4@0D`B_G!7pUWD|0CbrvdGkPnx z$A?cIoI?nom|(dUhH<7IRj^%piAydXO`h+BR6mYu;*US{&OPw1Y07(T> Ui?zGMfB*mh07*qoM6N<$fEZ5o3XT)V3aI8l*pWfwRDVU^{T9v@%I>9WWc12fPN%0NSE5A#!p! zvk!Q?)R0pez6^W{tU`oUD?Q~jYDb2_Koytkz?V2457&@B1H4|&FOxBkfSbTSz+b?{ zs2oF{VJ9xZ>wzu6$V}V~+^fVHZPKboCaO6+85RX(sNX?m z!eZ$KmI8Z_?<`w37!SaRO7XNCY4%meq1T4?YyTG&}v8pAu08G!y!H~QGTqQZg`!y>EL(u?q z0R1G3{SMg%RxPh0F>2BfJ_sz!$j4x;M&Cj814n?3$hNZT*?@Zp7m)b*rR-b_&k97C z>&|Y-(63ae2hQUbyDbBMnvn2yW~_MSz^t5BJ8;xt?*d+7aGQnEz*JxovQAGdIZi_| zmMzh7G|995L*NhKdtf)Q#9g_3f&1=m_3S5yUahmZ_Kn(3W?fp`7o!jDRazM^j%ciOa@lQjg~W7olm%^?U7yF zHtL$G>@CR>;FnT^CAeO(``qD)iv2vW12~DKSi6zn#-b5ff|`&YU>>jtcn6uuUCj0H zl`FWPjm;i?eC;^@Az`uuj*WNR6Ui$+~b+)#;NpCRqa zQ>$+UD#UdSwJr<6cRkK8hZ#m)K5j^RNV{g%_>1nrve>A5=H<90ctElH+~LO#+boas zlV}9qH0uA08!W-vGBH@e?S%W(;yvUm0*&6d!4m9p7W{^^tB*<8ccolffsYf~T#Fkj z5v(opE*>cM&l0Y!kq71jA0o?}7T6T|Gj6aVtq_8*DE1}5H^5gwC$hKB1LKhxems&o zniiF|=r|YqOP)B#Jlb*&cl6@(uIMeLkD(}C$QMLUVGS!SqmgrUq;LX#q@>M9I3_KN z1L(irGa;KnhtW@3rNc*Pk)MqYeLiIxLGlZ?P^Ay}oC=q{-A2c)74)|jxExU20J4WZ zjqG_hQASW>&C-7xby^f=@k3PR01J_fL>~F{ut*;=cRWVE(&>qR6*MR2@1DuPz?|pl;usQf`0Wf|579u827A-`?n_rZDxdmaSTsq@Q7f|h zpF>t)fD5aTYj@NRj;LuOTQqJ-x||l%jhd0Gy+*7xL_~3!xr$7WW(_q;IkXw18r)%&a8-KjpeQ~aOzEEVO>TG32@zHUv0=@ye+Dh@{!9oRWV zP{~D7nkj_B5^%UGE5d!}^M!RwPDSlJvC&hl^i6{G*C)T`{L|c( z@zv_;aZC55>Sy@fI)xq!JGXEeA5qx9S8tunqbC|$AMej!mrnE%7GKR7N9$j*p8xmwU+bnF`3wJjte(8AOK#p}r)|#r-7A*yOwqff zw|mF6C6-ICnp-as&-c9Hu3ElRKcSdq-@>c*A=~bHHnB|h+o*e4@yGwEo=R%It>5&5 zx7jXaUBK)pcHO{Ot=EqEw1}?v&Gl2wSQ(@LPRq-jrgR~0dd<=!{x;VR76#Xf9W{Ef z$nv+{?4T@*lW8lpebg-Col-hi`~Q|oS@qcKxY7JSmy9i%ZI&MWJl*eo@LYB0U+=O$ zS_r0TY+Lh5Ft2*M#r*=IfXuqWRx7WQ%ezcPf_zWUvDw@kfA4Qt>yNeFYG>8f*0sr+ zy_K3VWm<1t(~%&}nZiYPmx-6$*iwB+R&zfWo7}cJV*kAQ7d`cU`?od2pdfQp!|#x2g+c`MZ|=D@FOGqyDxpIOH8+OneDp!@K&w=DM=A~H_|_8c#}8(hxH z8l4*O`*?P4$=62-OilYW4sJN=w%wb}<{5v?i-N8T|9_dyzSnoE?%T{%vDw!)$nLl} zq5Ac=SD6=?_dgJdyc+g$`i1%nODuJ@_utLm_t)?9b~AC;mLt;N&z)Q=J>%l5{9pcG zj&IS^yP5TyrPkLbLY6rw`n~vU-DLah)%M92TkbFJOx|LsYdZJe+gQ!HCYqlnuP)B> z=<%P^`|qIilG%4p78wvR9LZhP2=H}yF)gWD}-*EeVJ!nj7CAFmcHVg1IjD6--!G6X*P?nT>k3GN}_Lq z(?b70y+6tRq^|ld&j!;uz|5#x;u=wsl30>zm0Xkxq!^4049#^7EOZSlLyQcqjE$^J p47CjmtPBi1R@~`B(U6;;l9^VCTZ84-6eFMp22WQ%mvv4FO#uB*^cesE literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9F%B3-oracle.svg.png b/server/routers/bushou/images/60px-%E7%9F%B3-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..12b29dd5e6b4a828eae3a759864e3e819ca9aaed GIT binary patch literal 1218 zcmV;z1U>tSP)UybezWb^))Y z==dGz2}*BJ`hkCP_SbOU0mdB5E#NTl9?%I)soH2CPU7ycTJ8WRfVY7ssx{w@8ZuhG z4y)xHGWz4r`Nt^U*=QLB_5lm3awv;V^oI5U?+4`oFqG2Hw%i6bSL2eIH%S`T3rtkn zO#!-qpEd1m%fG;@rFvt*c9Mo|Ftncz)HO0TQ+o$6t4QPT%ORt#tvkpRPGbo$$x`<< z;3wcXup1a~wyp%u5g&=ODedkDJ_7EN9K9jn3t&CahGc5KSzjsWLQ=P;T^s4Kx)+#N zzNy79o1_CKwbq#j|e>=$Q7)HWLdr+T*Y>vag3&8V{GQ(2mQY2^h;z1-I zj{YZ?_$m$9spuU+HY3{vN0;!VV!LUz5lqydHB&U`7cgSm3 z8)ho?8>YrK4$nlwQb<3NEEI{lQ!jInU8~f+uXa0#Pnn&*3N=hdrefH~DDtvBi@Cs` zihW<31Z+llu2S!_ka1;%`2BVZ+2`t3;9Fp-^1X3{ZBolB90vFjcrH?Z7q|(0gY3Lh zfjLNGu^L!~{-ydgUqe12K4omCS{_=E95`=E8I~?zL!vQw&{tUovw&ambNCrwBaTOu z?e|q?!F=L(T`tAAVS)P^R^w$E3?OT{8+qBL<2rJztRuVo1>pOj7|FUyoq+71VSc&} z`8h&WEJco?6OcsYd{Azd)uDP**;-adRgo2kqtp2c@LP$tRDz4chs!jiDqI{sRHh+S z;o|U*Wg1cywhs66KUlwz?eLu7@4>PS87~YX;b?KA4XKJc#a`HrYg&-BZB?TUsgiN? gi`FJhnlu6U4+Ovv8uJ{hHvj+t07*qoM6N<$f`JV~=>Px# literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%9F%B3-seal.svg.png b/server/routers/bushou/images/60px-%E7%9F%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..efbc5e44ed904a445930b8aee241b636136f60df GIT binary patch literal 974 zcmV;<12O!GP)y>`{< z2HpUR8DGDEqiF(MlS)=Njlg|ix1!G|O2F1MH#R8-aUM9d~(Go1@>PID?nV=f6<4Qac_ib?vRBM%%BPD9C z?G*M|Oz|IQUcM5x^RU(u+$`*He>Q@~IH-($kwktC=v^2~6L*G^!DXIv(PZ95%_ zMHYgiGTi31KNI?%5_X(9Z$*1ZFJO*e!f5f@q=My_Ss1~7P*K^1s^FwMsa9b-A3ACY z_UD#u)%688CiE=@+p4%&XbJY~VVhuop-NipY!>#ng!e8(OK^wR+J^L;*S1>vgdrbA zg~)J;>H&Z)!_!{7jbwANaDqF8ZOgDDTdYFR$H%pRMaHp_uXatfM wX$AZDjRV(}VktE3z!l)YY6nuMPM!aYzssb~=tt2?>Hq)$07*qoM6N<$f36U z3cRw_79_5F77t@1ZpUx1Z)hxQU>?rFcX1ykFjb))!l#DJy)aI|XR%%ots=0y?ZCA- zIoZ+CoYE_B9?r*WOL93Vrf+xK+4cR2tQ(V^oFmrE)7XsNB}nwcESx1oo`ac+=k1s630~RyAT$MCzvE~1V6>{0ya*< z#rPc#r`XDBdvOiUY)nl-oGApRks8PKI897ZSb}%q`}kYNeR=Kg!kf+=xUw94PkG{H z+nsoa0Z-YYSSq5HrbQmX%{XItQi|gbniF~eU&G>I3Mh-Os4w(>d>+RSnCo$3RxZW! z^Ddl~^S6x^JAY6_OzUt@MH^|DA!6v&BDP+JSKt)P>AG&LbWM?H8ics)}Vx5oRMIz-}iB%%x ztdf2{A*vO>5>D_x6>L<-S2Z7PCEEn<#g%xos80+$ciUe>7mX5~>Ow$Cq&v_K0b?Pj!p1AwNI_GMy=`*w@i?v(zTXb13es*Ui!6nLePf|+8UK3h~T&l1ts zps`B?FaM;!;IyJ$nLywqtiic>llsxp1a1_`#nY|d-MrdPc1+Bc-4atdFA|!Er}RFQ zZL+JEGest~rqx#T5s<__{0W;xUJakY>ssIUw)%duq}@U|Tl#v~Z~B8eMoiDO!b_J~ zTcaYG_-IQ=+5jAjN4oC0)qo0rm*o(>2yYZy)1w8&O^MlYJw7PX!=m_P!p;@7lx5&H zmKTk2S5pF*z z_CB0i(8i|3y-(r=4RCuPh1bfuM$b(#`eWr@cHNa?bm&G?zY)*-=u`=eGKAqRAw#na=LGI!Twoc5kS9=$@pv%x>BIm4vYcj|k z5NTdNEEaqBuSJ@dw_EI}$Pv@M^G9mf$$Js^Al|04ht3l3iY^f&`B2WiY3-4!BUO)VIhxI4oes(O7rbW#-;sSV z^%l>O+w_-br7?^X@z;st{cUU&9(<1oCYFe*#ara> z&v%RPcWf{;o5MVjv(`xv);h|^i_2o67@@L4AI3X}Pq!J&6|Y6d^cT8A97?Slo%P^o z{I8bd@orJ-eYNno6C%wU74@*csF$ApA8q^>r|fCBigs?500000NkvXXu0mjf%spV1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A4%BA-ancient.svg.png b/server/routers/bushou/images/60px-%E7%A4%BA-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b317519975fbb21065e7fb4d4eb5dc2db0bd7b74 GIT binary patch literal 1313 zcmV++1>X9JP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd3j_=*9crEL`Tzg~DM>^@R9M69*-30yRTu^EACpxO zQj`J`9MGx|qoPJ-p@>5iqed|rjgh4ZF>zX$xG>Qe5@hQTSB{|3g+ollpi$!-6)_>k z0g3}k1J6Jy>=7F5j8|-m*!rdr*;?RV>SLBqwN!V&?@_}s?9!e@_*(a>XB|OPC;r@iZ zQ`qm6gnd!i?f6{M4+>q5EO9ON39l!W*9c*KF5xqUuqt6+5yJcucZd!loRLfV2cg~g z5_e1O>pU!kr*a9e5yIjUcbpKuPbx1KLdTemDZvU+vy0n>aBSje{X%FR>5=0{CHyrw zH(|d6CnXJ{1I)=I{5v>0VRwV(TKAunN4UF|J-irW8I9(#Cy($fuq|O5MzJHYo5?V8 zTO6Hm>yR}az!bC5@0$|4z(jOv&m(*m_^ia8XI#-jhN58|ABa4{SAo|`+~r_hQrYNZ z@8|i7PZ7db3AX?Yf9`5;E7}{ zuK+LS8Shddypfp1R-vzADIW=8Q6Ay7LRg*zyAa+EP{R+r-Lu^2+sxE zOWaJTNn4F1@^c>Hqicj)z#smqEK9X^%)&-c z=o41w5^l0dBq@`dh2G>F=TV`vI6q~;sdnp0Zga+YLwKZ;LpBL_P%ALS6{hp~*-kA4>Z@gE%SMxf3H7BLjb|tOlpfJ@2*H&KVmE;uJ zSpT*8uACaiv95Akf0%bItyE63z6gcc?BwPO*X+rf`|D|*J;0w7M!<13kDKPSn#$(9 zWBwmw#NP=iLb41085{rr03~!qSaf7zbY(hYa%Ew3WdJfTF*q$TF)c7OR53C-G%`9e zIV&(QIxsLhOgnl2001R)MObuXVRU6WZEs|0W_bWIFflkSF)=MLG*mG%Iy5pmGC3?`#ay~eBSpwMq}lYNnTnnd3qSa` zbL~205a77}ST^g0wqIHd%4P{aSPoeF>TEKOUwiYntwU3x^@nnXs+hlqrx;fhTJCLW zOk5xNg(=-QNP27Ezh8fr6=}_0e*ad}WvvazW&f5Qv$?=~Ks>r&-8#81oa>%&Fx<~M zDEgCUTjW-@0`=5}2{-f#wldZTHCRsTVqI6>8p3b4>YM$x2Sw~BEEUvuoXrpV^7~lb z!L>)3p5L=bdU3sZ@wW$eW-qI0%)XMf{)1a}W3lUl=?@tuUd%J%DXrpu5aSqQV6%PM z+@DGf(xKLQ7IX91mUpq|1-zZ{aOYLuy}>_EywMC>alEFrYVMBve`6$Krp4 z7ao;{YVhP4@7u`9v;K-WD&;t`v4Wk#YHc=GUW(<7eLw7ij5r zJQyx;q`)LU?16FAcg>~`Y8pQnn+i@B^!q5K@Pw}D&TQGrn_A>8Z#&>O4vTkM7U1PVyL9!f&wlc9kS@-%)q{vrgpC6X`Y{4rM8h3m)x0|!I`0nG~ z_y4c7Uw83?o=J-M9AHjSEpd$~Nl7e8wMs5Z1yT$~28I^8hK9NZMj-|kR)!{4rbgNZ m237_JyV*iCP&DM`r(~v8;?{5~`pp!e1_n=8KbLh*2~7ar{kIGN literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A4%BA-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E7%A4%BA-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4aaf08a6ae575a019dadc1312769eb8768656150 GIT binary patch literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kGNTQ1bMw@2rOe@V7%k$;usQf`0Wg9@52Ei$LseUa1Ugcf3PCK+gfG9!MnZ( z&z=kv*x&s?D^HKFX|dH0PM4#OuIy`-zB+btDcP;gjqzIZOl-2rcb0|!c`WDH)LE)O ze|9Hkg|`Rqt#@~PgoK%en=7A{H19S5f|D0sRb8L?!7f}x>VT3jTenDW*W=t(EiIwk zhg0ux?5&@3JH&d&_CMErf*9B3@^Q-@ICMzqY{H5+Q<@rtRZb=(CSD3m=AH6qp2bl+ z*EuJ)nbr&TZuL; zCwhf!R@O6ZTya3`CFiF%54WuS5L>WZe$Vm`v8>h64@-OwKHfczp}y$Z$D2Y4C#r1D z8$A&2e{Q<2BR=K8^TNi>g-flTzue^Xz`y8Y!^fT{RuR$`zx9>ZxxSrJ=fm=AsZyPy zy#K0t^=N^Z$T-*i|G5L*Wj1Vi^`M?<-}8f8@2eb~`guZmsqtU zj~iRxr5tp($ZPFxnt$i$=IBU+oT=a2IkMT<+rzDv9(1;_ShdyqZ&afBiC6Bihkh~L z?tXSYDV^;eFzQuHTq8pH05am?(SenI%vWoN&>^A4UMH7PtJ{JUDJ1$t zUH{6qm%n1GHLgnuk<_9^yK#fGYgr?M();Adp`F^t-ibC@}7@( z%{HnZTNTw4x>aIzmf^qq|0B+OLOFTCNq>*;pKr0*XkV0M{2Gb*YlY<3^a#)C{n$I1 zH~GeGmA1K4KVDn)%5+`KqgPQzu34MqnuWu!PMWY}FVJ(UC9V-ADTyViR>?)FK#IZ0 zz|cb1z)aV`G{nHn%EZLV$VA(~z{bJ1(h64%ua_+1=T zSFk&Vd|0yl-jUtk9$c(jt9o1@_G4;;`m0CF|=CpLP z$#*-SOxV8trupZG*6+{0*~eb{nsc^dKTFLjo0Qss55EuG*!p}$-OCmF6|*FRco_9c zM=m@F3DcolY=CubvPA9FPCpSFW< zv~#%P*i}TjWRF&b9o)#aXKv_j#xfp}>C%ZCr5;aeysw|I*!P3R1F0AVR)4(+263Kq z8*lS&$S&x+`%Zh>|AiJ_XBJE3_UNjG?^(I*ZsDdi6>m5FN!xJMGU3FNB2(sk<_C)# zpNBI9Z9DLop~k4=c0r65DU_f7*8N^r@WRSp2nu zyiGofOZ^i&pzOnx&+~rA^#k9&+1IE&_-k=Mduh`9Fne}3iwyQZ;ho}dS@$pDD?5<6 z;6(IcqwOd5JPY5E{DJeq%2ijc+^BtE(VTeD+OuhsfuL{gUxtoi4V@o8!L3|tX8rHr zDzM7A`h`Vtxz2-Z4)v+U@08B82hVxJVX*vd(aLDa$OQf1!~>Tt4y^ffca@lpJFA6! z&1~fwhac-sUeG$EdG<_Xi)ya_%C(P*mo!+XK&x{Fe`W0 zRKCNr%7Ql~;zQ>C7iO2AZd<UftDnm{ Hr-UW|Sap$) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A4%BA-silk.svg.png b/server/routers/bushou/images/60px-%E7%A4%BA-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..79e90aa726aecdab5e64439c41b6bee8d9a77213 GIT binary patch literal 1295 zcmV+q1@QWbP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd3k3%#1^+IcssI247fD1xR9M69m}zKKR}{y8nu$qj z9LY!!BW6)LAtn|lhB0YjT0{gD6f49JQfd(dX$=TkR1~pLDq0Y=A6i>m`oRq~h=RDG z;1(fn6kO2MP9(c+CYqQrF=qO~H+Sw^Cv#^EBA)l*UC#fW`@iQd=biK5y$q9#P_i1& zN0d-RJ_Y39W;9uJ(L*=)xkfDwsh*^d)f}gdh~x8$J!GVY(#>M_(i(?Qe!fd)sWb56 zrJPw*;7V|+*Qj#tU_Ib^){-+Mf);LYgI0PeVZG!=yV}xb^C-?zc5{rCOp$Cn3`+PC z)m{CVK3mHDEF#Nfv0LhMfsyJ5s+yN3(u*u3+p>2t1ESYGa+5pDpVBA>>*pXd9Qv*n zJx}6E{u-sTgl+8PYbM0$Ig1cs&avnn4Vl(5ib)hvNFfDy7)z$6e@Z(|+~Ot=h@^@v zjbf_#o)ZLl6*rzW@I`VSXE2R&e3Vnh2MJleB%6Nw$Yn?8qk?jLl#;GA;Sg(H(+oz*YLFL3%xbQ-9Sx0>w!Z6Jyoi`cMk!&aI=+{{`5g-#cbq4IqF0`M;fb2R zE}FEtKW3B#zC(DtMYl@P%Qx9M7CY_lM6Ie}F)qUfgjuYfan)$UZm_{)XZo}uGntv(UyuVti13GP zS+`XXZ%l3G{2TxBtwS|=QxMNgEwM{V)2(XCXtDE9?XQB%q2_gxd4g_V>VBvUMUGfj z5pP^Fd1iT{-?#+CXP{KQAXkwR0A8?^JHzYoXM{Mb3zYBW?Unxl9z{_SHzQ$)0000b zbVXQnWMOn=I%9HWVRU5xGB7bXEio}IFf~*#H##&hIxsaWFfckWFqCvfx&QzGC3Hnt zbYx+4WjbwdWNBu305UK!I4v<{D`$WndtGd--e+v|LOmpSw8{dpeF9}a7uz1CiPt#9Ag-q1u7P1J!F-~r%w;3|{9 z6nF|)ay*QRg|Wbkz_9){8s3|l*AJXgy=if<8Sm_FpwsZy7~Z4Rn-(6o;vM<{I3>Yv z2lgxfi)u{^kLf@!;>xKH_gz|@$A zj~2TT1GfYB1Fs?7(zf7dzC*`spL7wC4InA<`aS{Ac`mk{TYE&E_jxein2`W(4Q zMqi%Xh*4%8UIjd-My27;oU)6NZhQpTmLoUYr2nqVx(wuvogyqj#@`lTA@cDaG5pT7 zLW&ENehmDRBRAKid+RqbKE?pwBVBNPj@-K{v$jCrUHC42S||fUVhDI$(~ zP{F_yBNXN`6*%-T*w2$eV!wXbrgrTXb`5tZD{+J2@x8+l-u~ z7Mi?MNsnolLd+H(j|Af#uGIQ=B1@9RMwPYu?h)H>UR5BpfSR{}lwnZKbh4e7?i$TdqArXoA4704Mm z3*X>B%KSh!2E_`zfj0%v_lD88I)J|5lh(yb2g%+u*Mo0O`uqU;f;;Rs{#$`R0_gkN zq#N!L+v)i3cTFIj^Nh|u!ava{g@^FhpRED)+FQv>$|?)hrN<$U(ZDY|pw5*?%Fjlw>ln09`}q5@3hJDPf3S9h?8h=ua0A}i zA4$I#ih(;!z3VEf6Yy`W_EUR3QUx|Kve&w)7+WloiaAK&d<}B`trA=D@vm1auDgjQ b8V&ye{TxtD-%3e{00000NkvXXu0mjfF<+T7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A6%BE-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%A6%BE-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e29a0b8be388860b7cd7d2a1790aef5a4935b5 GIT binary patch literal 1086 zcmV-E1i|}>P)6)M#)?j9XMPjtd(^A#6&)QN9UUDV9UUDV9TiyC(04ZCLJVMS@7>?{5l8Ve#%q52ZtTR{ zxE0593~hp!G1cc8#iw`@Hzt1niRe2wHDYlFL;5>A-?JO%Rn+lJBzIS?!7DQ5M}@E* z6GCm75W4@Ao=G9x3pV01JYPY_9k`-b-i41cZC*0g;u`D|dh2jSxi`%8@O`;PEYJNw z0>|(HcJ%5)73I!~%44}kETzK*@AZBMaay0YYjAl~|2J288x9{5!V}IuLA$MZ5v!ti z-!GO?i^+9n#^fW>`yt%Wd-tWeGy5^shrxn0wef&6qjIqUSt}ShgkfyKZ8#%pdqfzU z=bYf%6SxO2G-z)!EAbfiV?@36xZg90w{U$^M(6bKDq)G))Q~O5@e>Z>0QTaYUb!)v z2F(@1ww&D`u5MQjh2ZUuOW?Y!S#)Kro7(T~`LNei` zWCQNSD}vEYtjXhebSa(a$8y|)R|Vr1V*<^ZY+0BniI3C)k4r zg%CfEkA>aZL16}m^}^bImARRby*=4hxLP>D#655rPYdaoEy6~m%#L2$*DC1PB%GRJ z9mBbX*QI=_dCBa9!9qOLYyWyhJ@=RN+?;G_kDO&`GcJzm`-PP1pA}?_%th6l+8?F* zMHS`dkmK-`rTSBF~j%-0FB#p+PE zhgT=)nnjMo<#bER@oq)ww;v~k!|`%6DJ12qlIn0dq+4+~R+_qjNp*P4>$WGXr5iqC||+MTFxnv~s9neDh%NV)Dzlr3i2krTF>%X31mD^;#B261T(x$Q!DzTd1l z{mH#~7!^`GsT2o+W10GsY3pw3U11~fW=r}zI{q*G2l4J0=Z5Zk5C8xG07*qoM6N<$ Eg4)U!3;+NC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A6%BE-bronze.svg.png b/server/routers/bushou/images/60px-%E7%A6%BE-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e46c889a61afe1b8551b797c3f3ee66008e576 GIT binary patch literal 1032 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A9%B4-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%A9%B4-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7203f7b63a2c93e8b02135031f0109a6b1259063 GIT binary patch literal 1263 zcmVzARTRg6YM6HO5(y=q z%o8f8m3c@qOL_@2k|Ie^1bd7`MSGB-x890^s2+lPG6{ulQbFR268I2^<}J0t%kfg0 zo@45<)A8$Je;;Sf`eydb+H>pS`@z6o->kjY{(rM)&)#bWI&|oelXbu^z@2q>q$-XB z4dD4Yf{&~?-V~s_S-!90*g*Ay=Zf;Riem%S3w}tHuT~rzs9x}6qI|jH*g&;{?*SGG zdm1nuxUIrIFrtDOlYxc6Cg70-pMIbhI18KxPBraQz){@HezSek`EPAVvU7fUlaJY7}(zr<~sf+#lNEP{snE0WTWr{0964><13w zhU^63UEHW>@g#5$pg z{`8!)Y!!Qz-DRj7BzUk>68Vl;H-J5+kq#9{e6o6pt9%3dc|YPjadcjok`N$u$% zP2UX}+Pw^{0=~ulVc^n1hk$QzDV~eMUyh!EEFI6oS%&{zEoLcBWb6E^#W&iWzfd)AaJ2oXF{lrII;&x=>sm0j1OtHpmKcyt&WrBQ7836)$AJ|<+!yn*QR-p;@4jnoa Z&wuS7Iv*SHIE4TJ002ovPDHLkV1goFX-EJ7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%A9%B4-seal.svg.png b/server/routers/bushou/images/60px-%E7%A9%B4-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..08c0416982448556d0f93eadf6ffefc4d80b53fc GIT binary patch literal 1062 zcmV+>1ljwEP)MGyeLXu$O8}FJepD-M0it*7fO^DQZDf#4e>DYz=P`~HZ;%lXxAt-aT`zy1Bsy6m;q*-)iQ6;H+i&w=;ANnlF0;iS)Ipr{>BfZ9wW zN||Q53oZgPGmR)kRudLm1P%Z-8O9|}J+Kw{gJEcPF7H#z9< z3+W2zJ+Kj&3(N<$5$?N3f#tv*!h+UlerEv>EjIOO3yNcB5XfU-gr)oxUBNyCdIi^4 z&|Sz|!nHRRc!7{$sTcnAAl(DJvy?Y$`Gcrt3vkh}JBJda^AcF+8(;}3!Bd0uwxj%m zmcO9oKN)uS9QU6>3HL@q@Bq~O7~rGBrZq^5sD4}G574Han?HbVcePQG4PFKHc zci4Ol($`wPM8RTbqpAGR!bk`ns^!}pHp7DSTa2$h5oOPk1{8&a;2{ZYk_s+Fl=Vv% zPBfJgTpH9`BduUmMA_hE;Y1@Xc%Z{(agcttl_kr{&EWt_5~!=e9|S{*E3EEVJ0u0*iVSoyCzadJRv~@-@I- zV2*a}isk<6#`$)`Cn&M0ua%RskFGgxBWfa22kfW&{Pzv^k#-vJ-LO5O*%k;dGBRB} z95I6F0Dc(PI)SATK2{Q5QC$Vr0+)>InG0^T1f(A?fh7t2EJuyvN!HAn3O?@$>MgJV z_p8drSl|%RdtaFgzGei|3Tz@g@RY+ypaHl{4h7%U0(lBd7WUsj&ICW#0@;z$Gt8RK zbjL$~_yYldHf~5clAdYVW>ONol5*rLxM28*TEP48M#_<|U~?q??&;6Phj^1@_zJEw z&eIYcw{eh|f2D?VBiO9rxE+n2k{iM1`>?~)pNrfGHkQJz*8#zn$4S-Uron%K!iX07*qoM6N<$f*LO8#Q*>R literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%8B-bronze.svg.png b/server/routers/bushou/images/60px-%E7%AB%8B-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0cd09a6973a92e3dc935a520b462e8b752b404 GIT binary patch literal 1114 zcmV-g1f~0lP)K~!jg?b=I-97P<*@z3U^Sv9U0#RuyH7F~^^EJzSyJOspOB1Tbs zofJe+1cM;BpcfB%@t|G;Vo)Q3MA3t|e-A^idu~l)QX&c6);-umy0nPa297JHR1w%*>yxv>N_;v&4KeGz*wh?np~f%^M!O%!D*F2>7Ri@-kAo z{97*!!1rxjBO3S0PW|Y_%w9%Q-WP?3*M#r09qPd7&3d7_CQq*md%Zd<={Ump83sbK2iL| zYERB9yQGekctj3|#Z~JjtC7zbV^OAxlC3pVU%l;vQk$o(UMZ$>Hi+Lue-j-CI z5#e?8q~kV8AqVA8*IwDRu~#GcSSs5jMLgZ4?sKWSQ@Eki4wlJENdXg@?-!kc1F1H9 zw6{o53GYfe|5|}IkIM$ICp+a}ne^j7Nyi5YwCfh`^YkOE^4*5nct_Id?Jcw&lpWb*W2=`$T z77Ke;dD}02!ZPrXusl12U+|mor;g!p?ellSEX(CYPSAAWO5u6A3U|sLKpV&B!nR92 z3xu$)q?gbXg-j{RLwhIH& zl-WjjwU8ptC5{P)UWSEi>>FWFb`@znThMCv#Oop9@iJy6sEiA*hezz_N2`ss0_kp!VY@6~Ig%*o+elv0VxJ@VARy^a`%yGSN#WAbOwg6rg z#Vd@VECRDSg1PNFKX5Rx8^`66I>Iq5^{b8Z_P4B}xA)`N4{(=v< zEwAl~H!nYQXEVoZp3mPucGf*w%r2kO<(rtNyGYyY@9lLes#OKn*Lm(7=BQp2{Y>n7 zSeHf0gX+eu7ft^i4Lz88jQ3CBhF`OXx9j7i9DcL*$h`BteM(nuFy}dF%#>Dr zwEU=Cf&TiE$7xJURvpiCw^&=es-)U5b(crM!J-#RCz!uJ$g?`M=Q>a1evcPZkMZSt zug_PXnX;NS{K1orj5AJLe|F-)Q=X641Y(wn#kehRe0}h^+0+E_N*nW@FEiim*I}Ig z=t*nh6I;oNWp6wVv~uJfKEbXKE^E=g-sc$G8^cZ>M(L}K=Eey^l8l?KG+y?Ne!Sw8 zq_s!d8I^CdIZKWGRQlqVU7YCgpY4yeg{!r_MD~m;tm+x34{#nhqGVh)LneALn{{JD zW(kK!cxa44vQ+7Du0JC7ua$paOjyQLRmd>eCwrz|+f1XAeoCzC!@dUpV3fCGTWP+U z`*ZV8>zFA4E>@XKCc8-`?}%7=b^E^wdJX)~_jokqv;64Xuq5I&zwyTlZ0tUfZ-JRZ zwZt`|BqgyV)hf9t6-Y4{85mmV8kp)DT7(!GSs9sF85(OF7+4t?sC>Glj-nwqKP5A* X61RrX^;xrl8W=oX{an^LB{Ts5T_UJK literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%8B-seal.svg.png b/server/routers/bushou/images/60px-%E7%AB%8B-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..054bc4ed7db40e5d9dea1f57e373404b1e788b44 GIT binary patch literal 1133 zcmV-z1d{uSP) zcz83+n@-nsO{c5ckolpQnx0ox|39zRR}E#9QAQc@uok!v+yz=v=HdlsflM}COqq)p zJR&c62$<%h(Fz}p7|^KlH9&1zM10{pc@GcxYBWs`SF8M=)L3{zJ$diu(wbBmImTAT z3%&tVrAf*aW&u|iFE|5S2IizkEjcs*yMQymC&I<%(q~{Vo|dVkQ2}%UqZEo718xEr zfIh;7-vUAG7o(F9H0w;j!6PFT=*}$~`fl=UKi0xiwbI(v;OQ5brAvQCRUegn>JsDSo zEvk{Npl-Aq*krKRf^QpamIdmoE7E>Fa7o#YV0jRVJMcS^{csNVfZfP0DhztNXgUhc zE}{KCWaqXG87_m!1Q&_8f?KlYcPDGBFTpx~_1$0- zd|t||Z4F<7HF=ZZpog6V0DKA7G3TH#)APA5i1-q$$(uZ!p-^;#3nIP*>owNoVSsNc zzrY2NG`h6O!yo~?92UADlE$P}%)>hTGpRjnGfM+}Q2AyTM0^R(1q1phevhODPihb6 zu13E`*y%1kX+1m#n3>IgD`p71SNRqkY%hHX)?M>Ugza0EuLhPTO~!}dCYA4vu~}h_9C^>99ax=xK7dSG^N@Sx5zI%$ zHejdvK8(CMQ0)H73KI#1ZbxqKmLLJQ24u}`#{Q4&%cddV7jm*%jQP#lPsl42UBC{n?38K-0919yYS zxE&>bsa9`jqYjB@hkZ66L+LScIbTK@Qx*RJ1GG^NCxp-#00000NkvXXu0mjfE#v(1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%B9-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%AB%B9-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c691ceb82a1cfad3a75aa09abf25a22f31f325 GIT binary patch literal 1025 zcmV+c1pfPpP)=ta;j2qN3G z2*E}6+O>$FC?Y7L2N6L=5JC^4h!zsHu~K^x76f4rG_y>-Eykj=ztoMJu#S(e>< zNetW%Oq2*SEfiHT@OK)p+=5SKrq<5@N+d!XflHO?r51cDQw^WxNQBbB8NdRizfkDY znQr)OtVAdcJdeam28YiTItF?X^Fh=N%laKi;{o9g1FhxKoiKA!?SYgS( z&fty#%Pjc=kqta@Dd?O9eTj zU5j%m8RiD{%^r_JOzjCUCxCwy@WY3<52(Y=b%ZNBa4zlC6~6(l0*?*Kofu8aQLQRV5O?C5f~r9QG|1R>xJC~)?+?q-vV24ACR(v8r%oBcLW}oKf6V-1#8I8K?%nY0iT|1--xxU~-aq%WzIR?|r(}jTr-8 zVE!7{vMiMv7MW1d@yl$p{ z`E<-yrb~e5K9;#P(1slw*P=zrbjs(z;lf7XNy_vT3%*dX5mA z298;D4I&M!-(GeLeJZ_L-^vD%2G*ZVM}Y^h!Nlqm+^E7OYdH%00000NkvXXu0mjf#EsEo literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%B9-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E7%AB%B9-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e4abadb1fa4c0d72290b4f7b10d76a36060f71b7 GIT binary patch literal 995 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-?_MY*0XWHkrMzxH%-42d}WcDlF6lt7W=^>)&xn#Nv>G`Qqhl-gVa1!s!c z3TStAwM2y`bWey9)x8tJCdj%|bMY2-p=p9wb&LuxHZPbWqPSH(Ye9xo(ycR@7YqL! zo4N64Nm|p7f19oD+dlu7_U=yg|L4r!({v&?ec7+wwzj2RZuVjE7Ok9xN7D>C6gd1l zIc3Y()^>@usJpat#bh4fI;4BZsnOPePn$!%soyt|!7)Rj-DnP%T%vEm#*2I01nefV z9N??d*rmH;_8XZd1BbTPo@UNndVF$a%6u&Bm3jXBnm^Pt4<0htILiz z?h4)zY{`y0_UzK~7flD6y#-pT}Mk#TixqF-VxbxAfR$)#Q&~omwO+S%spW* zzgzQz;r3f$*LwXw7&H_=9v~lbItlXh1PGpzBy@_4EbH5v0 zXbH&UsyXUyeB;sY7@a4^hkPG3D03WQKGYD-A@0+dEifxHFh%_ICC7)?9 zOx&Ve@^aGEneUdxDToLicHV23EArUkh3e(cXCLs!uDP0F-!xfQ%GT(v>2@U@rlib* znVDv?9B<#{Hua|ODT%C+;LYo<4*#G1|LWld-{MZzxUaaZo9@2Dewx@x+jY|Sewr!Y z;O(noPMpt~W5G8o=As^pVywI0r|z%GbBlU!A6&I`;>@-kJc+Y83z(dyD(bmw7{=&% zyZ?R8yqPysdqv8w+b&BvR{J)HE9aOW`M9O(_2Ee~o{IT@K4H;oaGu5D^y4e~$?sEY zw5HBo_USS6)xyY4DJLf_tzUWH`)E*8-y`vZz?`63;u=wsl30>zm0Xkxq!^403@vmG zjC2hwLW~TpfXL85+rYrez@Rx%-vUKLZhlH;S|x4`pKPWBb0q_Vr>mdKI;Vst09tF7 Af&c&j literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%B9-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E7%AB%B9-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..75cc2bc0602d6eaad5f25724ab768f3700bf3cc0 GIT binary patch literal 946 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-?aIE*IDyY3B?-{tAz7!q;#?F@VW%Yhm^`Ol`HeeR(+B{7tO<7uB^6Z+jrx=JGT!`h$#k z7IWP4y=D)rX7O3=I4Tx%e&Vf^7~>CSjkg*m7adcK{;-K-oqEH4p*(rfFe8*MR zUQL#+I4vS5_jt#7rFhH0M=Zx94?nE%kKX#A{m&BdiiXD)wKYnoPR4HOk4R-X9(>O* z^4M&n!l|mi7$puD@?<=eTwiX(J^jbw+(Q=c1RgOPm%JC1PMP(&^{cInAVZB!VhQ`~ zdILU(d9NK>JmcPq-Z}sDQI*K^o0oO1pIE!eJ~&(`*ub}pD=$>kyx@yRcuVqz4e#!h znu|ou5z1a<7V#pE!COq%`03Atl^J5CqK#8~m>m|YMr^fOIPLtcS1gscdoJgAKgbo@ zW?Hu7i136BXC=a13&NziOE(CYR%REl&x~q_=G>&HxjpCLUWK$d7ug>EWtg3Ihj-Cc z$+xj9n`(_LaX2y0 z{V7#zD%V@9nrSn%S19(kwQv0YQGB`04x#G-{$GI!TeZYBq9i4;B-JXpC>2OC7#SE^ z=o%R58d!!H7+4utSeaOAgBS)GAF6CoH00)|WTsW()*!j|P$N(SgQu&X%Q~loCIDs> Bh7|w+ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%B9-bronze.svg.png b/server/routers/bushou/images/60px-%E7%AB%B9-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2f4cf97a31cc2205e2dfe781954a5922358fef GIT binary patch literal 1017 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 MUHx3vIVCg!0I*fkQ2+n{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%B9-silk.svg.png b/server/routers/bushou/images/60px-%E7%AB%B9-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3984da1e22fdae77205ffbde8986bde7c8cafca4 GIT binary patch literal 1355 zcmV-R1+@B!P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0SE{dCa(%`-^98-}il;^S`ch!=Me?C9s{V8TsFcix7lH3S(ePNxFyyp^IHq zrTY3O%`$u zdjsh&vV*5638$@a47n);Im3!?149_k8NF(uh80}&+`y+{#BVvEa{_UBmQ;Sn2mlu8 z^#yW)1aqmQiSq_`Fqn2UZ4Tm-+!=tZH<&-T*4)fV_04r8;G3!DQD%k3`URf|?d1XT zT)1+2wD%OZSpKDPUaHr|an2%qn+@jw@62?_1<(@g3wQs4*KaDyT`qP%XROkR>fI{{g&sv5759-xM-eFW0%J z_*G9wtbKP}6Z;q-L4)Zz%=5G(2rman;_Zs;WSn{?u-lAZR z%Z+yUq@8WLnpOJxh>mHj`m5-}DjL^wG$Jp#+Y0v)Vk{?&JYM5^b*r^v zo?xxn)V6qx0#=!26xDiI>|G2WXlJX>S>Pe N002ovPDHLkV1hvMbvyt7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%AB%B9-slip.svg.png b/server/routers/bushou/images/60px-%E7%AB%B9-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..029cbf32324c13db3ad0cad383b4859e55435a67 GIT binary patch literal 1090 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~F>P#MIVv6+B^JVD|EKaSVw#{B}m9M@XPV!~QFaIuvEJH8-|89pPFuU7<&; zwQHL==fZZO_$9Jjw+_5mXjJv`Xhugu6ZxM1`TzG_{j~r8&pS8?O`4E6=}BVEbq=w@4imZGubtTR12jak z|FX{Cw4uwZ{$RPuj>9R8lNb5KGgkH(GMT>)Yk2dc#$z#O>m$9zyj%P;`bAwoR>~w9 zF>voVux3U6E77;DAAjr)tymBcVt6w6f8&L}2hS`_n*RATW7w9Bb4A4e{^Yx>HjRgM zch`Ku8~>K~xi;(FILmQ%zf5vU&W)>Ib|w6tf7+)s;!W|zJ?Be`-*AQJANJS&+~TTO zA7gr3!{G3<%fh0o1593Aj(yS?s`1N0L^X<``(=^g{d2B$x2vu(Z%PJ{7kdvWy@{Mq%~ujwVLtz1flH2UdiS1( z#s3cfnj+g%6rm$3R_*#fV%@C+z4y|8EeZImug?lnI4I`o~?4RFGD#>I=;m#e~>@V^w=~z;*9C9hKoC%h381Wsyy@HoTF)8 z@oa|6l`mQUsoWBEONgAgbyrsDr!%{strC8lrToF=VxDBx#_z83i`?v_8jnj?<^-h1 zZLM1`JxxH^<#)8rgU{FAn>ugssfmBA{ZfA63iEw|_XKX*Xxe?qId#Hd-;y@tip}$< zZ_^RnKJQ3%X18m~GOh3D?@wH0@#P&DM`r(~v8;?@wY5(~`W3=E#GelF{r5}E)a CYvK_A literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%B1%B3-bigseal.svg.png b/server/routers/bushou/images/60px-%E7%B1%B3-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0afbd68fe98f4fa56698b7cb980a138fc4b1469b GIT binary patch literal 1696 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%B1%B3-silk.svg.png b/server/routers/bushou/images/60px-%E7%B1%B3-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4233558c751ebf2f0a8e4910a8af57a36e3845 GIT binary patch literal 1314 zcmV+-1>O3IP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1R4Mf6r@rNqyPW}DoI2^R9M69n0si}RT#%VvxUuG z%C}7`QCpS-(@3&ev7DpG)cz3zDQ2*ek#=*GiIs0f1(ldxh=hbCLmi|hH8Z?W5g0RJ zPNOor%*{$S-v!ROx$EhVogL3PzxVupzxTphf9yH`{CIBP-+9h+p68qcBQ!$)3mV02 zM*SDS4vHyGo3iCoFPsdEi`FMk|f=OK=7F-oUf_m5^Pl5 z7@ZnlFhDaqSxrgu?g(Tu>x7jcTQ-*0G}|296#8Z{AHN5833C!$wZHB5o@T| zqGFFf+<`B%5=BsL$RF1vcR75FV;(EnNNmqibmL1m{^xXObq1Wu^gK#z70TpT|5}5ly}&buc~4YOK(;Q_h|Q zHhrqzwR1D4)DMkgJOzva2I!!d^IV{t({%a&!gJPa_j8>?vscqV2P@WIjvz(nu-q_<@gE!(whUET1rR-V6^} z$kXh11n%OfVXAYp9#!>kGgpM!-M8^7jiJ(Jy|1SV1cII15(GJ#d2Ha%(AnC{*Z_ae zv&bKEEKArXdx?A0^O4as8`7`TU-$z4O^l^7bru-)Ep578>zOv_YA)9_^Ne)c&g68V zClKS92e#G#9ikttb>2-CW#p#^Ka+Jd(#H`Vp_tl)r;II**qmWEPZG_<4WpJpsy!us zm2WfY8spGy;w*3Y)SyD??9mYMJ0f+z z@>g4gpqUo}`fRQ|3M~r(Tr4+V++VGfxuG5qehw2pNd+=z^8H?YzGW|iA)Flxc)Zam z&U^B3obq#%4SX)7c3ke33;++6&=aAL$Z(#<%v@`~rZUWtRnE16r!w`Rn%t}Pwf+w; zBQ!!8qkjQ{^DZ_5OI^DF001R)MObuXVRU6WV{&C-bY%cCFflkSFf=VPHdHV$Ix#Ui zGB7JJFgh?W!InOa0000bbVXQnWMOn=I&E)cX=Zr%T0|J6StOXFgi|7^eMYvxX$C@o;-rn&L)w=E6DJX}YF!x-J0kF4S2i|9W4Xm5e7 z!@?68M}t|;>6PyfY1;z@sc6{tL0{W(o{ij?CHw3>D+TpalsqA*)j&)w&S2Awg z(2&N%6Lt6m%Vm$5Ec(1jzNzblLUet*?Ib6+uG4zE<@Qvu>8F3)x)2?{o>Sw^*2Z9$ z`?k^Moql%{?$7&c5dA=HOP90Qd%wNL-yXjE9R9v1R*5msY4Z_7rT;OPb$*&`YN?$0 z`;$D6!;yg9%M;pw8AY|kHKHUXu_V>=o*=Y7#LU?npqhcX#*Js j23xM0+(prlo1c=IR*74~(T<)(paup{S3j3^P6xj-uC&O(>?!+WzVzLWqkiqcj4BP^7pZ)ng6BCertK4*y29M6|&d-PRIMMa_5LXee9ipQ$@c2%o}F@Tm?U#F8a3VfcUB#r#>HgWVE5(m-FFL z?OipZhdzJVJn!jZ0liGd&v%3mt-SJJuhWaGVOw=fl)fyvcYO8%+5M}g36^iXIA_a) zQ&Hcp-MrVZH1l9>LfzcA>=6^h{+trwmCROu;V&E4-%@yb)#KPYuKV2@{wtiFDpIG1 z70)$LYMGt7WJ0v-F)8E7J%6_><@r$4FFonm&P|(2m;aN>2{(Ry+eb71V(j*8YZuGU zws#-AC|JYurYPBI#)l)d%uYYD;;KHRD(>05i(?DBlf~?PI$?)i6*RN|3TieNTfJ+^ zv1__5yqSxucqPmtlB>gl4JJ3L|4*on-eIHpLpdVk`Kwd*$AX)+eGgoey1nnwpBWMA ztp+KzhWCa(*kpB{yXCuGzLFny<&@i^`N7A4iAlA@HKHUX zu_V>=o%V^7?@j`8dw>aYa0MbgH!UmvQaeT=BH$)RpQpL+llEq PPy>UftDnm{r-UW|o+4bq literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%B3%B8-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E7%B3%B8-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..19af2e724b99a776a0850615a2756ecf82c0bbc9 GIT binary patch literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k65^wMfmDEOCJN}S9rQOhD02Gd&9pYJXGS?$Mb(moFukzlsj8cXt^-a^AT3w`F|JsWo4>?z+CE;_M=!)3wV_P4WJ?!|Tlz?XOGAI|}`~Z-fwcNnQL*jIyM5kA9GO!$p7yz7T(?4}qW{MYv%*UrmTz>E&ZUY;h~`gaelNcJ;8vw| zn$3Itj$GaP%WY5Gs;J}3dvEF0&CS32YW=-6$7lEcVsc*hUT)8&qCK}?Fh4l-?qIgS z;$AzxY32NJZJz4VwZF19R2Q@=>+WTdc_(MnxNw>rTk>7?%Rl{QW^Qd;e&oyjwo8#c zomuTS+3cL5} zr>)Uqk5hk?E!aP8E7SZdZV6YKHa&26IWsNh+2#E)%U(&^hY3|T3qP8`yy%mI<{Q~% zN9(kCeg~bo6|pGGcCk=?L`?Xby^kucugjiV`>3To`s~v5?#%XGw(|SmRO?6l)GsUF z%sr>q*!UmIyMwQdqy8wI114kD64!{5l*E!$tK_0oAjM#0U}&LhV4`bi7-C>-Wn^Gw qXrgUkU}a!%@BaN-6b-rgDVb@NxHYVANomeP!xw0ZH| z`P;2GSIg~S7ytL})&J-Be(!yL=X1SfyZ5dWTaWDiwqv2mH>3QH8JiZWeDj*`Q98FY z-SPvwsoA5JjYc=rwH_#%S0CxINZ7#gLt5~7EOVT|#-+7yUS;j!5B=5={OEX)@LiU@ z%1OEF^`%~X{8#v)@^G<0760nEgNGlu9R92xanbCD%#L*rcdly87qnr0mtSF)cust2 z*w?mO^F()hANlxQ=^nfDKC$9FO~$$?m+Q4{wOUElGpAU-SkN)KPHf}-r%StzSS^1o zRJbXmbH{?SqT3#?tBW_ha6P!XbamTn)O-b>HC4PEyy=tz2P*bY0BXF0KRm&HbJ(yAf?;D+|YwwH1MsGaTvtzeN#m>b__r6V?5wqn~^wnFd%v^n@8{(y-d2cUr3(&!ru?Jalo{!TH+c}l9E`GYL#4+3Zxi}3=A!F4NP zP1(0?t6g1Yi@7$YOmW=0Hg@)k17bTf1X;pVB=n}ZB)wpbaq;v@G<9(f*>}by*w||E zelfYc@B3w+$#ML7JC9xOe(^iY^QUX|#J}2K$osu^MgLyMBX_-PYhG&Ke1j_q#2&{CV)*}#3mq@xD?lZZr^~l}7>&Kmd>wPh5Az@8v0=6B)@kn1y5Fc^~rsk<0{y``}Ou;*5@WGiJi(5 z&s`a+G4I7{fBh?~Pc$!+dSh)G-8hlWCVro;R%ZC-`;yIHH*B}OZuKyC>jvBSDFw4M zVz1w_dT`vOCi}$KI^mCQbN|W-KF?v|@3MG2>)pZVCGSuFuN7Qh%70HW=-1l+Vn!Ej zE0)iAclyk6mo@Kp$(?`Hvc=~2se)z6AIu}Jn}=Dkt^Mim{-E|;M6B9O@huI(%XYE( zSBqOm%?qpvQ=YW`^Y)4*8;>u2&s(x$`jO1?2KS>CYjbQLG|c$8YrD=2?a6nvqHgod zd6XGynv;L>a>mP?wQ7lLL`h0wNvc(HQ7VvP zFfuT-&^0j8H8cn@FtsuwyvG74Aj8j>FVdQ I&MBb@0EjiJ`v3p{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%B3%B8-seal.svg.png b/server/routers/bushou/images/60px-%E7%B3%B8-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..abd1f33910739454619016743ead05876ff79097 GIT binary patch literal 1034 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BC%B6-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E7%BC%B6-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..745f228330c1b7818bfc76cd1cd17264005f3f9c GIT binary patch literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC=pbRr%9pnks#guFU_$aiVT zZjRE_gZ2s{u_X`v{s`-dl)rNp|JS&t<%OHT(etjWHA<5mS7%1~n4X*d_|VC(lUxea z=2dHcU6;l;=l6$sGpp|xCvdO(oARbXdye1yJ&V~3rYV;lkXu}KV4v*=x#*>OHyC$s zJ8=K4rre#fu41zT$2Gn(`EBlsd1@#qC>VNfmcz3dkJNat?KrE$&0?dp#LH96`mC^0 zTtTM|!)KGm=9tHl=VwmVsu)G(65S_`jyI)beKPq?nJk zc}M*vXK7iTjA*z1pZp;PN4M#R1g}W`2VMU3;uqH$L)cY>)8E63#qO$@=B0$yS~E;mvrT?dMX+#98%Ev!)dOR^qOMJpK6)z6CBkn4r<7S#szurJLvDSa?(MGOvg%K zx>7B1jVMV;EJ?LWE=mPb3`Pcq7PmdKI;Vst0EV|u;s5{u literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BC%B6-oracle.svg.png b/server/routers/bushou/images/60px-%E7%BC%B6-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..521eb18108e69aced809f27032e891a9fa64ae04 GIT binary patch literal 1032 zcmV+j1o!)iP)z>)s!2paRA_+$D{5yUS|}pe1ho)R1ku8npd^|P zlgo!mjK$ma=Jw`td%Lr{iR=#^H#@WU=KYzu**CKXF)=YQF)=a!I|qOpz>=r~34>N( z3YY<|M;uEi+(*RD0DVAFwBZCxIWS2|@C>jk%76+2_P>qH5j_}ipOJEm^wFI`Mtp5l z0R=t6%QSUGz+Ip;;J&p4Ex0L5eG70i;J!m=DY7a%r?hGvkwq5(7nxnGZC8K=5yfbX z&7_hIH+F}4oQ2f^UvV$iwhu(OdV6Id&`JJcZ5syKLyy`Aw{S167wE~-c9nUMf*v9> z@NwX!ralQItnY0E9%}Bn7GmsqQ;keVb@a|5iAM{WVqR%{tOL#f&w*~>QP4sA;V>fP zEpQxIq_owODR@qcaYG^cG!jI-?lBYzrc%pk;Cq&~aU|oK69k=0+q@5{pPYmx_&hR| zZAL@tHv`jx+kj$C{WBz!vY9m8uWL*SUJg6~E@x@~Xs|EOm=xTC?0QZDjhgm;rTixk zza794?_s55Qt)c)vk=&;X&+F^!!CW60jH3x%gAoZq~H>zyh+nOsFa6X`dp9X)Cpj} z$GFl6YL%|n)Ts;A50`#wm2#W+a8j5QtWG(dV0BbKx%63~l(*&`kp`233zc#mna4Kv zDm? zPoHIu>n7k$o<7nrIl|M9>m3GsIt5qxb!c*g#~j!DfYZRw9N#NNvb1`j0U1TxHaPCB z@f)N`!M`2X<-iMM@7sqwrz?O;L|_9VvNDf8%KZjuQt*VPt{J#su#Y*lN{<`#6&NN* zcq)&3Cy`Y>iTo4>th#>7#*jmKXR_ftpEfBtsj0gJJU|{vNhF`PMY^FKSp)2u==S-Y z6_bK>Q~DipF71_jz;@t-b?y74#N=-{sAHQhrR;m12r|?1OEr>)o>l6yos7E1q+qvO zJ|`u}#$bhI&B*K4Rx;!3_SnZiObYHr(o1#MvE~OsF#`OuY{>dl&%Oqc6V4vsHt@}F zfItj_^NoO4SV6B82?qw*KB#0+S!yGJAd0000=d)f7eZH3@U>jSA+H&StByKjpME^1LxLpB=U8Z}MK%lKGK!guc6d%rt(?qqHj z-yep|y*V@I{O_4LGjryHGRi2Uj55lQ*b1BnmgH=QH~bB}16~3Pd@HZ?tq_ZJo{&dWfTSO;`dn(SB^0e;BG%Q{tKZ36~1*?&+=SngO3+#$TgEQ*lbqsiSU z(QgysA>Ks}+fj*wgooc>z(+CiyEWO13H{dtm$Wv$gh!4S>?2I}45jDVPn!In270Cd z=d^aiz-n8=ZLkS=s~K^G3Z{odlfJ z+JBm&y)~8#g(IklY6?9{A5E#d0%$`mXTRg=cv}NJK@F+alx_8O_>f!El2K*R=6_&5 zDsa3>*;Wr|0~Y!-!GuhKi2S_;?X@k=vlva!nu3cW=J;yYYC=mOtC_H-i7k| z1>hNKuRI$Sjfa6(zz`}(KC#f}1Q#*OUbrs9z&+F<U=88*)dX)1 z9DZydzlvg_VY8);0c7=Xi>OB>?MmUDfsBmeD^vC#iL8V_5%svlT^vk?bc3kZrtCiw zSqaNLaoRa%;^8_`pPsV+NMt1}k9%p80VaeCqVD7_+vT!kLRg;8Oop`lpib6omxN6S zRExTa$0T7V>$Xe6CUaOGFig(kGGQ?u!qUU~O`{dE5|&?mJP6Ck>?Grn zm9Wf7O*7CXqiz!683d<*$<8bhE(tfpN-0!p&q;*!6wX5pLRP{zwZ2;71PK$aOwhkx)O%2uWzA z;yhs@U8u|McGPWs6|gfxt_|1-dor>Le#ImDg-0000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re1se(%3yeBMssI23%}GQ-R9M69*k5RtWf;ft&ve#u zW}*hV6tqlJ50nInp#SDUW+@d#i3FA%lm`(a5qS`a5+)Re5K2&yQc;He6VVC_vdqF& zYG7*l2e+nX^qNk0b+Eg~cTTrgym27?cChz(?rZn=y`Jme{fz&0p{sk=-5xX0FJ0lr z9!HJq3UITqqN~6q)w#BN$ToEq*bUVpgyFfstA%-;S`GKR5W>VtHtkk{&D9v+iOncq z7?eKu$p!9^i5Oy0}SUxU<^|`?7g)lZjSj zwhQ5)(Pfqo3So0D@ERdpUtEv#Yf80aCbY4fB!u5`)o}^*Dtq+vi_fFmSRTq-$18*| zwYa{)kre3=mY02{(dmBooF3N}UHJnwSmJgKc)$kNq_rNPO7A=#zaoU0pe|MQ$EtBf zO1!_^j~W|O?1$t5FBHO)=yAZ2crg#S zwF7?(uC*g2T5Bg8;twJGoSwq7LRgvyd~5QuRsF0^jd6k6G%}kEORKYl@NORPbwb!% z_M$gG_36FoEOuM5Hcbd?@_@&rwpgwy{w%6?R=col$eGo(ZERPXR=h8j&)t^ z;N)5P%<1LF!s8YTiZ3-XHPtNYmjHu`J5}BhLZc-q+N)Al4@~#7sAmG7tlil{IO;}B zP6f5i2-Kuv%c5?{tMNs7H49-z5sEK`aKKF{2?uf=ep>t0goJ5m*PW`(RucBBvPWph z1#T)%T^HLRgb&-Ds|I+=bkw)0`E%56Axtmcj_Nx&Rjn=Sa_3mb|5b8tGdzk$cXg0H z4cOKBmem!;7;bR~{xQXl4s3T(N$09eUl+}ylxFXlb*GXmbAdk+!U^viQ9NmpMUTUe;22V^9pXUm3+hQY~uC} z>UDu83q!jCT004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re1_cf|19^!z6aWANl1W5CR9M69*jtFzRTRhZk25yT z#S5i|mV|bpn`H)R<%0y7L>5`}Rs`E$<9s5AROhho-w`R~2f-rxP(XYcjj|IL{FOEzuD2?8w1FPIIO;EZ?DDzaYaLjNH}r^6{>s`-u0?UPEf#~K{SN8VB|yo| zW}{?-Vje%uMdq6TzOY0oRqv`?!|j7SH#wDgUK-@NBX9FmDt4M~prg+3wdP6axA%@CCb9yY=OaZLRfB>5ay+U+l6qM7W;%# z=4bWy3t^8|yeWjWnP;|w@ChCg!oz9c9YQC#OY_-Gf4S9E?{M)}?_vg>88f=@d@+KnOdHuZUYIge?vU zJ2YgqCxs8wz<&r|<)wS`ZPM+^s<;N*GEc9o^V*{DQ5tx!@KZ(k-GubBakr77MdgbT9LBE?Mc>LHP<^Blc2tGQJO z&!>Uc2;oLB*)KvkAe1bsid(2CY;;)YFa<0Z!iqHT3t1L|^+MR}QUzg;<~-^=yM^CO z%9dX{cv1-WrGX#GQ~d)%*k=l!8I(X@6v8sFRtR_JgI=5lUMhrFTi{8H$1 z4Va@x*qF6w^`mgWRIdqPZW?&55Z<>{2#@CVm+KO?gU!O9rdPD-7B*$tXQqK?2%#W^ z4OO1y%EI-o6H4x^@~y}hVK_ex+?waAZ%rKJTdC|>Pbd!ax?hvGYfF72mxLYe8McFk zrfYG5 z+=w+OZp+S2Db`yraNn5X|2?>;Vqc6JeEQgSA_-i`K4+7_r!NzZCxK7Y7d)w!sqRVw zA0M0Q(NA^V6rZS%;_iy;v(Z@5$=VdBP4s}~N%aCJDQ?zOA8;*edZ1;a*3pAoYsgz8 z*idH%PpIYkBp-4DxIeq=O0|P$Kbtq4W5mBEgFDg>#~s3)Wbjo&q3Y^!#Gffm3f@fy zA9jnceP+z+ZT|pr;GET;!5BXP001R)MObuXVRU6WV{&C-bY%cCFflnTFg7hPHB>P) zIyE;sFf%JKFgh?W%tGx<0000bbVXQnWMOn=I&E)cX=Zr004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re1_lWN4lHmT`Tzg~5lKWrR9M69*jtFzRTRhZk2B+V z8+FXvOje>}spX}ls31(p3uO-__7L|NR5o%3op#7LXW z!Up?1e2Gtu1DV%5>ENY8c)@XDhg-7JvGzEs6t_Dke5NAjG1(zuqccK%o(uOs^pp@L zn5SJhVJ?Q)DXh#aUJ=4>6S6KH6iyoLQz1-F1wSE#@pw@P=RNByp~JMyqSQtq9Cg0| zwq_&5lR{XW3SKOPsoW*jcGPGNw4RmIWU(^u~_$&MUrX!#p3@#2lI{UXwc{ZP$z_!jI~1u zpXaQe5yC-_IGw8*Dufm3DWoBLXIBW}y=>;z3*kX9L#uGw4BV$l2uoB5;e&MWZ^Am$ zwd?douC&xLt@fbA4?=@`vYI(sgcEM+($OS+Cu~vcltq`+OtQ*Ej|y9|ymdiyH3=UI z;oWrbm%>?_jK4zton~KFHq$|8g|Ivw{E5&|aIzm^wGiI!$*8QyCXS(8TvA%D+8DzP zRi@E7_3E zXI>|+ZI&85x0PsHDjO}H72T7rOHUdROqi!tFs!lI-o9l&Y^>zBhCjrP&3Zj zYj56T)tSMQHVK-0-({|#_Ts=7BQ9JWy&awN0S`(9mliwJ{{y%sd5+tP1Ggqee5SXy zOL|?KX^X3+H@}izXDUr+Fr?UsBLUn@mrt95!55$@;1k7x`|FnoZlK#qv_SBM<B7|c-2~1 zn8V%X>kHl6004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re1_lWN4lHmT`Tzg~b4f%&R9M69*hy?wRTRMSAEhls zp%g{LnU+M+D8UINPACgB1aKm(aA7ox2^c`5A?(Bmi6rXAg)THo&_tt%Lx^YuWH2aB zC>W#!p(2!4ptQ6=dtLPT<(uC7+V`PuI8B=S?m74TzjMcPFK6UGl779k>+cp5jd6)u zwQ5!6XgeJCmu5d&XO;HT_2UMZXTQ+PzathJcsj7>*;3&As1_|+v3hce!o1o)t-&C5>A_cnPe7&H3&59V{m+*5;PUj~o>(@6@oJ*T|B<_*33O9IyB$S) zq7UF9XmTXu{zT45z7g$vcNVm31U2cw{c$iV*XMw1e3Y3~<6WQEuE%b0dEmCFT!)hx z><1C7XZv_AZ_n?k4e7xZS>Veu;0eBW2YA{n0h7%x0zR4Ky0Rp=Gb*2r6K*um43#+P z39sM+%kZMzKFvGxPNm;K8U?Gf%FUT$puvQU)g#&j$4t!Bj1>e6(u02&d={0PGSD3! zR-I!v+FC)o$s5sJut;hxx9E-Q`wlH!Ug$!K3LXR~NdY@^*B2$*(cC z8%%e(E8URs+EE_(pGEN&F7`~K{XR>5lleNH9xN;371m*~x82suL;iUB<)mTF#u}P8A*;(f zB)UuXOE4InS@}svG$YDdPF*D}Zc>YHvkryhrz7H0H=%x>1ux~?rOE^k=mmJ5N%-1( z1>mZG6MTy$=*+_6s4p2&9grtBJkN^h6w7l?FV-FdGvbuTG9gv+XX(%ENjM z9!tTyR_;pu$#sc4--nrZqdv(z2TI&CW@||ts&Rt(eFwkk$IXW;hIx#dWFfckWFrnIkpa1{>C3HntbYx+4WjbwdWNBu3 t05UK!IV~_YEig7zFgZFfGCDCdD=;uRFfh=EIUE20002ovPDHLkV1gowbnXBE literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BD%94-silk.svg.png b/server/routers/bushou/images/60px-%E7%BD%94-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d315efb396e36dff68d357d0a8f830a54e1b10b7 GIT binary patch literal 1291 zcmV+m1@!ufP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re1_cfl4`L%jQUCx16G=otR9M69m|bjCMHGO)ZA(jm zMY_UP+G4BF?zWBPCn_OPK?z2pfoPf#j2c0L3ef}!j}j6jB9MS4L;?W`Y9u}=2}S}9 zn)o0PZDF-QOD)t^t!WDtE2%Bp9v^nN&hEYY)4S76NI3Jd_nf=)?U^}e&Y6Wfa$CtH z_R+`sOk?wCKoEp2nFUW*SV8!ZEc1Z7<5~`A=+DSCi(N{XgG_X^<#R$qAH!=7JDE-d z;iEYAv3#weLzJ2VA68Rti~B|uVGaE!3rt{_sp-zd-9JCg8dea7d7r%Wu!VFZ2t9EZ za5|0J4)uv<@cz4{g)Y*Etds6;@;m#l5{fFW+{(KpvZXJR1&R15N`5ljNZ$3 z25s0zQ)gBw*AavbQCbf#Xbap!uln>CRc5drjw1+1@o3svd}l$s*u+v5T4A0swajY~ zgjOb58Xvo@)2V|u$)|)i_56mpQuhx+KXcS`7O&EyAeUK9F5u^4!c=p$%-a`&HmQ5^T8fUE<-lwOKz4?btLZDm}`Ap~JCrjEUvpe1Nyvx(Du z7lP0fqdkQn{7oJ04(MSD(yzxu09=aFP2@oU_OlL{Km`GU1PBlyA7LB4>3jS!g0Lgz zmKgD?+@T_uac?TqCil3=!Q&+W9H+(hw$NrOxFVO7`I;tM{WbCQXx65Dh7d&g9g)XW z*~l7A@B=D(_4L?{AgoII-SHH-KTvB`b<+PzyN1x=cnSCNFfa2SM`>0k+Yl$2>?XJ> zY@zim1;BO&t(LcnN-C))=n&6YJi$X88#y>&1Fr!3Xk`u61gUnY)c;GEdcNdDIv!_p zAC*)RWFg??s|4SCinNkWJ|q<*C_@DX{S{!W+!*#c9Q=9Ti+FBLR4gk0000bbVXQn zWMOn=I%9HWVRU5xGB7bYEig7MFf~*$G&(XeIx#gXFfckWFsv#DF8}}lC3HntbYx+4 zWjbwdWNBu305UK!IV~_YEig4yF*G_dGCDCeD=;uRFfiSBzLNj|002ovPDHLkV1kh4 BEX@D_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BD%94-slip.svg.png b/server/routers/bushou/images/60px-%E7%BD%94-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..24a305e4aa124347870cbabd39ffdf5111254f1d GIT binary patch literal 1479 zcmV;&1vvVNP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BE%8A-oracle.svg.png b/server/routers/bushou/images/60px-%E7%BE%8A-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3b906b4df197a33defdbc7fa20d61a77952f109b GIT binary patch literal 1019 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k5~m6RgEA1DM@8uU}pAoaSVw#{Pu=#$JJ1Y;~&rW1ZQccr5<5f7Obmud_zH2 z;Fb-pSCj;r%%%p-?h*UOlzYp=^-CM;UI!&n&n<>s1;Q@+E-JY~TSC2-E>7yxH@$3e z_RRXDe|F!szSsG&{{0`_S?R@=&v!nrsXX^{{_~%653l)q{EZazy%N8#50<;+%>CDJ z&aCly^Vhu9R*%?Sj;wpxc4=KlxY+)^@75XJ^X3&5JRbKvjJ?it30wV!xxwFmo;jvj zKns}Ns{r_XRGITly_g_J?3I_(W%1G309X}sS>l+d35pGhUwB``=hzy#5XQIXMgc?z~LFCO5e7Z&D-8p zu`WZm$l=Ia*WWeAk1lZKO}460e01;Ajn%zfi%YwAZ|g`~^n6|$|LgqdM3*-@{P*-8 zO>Eo8@3M#4PHf|{lP8|LW=a0(5&pm9Ms}X_`&7S<9hX_#j`sU+7tjA2 z91fa&dc_9TZ;`f3%Yzx?;{R#BPg=zc zb0=>qNlnn3!+O3cnl=8V^0#xP9H?!_oUiESF+Nr+-wfS@GMe-G< zHuE`Nlm*zdzl+YW30?%DggsDZ)L)z4*}Q$iB}`Bl;# literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BE%8A-seal.svg.png b/server/routers/bushou/images/60px-%E7%BE%8A-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..347cb597e34df7a9749754e517923ab203d22122 GIT binary patch literal 1016 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 Hl+XkKlLP{S literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E7%BE%BD-seal.svg.png b/server/routers/bushou/images/60px-%E7%BE%BD-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce1cbd885d6f4ee9408a05918d5bc2ce2c690b8 GIT binary patch literal 1755 zcmV<11|<23P)2$dTCZ_PxFJ}6iJ{-poSk53k!~)U&-0R$Z?wtz%aJlF1wf5R;-L?1HYp;FaIF92u{>#W^AY&mg z9Ow?z0G)wdKr7G&Yy-9c&A`{dO5iWmzZRGTGy-P`b5uXaM$_c8$TNk3~K3G*AsZ zjCi>oxX-kW1>Vk3_mbdIoTpAIz*`0EG`yFn_64SGFY+g~8x_TLDiYh&bFTutQ;?Yg z;#G^E&36qjzZfM-X>cFl6~xfHi3h44dHM|p=BVF)sONp^xh+t?Ofd#AFakCr>vIHd zN)JuxHxP;NmTxH%8!R4Fv^R@UENc%}Al`Wc2~3-T8;N^24Sj)kkRS)LUdIE6Q}}lU zX_^6QfwyoTSPk@4^n4!fiOd8`pPMp<_V6>sD4CUq&jvmPZZW?X0oM{=e;PVU*8%SX z=b7I#%%>1K%)^a{VG*)lK9ItvJv_p+RU(N<1RO#~`SF z1pRa*fw%_0!H=2W`+++XeJg;+kw0;RY10Nz%+QWwLO<6`KVT$r zg9jsCZ3V7N^vxk#n&n?)+O@&SKd7WQ0a$MaUQRqM1elHU+zqDf9^wYi0loqTc;wGk zyql1e72*bu@boJgdLUD(KG9x@c*7byQqhtIgFk5A1{_f`hA7%YN=DjVUN+=_mvFi6 z^$EJq;3NhBdkoJJWLaoTS28ZlMC&4v1D-dE>;Z;(c(lREH474r^gm?NIFEJ%?tSMl@?Q@ME9Y34h!<&c9z9dUyPCio^R+H&Iga}KxG zpHh4^nOV>dj6>Gie&FT=trB<@QEn2F7h7e|QGA!0{ra${9*>5=AqkZz7NT> zA#QLNWSYKF;{!S-xC9axK-0jPFs>5 zHR9HOGtkY$(|}vsPZqCk7`o!l#IKWnlhL5~ZcWfmM51m497F=24|mYP)eeB?aN9&$ zs#lL}JrS_PL!X8-WOkmh^cnf8BJ~YI1LBb*#Luir9viuLAe9e|p13;n8lY32@jfGz)DX~i8TlBmX&j3VSRt>V6kqt=*(Gh~*BJ^`1=>;&!#Q?)eExBK_!;j2Q{zdaUqNzexo z&$xV%y~9z3OX{}}uSX>@3g@}YJoL|S>-CIm)yxh(#A9Z3>iS z%eS473-^*B)L{KaU2~wU-RikyC!$b;_4P;e7)T7j)VEij~XW)%*<0*Qd< z@qji*18)Ouz^uZXm>*^V-N1feEN~ofC-5VF!g~YySYgQ27ueps@fK-gmmBXZfLHO8 z9;e#JfEJ_v0ad>g*ciFh8BhT<0gD3apCN5*7f@-`l>r~(CA?6zf6%DwQ0-?X-w#m4 z@Bd80pe2_2^YIdT86lcNjjC@4s*-iL0`Y+Uj{<&9zKtkZyCJt7 znPo-AFyMe;L=SLjmNq8?FJdR#4_u(+M*;UCyR($sVPI+`3>@$@UZdNAyMf_Z+HJv3 zxDL1%coK1X-AbkdxGpN=%d(63FdCVvqtyEj;5%fkZUcIg?~ezr0WNpY)db7~wmGzo z6m__J;xNzez#YgMd_v==v`{YV5gw3q~6=xdCKLso!@Y;o&7Eu{2M_fT!@2ItW~!l(`81-aGYdL!zlF z{s$Nfe2bq%BQV|~KMh!Gkxw8#p&mH3&_=srI^LaF>Uo{)4(V#(2TR)&@s~pMQB*vP ze4nPFJ;*jOEMiDFxDPw=2H=FqEY1Uq@f)`fxXiJ?N?@g>&jhd;Sq(~tMHZvB0w+22 z6$2(1<@UKo!z1CjvVK!S^2 zBriQWhyI2kd+1tA-7iYda*IqTaO$od^q}j&%7ee$kiF6$NsHNUa0Vj}DQ&BMlS#nH|Y@!OUf$tH#SFXnU=iOkD zd5DMzyC${A;SJ#$Reh%_--e9(H^2tc>+B>X?mZ?cw;%Y@qVHc-PULQ~z?JYARo3}p zTPCF(NygU%^chEdz+p>Ww<-^0GcX9QPD?wMKUG;9m<_v;KVnrtePo1PM|gxPA5!Hw zvNQ!{E)u{_B=Noq_!RL8LC~XK^eL@JIBt>Y!cTZL@EUSZ{!b42N2fb#?r8{tv`}VI`OZ^#l+2|k9dM^14e?C$X4?9LMjP~`ABN1nF3Dh7$t~Q nGN1;zOMP0Y4H?8BN`(IaABbeGFafb300000NkvXXu0mjf+4IC6 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%81-bronze.svg.png b/server/routers/bushou/images/60px-%E8%80%81-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b99072c13c0aecb9d98ad6d7f9c4bee5bea345d4 GIT binary patch literal 1145 zcmV-<1cv*GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1{@F_A+7Y%oB#j=fk{L`R9M69m|IAcK@@;LGj-Ea zE3KfYB&qZvA}b{9A&SbbQh`}iFF^zqh=G+5J|qQ!6h%Q;7}M#MHd5P7jUa|GWRT>;9KsI{Wa?&VP2koipd0IWzEI{;`aqggP#gPPnt+!wC6l z;y8(#H^Z5Q%RcZX1r`W;xFq2d_>ACzec&M+!L5ULbBIVD$!{(@%^k-O1>94(Hj0pJw#g9aJ&1+$enpo1D}`A$7Exv6>oi22eQ+bQOSbu&!% zFs=TxT)N+71Rt$6?uEZ#E2WikWt0b58%!%GppqT~a04O0YI+d}a;#kAeu-i(Gnh^y z35-;|E2-i!kw6Ix>9O0l@2NT8;57n4J>vr(F4(X)kz*tiOFNAkmzyJ7(})2C>vDqB@IEN?l|angKsi}N24JhD3f#sBdv>pUk`3RyQRp=D zm~8e9=-H3JO{#(J3F~$-7o7+)b$x%bnbDDTmja(P3r>;+fVQsugg{VbpuI$a?|LuY z{gZfk8<3%?PrVnnUp4m!Cc)7j`orXI)NP>Mq*~!-!F@Gljb_#H3jV2D-DbgE^7+dH z+-0EcR;@O(;BWF7&$}R@dbc&tX0nC5BR%Ta4%P-{sr=g z@!Qn(R$RgKA8Fi_abLDe4URJ*N^^@9o5E(p8v=o#k#o93O|W{i#+v%;mG^>-grB^dE*g*jgsiB2l8hA!7VLF{kIb$0R?|+x`68y{B zIs2B4YL(A83wBYXD(nGC4XkGb=DKIxsNbJ1ljwEP)%8X;>ClAq6fhR7eWv*O27rhJ#oP`Y9cBz{ zb#=Y&|L0X#)vInOqKG2?5gUPzz=pVqxWZH*4fFu1n7KH^ZAA17V5rLn4|4f14V6Fx zkOVq_TQTvliWGh{lR!HX<@-QMT%>HG6*#P&Z$bp8f%;e&SwHY}>H77nTqd>?A*S zIS+?%Gju*D78VY%n_z_BF#zV?Y)An=$sD*g$4SZ->W~pRjbuxEwevT?@c5{iM+#YR zq>*fCrK)d4_PEl(IpQ5#jA1=~H~s=F3SDo)@7f34QZtJ(WOd~&DSOEj3$o2~3Saa# zR|HL>8n{MqV0sqOz7jvd=mA#QCTJ3Mz$-FG;tx6erXkr>8u*T+mH$0<5S(_J38sI; zvbzGXPHWrFe>`%R1IGwP^oY8)U#qL_!@czT>@&>M2<9PMGvO}0TwQO_>bCabevMlD zE7Qt1`b)|t%8{1XqOW z&no*l!gr#wcYxm}Nx2Xl{-xmzvdp{^;p+*$XN!~#c!N$@a3}Kqc99)plznWPl&uJt z;Qv2T{+H`fVgW`f`@|R{1zUpk&n4k^I2TIsNA`jdtaszTMK}so2ruKSEN~+@-)B@Q z`yScoGYS`izvt=ey}uoXxCCHJu$~ya&C}P5@M}X{0&o%G);xVZ!LJN)3BZNmOL_W^ zP_`f=+)e((J;4PP;Ze%A^~2Yj#tLfCs#Z2?y_^l+qNUvsmjG-Do`hsMNBiNMK>pQw zWR#JD4Z$VAQs6YvpH;FUfn-TNCP{g)ku5Dn{*zppt6>%-fXn9S1YtvP1+bI;r*lr6HUIzs literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%81-seal.svg.png b/server/routers/bushou/images/60px-%E8%80%81-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..68949518529393b59343b17dd14ebf93e24fd34b GIT binary patch literal 1374 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 T>f=;d00000NkvXXu0mjfromR~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%8C-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%80%8C-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..24b49133edb385e2e61437b3c41248e8a5620f5c GIT binary patch literal 1250 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%8C-seal.svg.png b/server/routers/bushou/images/60px-%E8%80%8C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca76e699b263f3c8afdb370b0ddfc52f938b1f0 GIT binary patch literal 1156 zcmV-~1bh35P)1T8#6wln zFXMDqcU4!LKR8d70Ra8+$6;t##)Y7 z00v5Y-wSjD{XiS=5%_93hc(uqj4RjY3NSLQ(WyHKJO{1;b5Sc@0DhoWU!ae|QWg*+!7 zp66r&%|h;s)bfCG5UvAOitGA3Coc!#O$>fmPR(<2*K@cSqk#>;I$%D~h?K@{R-gq~3QPk=Sd2Fgm<22cHUfK4Kd4;wd9Fsg z;F>m~3z+U{jtMBY4hV0t86=CR^hi`(4Qh{l%3#b==m3t1>q$0)WI=cl;X~wl!aiew zT8p__g*?Hce`bUOv_|OE0tbP|sHCDtx4%&yaRoSx+OKhVDdb!O7Kz=2`zq?VI8CzS zr=P)5STUvx-F-I3x}=8z7U;Hs%6y7371$=OyMg1t6RqC_>;fjEj>+}FgNV6$T#e0= za9hOvH4NT5Ex^?xork~~Eia6j>w9YJijc(~4h;Mpaesl3@9{5LfJ;JdjG60C3cE_e zmGCHFj+Wm?=*Z;YMubiQoc;#Gu>JU*Vsj8)LBsq*3E)~BECW>?^ zq+Q`U!~L?lbd7G0B%I@0q*e%%OZV%xIKNH=*TCZj%B|1F=mbgr0LdzprUF1aDiA`imB9_~odr^c*e zhdc-ekyaYQHr0?s$b)c@{iGp0%7-D~pKvYVeoV86y_Ii#6P_mIG%MU-Rd$DN`IRqcE!yY!dh;yiCY%4Z1Qm9K6x@?rlh* z-^AeeOl5mnW`m`KhPRVEHtrJr*7`8amrHLJ@==oi1Lvubnj=6v5Li`u4&@A=Fc#MtXxDn#V)5e_cV=Xh+$_xS}wGHnyF z6(5$kZXyYP^9h3We=ZTJU<2$h zY^6s%TbeRSb;VfxBZ8lg1M~Gmr5U-avY^iKR>cr}k8QX%Q{NYFNkwhN-S|;Q!Jp!O zTqQDjQ?n2&aavJ*;b$xtEAW8$&YOw}cw9#dn5>MF`8FA~89Itvr1Yrg zL}q^<=hsj})l3tXF^8XUV!nQ$80qXQensZGv3L-xlooz=9b&JTF;YXa8Yg7h9+e7M zBm8t{9E*!_hp?Xy3vb?33=$)n!xuO#(>7YHg_E{nb&swF%$K^T;`Q;fLhw8csB>I3 zV=k`jq;0K2JGsyE7Z#VTJ<49>aN&cKfWN~-I9IyY+$LV> zWDBT&zT72tLlR>#PneUYryuUqamQmL-o<-G^)HFVM)pr?YU|h;qZGcL-IdL_NfYi& zR?2iN)49;y!Y=L;ZY!Zpn2?n^3cjp?an+o@;yca?p4HHZYRCwDtn_RBm3RZ1{?xEs zW(qsmUE*4W>y>u`*^~?rTd?J3>ZG*eMtj+a565zaLe@x+R>~<$#0f>yGhX3_`!3um zMr?{gQOm^lI~z-N6un!VW(=yUf(kfKdf=VIAJR>DI9Z{fVpla8ALuB2HBPTx*ga#a zbUBy2lE)SG8KF?fV5J$4SEU<(Ig$9T>-DI6$T)?Wc!ARE-7%Ryo65NFNUE|HP)bl=s^$CxEN34m}V=I z7oI>X-p+gA!}1<5!N8g8Q*NtAU$E z_}HYKfwwRKQ!ywdw?j8}Y`t+F=Hh^GTIp*CzQcUnh@+dLX&pEXx8gl9ean$tCdi$r zc|N7n7>eug8a60Ta2NI@zdx3GPeI@ckge_ly z@i+FW(tingQ59gp)bJXk{4#T;)7mKh-dy)t6tXOxu6}bXN;0ipCjmkT%Ke0Lay&!J| zvvgW-;wr_ZWv{T|mC3aNKVm)Jz%?S0s)P|D=olvK`d{JjHr1nKR)qVCFZQ?~wNf~* zJr(2&o_uUcUoT9?EL<%dSsJh4`uf$)A4|jw+KU&3N8hIX^xuxp@Ss=)>PDW9qCd_Q z@$)^}M^)>vSWNxZSd;XXTh=;_MiD*|6EI0+K$Aq6nKq%F_yF(YUE#I61xDj$5%jMR zQ#Cz3H;bwKjv(5KSDT<~UFatWq{(f?r+5f6g~u(${6ubEm1p&mB$t)fP?CDr$d_8C^U!0Fmn zFBgd&hnGwG#*6G|s@S3_yqI;$*R{GVhKMR-t0)RgDY-XGk?`=;|0dwqnPIqaLTg3wE{)Nu6YeGA@yv7LMopL5B4L;-Ho4Q- zSEjENt)i$$>?D?ZDP0Onh0>!d+#js^7bebn6lA7Xkm(W_D!$;>Dl!ArCVZ5rNw?yz ztdwiSl%6Vj%#3g&s+NU%R4u~0)b_p$#1fbL5yg(;2t`M8LJiq`UTAPc2M$h?IXG#-q(vB2Tnvd(1Ew Z{10>nP3}Heg`NNa002ovPDHLkV1hUOeVhOQ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%B3-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%80%B3-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5322b4427921c7c3890e27e31047d3c6b92ba2 GIT binary patch literal 1061 zcmV+=1ls$FP)gk|$^MbT9QK{iHEym*liPawig`%H6?TJU6OCrG4-YlN^z`&( zcQRewyJ5ai(9>O2{rgQly6WFehYlS&bm-8bLqYVkS-u-1SXZfQA12!sHP`tN)0OlG zHepeziXzjGuhmRXV?VBMqs~Emiuc-97l}T6qTci*o&=C3joo`3s}p%v;2Dg` zHhLWQX>B-^$_kuRZ{jGn;7ehAXBnNuHe6D;;v9HOwyCT%hUc)V6s0+Fm(!b^z%Ja6 zB}IukCt}^dWSkqu4xwA`z>$de&m^Yd6RF>S;|gIyDvj;}>z)=&mr9X_m*Con_nQ?l zyL4a1xzDf@-{TMt;#d3`QAc6iY4(q$qj(<=VxSDMc`#)5hLhbIdhETco@5l;->1 zF=@#=mw?;&_knTwR6>aJR77sInCAYK&W@f1ku(`O3_P^KeY9RaQ62 zGorrro=)XS&)6SD(%Uwh)kGeX-Gh3Btz**ASBdL`8oTrQc#_YYMHp3Yc(8J9A(rC~ ze6G>Z=0rVPQ`Zh^{|!kL*2|ul{%LZ)ntoE-Xk46;e?wsoTI5ZwubYqKsze>zQrC~j z-gV6hzEKl;0^i~{A$FBz_OP(7u5yFMRo2G5Mdlgz9mV;Ta=cIo+g^rCajx*v zZM#|+Xfb}Q@%K`y+z2j;pf7iBQ!jiRx6e>!r7%X5>+YK(YRr{hAuyLTJ%PtGUpTyx%KvP9 znfa1#r#0ySO3V`XP$m4@v7zvjlIIkX+UG^-dcv(Jm|tB!YZnn@d@>>Ob?mE z8~oYQk9+Z&5O_~cPU$pMj>Ne12s@@V>O(kF>Q`82CCTxd^;$I=b79=Qq*dwO^`+T5Jh-#!`(q}ab f%%jf>=OzCGfGMdf@*n*W00000NkvXXu0mjf#upJm literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%B3-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E8%80%B3-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2349caaf568f9da6430bc406d1ea27a7fe810e27 GIT binary patch literal 1260 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 Nc)I$ztaD0e0syy-#mWEx literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%B3-seal.svg.png b/server/routers/bushou/images/60px-%E8%80%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f8f8776d96f5c7d9f34b3ae92f9466f081839a GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJy;l40sZ9v@?M6p`I>|ArXh)PPfh$2^4AA|K^NcTDkCK1*NVB!iox+BFRgA zwJv&bOLHe$-#i!eMwi7^x>~#5;g(HT1P5mx$BzR_2_>yNCg1IR^JY!8ZW(X0STP%4 zv2M|_oiTjhXMf)F{Xk=iO0uTOdV}Mtea1&kM@>BhQ##V5}* zu0EB{{!&`MR_{%ytX%NbEfqI5-V;3ft!v8n>%ta3Ms8Et&lE5(PW|Z2)3%s1Dn0U0 z!j6^GWB3@FS=RdBQDl1es!^~pakgoKS+zk8TVG~#J!grPL!h+I$*UX%OY)_B!)KeQ zXEm{J)Y`yM_P=;TK=0{|HD`}k71h)xZduGCCw6Jmj-$`E#?1Y;DY&?lqh*o#Gu>yV zv3J>j?Gc$%I;ryPns=S*Yv$$k>`p2O7r(>CwWv#%o<{NF8cWcv+)&I6= zOcwoF^JZ03c%&Hb7WPR?|FHc!bVpS@ewjKj&8e2SMwFx^mZVxG7o`Fz1|tJQ3ta;< zT?3;K12ZcV3oAn-Z36=<1B1pHs}`eZ$jwj5OsmAL;loiOd7uUcPgg&ebxsLQ09iFu As{jB1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%80%B3-silk.svg.png b/server/routers/bushou/images/60px-%E8%80%B3-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8267008f0a409cc17aa10a9c1457b53233b2e185 GIT binary patch literal 1353 zcmV-P1-AN$P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_BEf8OFEY^Z)<^QAtEWR9M69nM+JmR~W~CJd`2@ zp>;-qHkHTdfHWeY5m_{KflZsb=t4=0ab>EFeI#9)CQVFD+oWY>s(or}bzz!df;90_ zO{5wFn6wU$R3}JD1hHV10SB3x+Xa_1=MMMI+}(dKmm})V)Do)het-`@1)-~!siqMt9h3;LP_^Y3DMW7N8*Zn7kuuO6^|%) z@Y`S3b*60{^lA?2fjL6u+~i)R%=EtPs(LeRM0M$L-ij|&3*s4SY!e^VOMt4RefNj_ zDV0r!S!Rr1eUcgZY!V01&^T_fn#)ek8oZ;Ob@RpEkp%AYnyu@L2pS=iAi9LtIW8sI z*_LRNm63N#Vlhs#Dh2T-G{Oln-p^isO`wc$k`2ioM8NTA4p`o}MN{IdLlE=-S_krJZ8BD7^g z*w*~ZN(NEe*5zJU6I>ePVxJl1qzCuM;_m^w41cRp;IT7=YZ1Q3w|T?yXJhwGK?vH1=+u{L?M`!vQ;?^ne86$xN0$Cf6dLvDRlZ%ik|Clo6 zeT3+?F0E551DV3ry=>kIAKG=yny2f@iNGTZT-t0{FHJF+xxiiZ$EF4SpDrABipgD} z&-trmd286#2i;9Ozt8jipx7>Y$9={5+qcq-`VJWL7#&#f;boxcgS_bMhn#9^f=Wj+ zo?F~4DO_gM*m3Dey{FHc)ur`M?T=rqt<5`QUtwIap}0@?n&q>f^N#ZGGjiqbf1BMN z%Cqjh^?`bizopr0J$fm{{R30 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%81%BF-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%81%BF-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..66622737a67ca9d4eab31dfdf4129154592ac4ce GIT binary patch literal 1288 zcmV+j1^4=iP))CB`tB)0=A@ej7NNQb84S#;rV%xSSM z4aayK5(al+2SznZc)upe8HdX-9}i(E!j%eXtkm~T?`L3xD_%sa3~^uxs>g5QBDiN0mH0UzUg{3QO6P8==K zEKKqHwTL41#Asp66ihCa^6%WUl0v80r%&b?Ty%zS66mQ^2>siavDqi86J<< zgew-smv|dz;&R-M!BuFFV}jVenuhUW&+IKhIEc++J9$w=*;_FaZ>DG`r}$6Afhv4I zD5`uOmp+KaskYvT)iLs(F>@QMW-$!J1K6ndwY&jKF|-FBlTx%x8m)9*%*3~93u1@yhB!u+ zW6X#Y%~MUYAR~r~9QuSxML*F!n*S;8rh77etGFCIJJr6TX_jQbG?5!86+GnB#oJw} zzUxcv3&cL0HhR0b7D~3g)p#?q;a=TS#~)SZz++SWm!x>i$2($w?h>;;)28$cZ@;;s%)A9$nn^h{b2lrQ@ot>hcol!Zi_IcYIUpY0wux=$vr-%3HEEp4Bdi_< zuMn;^PXwFtd({E)XtoPGMR3|Fj)PAo#=n49Pa|VQ4{f;uR=w8n>Qc#q390(N3}bpS z_*h1H6==olVH#Ns9-gZ26<+|=jJ{y-o(weU^|~Xku)bh$mNfBjs=g_&uvQq{m8xek z_$zTRDbv4{S9r4?#FI!qbso`u_Ikovam1X0FT^E6F0|U|#_3W8|B z$L>muARfd=^uP_HCO)DEd?dz5qH-`%6N6VHQKKi7lZkJQcrrve7~(;LBxqt#qo~OW zzN4T71z!m3u7{e*bob8e%x+iLu<}nT>8h#j`v1GS>ifQ`8jdscC2HqhtiZ>K+UqIi z;BSoLY3W{a&#+7o+eqtrNoHDtHf9v^HzjDZEm8#L zEy@-oXtyO&ebS?avV{rSZHW|uM{%G~_P_37__dHfDN(y)kV^0|)5FsvKI=MMFPNPL z!Z>Zb&=U)F7e#EhCm6u6yhk-&8pa2B43`V;=aj=mcozF~FT9Zs;~lKWU}D~-QNv2y zkGC`fhl!-kI4w2tSXhAVCNBC5%#Tebg^PC>%dsj`wgImQ@$tTT*&^ZVkjc-%)&v}* z<1YE$yShc4Q*bMGX6hZn+(aCs;#!>rH!x4|zZ-Q|$0U-<@%W{XAI}aS!q=Jn%9uoY zyn&%Eo_Br>QVrBPSD7%j2xGPz?8i^|QFCQv zHZIfjzJ_rE{)xyjDrVsk;j^5m?QNHqB~>s<^a=KNE#6m7@Rez)mq(v4UMDL!+R|>S zS^8i3U55k0Og#hV;zm3yxS&T`+&@q?!78vxv&TLer`~)#F5knOVv$JI!$r&+=eL8n z58E`V*Y~4(o=d`-3rcPo93$KLSZw#6nZJR(=rdCw|8XnrF*$ozBHWCWxbu5>+{MsIu!(e znz>$Hw$YS=XBYD4ba`J^@X|vEYAnY0+WW}6b)LX(&(y!FGNutQQ?R3*0)t(~ zcPg?6RPU^iZ)rTI`)Fv7_I9==jN?%}SSjNYxLaP(4t!WBdq7y>XylJ#qt;tMjn8^R z)x;-*)$)_n7QqfbpDAnX5MC^po9v5t&Di6KHQb?lhb0-7;%80ruWOo;jhXV{%sun) zs=VkSJv@`yE#?S|>o f>6Ts-IWF)YSXPI0u&hbb00000NkvXXu0mjf9r;~W literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%81%BF-oracle.svg.png b/server/routers/bushou/images/60px-%E8%81%BF-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..eef4ea2db3b9ea51aa3f735f43db28e0bead2dc8 GIT binary patch literal 918 zcmV;H18Mw;P)}#41-dLVrGoN{CgJX z-0qqC?tSm7^E=1X{nYE7^ZWf?_xtVMcklUgAtNIrBO}A42{;VQ@h!v^M}Q)5AIN#u zB0@dTO=xa8FoiOG&6g-i+EC^W7_pl=Rs?qW5GBbz!b><{A@D`Vhk!*Mbct~gWo!&+ zFyd{%xXxYlpi7J{!ppZak~^g16Tm9Ry2Ln2Xm|ja70F-GxpR(ni4k1V!RJ^c->l>B z-O7?9YWNSZ-pDr_xdqZ-sIKxvZYVxQtwm2>f52vW925wOLjJA#o!xJg%)&M63bvUDy`2TG` zYHr+b#70pQiy6%_O3i)-8g+i2?gzQk9yD5IF{Ot0Mrt~Y+z0#&h^$dh=_4q*o|OZ> z8Z{fG#JIXk7ma=&@GDX?23$A#+oZ&}x^#w&_CP|-9i!bYCB%o}k%XGZMqLX+%RW8~ zCov8@G5YHyg#1s20eX%0S_vVp3=gKPGtcm92_dcwe>d9oW$Jnfr;{rsgt#*N(`eV0 zsT%=a==Kr>^tm#ePiV&x{Eur8SmSbKc&^bdcS*za8&{KUA+8LYH=sg=+NVZ)wrwFU z4A-G%OlH3v{lGWfu5>m0GcF8oh#aROp)Q~ZJkaeb+hSZ8-X7`Cr}FOqUHv_3Uydx* zz(-2w!z(KMt`0RiYZX-|z$W6CclMRD5i{%*tg9{(*C*6)=5xD9{qCIlJJCvD8;5=%27#Mtxdb8)H5$o`x z)DppqDr1E2V09CkJELO-;GT{Rq88+59C_3(!Z5JKh_@3OzF@>_fy+96%8^E^bf5kgz>RUucM#jwLFCQ!IQKFJ%A^-pY07*qoM6N<$f-F;`lmGw# literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%81%BF-seal.svg.png b/server/routers/bushou/images/60px-%E8%81%BF-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..43933ae72ead9ba62c077db98955a87cc615ac46 GIT binary patch literal 1407 zcmV-_1%UdAP)+hMz1Jwe zar=iJmU=(h)g&pCp4fsSN#4}Ck zdISrIY1g%%wdyfSFz;B14_naRC#&VY=H&S>rsVUzQA=ZjkR;TiU)J-UizRpttLxBj zsJWktt;1t8K~bkQ4UgbF9IZMJx<%NB*I|Bn z2`El)K=ZXkpn9dDWr5+Mfc|2Z^9pTz8k zG*17HlKnVWub5W~WoK|s>bei_;OA7|1R*_~CA)54!ApX9PY`O{rwDs+I^yaTYStqL z?XFXwUp2#JtCm++z{4P3!!=ke>(na$C|<^-#|u#sVgFn#6yCODm*l%Jp)#^8b$_Q& zw%sDT1YV8Ccr?0i=Jh*{=@Qdh+=8}O)>NBmZj>+yZP|;Y=l_LYjeM+k17FUV6<{0kfg-x=f2?^^%> N002ovPDHLkV1k^doyq_J literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%82%89-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%82%89-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e13292a814ffcfc8e9c6f0c524df7346ad65d994 GIT binary patch literal 1067 zcmV+`1l0S9P)$SK~!jg?V4GLPf;AlKmHgQ`#Q#qEox-TzC|fZQEDEPCs8EJlawXN z3ne9mtl?pjlE_j@nh7&WlBMhoDcfj_5hL69dpPqq=bn4+z5n^2|G5YKKXo6@J->7A z_j}L1XS)}2-t;eEp+jBPn26qR68He*yOU;zJc13^10CH-v%^$^4X<&i%L=W43iM_xf!6M% z*i4POLNSO(2L+o;tD`m@pw)P}vPJ7@z!NX4l&?BOb z^-7uQG|D(*G0|i0L!ehc`EiIbSstIq+LdfZ6<%{SzzY0BOBMddI}doE#BGR0b%qq+ zU;eFb%IgGNSMt^?<=5iBDGBSU4M^=)$UU?C=ynBeOZl}xho-y&#HPDEbsQawY6A}7 zHGEYQ(+lr@){20#du@x&1~>4E-W?D(3b8ayB0h$1L9}S9Tm#VCwpdeI(QG1hEDMQW zs>I62POD0@L;-%`Q$pesz#UDQuf()xW!f7K(42c668{UhpgDgUF|W3csp0NQI!Ux} z-4gGhp^mgMHQZTA*CA#}VN6oe&wwk2I?~3}a62U()w+3z-dg62p@tS=YPeBJzl?|< zhW{p=Hq_7}Obs_E={FJaW0dqq#5f)sriRrPjcVb+O1cXFQ(_fU!%q-%=M>cu@oKMr z&G7my#?+FgZj9IdL!5?7mGnRP??$?`0iNUSu*N%8WSM?=&DInCMdH6e{#oUiV=b}J l0kKeciuYHg9654i&Tlrtq3HGKvwQ#m002ovPDHLkV1h|O{dfQX literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%82%89-bronze.svg.png b/server/routers/bushou/images/60px-%E8%82%89-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e139087f2186d73bea5e12f46c910e86e01f0d03 GIT binary patch literal 1515 zcmVdS}7RKY4lQ-R0c#pL^c9_ntRUK?N05P(k@ZN^QVEBoc}Bsv1_+SEA8qw{87r z*;Z%)%_34SBG&>_Z7UDiR%iiz-o3uFvvZ1V$>OI)?apnRrPQ{o?u&l z*%20z69IXgZT)3O80hr{5gBV+dD#(GRSn2vZ0j%CI^5meJ+7~>Z-R)7bzQeE6bjX; z>KIjR0WR{IeF^Lmkx8mL8JGy14b%XL$PQIq?l?|ju;Uhma3YbIAtHCH>Qz7ka2{aG zUH^0(XZ&Cr7i;4&O;u}wIl#0u^*z8&pcc3?P`+JNI{`$b0a!So-*(`>p%_wBmyXBd z)ipIWZ>VZ4P}~|0hg%yP8~*`FBof3Q?! zok}K?cj6IK)unB1ZLb;f`Ct ziI^WCEkxuSUoQ6N+80i~aE&6T0p35A*A;buHmV%AQ87T_ab z1ZI(s{(Yd<56#bns```c7~-grD**AD;qW1)kr>cu+Iuhq*LRmuvU*lXtHg zhJ9&~uS>7=t{^_aytl#Gb1}rP1~vxDa}hq~-L2=`@*%v2(=*!!+=5A@{R%t*{D66P zgYI||cr@^QG}{0olJxE+C%g({_z~a^;8tKWW{sT@*G zmbOPR@Aq`f`L@A(p5xW;CPN}10RQ_^$z0k6<^s=Q_Q!+4VPH8h69|3^$@w=1RrLv% zO_UxA4q&{)$L3res;a7dm$q(Sv66TYk8y_0a6Ry*H%2=qIWQFb zB_dWcmQXmtwZI3!WXw5uNgg_m0>9fd3JODb1n?dv>E4S;&GuyNkp?2tBI&XA!b&dDFCYBvWU`|QB7_xhS z#!?zoNHk!w9O_*g$(^q{V{tz48;0mE`lo3BmzV{-4J@Yr_uL99sGx#^;a?y%lRoG< Ry$k>V002ovPDHLkV1fvKz*7JK literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%82%89-clerical.svg.png b/server/routers/bushou/images/60px-%E8%82%89-clerical.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..499b01d3d1805b8173ac500b242b31882a5d848d GIT binary patch literal 1420 zcmV;71#|j|P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_l8sFViM+&;S4glu1NER9M69*jsE=RTKu`52h59 ztK14wydpwC& zLp^DU30gFG#_@q0_DrGs`rNRABfdn77DprXivzt}^JE3V2Lm4|8wJ5v{R@w?fflfL zpoyz30$Jyu+wC;TOp{D7&SY~;GuEY1ll8ks?b@C4n;o{>@8uh*vB(Jw+QdYqHNC`!qZ3nBgurU%koBGpfM0U5A?Z zd$Wb*h-cVU6a!g%eQk@Q{bfko3abdXE z9Ccn!^fewG+AE!+rvxD(#4>gZCY0>y&jjBkdfF=3Q+WdUC66@wwRv8JAc&8P6~_2Ot2Rd+cEC<#Ozj`>0bQyKw%u5FSYeT&eoU~R zf)Va7kZpFGajI~na^kE`)pDqEms`}C85gL_x&-^vrDCTJqg6SfNrQ|jkk49`5tG9N zyklj-fL^da!TKZhezT^eR^>P3vHlW|$40lu0NHM{4R)mjV|}7LpL~W_PCVQ=oWN&l zR2$;t85Pew@x_%BUnbLQin`9YYUj)2n9BF@74(kAL@cq^(lUP9x?{dVyeciqu zK}cEg-ZK{jA6GinL)`-@C9v9DOFbQX>{gvRv})AspeBt@`qR(RcE7AlPjHpP!dMok z6-cLf+b#^AjOg`Q28(pY>H0ECYAtrH z8NE7@)q-FJmO148K3b_+g5Zbpv@5%5gI7~*MmQqaF9U9nwK~<`HG<&pzH`+wTM7bX zVT$F$g5cTi`?Z4CQl5IAAjp+Y_7pEz?-N^{D2mJPQ(TR7P;jW%#E;S<#DFYDee_mS zD1OYzl%1;O%xKMNbC!#_Po6qx}d&iU7y zb{fPW2649WADxHBF>$ZZiU0rrC3HntbYx+4WjbSWWnpw>05UK!I4v+XEig7zFflqb zF*-CiD=;uRFfh&+>U97B03~!qSaf7zbY(hiZ)9m^c>ppnF*q$SHZ3qVR4_3*G%-3f aH!CnOIxsN5N>a%H0000R{O?#cS z*XjHHTWi+Y=j;s)8Z^j|gTQ%UoL0f2R-qJHfi7T=Rzd5)1C?W^sf8l5fC%^nl#E@} zc!>+WS)-Wsk_LECIj+(umWRM^E61`%u{;G{0IaYS(PA6!e>ei308O?!@+`v#j(|my z#qzMEp93So>uHk3@(_3sx0I{Ql`NKrzySS0d#z-lyaav`w95!?TzLt+JZP728(H15 z6SrxFJM}SBBSAI+!^Fczz+FozDLR1fj1C(CzkvyMYT2_8_(F2n>fbywyNqcE-V+aZ z8+cmNx5i2^OImRsLDf*Nao5rSGl&P?Y9W{-_REwe;3h7} z2(Tk%+$VhC)jDd~Qv~{mFW0t|u{VM-OQd8ZDF9~~J)pXE0}|8*NR8I}^C$v)s# zO<#wZod8AP1L@zA`qSU~|8kl1!0QaX#ONkD>?7ROS=}+4>XPjc~0TO{-BP2uuGzVd(5F4xW`sUmI81FANC4$zESPNhkXW2w$+hk zBJO#P2p9t9+v>=32tT`Z|KwdW@EI5Ow6Ti{NAY(B#~Ztd(~SE$X9$>M?4rVP-0bc$ z_E4b>cL{mPT10~a?$*fwFvZwKh5f)!grBU-3+=djL))!IwAc--x0YzoU<~jNpHrh?3wL-kTKsz-&u3seDQs;o@f$L*@ z#sh1CUW;!LSeUQm>`X_sq7?jSO8+USNlW@4^exl}Ex=LiEp!IBFJ+ub*eAMip7lDD zwDj}>GgHQT*W&+#XT46$Br4F>+9!aUQ^cEW@qNX&=&UpW-(!mV3Mc??5*7X}YKN6X zm+;%@TX^`Oms5pCw{$bLTx}ww!b9Q@wR5$2Mlpm?Z7Oe$?6-7 zJ7fIzYj&p+>iABx?R1yy#ttg)s=81!xMaI#(^Db-ND=SltU`T^;R%@g;#0ua!lo5? z%Hn%c`}=f-Ivx=BTT-jbfi;-_{a1l2Fk7$Gg3ZEromRf1LLHr&-C+Wr#a)SN(UO=8 zl#gKwsHHbOh9c)^?c3@j94wu|!lqI``gU#gWo98-rrKU~1^h{u(k zmZs@jA7Xv58kOwqnDPSVEW17--s70b_5=5OQR<1oz=#Uv?UcnI zr}Eex4g86j@N0f#R*%J$yZk)~wwo}M?I8MARr4%Cb<3pl<~Gb^`v|;!%*wUEgDLE` zVkW#UPf?*6fw^1L-=%ZI=P~VnWv-}yD{v(5N<$_*L)-^Fr>X`$nB#X;SULGpz)bdR zwJHwPrRCoHVznv`IfiwHpguj!olps%C;FXLdk7)bWFO`@{v@oN{CSV)8`8v}igM;& z%!G@m&kAja36}*8s2{au(l3P+l{fNKv(&ZIez5kxL>}!FQD<9&LW;_hVZZ^RNzclo zvRc@9oCfYD`a@gIeLU)$M&L={2jCBqzv`(|rw;rBzC`FnM8_D200000NkvXXu0mjf DiTGE7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%82%89-silk.svg.png b/server/routers/bushou/images/60px-%E8%82%89-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a3df65136abf5e3669b0d90977618620d2fa44c5 GIT binary patch literal 1117 zcmV-j1fu(iP)g_M`+I!BN zv(MT`IbT>0XYaGu`u*6K_5c6ZqDz-9Eii^-*n`J#R=IN8%RE%;+8&%&rl@wa&vet9 zQVOV~91L$oj;&59AhqGWkz>m+CzXKIhL=Q+^~?f7A(eK?f0KJRBH$EBfiIOY!$xl9nVhFr=(`uF04$feb!v77_*b@A3T`U z!7TYev4$tx?Fl_J%xbeUaU9#Q1-Ic+4B^q*xvBp>hVzp-X@Cm0%QyG~Ud4SF#XwGf z>mt`b+$QZ!ajWdRcqcAuqR)@&`kE+2X#ou28*#&9E%bYTU0=UTA3#NUK=xzYN@TS% z(%<}+lor4O9Fc8!sD-|VBmIpudU3lRg)Q={8RNLR$?ciO6!aZ73$b*g z=GR2}87)r!>=?xUh@h$vALp4rEKFf9VWaScUx9P##<(|f?G+8q|&1#Nd$PGnlzT(Y}7H4F!*r$s+MPJK0_k9@8S|$A^(I z4&aP}#>izG`68@g}U8sNGHe;3Wgv>?n z3}Zf%(bskfrlJe{KOxwOyZl#agsX%iTccCT-$Hn~6|V^~_}xMcY*WTH#})Uw%*b*f z?YlDPKLdCIe2~WgNS~q)8_R2-W#B$4aFo5fX zFZ`eoI({y^?_bw`kKkGH*QJUZ@OlcdsaPVO303h_iMrat9DF8j_FbG_p0whr;6-t> z+vF!8Cmp?bPTcG%x8bE1&x@PgueHi%$1x~WLSkn3;ga&C70<9RC1u6ii^`K$JZpt~ zIc9bTE-X)4u?*mGVIeza_8pvEn!18nDir6kLdG#29v?SKMc9^*Re(Q?^`)sRn1%AU zIZWWMJ^69k&R2aEI*aX19BNc!-Qu)m_-=+AgkhixZng;hdSG}Yt@p-j78{m$du~VMJWiKEHGC00000NkvXXu0mjfk`gD5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%82%89-slip.svg.png b/server/routers/bushou/images/60px-%E8%82%89-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f8974e51932427ca8c3679a04f3bd354ea60cbeb GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kJ#84ITfzSdOv1hU=H(iaSVw#{B}mPhe)8r@%nYsFGYRcv@UU4T2`Ev<|U5P z9Ge!L(en??54@P1?|3O%z}9mLf9#St9gT$^tqvUAi&l7eI-gpzA>d@t?JKdLjciw3 zo>^L!{;g-X$Pd|wbLW1}e{X(&=KDD_ixciSr6e-GI;^>;|9Ul!&iSNpI z#29;U$4RAim)jq0w@HpaaPY_0pn1{?|EGy{J!5;d- z`;=Ql11z$1S6iPD`R9A#Y+UkiFt;^TJ77GD|ki(J4B4am!D$*)kShlNT-(627E1J?7%H z`?>$6Ze*+wpH=X;*N*K)x(J8*{G79^-HmpBQJS};o6qioqx$?GCpLut&YIO)XZHGm ze9V%m-%HL#&EN8^FD@*q)~Q$MzKEGyOPur*rET0_XGE^`?ogLg_p~UO;3LF0setS8 z73bA56)OYm9W4Tna34*R_{)3jiQRYGOYt#WT$9&Ksy@^?Z37oS^Spaj%(}_psRvh1 z+hBX;XWp0jF)x=fa5eK7`pFc|GJQR3{}ChpvO>95N0FEvlJoxk?R1aW$yK@V+VLGq z_7Pv57R@nTxSjjg?N2u(5?Q4#=&0_?+0CFgjeR}zA}6>(SS0G;t(hUQlDXHt3b`N5zV_&BuB2g9EDw7Pe?p@#WDo*>=kK_Fm84Kk>wa`Hjmy-{QXQRr6t^b!%wu zvl?~7A2*U;310EZykOflD|z*YrYZ~5?a#OV;tYNI^=H-eH4l!@a^KAsbzaRWLG=sw z>q6bvoSnIe9=%(p)i|YS@~oC9V-A zDTyViR>?)FK#IZ0z|cb1zzm2&3=FLdEUk=zopr0B7XqTL1t6 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%A3-bronze.svg.png b/server/routers/bushou/images/60px-%E8%87%A3-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2fed30be2ae147b566fbf8014bdf5d1fa4e5de72 GIT binary patch literal 1152 zcmV-`1b_R9P)TL1tAB1uF+RA_;Wy9N9v4lNG=|U=GmE zP`(J*tCjf*bcs|!&fkTI z6$xe7+gusYAYiN>IG+Uz1vHA$2&l#`Fw9G|**FdN4yjR;e%Qs`3mNZ-7Vl!nct*ms zVSR>lJ4CF$I2Y}UL&S@O71-~{xqxxH}ke^}s>k8mg-?89o)Cs@OR*qmNwO+%vnR)h=A8m1bsSJ1$51lzYyoc>m}Jo zWmYBwCxBbQuOB}@Kt5*m>;2A<(Guslnd(T4m#QKqfi z6pL!p?r3=rqn3sfV>(U)8DJaEt%!BFy{V`K9$?<@^`iD#sbB+U18-4p5htRyMATKo z5ia@NMq<0M@6=5Nt8gypnT{{Od;GmKzJ+&Jmni*F%RFHx6VHJq_TL1t92uVaiRA_D;GlHqCgNg)+Q+2Nl`-5rd70Q5+RDjMFeGk2uh7C zNNFU>W?G#4^4@>yyv{lI%*g%1;okRs4)6K><~iry=bk(C^z`)f^z`)f^z`)1f$`h| zTG)(foX;(!3)To`pG-Btl2ku@6|BIAn8b~#23aVE$M6o;7N3(XwS{7MFCHy@z9E;8 zF4&G4%$C~AsRqlP;d^mNn9`k))9@tTFOGGVry4Yu;c*mlRHNtdri5=E zQZjh<{TUw%71fmtZ_A=I5`U^b^-N$Z-o;;iEmal{8MMj5^>zn%z>8p^@g)x(C$brD&?9vUOInXn8s!P6)t9FF1Ia?B}-td<<*>BO@1=-Q9%(y(PdHeYRPYJgv!lrvU{wr?n zTxmp(XfHCR@tLscUXM))|KPGHS%EKIT}{0ugWf1C!*fQfug_ZKQ+vQ_JdL-6=j3vM wGAleT9>oK>1a`qBZo=&rc|G0J)039}0TTv9B+QZM=>Px#07*qoM6N<$f~ypwVE_OC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%A3-seal.svg.png b/server/routers/bushou/images/60px-%E8%87%A3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4d73825f3e7be9259a0f12089108c34bde49b1 GIT binary patch literal 1172 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 RT%Z5|002ovPDHLkV1g}eCW8O~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%AA-oracle.svg.png b/server/routers/bushou/images/60px-%E8%87%AA-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca50d62ab059bbb81b1acbf3ba94d4ff21a842e GIT binary patch literal 1206 zcmV;n1WEgeP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1rZV<6-oUmwEzGEzDYzuR9M69*jR5Rc08s!C&?_5U7m5|-#Qqs-q9erL>kikYORn!NPFz)=UJVKUb$Zhg@6lv-V#G<~O16m` z-QsZC6|*=o;uM-o_@2Ob>GHbXS#KpqY!mJ(>S@p|r#{_^d+aZhUI%bxQO`>CKGKu6 za_uoavH$GFqN1Khu{C`WStC4{;9nqg6loN*gw7;&QhvqB=`|Y@i;R^d4v!hJ(Lqjl+baW>+Yg%w5Yb#@4w@U+lAM2TD@ z{F1dtJtC|tVt-BeS{+8)A$+55(D%6TW>(@mi$3H@q1BZ9Xqscf=E1tYQFtmV@%6%c z=X9MjI$Tv?StuuL%Ab-?g}bv7-zI|L&Y9zQ$!1wlW0LWhT49f~avIIFQ;Qay(VdUT>C4NYT;9^< zq$Z1eo?a)`Yc<6IJ!&u}-_{$3j7s4r*QS5bYlWUNY0{ukqiJTEq*0^sm@kAm={wUA zVMD69JBOTwDzQTN)1|5At`d$HRPUecI#)cNtED5FqIV43iK z#u|UB^l>e%xfbGs48*&2nq+SE#Iy2JFD?2U%8S7&i6`S|rgGbc%c>_Hr9X>2Ww5AL zN!+E@_zEe;xVMP48C}&AAI|S{W&8QcId{eyS5sP(mnPnimI{gcZTG@3+kBIqwzv8n znySBw+wDUA<_)o|7d}jv9N&sz-!LZFTy!_#2Ok%V#%fPnGFdHrRWP36pq(W*=YCOe zmtH6AOZy$H&LQF9K_S=fgv%4O%uxsO7uNZ@4W#{`47VAOGY3m_IBRLyH?#rGjtE<_ ziM{ngtBraSMD5=v?Y^& z-@#u-Hw>={HVAM4001R)MObuXVRU6WV{&C-bY%cCFflkSFf}bPH&ih=Ix{mmGBGPK zFgh?W)?_4;0000bbVXQnWMOn=I&E)cX=Zrb%7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%AA-seal.svg.png b/server/routers/bushou/images/60px-%E8%87%AA-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..06651646eaaeaf08a9f77f0ba9dcdeb3ab7799ac GIT binary patch literal 1232 zcmV;>1TXuEP)6P6G{gwXMdLx^!5D8Qek2ht zPU!!}f&IWRGI$-PHq0yo9{>ZvIkqYrFSl4zLk3B^d(*&sWKTgOz^H2fH}D4V0B~IW zx2t7p5*Vhj&>P5I9ByK#2Y3^S$(vogo!%ny@L=HOG8~!# z-X<;Tim?Mp0c8n($za#ah;rsKu+7Q#O5j`S1@CaOUx;nWnZ3^T`+<|{94}f7S_6+h zRsYy%Pjdx0s`gbZ2Cag_823LU>*0+~^mUBjF{7;*i&VX11g{}qGB1^~s+$B`rVgkT zyaM;6I-*igV+bTGm z6SD><4=x1dS=yYn3nqWhdl&`bFOyKiXQO(u^RLc{6|nW zy}D&kQRP3a20aA-6qNOX6)WNA)wB3_nL=z}e%ctt=OR}5Jh1(Zqg^vUFz?tAe3E<5 zB9T|s?g0mzZahbAfN&bv2Rugl9bby1WVa*VsKT`)v%vixj_S`C7LEe1X6!E`)5&@2 zGa}27r=bL_YGC_AWQ9OSu>?4Tu%&?gp`qh u004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc3m2J1h zZe5^2v!$V>K&36F6cRvMG!Y+6szejPM0_)W2NSrqmc(qL{iWw z#894mP=gc- zIN#LclDgF>8Rif_@l39Wf0o1@M#)+Pf)8@D$IvHRv&A<7*qAGeJEg@_#^_bRJc7ww zS!~I+luZUn!59!qb;In4dsT0z&&6Jvf8r4UmgSnb#i(HrfKYCTN12elr8F31Zvc?Y z4Y6+X!v@I#TVnAb4sd|)`IB}}bqlKZP(+nUG#QYqT5=~)+tHcrqt@AfQAHVXW%G!b- za5+3q%rdGXYgirzJJuPi&@#uHYyPrR%;mJ|EAmdp;pVCzi{XZHt67&)<|Gel&lh=x z8k(q~oFc*mC?m*Xv&C-sMD5KI$H+!5*>>|Ik8-b+T}=9}%>Z~?DK50_>|thYo_xTl zsms$zQ*clzKS&q|@D%4*u-W=ITYYGH5rJUXuPe0MD8?O>0>M|QiQNUu8Ac#D@AoD# z>$n@*lR%OV+EPQH^mrY|CH_?ER7>2R1=%b$~7FX33W+e@5U@;R+6QP+Fs)!S1 z0E-yqJSoe)6MmQaS+%4Vb($5$R8U7NZ*k2Ky95cZsAaZzB{32-vV-kx;eIU+r$>@A zbg_<3`TT`{;(t`HkPECK>^njYa-3sWwy@gmpIA@Y%^ox}^kQ)xizwIWC&ri>+oq!6 zCI69ixp4MxW2-X4If5NYcVuMjfOx942C$vxOmT z{4*1UyH_t_M2lBfXd+1~4OCD-oPI8Ik%Vo=KDx9!NH3ezeKJG5VYBZWHhaiMIBt`k zG=8A)K!7hDi~9@hG^dnt^&GJkM1ncTJtJcT`PLXZQ-9+;e)}JliaDJj?dPn{&G)P# z-eukwg^n$o)fA*cK?lWlm{|ZTi{EokZm-vp0(6aLI@}!&Q1FGjk8?PN{73+ z^Y9=1iB}fG8dGZk001R)MObuXVRU6WV{&C-bY%cCFflhRF)}SMG*mD&Ix#akGBYbM zFgh?WLyrRr0000bbVXQnWMOn=I&E)cX=Zr#!G&(UeIx;gWFfckW UFf!7+wg3PC07*qoM6N<$g3OX%TL1t6 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%B3-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%87%B3-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9be4b7c07fa1f77187a4705d75be843c812ecf2a GIT binary patch literal 1351 zcmV-N1-SZ&P)Deh<1`Gm6fZu_yfVIFqKxaUnPT(#XC|-|*bMwjW6zms1XzQN5*xQ7FX==s zT068MZ+r#PgK;?rcp5lLV?$2?PXcE}D5nD$cJl2@phsk8A>XA^@*SWxW*IGrl779r z*?Atu3N6p)G3$@bVx%`zh3jJGe+K)Iemz1N->0ZQ5pQS})`1%%=Ih04oHil7wG(fn zAGVayfy~89c4d6^<5LCx(klHZV!ki5Jg;j1w*u?6X9s~90cG^zeK`-sQ$0DaXqBEs z-n@;)n*1L$8m9`dSCi=vDCb$c4Zbab?uod$ zCA+kWS6Sq`aJ{F!h=1(IgIakLz-%9x0lW>qFp1)dN=*5!+I?@J6kLbv1Fu1>ydVE) z_btH1J~HPUzYkmL4JA#3ZEw2AxgG@GwaCphe$Vxh(HmSt>_=kaHds0OU^iM-=eicV zf>#;8hkRtt)9zFCF2rwe4cPD8+ZwEf@R5-6ZrAPyfj!3a3f|S$NSK0Q#BDIZkIuDf zkvZ;M-$sm^Up?0#-@0No?&wiejl5wmFc*}oI03W=$lQR}vVMoGpynYK`~hTcR?qk2 z?|58kl=FU8jfg{^rohb>xtH-@*qdpX#&21%$dG+4we|^^h4ilJF8Xl`@Du(G9R)Vx zT68~F8hKtwqj(y2;JS=KPKBZs_!6(;FCuI0Ft!-^3iG2)`ZXmUjUcbPrKgCt=)VYe zB&l?D5@oZX1DQrth^9M4emd@&dMrZu6(l%dhJvC53vy$rrpzATQj2W2COaNd?i}D_ z8o&AHQ|g-u`f8^JyoFeCbGllFcSxH(b%7(Z2?^4fjom`HttgD;c!TGYh|=4EH-VQB zmr;Md9Yuf_cVaSXkQ`rf`Kc6T-uS}SR^yZz&CfWerU4tlT90~FE6{~tQx`C&F z4}snIdr3)B9SJmKPMUeRf^50mP4G5JRE{B`qkT^LjK=s@CS>7wv?F1gxlZbG(hS5U zoQ;fxdyRZMflrXo?+;9|!z&B%4q4l-#gt$k-tW^4z)v|kiM}4rl}uM67LMV@oF@ya zv+3w3db*mdOYU5P*Jur3UpnSS-pBfSfNPPktQm2vBQfjU$mzWiEgeRVSPYW!xvVq| zZUgQEZbJO!`N+AfPQ(glWr>d>4Ie^Y%r@jCU(lX&ZfqpGa88_b2sk^b(rJ3Q3M>IG zM}}@Y(!*`Yc8n<-HY3#V_S#8g3L8TV-Z1bh@E%QGVwRlF{10!8<+r(0mVN*L002ov JPDHLkV1lNvhNA!g literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%B3-bronze.svg.png b/server/routers/bushou/images/60px-%E8%87%B3-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e13738008fbe6dd50a5ab797a6847439b5e067ad GIT binary patch literal 1141 zcmV-*1d98KP)UI7F8U_@z1W8G+DRAA`OY62%^%msNVFVl8ky2q0z+x z6S`l(S4j~C6-5PIAkwm46kX_DMHHo$-CnGP8&cVg$}|zJMZ0XNPcP0RduDca_u1Vu zGb;Oq1JBHyIp_C#X3ot2f6g$*7-Nhv#=%V|mSO>>RMh7=SdPtj2JIE~3l^c#EWcx! za*R*LVyuh$YoHtBOXzPqPA6PhyHfG^P?2X#!!flwIQfw;P@QAGGy~5ZYj0w0I zJ<)l8!UX)Fzv-v--C-xl#@YGte86#q;@J6fVXCz| zw|{v(GSjls(84>Os!E1^?pvk~NmX zz51KoD=d`dX~Tn2y$>qV*b>w6uCN|7b&z_KgvGbm@FxZJCJW0e@t<-*LcOErB7NdE z<7xxHQ(uxboPRo>sQ+r=emA?>jEytX_*VZh z+J$S-(X6*5cYHOj)PEJSAxz$P*pE3%2qBA}#JjOUh?j?YO|8P&6>A?cQ-y>-Uixgc zY{Rt<(3pCj?2N`xfyWCtq7I>{IS-FvjqEz`zVe~gW=9T4Is}8U;j3y@Q~~o9zm^VK zI%L;}*VZei8sf=;O=Wjh=@)DRur>NUL&=d;-GYxSY;87tf8cFg{6k~sfhh!gg!=j8#WP$L( z*{LHuzX#tm%h%Z0{Jl|vv6|ZO{f7RCbRRo~tN*1i5x+r5{C`WVDML!bhYBW&-tF6j z^l)9XbPKPZM#BDEBBkMWyd^ATZxxJvDtx~1bHaYc7!Lmf$c?~Gd>gq100000NkvXX Hu0mjf4$T!xmtg&b$jss&Yu0xYtMgv`rT%K{rSVSKj)vE>?dmZH!kXSZq}i@-NccKTnmulCxe-B}+dx_3JBq2;E(4zJstT>R1RN@~cB>Dg=BTEZ{? zc(0duEm-4c)DNT32PT%fJryUa4~ee6eDsamxZEV`pwmI)cTw5Cq4iAH zgBpy(r|g-K{Wk8%Opye(mDB#kX%`yxhVNH8^U`gz_n{5XOdf=uI>h-#;86C-ZMd=8MPi%SpAY?;A1R977oBP{O;YGw*1-iI%D$eJKBW7) z`*iqhUk-KC-3l`2-21sMoBodP*rOtB_kD8#Lyf|j8*w$$?6g{ZZnXBdTIw&~S@ZJz z>;}8zEk60HPF;DlNT5zot8BSWm$c9GFnO=o{`}5e4PIRTjtF^FZj?=1nRq{~tT40S z;ij0?Y9&8|+5WAvHohO6S$yYxp48fHpT6$*oc{MkZ2z6tOZj52MRpb@n@$(pe5_~Z zEB?pJaz0hv+P&}hC;2D&MvkvLKi@q)ADEm~OI#yLQW8s2t&)pUffR$0fuV)2fvK*M yX^4@Lm4T_1p@p`Aft7*5>2BZuC>nC}Q!>*kackIh?W;3T1B0ilpUXO@geCyMb)tL# literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%B3-seal.svg.png b/server/routers/bushou/images/60px-%E8%87%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..018a9dcbbde860c58020d5ee9b976bc2033eaca5 GIT binary patch literal 1365 zcmV-b1*-aqP)Ler1bmMXyA?PwZ-RN?K42CRv5wX?)(33Eh}{kh6vQtVJcheZb_1VS={taWq3m+P z%ZQ*E;0pDu0=$k9yN&;eSdeDB4-vKpI1P9SBlc^K(>@!AhcE(XtoRo|e~G+uLqBHJ z*4GHI$RqFLn66MN9s#cQw4IL`vFCujzzLpt-vHihn_Uk06Zp#0_F5Wi_ZV=NXWkEh z@7iV;7(EE_2~Yd=Gzy*r)_CUq9QdbQf}x=W&ym~@m($ps_4OOj6&vfByN5aQ$N*;^iEeWPrL zGVl#r!*T20doj)Sd8BDh0Pm=0Hz6)&9CZH0ZE|ctNWpQ0Z&2X`u-1A$qQYL_(uA_K z;ItbGKz6|(wFPd$70lH0E^ydN+hoPBN+_qMLZ1Q7i4cNyExW$_AjY{^A4%H<998l2 z6Uxy-Yq3@d2wB4}!S+taXe4b05e;y5LOETLFcm@wo>HMpuwE4GM^;Hu>{j9F#EYp# z!c+($Sog^!!DEi}KU7#FewX7vQ^QA8=n}jrVi(0YDv5~RrOwNe@Payp|Bf6=)nZr3uqL4UV{DVh`rCR6S-p@hR`H%C+?bF zL8E}@XzW^5#3Q>4*#om}_huy;Y7$?G9Cq0_jGP78$0NN+4K0t@9>FX^dT{&HPXI4w zVj2il;BAtfi?r7?(h@RPP)Ike0^AHdj7(4M{**F~3{F3(a1Zday0+3hx~C?Y7wqlX z#mEAn3Y-c&30$Vq?g8Eh4&=zCbXp&ZH*Y_E}%4$*?5EWviU z!(|m*B<%mO&MApQp|~D1XhqMPaz#;R~7nq!71eE zWeoAH4KHlP9zo&x^I`GH8 XSzJD4{1M@t00000NkvXXu0mjf=46He literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%87%BC-seal.svg.png b/server/routers/bushou/images/60px-%E8%87%BC-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e96a2b01a29f57d6d4a12f2c6c28bdda4a7ad6 GIT binary patch literal 1459 zcmV;k1x)&hP) zez2=WS(#R#DMT1WtXO0SMZds)M?XLcGX$xi{?I^*EGrU;2*e;PLQ+bypBil$L~TWC z?n;|Ka>Lx*-Pa#yhB-5D-t5e|GqVx(f%=2~8`uqe44fD7F&4NJcnkOh_!+qgJrN)6z=A^6^n>}puE?Oe zfvvy_;3h=eXruq(z@@*xCQeG{()n_dSD@NQbBwTz}p0(*COwR(y)_2 z?DUd2E5J4a(Q7E@rOO0Gx~&XCg=s*a;-8h(f#tEdP_@4^*t_5x;7j#6^PAfu_;l6Y zXRvq0det78)z~6|N1?tjhqy zvKm_i>$`fyV4nx}S`9Pbp_DdLfZLJ8U?i{_SQpdpGTMLGZXH!55r4(6I5KL|XFM0asxSmGun z9kk#b-k_p`d;vq)hh#{1BdMhJ*@gV${uJEI014JtA2KIT$${fI;2~tLYL1_P4FpqQ zc@A9tB2MsbU~U0iCj+lhJIDR&nXC@;$SFTX67?-P_=;jbun4#k`FEY+D%k&Li(V$S zBFooCS4XabH<7$v=83~dO>2{j6N_LS3H|6oZoo0%RwObr!6LXzwSTb^JD?M(aGK!y zNSlLrN9?g0x(fcw(cTL4T5l2Dt=e66dlic_t%erC`mKD}O6-Vw$wQ?^@4pE>e(d0Dc9&2R;Kn^!g?FKFvB{3ziUscH(gIUVToC-=V-i7(+`79#8{|n@i)6__vo@Ay3Ejp9nmMybt0Mk_|vpq<@mX+;N{G zY>NE0fZBA?-;!BM^47>$U>UU;QWeRymmvkj%hmU#q=)w^!WQql3i5bGvzqP54T|2F zB#Z(crnVSRMUn}I~@F{MoYo~ zs>qvma*lk>p3gY0g*o!n#hg0iRp2G^uY`ik-HkDPElEas;i4GgKH$-Uc_$HG;;MwJ zriI}wYQ^4G1~GC1NOR99gLF)U^rc)M!PH2TPjM&JtdxvgHuB2YmB`6`mnW%V6_5emfa>kN7I1 zk3&dpDsH!N7*f+pI!s;#UO~z_y|!WIi_yUABv(T$*Ae7hQA#Rk!PUqTQty~TnyVdn z6FJnZypPn3^GcI~Gk^L&EhYxLTGBI5QTv2h1d80?5T8^j>e;a?JZ=CE$sU6}v? N002ovPDHLkV1hH&wGIFP literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%88%8C-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%88%8C-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a44e9af7b447643b52cfffacf8818c16b66a4e56 GIT binary patch literal 1125 zcmV-r1e*JaP)^kA2l=%JvC-3#d{0$;k(n*~A_q6bWXDN%=F@0wMV?xJiWXf zV)LSe7t|N*W}MX?nfddW*j8!|s-E%gK`^#s<8u z0sAgIfVE;loEB_T8SsmB*et{w_-EK=pV-=_1#hbi_|_Wz=HPMkr}}@7b6YR7Iz7XJ z*5h3~C352Niid|(25^3&?RZgqe1!i}{f>&SAyYzGt?D<0rX5&Tys{^SqfdG#F_ObdF&>YEPqkVreb+b6Acbc)qG8E{`) z6-@$P7!7uNgSMUGoa}~X|M`q&4Ml4A4i-0Px3|XM6VZiF@QQ4@n`W8Oy>fX2cCQ&7 z;m_){IZY%kWpOmr7G{YgzAUz%N9(j(X*A$fb@ZQ$tqGe(zo=ZfDd}vhAF3hgdryCC&d#JZj?9+X?P!tbI9!d3oJ%9O)bA~7)Mnt`pXuCyZ zT=nMJhw(Y)4cmX2YQMLoku<=YD$BTqDnIu|o^@i8g1=I2S7a61k=4O4SBb)Wgf(~? zPl_AB<8X4KeZLsZLF^Xg-*$23vOCdl(CB&BF_Cuuo0H~DbYQ2-1*|6rzsaeP%T;M! z8+aL?Cf+-7bw-~hmHM`3^oM*imj2ZHB^mvlo_hZ^qd(*u@P^cTZ$^I?r`~f3I8Qpn zA~Q1Q_Q+Pmzp8SDUX)c}D@gB~w>9Z!fy%vopEeZ?6Y;FdfH&iW27N5TA1OcY<)|@N z78{#L^yAWTY&vi@?iME^)qdk~V_pLDN<2pB6jz_~su0ExiDduk0V1E?164QcivCvfeVar6-(ppg!wPaP!dk&|Wg=@uU rd8)BjCWB&;+JWEko467!$cz60Ok~gjfRVGU00000NkvXXu0mjfI`aSVw#{C37^?~p)=1NG%H?#DkGK3eTl?cmtsDByN! z(W0`Ti;Ki|b}T4s?2h`)9%3!-*u7w?qb?J-Cda0*sauPLQ)W$DDY9&FuW|3$>q+PC zq%HeBqk4Ju-5+z0T7Iva^ZW6f-+RwB`fB=WnX%nIKe_in))|F4pX6nn1@6txD;HPH zKVW)Bnd3Q6$=e=SX_1$-&7*8%oixu-`&kVkCJ&t{PAxolzt!=;!mEU{5JyT>! z6lw70(vJCN*TbX0k=b|A*(s6zZ%2GB*S2$;q|OFBXa6x_-`<^N$L4q34QZ);6Tc}! zhvEAVcDd7s`>f{5XfXe=%&)oZUl1dI*65LXg{wTTa$QsXtHsODsZVGAXZ?NZ{s#+Q z*>8HFza!}D`O~-czH5JzjamC^dtGyOiT*c98P){N^J_n;p5deEV;CQ<57KuH$}T2X{~!Iy5Z=h9K+3%ui5M_*JXjOd)Aec3|x>ra!x73f6Y6^ZmM?XRGWqv3%xr%g-^*x&3O&!ZK|J z&hiIu)Mhsp+wDqQk*j~|h8~m05w<^PMfUhzdZlzUW}CtCYg1ezg6ehGZn-_R(zmcZ zbDz<9p~A1>w`Vvjd)}BUzWr};n8wo7h!j>wpEK(;mP>hVYw(`D@YKcBki}A=Q`qa= z^aYfh8rT%N+;pe9a9s50;Mm&I5#&3giZxrEjpf3e@cB0d6gm21&e$y6b~p72*KJq% z;KUDgGy*#*};)qNlB(2dABd*14W&yKY__c3fZ&bnit%?GXS z19ej~=XjWD))mC3?qfF5vtpAEV=s?3HkkaGhfz|_=-8&L!mG3EKXNr^9Le0YDeLSp zt9HxGDl5NDhqN@Oc}`GrX5hHwtIqKKh4%86wGXH5+FEjL*^St)@OCyY6MCF zoy^SmibF`zWygy>ADRo_6<=S)p&=S`>Z9)TN@2C77nXfs*EZ5jOK^T42+T*SC9V-A zDTyViR>?)FK#IZ0z|dUR&`{UNB*f6t%E;Wx&`{gJz{cptHiBA Ttm#i8Py>UftDnm{r-UW|8Nt4H literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%88%8C-seal.svg.png b/server/routers/bushou/images/60px-%E8%88%8C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f63bd69ebfd0c893c753b44044c52a9332ff7e93 GIT binary patch literal 1199 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%88%9F-seal.svg.png b/server/routers/bushou/images/60px-%E8%88%9F-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..63340d612e68607b649b7ba8a2c5727e135255c3 GIT binary patch literal 1338 zcmV-A1;zS_P)B9|sHlh!MJa^{VxeL` z><3CygeXa?X>6)VY}57Oe}{W_-A#7p-aEV2KMZ?jXXfnx?A$r`f6g8FpP{KvzqMpcr7=1FTF-rr9Hq z+0Xb734915Tnj zcEWuBH_G-Szz*PZln5IZ1z;oa9g>H>%IX6GJc4;?>G{ACq@5RHb#uEpc8S^MqetP= zDt=xCo{UYl9%uuuLmGS#dzWW`o9ag^9X63c`=VjI9~<;bAxXu;B1HCEU|xpn-^K>K z-G@kCqM*ZkE(e~(I@gk%5iLnN<&yUO+pz4;5%BGfomCdLIrh&U zTyhEcZpZ#IqYt;}IO@SAIxa#&p@^1Qvf?Y_W5kzG>^r;yWm|wxJ^b{T&m(?x;s?Ca zv9pwgAX%Es^hv(iZL3Aj~4585Q-u zVguksY`{-=`U2w2!>dqs1-;1P19$Fj*dhH9_OA2>@-;(gBd}r6j#m7G=w9G!j!$HUSLgMQ{#N@q~l z<59F^IvdtF*Dagl+}x48!;wZNP63|*4^Z0CNU#Ol2WyQ>KRxcn2J!`Z_U;7Mqm{qC zSmjk|8^#t02@acMgYoI7$2KhayQ-Yi2|R=v0hL}becn0OeSTkvLpeKoQARGJvaXhb zWFFGZZva1;Yu7r*H(~=`9g=Jayo)7wM@Ao4Vk@gA^x9LBF+H)hW&i*KtVu*cRA_>$z3MHeBr=7=bm%t_rK@d|GoeJ8G7{S(W6I?9zA+=2iIX7 zH&-pB3@*n}%wZO{R4b=g&cXq~*m^mHE2|V$6sv?~JeN@>aej5u@~00wGz{E>E%+tU z_9Kq3NMG*UqhZ)L7_PN%#!Teg>y@a>nT?nd3_2pcbe|Vr-glL%E@zhGOATY5&FC|X zKO%jmv7s!1d9zi+kiT$3lYaM!&+_(C)aA@6g7>W(@mS(~A6DaZoQeJ7MqgW+(wrF8 z5I=@m4GG@)+(RHX&ka#_xDlxFJ!N=b$S^UIw3$s2_?PZxEL5S{z$zJ17`9F3j#+ z#x)P;q%B5X2CqrfS4WQjwy@>7B2nMBC`C=k%S->7sGp|sj$J5Q6ZIYK%PF3Vq#e;H z1{N@O9bQU|{Z@XfuP~mFHhLGX627PF3=7ZngV?Q+*o&5HN>jZE287H-vscfI`2&YJ zA;?%V4B|EO8`Z4rw1gt1I{kP=BfZl~xugQUxv>T};z@C%Ucs$+QOI>g&rRVeoLauz z{D^)d?-36$uE4+2GksKuwr&@9cpc9mKGHnh183uN&6oLMyjAPh(X5bmV2?KGJ0R>e zjcIQ90UT4T#{$v5Q2r<@P%xn zCxsoxu4FwP##hooz@`dy6;7XYg6}&^FqP8^$4M{mkxCU6%u4B?z7nsU=l<~jk^Ibj z27i|H+m*0IV|I5-?<1AQLbgKkU|QJteiL`r>OIQfKL(w5z}V)XGXMYp07*qoM6N<$ Ef(r%rYXATM literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%89%AE-bronze.svg.png b/server/routers/bushou/images/60px-%E8%89%AE-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a7b1b45d33f50fa8685418dda545c7651cf024 GIT binary patch literal 1065 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 JPDHLkV1jusN(uk~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%89%B2-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%89%B2-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..36931cb298d5b8d2169741b3729acacf6497f667 GIT binary patch literal 1181 zcmV;O1Y-M%P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0vrVbJ944oBLDycrAb6VR9M69n9FMuQ51(io2JQ_ znKW(M`e>`Qz8?z_U1${%+$iWmTquG?5ETSLcW$aH5pgAMTUHGn# zqSiiAu$gI7TN~SP;q*Etlg!*?nr=LoFgJ70o!>o&^Stn%N<=dp-koDF5mM;r43KpA znNtJ&l}49cIs>+2d>5l1y%^w&94%Oo5xVH1i?6(;gARt|w9v{8x-g3#zqn6}cZnyd zn%O8s384YA*v#$%bkM;vS>Q~nBLToJM+K?`fiSf+u$qko#mY+F6laJ#Ed^G4;H~Gm zQ1~7vhB67@4HCTFw2ArLVu2f^^wTY7TCu>3h0A!M6=L?&X}LVdwo2jvD1-rp1#Dm) z04YzvEu0hcey_l%IYw2^Pd>`h**xNem`Q{RV#HWT3#)7#Z@sGYR-TYB&K4VFEB6?6 z2_lJ{TFs*6+|Kd27i@=qhk|Dz%e{N48*mE?a`65=%%r5{JmxyD_&^eaB!eWq>LA;lI&%Vhqapg} z8S#`EC?n?;S zA_u#}r^q#&&#IkN{l|2k@P#M=0z|1qMMag=+f{~TLS}>kDu9Dr&RUCE2Z*7eqFP6a zq7kJEji?Bk26s4~4>()mwNzN9;&cXE%@YH~)yKws{o~7pKiW-5&d(^Tawi=~K;f7w%<|cFMNgaQKd( z)AA~9nP7oKXTCgm>-1vNnj8DHT6}Be7c4q&o1R&E|3}hmfs9XUZq#ueTXx}wLQ8N$ zk>M6an`|mYi)~s{RrfWi<#;pyi?f<; zdZX!LUsTAWz1?fumU4WZHUHI)<6F+`4&vBaE4yZs{DaO1Tk=e^LaN`-`*!AcfMaXu zt)RyIUAlD-|1P;(QmQF(y&?Ku#HSxw?p}VitMumXyG}a--Z{Sun&0|*<)J^;(l0k& z$nn|vRZhTeX7IoLou?1|{8t}lnD9YfPnwxMJl(o<=D~OaEBy~E6hG9@e=Jzp*#4Y# zolMDtgQBnA*-NKBc)(QkiQ)Sb)^njBuRAV{h)47hrC1eq^dAT928XT^d=B8pKe+@*nm1&X5PT3W~0H@dD~y3c9SEtR#t zK1Qa#Nwc5q_#kw7nek+wcV{@h%|3hQ_uT4#->d(hf4b+1XP5E16<>C@$0Ww&?~8w@ z>nQLgvv~Eb3NziP3#)G1yqtA&b=`hRGd{17rpw2CUVh%o&vQKcyPE%N6WPf5zsy(q zX2yv9*WUW>S{tAJOvA*YzPz1m=DRp#^9)7HkE|DAkq*wt-ooAV>_>3!?1ZRDDfw?4 z^UiKL%i7Jhk8!WsC5Gt>Rr0F0TPs$mF5Ty{T49IrxhGj4deY`>aJ~NKZg=jq4X0AC zMP<)TeNixZW`)k$PgNma?KyLWSBU>94YT~4xV>wKOic281&e17jTe1)V7c}_`EAtQ z*Q<0ksrlOf_bRybc-q{hH}xg9S%&ZZWq2^te13Ax8IHI!qB*_xtml{Ks77w{2E zn$ND(I;9y+Sb1mrqs^}S-o#yTIiuqJplEtJ;~wG1f~H=^zL!o~xh|`n=M*jVv9BfQ z=rrxkm)Od0bd+88W{m4+c1sUV-_0v!8nrem)TQ_N@8m;z{;5UYX%GAt{|~QrPrh~a zaNn<+)!(E}%JjD~h5z=@?fV(Dd@-A>xs%IxwaW&RbbcN?tv4t5yl!{eQtxTkS>liE zeCTw%%wdzjf!G^q=}&&xc+Fj+Ah9L7ds$_SihKLE`i?)dUp>F~JT9yD;pCeq zILYRu+TEtUKk4>g-B{PQ{#fw2C1Hht*?KXS>ql$t&gs-n$~a|jV83WzzyaR>&fVRg z`0q4xUHz%QqR80km&WsBk0!Hq@@=VPT{iv8{mNq2JHZ|gns)puSg2#?^Q$>)UBhl= zy?Nyi;{QCze*Sd7LOnBQmt+v109y<&i>a2lMwFx^mZVxG7o`Fz1|tJQ3ta;vT_cMS v15+zgBP(MwZ36=<1B0o>z04>Ya`RI%(<*Umc%o+t%ESzwu6{1-oD!M<`v%(9 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%89%B2-silk.svg.png b/server/routers/bushou/images/60px-%E8%89%B2-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0f12bf25658b65a0e10e79b3b87a2aacce7fdf40 GIT binary patch literal 1125 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC?7fotWI$EXC5x~iHN=Lx!V34pNx6)R5QDq-*W93|3)9`%$ zxaB*4D_56a-_2k3EH(YvoS)Cm*cun7C5G`#+NpO#XK|OkiKK0){Hnl!9sT<^J_y#x z(lij--I&OjXUr$p@jQu@=3Uh$ zNgJ88g5KyC@Xl6kTcH$Qam9h{Aw$c>w*ppydApj<3O;N7!8|)tTvtqP633dQ!H52+ zbRM4Ku{uS~BmcqEmCGKdbcYEqm8$pROw-JF-5Y<^TIJ=ME9~bcvw0s6pLKy#^M=Se zX0@oRw>mCJi%4Cp+Hic$zAM#y9v>>YG8f7l+omuDsF>6;M4Xs0qpNS}y%oPg{JOUE z#P9G}!rYy+P&CE#qtx?_`}VjwF6>k|&|iG%QeV&^KWj7gRyPd+CDuEc&ks&+&Jos) z&bX-aNA}N}9J9`SsxvCovi4T>U5^qGvCF!}bYfAs)BLTQIE8J^UrhSaXWc({xn9oV zx&9N5sJ@asbSQN8S@V?VA9lR{lFQ(-+U@X~f)$U`m%m-i`%Sa4%IuO;;*T~C*)o08 z3x#^G{Z(f#y|Cj**76)7lkk)LlVW%Fe-BtTGuOViW*B_UEEVV?`!F+zXjeclM`3k zIy83uUE=w7S?nd(bCM5VHSOGXRqG==o98lqVds(yrhDi85^`_*GGpTBx4f4bV~*Gr zt$g@hNm#TCv4PV%j9K9v;Imdyxt(l5OdbUa&U-v4cu zQuoh<6tr@Qi0t#v7hw>UV&TlthUQ{h{jVMV;EJ?LWE=mPb3`Pcq7P+6Bh)^zw&f(42d}Wc80IV6i12U^=WmgGeu_1k~=lY$irGuoSf{6$W`~;I&Y4Md8~oVQ z+sn)2w_m+3Y4c6*QtAJ6PhpI4dax7lywj!MsYl?9qi2Q}Dzn)8(eIF1$0WVN4~ zaM0lOnZ)ED%MLV|KRe*A6VaHkTk?&ZoAZJ5U!0#8&ig2^CZUIC?~TwsVH@(avx7k{dqs^nl=)@n5->Cs!M!q)c zeM=dx7_GT~EXC@{mnsXj;@dtx?>-t#|9Rlds%x!{pM4X=jfB|pw%BGFueqBT(fFXL zuAo)-hk18t^KI2t?e2~*nyWV6u(Z!Fb-UKMqnZ4yOB|UY z$`YG@eACqMv%8>nNx?NxK1h5o2g~&3)=!r=<;aEXS5aCi(a-f;cp0}}$iZ9%+s=w5 z+oI-K-+gjs&251gm3=m_F68v zY2Uc703^{QN^`5_F%@=Cau|yyH_l4lna~es(-br z&g9tRMU8fUDl(6pO$;+yesg_&w$lA}uiDL@fEhux#5JNMC9x#cD!C{XNHG{07+UBW z80i{Wgcw*@nV4A_8EP9CSQ!`yo3FW!q9HdwB{QuOw}zxFk!+v_22WQ%mvv4FO#tzL Bp4lw} zGxf+}R*Xi0UMIH%)a`L{wUIBsAr|4aPKG$$?PO1`RUl#!p6%q)5^c=0a3qUZgaxx3 zoBUhECR_%cF&b?}!s63{n2lRwvPAofEFH-r7U5|p=c=+AusqWJ3d4eM4Y&-P_WW&1 z>4$(Jk|<1L8~%u_WoPL=;3RNfm3{WuZ6)d9&8loK$wTl(WO{UT0vpS@nZSbZb|<@l zy3@aS?AANE##6St!95NEgQO8$Ff0hKQ~I17I~k($RoMzB8?D#9uKwZXT>BFigqIbx zlZT;~o30%Dy3$uUS$fj@m+P<)&;do>{q<;((NTKIvLL)r=|2kC`-Xj#sLBTm!g`tc zm}6JZNR38Om08qfLD)AV3#n;UmN%g_f{cL0CE5UN2+NxLNtMaFrrVc?;9H}8@Qs8i zPgzs2B>Y{K`6d_XVc&@G!8d7rZNe`vEQhq7uoimkWJ&S$QlocNqOK23_~nHK;c+Lw zsj`(Bn+{-;({(S&Yv7xub$l&ppQ5AVudpCI>|{4-#3a#IOl5i(5Kr%cf0Vk1EpR#|Y^miG%EV@V@lsv$Pr93snFi9?X1i0w*8Q>1E1bCpz zbYky-D|=6x>Aa$B*8%MeCPGr)7;0`N@PUnPB*_hOT1 z7NDM49lje-|C*|Ao~n(pA0AcuNI?BtN;gm0#vuGw=}!XcKT>)n z2t%5Pf17LN#|x!bhOq2|LxTNrrTaD^r4T!(6+-w8=_X-`p)Wvu!jp|nypTP1WeCf= z7rK9ydSwpOy@)}$uG$SHEZfFP^swIQg%XzRXC->rg0N&oD$&FG=p}U0lB`H2dRVd( zvUv!B5UxZI3*j;uMj6sY59$gd2H_1(zRR`Bhh#G=(Zh1!T_(dQfk!3YVGF_&PAx+QPgoAVhDx+Cru3F3tUp+}QKFqerRRMI z(lo3I%LH?i^av&dFG&*tMYEoTU`=?M?iqW50fwO+GyiH Z#ZLymxA79bJNy6u002ovPDHLkV1mq*5>@~J literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%8D-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%99%8D-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8a40b44596237b17938338b08c8ad171f760373a GIT binary patch literal 1401 zcmV-<1%~>GP)qAS$ zFDjOTQo#>GL8~GvQWY#!R4gLqgCIrvvDO#H54KRFf)!t}#YbN;X_~~UNt>9)59cm> zc6Rpe&fK}X5%v$4duHy;x#!%Od(N3N19j92lQK$ogp zrsx%l{s8+g0PqqLBHoMmY%^jTMW*iCBq3Xjv)&KX{L!rW70FM}TGfv?o%fk-f0B~VUn~#AW;3Fi!Fh{)`Ne|5^ zyhdKYrxNhVAXa~XLZx3#Dqv_lPhPm!1Mpi2?4?lYTYQ=MEDy^;hpQI_;5Q0vK*Gu# zp7v$t6HAxFB1PW}T#cl5mLe;ycEoqLBfh)?$$K>+OT$CJhrr9^*WP2mGr+E>ygK4n z)m4)Xvyenw2)Fc(!Fw(;+O{QW&9H-He)kxXy?g<<(!&2e)qb0gfT5;zEASR@cTAh( zNNVSMB&s@z_}9URu4Kt~0JtlnyW$$AiRFkvDK&DRA=@e;utxDc5{Rc0)*^-_ZmNbH zi4Mj0992yIfmq-(N`QVO=e(6dg;xc9XCrV{@m>+%JRGtV?joEZZ)6%NjE-Im{O-ew z_lCf{OG2k{rjXIr=r*2jL;P+C^eEn2T|4_&=`4j=!(E7B(%22$AJL7GV2=SmBPpO^ zB*++v?zsTtED~f4MQwjVb}2P}SM(Jg@;hTQh5zV%CE9fpZ_FyWY+JFFlboZCfObyjVGC!{uZ{T!l5mJRcq*pcQtqA+EyO9DJ=6p5xNdRoK5Qb+tI4 zI;!XimyWIq+v4V0jPNN%$Az{~F_ZBhr+n0$Gz;5E00000NkvXX Hu0mjfeXNun literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%8D-bronze.svg.png b/server/routers/bushou/images/60px-%E8%99%8D-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..83f50471896f1d7b21eb8c64b22605d83a854bbd GIT binary patch literal 1251 zcmV<91RVQ`P)S`7>e|@VgVhDPVK~WzNPE^{wLrq{lv_+`Fd$ zU&c(u|I{}F=j14_4cLoUZEw-;tL?fYtCL#RjKE~=d;;(pa7o7U9stHV$DP0z+Wj8o zcuYngx!6N^FM1fb-LR}dz;{mmlfXqGHV-L2)?^DgJEI8~>!tx4vdT_YnfuZBF1M6 z(1+J-8b%E`LQvQVU?0*3!-O9Lo&egFvL+(c-?h0r!M9rzP8B019TV^i=>=vWpB0dS z!ernrq>Adoe*<0s763mh*Z)SQgK_Lo?AsG;3*&Lc=>TwJjO`WphlO$J>lD5>DE3)D zf5yD0IDI8$p4$*Xae{l1b{faKiv4)QxHGfSarh^2p+UaEz>CC-)(0~>Zz{G?y?Nnu zB0cY%40&7dza>3=1B{5t|Bhm7^00F;0=POy{ws-p%UghpBl31THb+UW{*_`k@uH6b zi}2oJ4VaGC>wn(hcyqIg^aGc}z^~f1ud+JMGh52TA?hSUHfYzgjHj(Z}ll5LFF(5fIf&7|RukZXO&yxfQ? zROufQY|jN2YuEaLxxkmEj@yz=NhGIlc({I znA`_{6Tt=kE>44O4vX=N>H)SB98E39UmKbhbuBt9^&y{~(}p*Q7W)@)uf5R9VKd=k z4`vz&>B`Q{T8y9cX{9Mpw-WUdzD?nB zU?sse`yp^vW5O&B{Xg+R;8EaCWYExs_XAr^D}ggC#9IjOlYT+H?%3O!p%udYq!+uI z^qX8NOFPlKUiA*D>Dp`*oy3dXN|XH-Nn#SwV)xS|g9;N`kwL#M_9SqF#kfjE-RR<` z$E-$FGG`;}%dXfXByT}#dZr+=CwHCdKS2lbSKwLOfi#lyu($l1$iG1z{FeP)p)3FZ N002ovPDHLkV1iyIUz7j< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%8D-oracle.svg.png b/server/routers/bushou/images/60px-%E8%99%8D-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..94c4de36d516bad74ff7650a1f5f65552e63fd6c GIT binary patch literal 896 zcmV-`1AqL9P)9H{@O+%#@qNQcs zw8b}rXU?5_@64THD}Fo&tUY zM}V@})P+nD@Po{T?HB}h0TuDc438wa&8jg1oB`GW#WCm&%tq2p-2*0E%JmoqI)MGa zdY}%NRS40E0DboX$CdMbU@5Q{S(p7X0SqCpzz{HC9S>?{Bl%0tpEcgS`Ywl=^v^nA=L- zLS*f}#dInfG=35BBv`Ku)(0%s>T5MYCo^2<6yX@|@*_Toj{9>ngb?scsL~2}}#}uDa2P^A7BAY14$ayH|!hQ3F}p91X)z5VqkIw92K;S-cr8 zwc2mZ(xx>cAD%ggQ_upfz5@8JwRwSTGmqh%5NoVH#lR@;hHEGwn~*F?<-8*1t4p6P zI0g3ubCvq%O5HN0{0Zr1d;AIxlFl^&H-O7p`3mLujZ42Z+WB?hr*dAT9M>zyY8#si zIW&gKMW%o0MysqEnZfOH{l_RFeFADz>g%-rCzQI^TE9tPNmyobQ3Z@EgST7d+ciGoJ4jAHANf3_)(s+w%yO50>a`J1=tGq)iPa!#Xwq?aOrcY#c^detS z)UsjH6Q0OOAlZ#>tby>-#cVN-?5PXJ+6+QE1DNm{eZb1-Ejn>~52KE^$j1V8lad#H zcNwk79nMAySxX-Q?~vWhDDsa)l@*o9WK;%}BkOQEvez92z9H}ZQ)K<^^{F!yYLP@D z(_QEW_8?|v1gA+inL?6}4HW2`R8agp(w)fcoC00}4}hD%$M9tt3#@5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%8D-seal.svg.png b/server/routers/bushou/images/60px-%E8%99%8D-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f56f5bd519dcbf395ef1f9f17a1838530114acee GIT binary patch literal 1282 zcmV+d1^xPoP)WhdV z*iZ|$K8QZ}E~N-c6)dHt4rCJ z{M$qwP3Q%l1oi?y0~KJd!S)ZZuGxyu2hRc1G;UzD{SMq@QN;9Rg%yZFQ!%^;f!EdZ zao{j;5f}hA18s``J+RBk>UQrIAO`;lT=k^$ym23J8F;S_|5L&l+8V>(N$o6d&Ot}7 z*o`P!1{TKfCmg>@7>G1BQfu()eAE=gDcC6Pbf4Y8@(8cTH4wx9i~0U`>Jo$A8J z8Xi=12^dq)1B$MH0 zMd|mg3R_+J5o*1pE5h$l^lXBh*MK)kkHAN>s}>KdOCJShkeP;LgC`T@Tm`lx+tEg# zA6XtHB-l+OOXVG-zFx4G(B-y8crPp7;U?=93m;MXh@$U_@NV-wmKi<{4+Fq3k}b^w zA0q*(9Z589Reiq&P9Rypa@KJ``a0O9uBYqcnG)~ScRmP0DZ_Y zaTNGl^$)5TlgRqNfUMKA5xJiOPdmC3iTq^>#9H73BxCXsk;j0y2#<<=5q@72Y^sY* z%&$I`rG28tDXaI<6gD$_xb(BYB1g{v`+*;j`0y&>dV2%-s*a2bQZ)fF>Smc?jnWH&+Z}xf_%Xu&!zf=Pi1b%1LaYY& z5+)YMV)&;Oz1BEZkR(l8gjm<`Dn*}(;eV&-mw?BBpO8A%C~ywhg3cn_Qx=$J*lKWp ziXy)PUm%ejr2aJ+(+?zAjUajXE65Mx9afjtRmyt7>2yLC= zEGgb3vUR-x+=~0I&B6kz}K$Dp#$-l<%D~39O7!*nc>r5 z>zz*(31a6``dv!lC&IdhwZWDnU>4l$Lx|O2y@r$A&d&q8PT7Ddk)Wu;-M`!ua# ztHIjM@-Dk9P4AKptHGV=UA!UiCeuD_HF$}lO*w9ZW6c{@gO@4Vl;dVV;L=HVRH?X; zTsoNHq+7^TSPj;J#H2_HblPcJIu?VYQPbpV4UAP-0l;^OHwlXrU9kwdF0L>$K+ka1 zBFLw~d8U>+!7=6Rz6`eBAEiONwCRWSWpLhU6gv7VxA+i44#N7nXQT5gL6YsiOzzOzSU;AZyUthg^`EZsjvT*ULt79xD~i_`iuE sWa~R+73BLbZSukeq+qzi(Jf@f|Jko!TM&SSDgXcg07*qoM6N<$g2&Zh{Qv*} literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%AB-bronze.svg.png b/server/routers/bushou/images/60px-%E8%99%AB-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..33540b4673d74b0a83e8ab6462fa29e9d51ca5de GIT binary patch literal 1011 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4>>qRq?LV6UGD(O|Mqlo42d}W_J(&xtgFoNkN%Tqd|BC+QKJx=&CA6a?V42+ z62uhblHr)+`k`@=fQWgMp4JPm0>wpoBCnhrGaL=IF6C-%>Cju#yCoxj<<)D;!h+X+ zE1di%Hic)q;ntlN@xRai|35QWn>jZ*>!bEOL z|FUa7%}y1n`a8TiUT?fuCz~)|K<>EI^#`hoJXxnW>)bf*z7RHR%x}4{IP~c99g4c& zHm&5pU2v`b%<&GpkPR#{48H5GF7fVO|Cb}|3Cs4x3kKUB$r?;Ju-VXCdt2k|;-=Y! z`y?yQ9i6v|$^2K`kAs4LxYnKFibt!R{XXbzI2RgP`}^42 z^V8WbJPg}lo*oiE_tgCf;>WoY(y#8z-KLeh{zJsQxqEJTNL3t3%f6dCSKycJL+1Ux z(@%cSihQ;5W#UxMtrd?-uiW}`W8*aW>yi?zi;bspZzO^Us{yFZq4>T#>M6W%AXnA9lW0+iP!qb=|$H z8T%ePSv=(p_pxxdf3!QLI{Lg_z}xujyzdLUFG=5j#LeE5wf)AXFBdc0*V#zFn;*5{ zf6u>N_fx-~xv3jhP$KlE>a*93eRA(_zh5HI_d}yx#eZpu$*gNz&dL5|Eh~%p@jM`= z7ML?sOI#yLQW8s2t&)pUffR$0fuXssfrYMtWr&f1m65rXv5B^Uft7*5s}yrX6b-rg aDVb@NxHZhS?C%9?VDNPHb6Mw<&;$U-u*}r} literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%AB-oracle.svg.png b/server/routers/bushou/images/60px-%E8%99%AB-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0a4c8e5cacd35b6cd4c8797eeec5da7cebed56aa GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k61-SMESfQ&esFVS9rQOhD02Gd&AcwBv9nQ$Nx+Ex&)mT3ubow=O3)maPvL)^@Zn!Nc$F|_2oF9Y0!fR4` z(~IVs?g==x^xB7K3J>lq?h%yXbDy(pkDSeU3+0?wKMtsdMQ;f0Njt!IJYVj@quuYf zZ@%&Ju`2tYjqU$WE$dtEQoEs7W+wTUQ{nAzjpU%&ceO`ftBa9W%{D0WZo^4eew9;zunUdzg(IV zSRVUar(eFS*(7*QV6fK9dCFhL9Uj38XGWYaUer>2Tls|OKb5DGwj6vvrFQ*>qkBwUTYWV8OVw6?TJ11u^am{|K@)FU%TpI`n9f? z^UgB;y`}T*?Var*|MkUQemeWG;=I@Hl7#+E&1TYq#;dzUtX<~j-V>duQ!M%H;>ni^ z)9-(NX!ws|cC^K*U9akkfyq*}#5JNMC9x#cD!C{XNHG{07+UBWnCcoCgcuoE85vp` qnrIssSQ!|&uMEpY(U6;;l9^VCTZ7q`cNc*g7(8A5T-G@yGywqqn0=Z6 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%99%AB-seal.svg.png b/server/routers/bushou/images/60px-%E8%99%AB-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..27d13b6ed6ebabf23af1be84246e67f97be440ed GIT binary patch literal 1115 zcmV-h1f=_kP)xtbJKLQ_QM4+ec2RYq?V^T)g1S&ta3NS<@zH8awMC_Ev`wN(T%3f?z4y#a zX6D|x6UZ0NVh-~^_xGQ3&;OkN{|xiYGfxfru^C73JuWU+PVwB2sfzY|xpJ~B$a%c~ zQlBr#dHjy!I>{Lx!?IEp70hCcOFI2fsfyabkfg(ZVri+03T6ldm@-8b%_d2Q zr?3@$Wr`}2rPwFy^rtwvL|uh)6-H&99>$Uqbrs5LS%;_aVws|fW}B?ThjDC~qKf1q z@map43^92hEn|EotlKoDtmAe#44+5(#@h7k1U+qf&fZAhsIZPtK{pQIkZb~yEA4Xl zaHQ`eEKK$NjgN(s*(Qt>D=U8%;a*`4#{yTab^s4+-?D3obMY(=YTVIu+pdGRunX}v zCbaHo`W)VshrnD05rWQRctZ88XcFJyN9+`W7Gd^I#5ouc>S8e-&>p&?A2H!>G1xhmFB>b zl$duKuj-*;T5}`oa6$+^ zbG9hokGC|Q0XMDc^`!8pDZ0%Yk~QzbLb zrf2pa+*-$WIo9F#h<)XWZgCO9n`MJ|spqmfc58+Ich%a;#)Ohl$5b)zmKC{6DA3j7 zk%(Po+k^GO>)kO7%Kn3ASU4`$;!6B0>*T0VFS|wu7UTQylceB7IKPfv7e149c33#P zbS(GDioSgocB>+G`*C_PGV|jDNzuQl{~GoPh559@Hx?%|KlVzB-Z=}KM`fMeT9m-N z`9@=}^h%+4SNZ)TLIN@;STBBrd`h@Cs^oh775VQfUJ&wyu(3=a#;~B|nX029g=9DJ`LLo05n9|8aI-8pFEEBFx-^Cw7u=)Y7 hm_reHo_RW${{eHH?Sx#+Y1;q*002ovPDHLkV1oN0Dfj>Y literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%80-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%A1%80-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7c93fa804ef318fa13519c11ec3af5e9b16fc7 GIT binary patch literal 1210 zcmV;r1V#IaP)#gqUnb*(t zFn?&?Oixu!|EH^_x@#U(s8FFog$flal*0<(3@{2D1eQ$faN3I+@CQ)OwXZFu$&toq z0dE5*fqzO4(8VO6C)XON1LuL8hW?wt>rP*P#0{3hVCqEoi@12dKT>``PtFU>NC z4T|9rpihyVig-aPvUOk#2`3i^6xp2?nHNmD5>GBVfRB~_2f$#2O$+ycpMV{}O5g`Y zMvGU?^_vhA!~Mw9t2zDe0-K$_I`AR#q!&8ZMi3&mfjimpVAif8F?$ub1YAUBHU!r` zL=cX}IdoU+Om%}27*)o!&QgkTX@FBoUk&|b@+{Da?wwXDiza;1(;u71Q^S|iOqXtz z@Z3oK)R^Y!zh^17N_bVIeros#k6MbcF8LSmNRi)$qz^5|Q=%JKmbK;hAGAr>O*J8$ z29_%QW57}1ci;+=TC9}Pfh5B!`RPexMFB4l0dOG`-!hh}&PxRGm(SiTIr0&G-twgbC? zH-P<&_qJbwEsEY8;1II)bnz%K#=_{sA3Glf^gdDKM|k?80{BId`66I*jUxXrhD4DV zz7)82H*if`Zx0||(ZJt|%>01O!^k!?kEq!#LUe8;frf=1}9ysT1Aw1&gFFM0R#yQBUD+HJDupti= zC+stNC7`1bcI{|{JAf$xyKaRts@joahKC8SU(3!gglE|$*cQUt3|~a@pbs&GUH5Dt zv}w5EoL>*fK0yk?{~9_mF6|4I9#21vC){t011L^di`5?u9gVOX8orm|O98tB&iOH8 z96)ixr=9aU@QtC~iUMjQ{Yp79rFs2GKvI7RDOj z2oqm>w%YL&WLJ^?uMF*IW5D|%BC#>NkZ1FPi^XH4+;jnn*8$}F)?xI5;1k5ga3@lV zeH9_!iR@KpP%Q55(p-wUiR_eykOJXQ?sypad&I5m_jV@VI8IuFu27*ug$flaR7j5h Y0jRUM7<)gi8UO$Q07*qoM6N<$g7}j&s{jB1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%80-oracle.svg.png b/server/routers/bushou/images/60px-%E8%A1%80-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0546ee282e85b525245a3db2f370647133a76e GIT binary patch literal 1277 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_=f&B?_}x82|tT1xZ9fR9M69*jtEIRTu~G-{hq% zvn(?-#l&nZ@iuA^qS@F5CCG}P-pVL_==M-b6iJa8QBqG)Aq1tC7^E)-7Mfa=WI-3S zghF)GQDf9bM;&Lr9%eg@=d#b7J?B6Ve&^w^*8ki4zt^|c`fi+;|A`FqT!yC}F}ak= z1tstW?#nFgcb|HAZ^05Y{Y*Gb!zPq{&IaD zeo@YNmS!QW)E_?z&u5_>pk1hUK=|3v0vexsJZGlPULou>&N5+b7UF3__*?k0%c1Fd z<_`4J@bZb53!75#mxaAP5W@UCw2!4im{7jU?1#fC#MfYj$1K4!d1$LolK--a zdzY|CKm33tjvM3J0=^6ml~3G=%TtIiL=#&4itF<5sc6bVycgqAh!2vu&=V9mz4v2d zmaw=PgWXgV{|UE&;RQ@O)o5(U78DN%9~Q-jI_-q<#tJ80oP(|vTC-dxctdDYmwMrj z`b}7ux88PPRo1Y0wd2B;qT6w${fU2?mUD+Y+(%vZWN(=e78k`QYSiw9oY_}|u(~H% z=0N*}Hgi%mM&-=hrBygmFrJkmv$YA$$@%S0x^zs4Bpv9HEK0)Mo!!u_P2%y&%9Jr3 zajMnAqLJ#q9S`9bmsF~PdcqkYtV_9>cW4qqgAtW1-ex97Y_=%RSy1D}%H`y>@y9s96sJ>c;u5nm6Sm0yl3#SWa-xZN@ zLintp#|mL?dEvhMax2(U0Qud%)Uv&YvN|Qot`hcCi+G=KG_Ptn+Z_sFY&A?>YY4v4 zRuJ7(qDRsL;u%GE7Ui5Kg(Y za;EOi4xiQN+r7BlyJ)kiH~Q;C=UKhQn37GojuK#s=FYh@-YUnq8&k5Y@_z4>m-^It z*QC@Q2rW*gpr`G&&BrB=57qj00000NkvXXu0mjfYt>94 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%80-seal.svg.png b/server/routers/bushou/images/60px-%E8%A1%80-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..61bc86c3afb29d14917fcb0603fbf18b992040b0 GIT binary patch literal 1213 zcmV;u1Va0XP)TF>`Flp1Vs@=+zEovRZ$U9L5ikTQi--{Ozms(UXm`(T<1TNnfEex&b&g`TC`{Bme7rhAY7x`uTi6`OjMSjvzZ@_&bf7gKi%6N%%bN?&-C#kA9fK6sw$#Z}I?!&<> zHjV@7R~&Vp6unaC48Ne$}&kJr>U0lbPWO+oKdHFdgT2HPYA<9fg;;I0Zfrh$im zH?UpSmXy=jHZ>ZxUM|5w;7i~EsoMa)0lozmv3)bxsb^nOjsVAidnn!?EC7#@UGrOm zS>R)`-ia*>!0W(m!z2)kXW1T>J1MKc2iR%LbLkukrmz`XXYeK91n?s84q38isFBfV z6V%hsOZ_JpUv-dODQdJwCgy(?wftP`&3)+K+&la>@5qU-AIgyXlF)qN9@ZF@zwfTbf z;NgD?+SKD6k@XDhvVZm@+!MKIXB7xvENELRk(IDZHq?`_=9%)|m?S+t{af&E8DTwf zwT`eFI+JTtV~g@pTBmw+X5LeTHRUrX0hgb_16oH|Gne@k?H~_R(mqxqN5hlwGPYBK z?PIu#ht(z}8J&wRQ(hN6()F~Chs!(}or_j@@3fYaXMU$Oi13!kYSV_utt5OYdFB&% zRYF?d)wR8qgoB6kdaHzV*)3tK36D{JXRKZ;f{x)m<6+2#riQfMGzRDx)_hj$311Rf zbu0NI!iuu+Z{4y4*^^KiVfAJa%EEupP}mW?37;2PJ>ucvrF_R2G)1^eb`7oKVIA** zWEc3co@oZJ3-N$+$+MHIA4FK|)WeI|?(IX069<*yP51)v2irdlj1B1?@Cfj8ebWry zgg3E!+-tdd9XeGeEr1{D8l~_i4B2C1Kot)+@wvqR@E|-*dOBJsy(kMffZa6(%mBCK z`shu=G3-`iD(O3kWiM|{O6YqY`|98m>>HEDFaf-ajjN0JT$t4P+7IKR%AR5ZU zRg8}b={4X{;5FcWiofOPk|qOG21~Suaoi!D;Pksoup7ku?n*y!+r(CdGnE;PFv18U b>=j%GBBNB2m(_kr00000NkvXXu0mjf-$zQz literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%80-silk.svg.png b/server/routers/bushou/images/60px-%E8%A1%80-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..de228d97b6e2ae1988e90cf0b34b38206939e6cf GIT binary patch literal 1413 zcmV;01$z34P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_=rj2iQ$*BLDydjY&j7R9M69nSD%EWgN#pm+)$e zmrII?*P);bV>t_EVJlaev#``CGg)hEy^PqPEoterlAN*Di+|A8W~&q{M*h(<#*`u2 z+gh=B2LZX|OF{xG-nwuv%IOcz4$rxqci@jUe$PMWoaguZeed%;zt`u&49(Cq(G63k zDVF=V7dIUSJaZUDnyMeZhL zW~!efi{uGky*$hT&hoDYphSQZJkMMWZJQN|#IX;Ny1*%916@?%X9zb7@sWg2hr5$f zzU4FljX4*)D3Fo*xn#EDC{AgvDty%N7He_o>hVw_aKCNk9A~kgL0!OMPLfT$iH>wG z2{H}bXw`_~$XAIZstWQ7!3pMBg??}CP}xE$B$gsFv1fooesd2Ji{?Mbu7P@ zjYh(AZKjF{Rhk=P8WBuhce2UN53F- znJrF$YXubpIy?#N;8Qweu4Y!tPi=+Yy)fpYUGuVdC3d3D)SfF&0;IH^JN?1B*<}=1FPis zJRvk~^|uVc9q7MJ~8Rec$?o(#sfav2u@7^H}UI#(zgC^u}`x~arV3|=CMCIUAh0tES+ z-)ZI?Rs5kP_Bb!|h)Ktb?*U2X{Cxf>Zzl9>bl;&x;;gZO7`)f)3Q}>{VD9FN(Zu&LeiZ&gB~p>mlCB! zomj*bv1tl#dIfTm!$nO{KRMHTV*`;q$`Ro@ZG=;7pPqGUTXh_%Ea4x{&@=N-!VLWn z=|8DhflfT!48i~a03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SHZ3qYR536*GB7$YH!CnO zIxsMUSsFV4001R)MObuXVRU6WZEs|0W_bWIFflkSFg7hPIaDz)Ix;XiFgGhOFgh?W T@&uxX00000NkvXXu0mjfWG!&H literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%80-slip.svg.png b/server/routers/bushou/images/60px-%E8%A1%80-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..976ac1481bc405b3e37619b8342d18c5eeeddb42 GIT binary patch literal 1335 zcmV-71<3k|P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%8C-clerical.svg.png b/server/routers/bushou/images/60px-%E8%A1%8C-clerical.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0a81bb9cc62a3402f3bd9bb0e7ed6cb29e4428bd GIT binary patch literal 1078 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pncyn6hwn&Ob=&ZV7BvgaSVw#{C2vxhiIV0@%p&ev(^jAFAYgp*4inN`o&@C z7S{`l#KgD)S$26YREXIka63grD3C*Nii@=4%Z-JCDYGU`;ktDA_#*ZhOET^9f9|+v zo!fVO=efP*epy0>|0B=LEZ+D2&;HMIKmSc<(}~!SaPZLoMjojbPq-Mhy{mgNO-xM6 z)~Mt%`Z?bAKk>5>w8V`;yuFT_c&A-2dAx6Z;;V?~^Nr>RNzF9aajvL6L;sts*Ac1p5s&-L zZoGE69P-m9=&RS3t@kpYfB&J8$$iZ3V?*_qpFCT;6c028+w?Oywg@|x;#PV)4wmrAnJ{3RR`kEuwf+K#W)jVebQ4!`1lhx#R zZeUJO7h#yaut9Bxs4n|tpA{|B)ck*&%udN?aSgeAEc}>A_o>YXd^YsnKI8G3dza1L zc$T|&OpiJyuWIg0H!jRk>8#DUF1ybt?^KzUX7{}q^-7Z$*TdYDo9!0od@rzDC|&q* z#^ogwoVFgy`hD_>{Jh;ed@c*GSGH5FYG0Ai{ib*FHQyr>JmkzX(t_B2G)5nJ^;rMA z^N-f@MWIVR-#Fm>ZgRfB;rEBWty-6Fdh*GJ?ybkx*nf6<@r-x62UE@-7w5$>iT|Hn z`MoGgHoVB;iu{4}S(!`v@*myw<(--EEsJ@AU76{lZmhRg-Ny5oFd5Qw->${s|&g=J@g7hWC4K(ljAhf!qAE|XXzwcRXbSqNR_?XlL$qDUKI`sV%{OWcptHiD0%e3`rKn)C@u6{1-oD!Mr2qf}-AP12RA_CsMFi2cA~FwM3b8|n=wJsA(H{&t6p^B?A-0rS zq-AE?VfOiEwpQou%)GZ7e&De)yEDJ}efPcj^P71v#~fi&1FVnQiLj^w27vcbJ7Pjr zfU;+RMDnV4;|}DzG7J;~-N0eZ@|&gfZu{;CTncUgDuHIr@?}!mSwD6ucxm!;lVxIFo}5cTe*V^~VBvhR+-rQixFU7}I`la#Ks?8`JR1k>GHIt z3~?!Vg_QoKQT{_pUZ)!b#-(6+ni)=8%4Z-YUuw}8=hOnf5sQd%%{s;S3y%bjMrv1g z_$-i@O!sQm`2h?`c_;nYh2RF@n3R7Jpl-L6uCe2eifzF~KnpN0nNI+%0qVo*woWKwFsSEsOw+vx|pH81IhY7feU2W{?-Q6 zNJ+kKWoUCm%p2#-D1?(+PnIIBSsz@P=g;9deAQypZFs?ncctF(KE$K%oHF2fO5;8FyNvs# z?>h|IxgpsZN9HhYm^xDdR^qOCrQ zwt(yx?A>8&e!38BbIaBnxU9YY;Q9`a8QSWfy+|-z3yvGw%DF*H=Vg|e$caZbs5@9VEM6jDL6*37h2L`b>MO#*z0e%5eMX^=)U%(g$u!PL;GHV9H+9cd7q-$}!tW$VqCWc3_TN;SW_N{bK&Tqq6`2002ovPDHLkV1iG2 B0Hy!{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%8C-seal.svg.png b/server/routers/bushou/images/60px-%E8%A1%8C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5063f9f6b9652e703cf58716183f53e6bb064672 GIT binary patch literal 1429 zcmV;G1#0?jaBG7usV3?r$jfre3=!T^= z;RSV$I@4(5Xr3O{UaW7gv-X~S&ROfY2j&mM{?7h?-=6=s*WT;$tql{HKqZ(8obK^@ zt-xH5*Yl3offBGA*aTcz<#lcbJ_G)Xu6LUkbpg-@e2)^T|26~78ROf5ZY#bB%=50) zBc=oI6BqqmbUqE|13Rp^ZPEGMqXBr8xcFyN{LcpV3g6wpN?=-0m7Y-m-oYes3^+5v zZ;SBTi@E{h5~reCODFTV!{)2l{)GQhRZMs4LSHFf?pU~ z%t@jD0Wcu!lO6oO!u}($mbxUoK-hme_=Cc}Ah4FY;62PE`>=y=1x6yi8`W!%TP!C& z7GIj+_q_0V5%;5?YqS7sh$ovgEJ3`dE&*Qx7lxNvJ7%MXq5YI6TLOMgh`Yk!dlYz? zcps1(ECSv|iIk#yQ7tW}jTbxOZ^wOuO2Bd8b6^F~6f%iQa1bN#FlquJ6MIzf_gb+H zK!3!I01pD|fkDcX|CO;9A$7rhz&cFHhs3#FRFOYdxEnLH zoQqm(%ks`)k~^(iBcB7nr0851YNDaz-v}kV8gyW$m&+~gQ;g_m9I?%q;=Nt-S}9_W zqsm3Oz$%oee#)yTOEIE-_#?6F%hN_6gg5$2DYa zdrC%KPSl$4OiTsBwX2|^Tke>H8*rRUiiZ=Nu>2fhc8Z@~1PnU3e}rv6?smNGUom_p z+?nF11-qUC`Ix(Uafsi{v{z?L)S9ro+Y3ov!|E!At96Ej?W%_XoFnX=*`&EqYr=h~ zDIchMQ_|-NdMCf=;ABU2ii4j4%#ZB9$o9@BqSk~5fUm^ws}uY>qvH+-CtKas!Z!)K zH?y(?_!ySn6!!HFz6m%Zvj2AQ2ZZfPc$u&_S0*hCrlZDEUCOa%QgTE521opLf`858 zZV_CO8iyqC)562R>d2mkX-$o5qhkqGRJS2#VRF6PiP~GzSVQu}r0!@y?E{Yjvn)=3 zp_BCf&BC;ze8)G5^L^xS3$=jiQ6=VKL_d}iTNHk$Mdx~=-#sK(N^*w>Fx86rDSn?& zz7;c-u?v5>LIJfOTtaPdr{N(?!W#nX3Iuf z!_2B4cmgH3yNcL3sKta%dUd*cKCm6Ns6VU9cs+KPsBy7h4@?F&qBg{;MFF$jy3vQI j@q)RiIr;=9Pyzl2`qrhpAJVq&00000NkvXXu0mjf1kbOw literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%8C-silk.svg.png b/server/routers/bushou/images/60px-%E8%A1%8C-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a199ad62cf5ca50c74c1425098dd0a08efce7d6d GIT binary patch literal 1269 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rf0~-|(AnN!EcmMzc{YgYYR9M69m|biYMHI(>ZLux) zwhdLNluG1F!h;|x*ccVkc!|W~i|7Mr3@9;@5){Okh$S&5sId|tepjOp;DbIu5NU#h zs|kS+6I-A`YDFj(n$Uu!v;q2ce3?#X@7#|nSi0$Nf)?^?9qu#lPK zdw=3BX`mmi-p~<%_6kq=(cVvA8th{$VkRd&=z2K8E;h5=JrHFX|8qFP{FLWMSxl#u zI-eCRd<3uJ=+f@?Y;n{&kRE=gpA}nPc?7t&B6~PqB;!R#8bc zjTxVykd10jjZ`p!D&F=mP9a4U5+e@eF@+hFGs|~tj}8CbsCRRQ1%}EJ1mSmAc-(R( z?{S_QrVcIf2)$~$mO{tkuOJA$h9{WP7K-u`wN#kyT0$#=(9P16g=74wK<-xF5sQ|5TY*_5R9P(%IPRkrK%V1<;g^E&mQ}x)E(GyU^>*2yJ$ZoD ztfU{Imj|qv8U&#}^D}1~Wlxtn!3G2&X~mVPcl2y#w7IHn5ros+t7h+3GY?s@wFttg zOp5G_^gqmw|2z-6oLcUi0F8XBHdY7k1gTo`Dfb9@tMpPqJa)dL zYZ|1U4@i(7-r-7U*A@=uG!MJ<6+P6kp4q|c)g1OJXgAXXZ+0d}J+gBrb!;M$QsKDB z_As5EW5ch}Z7C1>Y2b6JnCK3#4%91p$rK|hcn#ND{dN6#N5&EO8UD5sH@hXep+s@O zCl}i#kF~m3OdT!ENmbvZA0}_Y#Y+|yY$i#&N+iAfLy{`SrmEFw+F!$8o%nWX#qNg7 z<_k@`CyMrT=rj0M({79IMz4UM6zNr#M|YuCMuW~m)1sp-rCCMQSEIc&{Q=<`UqyM= zp)6E(Yc9n{WmHB;{sYp>t_df-#rgmM03~!qSaf7zbY(hYa%Ew3WdJfTGB7PLGc7VV zR5CF-F*Z6gGAl4JIxsMAcPxwm001R)MObuXVRU6WZEs|0W_bWIFfuSLFf%POH&ik) fIx#jnGcqeMFgh?W9x9YD00000NkvXXu0mjf9u_t- literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%8C-slip.svg.png b/server/routers/bushou/images/60px-%E8%A1%8C-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1267b588f988dbdce7f9ba0e20c377176ab9e4 GIT binary patch literal 1337 zcmV-91;+Y`P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 TTpb7}00000NkvXXu0mjf=8h`< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A1%A3-oracle.svg.png b/server/routers/bushou/images/60px-%E8%A1%A3-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ef8f9b07876d587195591dc2aa0bca32406a92 GIT binary patch literal 1096 zcmV-O1h@N%P)PbXFRA_;Kt7Q8n7dsZxiRSNFL{Pgpgv5ZzJcoBNi&y!;rtxE72 zcq;S#?27z|!s&P)waj%`c-mu%Uc6eBg1Uf> zO|-cVe`MOMFU`9GnS{rLr+O4CT4=vS5Iu->1^ZVh-FQh5`vb0Oqo1WXmiBQRw-x1J zk@RAxAoc)eb!?9{;`nTp+l*tZq4A-GkTvifmx0eyDNOnfYe-LBY7%4#9_ zeTr!X_T4fU;tL_b+*^{J6~gd-PerMzOYyDtB5^w`!(XYr=SsFUf_*c8N2X_{KUXK{FvI`Dw+37Vyt#!ynXJ<7HnLe(|%AAu%gq2({jphkfdlDZS2>yU}IB*J_azSUB`>$CSiW8 zUoQ;%zP4fOq4eMvVJZ1I9u}hVJ|zdJ|KpsDGd0O-=>GKH!A$wxP4>4Y(`G}ae2%cV zxw>PoJD>+oN+RhNL+9dG1?TT;vcLUl{qKzY*O`H5w72t$!bU;x6HU~=K2!gJ68$PI z5#OKr+{|LXo(=gEFBb1k;A9ZIP?+j=NFx5IW3Dhn_nx5MBzztsJ_A4CH{u zBk5-0hj}fIYvu8dASQ1*>BTqc{l6vK%~8!dLGZSm`;TPqKONDp(wHJFOb!{EfbWw; zLQZ4Iwi>rNcz3Ul*e5f7wQ z$x2C@wCEP3I5M6#h67i^Y1 zT647^6>`OEjNFsK>ijOqJWC6ayJykmrlOD<8@d+kqlm7q&VJK-zj3Qb9 O0000nw zp(h4PO#~rD5LQl>kr@$!6(M0^g!G{gJ*YkzL_tu}hlqlLgrEl{_M$*2QJSPM%fiYm zduNT6nXhgi_Brh{x4AR-%suxUXX+1!v+vn^o%LU{*ExHwwa@TBO2Hvj6DSko@g*Lu znn+nV3pM&#pj!>6j_FbPZn{e!^nmxgPO21?voKX#KGUCs)Fu_>|2_5(;ne@PG#T5(QV*Z7-rxz zf$ToqCjVN065bPy{zP~W9CSDrI|PzDF}H<#b>ex^=;E1&C?d1@*e#ISqImaPDm)%F?7~F_-#-`TU{6A(7gO4#XRf%s?Lv2(^bCqwiSim= z!^Af0>&CW3--m71^)HOUM~U*MgrvRG@_Zp%s%5SZl>J<<@gM2#c9R}1x_I^ZDZX6RtN-l2*tWAvc-Uh>iSO0^exX^?-Ikwhugrn zB}@`$arprKOGKkysq4Evxqbl0*Y!OnW=fL^vQrEXuEa26nCnL9{ zAg+br4T0244f;F8L}Q;=tD21c$@QfTdLEM-SlDLB@TYX{T;~NpfC;9~#KLn4HH8K}}02!r-(5u|e2bXoPx$ z4;O0G@a!ORz4#_+w^AoVF$Sk3HViRtZKi#Ou(fiO;La}$B3BbV=i*`TD-<)t=kn$u z#&!yO!!>LdX03*2n$WW-qvzD&k}U$uGDMo$-0sbcPmgn&kei~Q<*8Md&Zd0Zn;73) z_j`SE42AE7y=1~C6T?QU22anln=$yEy5D(1#*N9jl8R-Dbf=+jsDTNx5!YTEnnTwk ziQKk41dB#Wesh!KJMe2Fvo)u#Ys5%x*rlmfT)H#UZpNJn+n{eI?YxQoYQZbUX`u$* ziow~s@K-tHRww5!`7)qBJdtC3;g}%0^gTJ`rU^4$!;Lw0P8ACAd7k}3k>~6c z)~rSpHsTNYvzRo0uHn+6NwpL64DSP!iNeP#HGD376Ef;?pE%1aD&|rOCJM8g8ojtu zHYH(>_^HxvoL4QKa&VJ4%YB;LgBtO;L;o-Fnn@W)JRT5@-i6DmrPF?l!JT3hwhy;f z%BUpF7b=+PY(MQF-$5(_U3ghEdX;MaU7>Vbi!X$Hd(_Wz7XOLaZ43SeuD4Patbt^k P00000NkvXXu0mjfkE2)c literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A5%BE-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%A5%BE-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1bc885effbca11799a8b1a73a5309f2b6b278594 GIT binary patch literal 1318 zcmV+>1=;$EP)lg_<8tTWEO`|Q2% z+54O`9ESUc1Ly3$)_<*a_xIWtYN%mKp)OFb6}S$V1GGio%|HXt5H zBfD)1Un4L*dasYtGiGXA2OV z?b+uWP<@s9L7>N%bdoTJ^g1sj9m8vYPT(G(0~wb|Py&7gP67SMn7$eruPqVJOk^%- zsls&*_yYJ9=mow8jwSRXHRb|$1M86Sy^nZzyNvu$NpT~v-@sD_27o2mxSkz!C*Ka> zr~`g6aJ`g~k5$KT8iWK~20k*Bcc*hDAE+(zA22PD=YHZXd}|gCLVhjWi;UqA95s{; zrSK&e)KS?YeJT0QYkV_P@?AkzEvzq7bC4ZcDE`sDODVW2kmscJM4;YH#DA>Dl)hX+ z=)|I9uAyufunaf?{DJJj^|9Cz`7j#^@^)Y?@rJksnHLI!C&_ou{1dPVco(9;q|Z)Y=Y10Z>w&ijpG3;QU%+onjLCXnIdF3T z-xzYB`619BCmx6l__o3c;6-3HlKHTq9eCfMKL~6^mL?PbciDwFfo7ydbYs217T_sM z{mb~R1a(MjsT_Nvx~H)Roq6VCyTM2wvRsT~C6ztkBw_3PZiQnMSfJExG5Api-U+bd z#36%`hYWHbEA>YLZM~~-yl1HYz~IXO+3hJpbL$_VMXVg1il?0-pXlCXn<_ybpi5}^Oz_9E=_-o z_(hx-j%tLP12{G!3B78;J{Q2UA&`rC z2C~(mWXOH+D@+_RE+Na0&vlFmLz<5VLWx!o4|r)x=f=?rT$2%34<0Lt>oj9pZwJEt zs=yF(JCOzS02czYY{IU9=NroY4e=;v3>wOo+k{;K>)W&uGE9hPh+#vSHC^NixJ~;$ zALLH{F!^QOyHACHO>;rJP1q;k!rkCSFwHBAY{EVPp9^v)e~cQ+nr*_afc2DWQCs+; zq0E{$cLm&}eHS(0zYS&9e+0P#)^|chT!TSwCUuP1gr`E6&MaUZMGg2g@ujKXChQY% zQM+^r_+2Zr{zK0da9R5;3AzH-13VM#PX6dp-baB?Y=S-kpG@IU-snOS z3LqD2XKjM63#ik|dx>HP+>7MSW&>}AlBg-#)alQnz}2PIanYT#ABDkAWML2a|3wWo c)Q~^^2e&d*bXo|vMF0Q*07*qoM6N<$f`*%8^8f$< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A5%BE-seal.svg.png b/server/routers/bushou/images/60px-%E8%A5%BE-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d904cb1d4fbf33e29a2f075bf1ea99e5ad7243c4 GIT binary patch literal 1184 zcmV;R1Yi4!P)Sdp->Q7aM>B32?zh@A)v!9qepBGF3JN9hM`l~yh0 zUhlk{JMZ0l=HBrl{UTgDFhmze1JbI|qQ1L3>^ayIDYO8DI6l zj1u=JfdSwfFdV!FfL`DMa0U2TK4dqX3<9Zy*NL>j*QBNkkAXWtGiHQBKMfJPM(i0h z1iT0OfI46Surg&Fz;<9auoGC4 zW9%wO!p{@f*8;!Ach=+))U-UDDlrBOiua>=bdo3G1u5-ofH~s*aE7t`MV^E=iFREA z`yEtP#-+k)%nBUN#|g|rV?!0tMe(AwIFGSc2AogOXD?>@d`KQp)!d%7<2$P zFpHkNcQz{$X>eEsa3`{{~4;tuw66@H4KCA?O&za+3% zk4Oa0(o^eTp=kG6Y=%TT3E^m|XClTXT4YEKEn%s12Q4Vq`&h$YS$2a&Mo-t_8S=sfLEIRY=NJLCZp$ zBJzAYX|Wl@5IG*azXTiw`Z3d>2~)<2OZVFrpEFZOnh`oFsGdV5>}CSjNq#_>1nyzq z#%={R1KPl~BP{2VZG^#S?L(MD#z9O4as_5ZuBM=oKLFjpT}%l$ZiRM<*V%#GLTqzb z;#u%=MYz4G>s>BND}-&8&I8rKbzJK}OIR)*-?W`8@Xv&Y+#YQ6Ef17>@RkT#!cxS? zDWbd(ZinjASr#d+o=*ydgw>Bovq4(;V zhHw?dDV_UY4g$!m8q+$_5RM+^b9t;81E~tt(?~;Drn4`yP^{n8)5w*uuXKjuY2;N} z%9KuWaL5YshxU4SkcWStqGOh5tL3bQuuLtVvQicW)cv}qw0e6`K#C5pBP>%|EdUg# z7HzL1EcL9avpS9PZb4 z>m9Ug}-P(>Fq0TG~VYyJf)po3a998vSmNbN42iHN&pG|z>Rd5}^ yVX@RaYU#o})at=+P5KGu-|#+bXj7O%rQ;7gPAv0TAq7VO0000f4f^@ZY^!eW|>eewq7bW#f?4$YHdV*iIl`k zRHCMKp-4!O%BbjrNd?xIqNM0kbRo)0P$V&mvU0=hrcoGXS}khvn(q7h;hAxsGdt&P zX7;1v7=bdw&GyiAjT%R-0pg{wNj0ScAJ{~f!N^{!8VB}l6%H7&q>z#-~8bQt&**bN-4Q*IA%D`uZB4PC&;*v0n& zy+lt#?+`fnCFUqz13m&S%v60sCIf$9iVTaMVX(AYsBW=$w>p30kRvES_Fzh%j9LIya$p8L~?bhXkN1zhH(w*f0d`M;?2j}i8# z09ShH1D0phkWt^~f`l3YcMgvx=y%Tp1D0}C;H!xHV+ls>LlOA^9YCl0Z7Ww7R}S~9 zbZyft{wY2;InNl7@77)K#%7w4Lk?vAjt_D6N-7ZOA z72r8awuY|96yRm#4aITr2(n3d8n}^R90?hTtfQ9$uMq9*3rMiwKgVLC9gdpAhdr|x z9MAHvH-XcOljfFYWMtN(_W{hkZVlNJKR`+LylH6%-o|1~bF`ZuTR-!w)5eI#tRb*|PhCWr#78l~Oz&{m?+5sh@71*!pdC!SD$N14l z|N0DxXeMP8@P4SSwT?78MMo&Bz*PzDJCME`-bEb&Cb*O74nO)>BU${o3wQ~$@B7#1 zlz4>J0f4w`;|0hY3`aILAR~K`=h$@_i@9u!bNDrlVEQ_Sw2H+@B((I*Byjlkm^M0$ zb3;bDPU5<$OjPN<80C8i4!--5CY&j*9o8SF9E?$Zl1jG$=eU(K7}pN#&lL8@DF10l z%bjlJWRD)9dt%zWrfm9waoI?7<=tV0%ov^Ds{Z`;g{cdgc&_-ki`@pIX#_?Z}5~ zrDh$0;AJW7XCd>jU&kIKwp~iv2>S0n;Ea^@%){J64^IAYOjiXYHa%wD0AA8zUEIUo%M?+rWH9C-iYaZ6}a8; zv;LJP;0=Plc2f?|8}B`5J~9pF$~^@C?WK7?JZ~;W`fUZctyn4fuo_thPcB$Tg9iV1 ZP5|Hm#;3GEn(qJr002ovPDHLkV1jU;V>bW* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A6%8B-bronze.svg.png b/server/routers/bushou/images/60px-%E8%A6%8B-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e6938bdf6f607adf586c62341bcbd5b61f79862a GIT binary patch literal 1164 zcmV;71atd|P)|K99_ zWWKPOGyk>r*}wl;Ywh*_ueBIvm|;rbSX_)HSb?|j6AqxOl`kIEs`3f?iC%HGcuDnPaaqC#!dSejwlyD4$~tqlzs2;Ea!;=8 z3w)G({x$i|LCFZbtk&6oF+NvkeXcCuawlut^=~g+bqg$Wu;3oi#ZzYG%09{2N2%@d zefSh33s*frE)~x0!}VfH*&~GCT32_w%&7;(8~8=F&i)|+kU`0D_*w|PH)l^K1w&=>uI97jsFM7i%luVcGK*qFDi)HqQngjTbqPLbuL^oWFDvzSYF;0MuyJ4FC;m6)1R<|X!0Xw~5{ zV*GB!=h!A<tgf9qS9h^JFFm7t|?MvDZ$4_7oOe=aGjAKOEgnXi`=aj6gFcu4E_vCCHxL@Say|}IdU4^k+wg6A8L%%JHu$ES&t1w=db?Ied zr!f5i7FDRLFn)A!;{TzDz7EG|tipmq)wP)^4t93A{w*HRUT*8>eUtEe za^DBVNGpanWZR}UG;!Yw*$=h409}PJRVMnGChnUrb{^AvJKHa<7%q^BzPg|H%*CI% z`+CJRHYAuVYpI)#P0RijdfzxqfZ1ZgW<&BfEg_g zrcD#uqhk(HFKyvR%8^wqpoVskTO^x(#2f{`O$}VaHcHaSW>N& z;yDRl31`<;tfg=!h(l<7Vq@+2YULEmSZox|?i7bgk6JqLig5N@N4c|bvp6lgQtbiM eVTKu|fBX-(iEo6_LQ}W^0000hy+7THdfziEDQUUYiyh)79MYeDJ(svJ zr+U}r2Jvp|duo4QZ3xQH*s$fLN0e#bt$8}@l`@-@@3CjMMsw%P=9$&T%6B{Y*@x|i z3rhNL-ebI6xaL5aOJ}9puRETn|C+{p_@MSIPBzLh;ZEgd$L28GSF)OACBHAf_Wb?u zbC}_Lj)&QsyX3>fIlimE-Q9Y%a$BKQt8QiDl8&h43vZU#`v0&v|80TCoC!^4))UO% z{^p6A?6Rq}YHo3K)PwakvmCD9n(eawaGg)n^UE)no^y_KnyKF^_rB6=_PrUYnluE{t8S> zcG{t>`$6Zg8Q(>F^~gBsOS9k1Zu3zs=csO(w&wL^w}*nu=a?m$#LL&-TIaZ0RxNUl z?vAkS%(ph0M1OFyU&woU)0YpThi=b!v*w(Rdra$Ii?`LEW9G{Kh8Et zv*m|LIqrY>E5yZ8x9`|yJ#Wjg*X0(w1*bp1_9^mrY~+OH!K~*`S~K=1KRNpL#ewOw z-(_5iTPRg~v*L%=L(?f0Cp;6&C$2a77i!LRes^TIz`ua0S7)sgw`w(barWVS0sXMl zZK_v~msh%9yE<)o_u31pEqwe>Y^=|^ACi9Abh|a~weOkFKh`^`sK1zE5-(9ueXlI% ziuN4gZA&=w1j?SxdsQ=AX9KTO@GQoZv`OunpQp{8_UoWgzgp=x4wFl>_tx=feQt3J zo^vr}@#Yzh8}*gAwmQAIq~5aj+4Eoa0xz${U01iRm_L>EZ}ia<##c^Ua_$$Nw{t;9 z{`I+KcdE{nI?LU=-P5Qh{lzPcwf13aNT+PF;iJ+jAK7lf>pu^z+{oZB8M$N65}&W; z3QC-BpI%tA1DFX_OI#yLQW8s2t&)pUffR$0fuV)2fvK*cMTn81m7$T9iKVuIft7*5 i!;qh?C>nC}Q!>*kach{s>1YYmz~JfX=d#Wzp$Py)VEK0d literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A6%8B-seal.svg.png b/server/routers/bushou/images/60px-%E8%A6%8B-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec7b587a80251592c921f5d00c255d41987ae9e GIT binary patch literal 1250 zcmV<81ReW{P)G0huxFUbd!0*lHLDhedDpdRv} zry`<<3M}aM5Jd^~5I)sYJw+uML{V8-24w~HVmB$3)X}mr$Hq%d4{M+HI%m$Yv(H(3 zoRRs$V*mG={a@$zpS|vDGsYOF6dfg%J092JN}P?^I1>}I)SdnIMC`_=Sf5=-9gFb; z23trQgnz=Q;e7O}A51@fiqa1Jj^j1YJwNQKTVyh}$%X%dC$J3DPvEyobObOn zK`#1hOfBI1pz620Ho3aQ^ayWe5PLDVpnr$z+VM$JbrGG3%2_7wY@Wof0={SALZMn$ zxFC_PA*2d;VPt=kT_*{`=Lv0i8fIknj4aK={5s`LPNZuHsRBMNvOmTl?TMa%E*xt| zR6WL(P)>*9!43!$kfTxFgmy*MBh?%JyXO7~_6cM1UhL2A_hxzV{XSughWCXT8X@3A ziS+$Ps(=qi_6>MX=xvMgqdef#PV``_q^iDz$ z@1L1}zfd!Jvix?MMnh5syg#!0gyH4q%>E-webMz`lphE78dgW;jA;4<@$1?sV{=x< zKR7*ws9I9>((r9|UD8Gwv$N|?)k9q}QU<&^yIv!#o{G|qS(*KL3PELay?i~p2e&lo zHy_Um+dUQkTgwng+Fi>IY{X4b-VVHuEkXxXVXCnIb*)e%;?8p;Rw}8NPR%52(%O#Y zAih%KTDUAa@rY2Zn+fu;uxNN$7>7%xtc`d=;8$ZQ4&WR-6#ab_J`>i#rzDkjSxE~{ zhKN$;s|{F=o1^=4g=yph`7unt>dm}SM~AQ>utAu9{$G1Of>&_K$q?HPQ}GzS*II9V zOgOa|6|5BYscL)Tm#_v`;bP1Ys`Ol3iaYU!FpsYItr=$Rg}F=E(2IlJC>)tK%j1#n z*2MafvP5Wu6|uX7w_TKZQ5gfu9Xi|ML%GmR!pTA_td7bVv1{T*a*@9ZdsRi5f@f48 zoxYVyU~1ONMc!M`w-a{@oAR|i_0ohIlk%>-3Z7BGZ!x|!bXYnlOg%>=ox(QlAl@$E zw?f#!i-UXz4;bNJ08E#Qez-}W9{J4cxG)rrnq}b}dBC?d>2rVN^Jq!B>XKqlD?ZlT z*`!ZTWUo)4p=nYF-0bmYe9(Qg;Zr4$BH;Lx??{tAy^(!m0u95;Me_F8?6^5om^Kay zE2?4p`Yy#A9*FFohEG+~i{~=?JUo>^$FMO=@m`v6l(IeYT_@dHSE+Q#mxT8e^j(DC zRDZ#@JgK^p*ewWtu?64D4c#!n!*+UAp%HL2cEKq+=y+`=6Z(0J4NqJK)vfh_< z&Crdfg)zD|@B>ObZ)$~ga&dRGS=LgaO4kNGAiyQItPH zv888SQVj#!BD=TYQ^oioOUrOyme=fDy>z;S4(kiWJ`5jYj4|5dU;R;L_Y#bS3;+NC M07*qoM6N<$f~^r{!2kdN literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A6%8B-silk.svg.png b/server/routers/bushou/images/60px-%E8%A6%8B-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9ca9d0dadd0c2be410f23f578038bb4663b9b8 GIT binary patch literal 1117 zcmV-j1fu(iP)dpjALdp?cq(+^}4H^ zt*ffLnJ>IUcfG3q{rbIn|Nr|}G0!|5MOVSUcPxf*1a_iQ@b4GSm4e9%o-bKTA-tt# zxPpOl<>X7h*lY!VV`-V9^5Oy<&}g`V?{KZ+*OS~h6Z@o_O}1UQ6^qJ|*&I&7kJ1hP zhNrO!za+jN5=MMM33}(mQTRf-*-vnMqHj0uz@9{(oj9dHy>p@)gR-aZkPwsWIT~*y z`u&P?3(z|!7UFeN-?LxijErmCj`7KUKMS`;%kqpybAMqS9>iGU`~5;PlEzw$PWJm$ zm^CfOMvZ3oh^OVn!l+e`k6}Z`^#&6C9?wVe?73V#de!zsO5YRkab3R`rH7;!CXfGv z6PvDjmh{SwwYzan$~j#^Sei)m-J)^oo|icOK=Y-~jyJ_7M}*D6$mHhQU8@tvKF>$~%s5MI_D@_gdF*^~Qc=NUDc4voPEejp99tv)BNsN^!3?=yP0&G& ztL~{77Ms2&1KzuK*qI5 zZ3w@f$6sIg&5tE`{EuvVtSR0`ZgiN>e0k^Uux0KLOqA$W_%?MLA&swkT2gQ z?1WYdv*WPIbNj@9#Ek{&o-4u){71A!{WRI=EXy52DZtL(_Q#X<8;5S z0F6y&gIX9mgjY0%m`xhZ9>9gg$!sp`ggiSLww@G9xUXq6yITepK2qWYwms ztMgMhvNUx$uohPd;pj9WcTV2V)y!%|SptioM<@U!pGJ)0&N4+6!D4(Q9_{-|Ra5}o zLWwqM`tDK{6~F@Fk!iA^*O94aJsZ`kBICHBTsg&XliC{u2XS?|a*Cl(?IHRoE-h6} zL9A4Z*Sm#xt2>_MLT#&}1>fGuixtB39@T+$t}F(GQU0K8Aw}}6VEUS7T&x{l${rM6 jFdxVElC{h;Ppk1CBTdt1dZey)00000NkvXXu0mjf6HO!- literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A7%92-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%A7%92-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a256809d51cccf5a0556a1829febe40100193710 GIT binary patch literal 1561 zcmV+!2Il#RP)XaCR!Kg7wHK^~!JdGLsuMu#w1L{K;tt^!GsQS6C3wuu^A(cu@3KGdsQQg68;)4!YMeeF{TSrQ>q%%13U00 z9>aa&2k0x#!4~Y^2gV4l?JHY6x|d02#}53kD2XDE^pW_nc$^PT=7%uc7(=)eKWcpU zA+Bs(f7&o|yLeJGWOj8~^AOC!H*pP4&wRfcbJei7tKeQOFT7Zz-T^$M-P1oQs-$il zm0Yi_QSUDNuEYG59p*+wKL~#%xqiE5-K#syeXEFqeh{9WT(7KI_l^#8Q)^zM5Dvpm zt^GBpX8mVq-^0(=yhd)!!5EnKj+q6Q;UX7z;fvKXP-!1n0n4->(N1nCL7UAmD zWd0*@;BCfdBHRp#AEa4fjfj2xF81`0#P;9eMZbr*85Y)sY?axg=)EVocR^9(%QW$t$$m5I$zmLC zz{{dL(!?Nlv717EW%=HN85VG4^qh0v5%0wQq+__!aI> z=9ZQvQ3NUB-{3q^!KB80jH@fIbC4joUHd*y^MJl1CERH|t$p8B!C4}k>$KKzjq8kx z(FpIruXR5Nr{F?-NA$$AKnWZSCkpc%$wyaUy;p%DJY@PP`=I^hpJ6 zNIhOuwlK1U|10X^(Qu~dMD~im%S2qAoWq8HByv9}L!t;$!mk>=2{!@1*Zt7xG&YGa zbW9f;(pNgyRw0uIDdB8ixrtM?A2cgPyXRbykj%%;xL@?OvcyO5XM4VHZsL~YzJ)b# z>WU`et=bFxaiRsgH8E&dWKP`c$psn#=_hyQ7R%rC+v$=tdM zYve+&#ABU3JzoU_qW)f==zm3!PQzPYyDr@b|4X!K>&AFdSp22&HzmAV?;5%iIuU-a zVZ>PB`&+>s_KM8cVW_G2ygAS&O$y z=%|Wpr)5@N!Kxm9zl3}p$a;8MUcst_HN6_t@vMq((1{Wc?rpda+(k0NLb$qm8`LaIOdNf{Xixh4IPM4K9g|5Rp0 z*+#ost7f%I#ge5x_w~nlk9Y6fx$n;0cjw-1^9uuSc=w$1J$L5LoO5R2D8@JHV#*y0 zG?spk0EJ}ej2%n?Rsx>^2Y{l|_5<61=YaXdf01JbO+XJYNYGhb`wF-+3!+hoGZHPp zY@ihx`6i$Nm;`hJ3#d%@w}IP{Sut+W3cOEcvunt&O<(WmmS-@$?w4VU{ioA^f6q3v>ee6nl?2vZcjq1i#z)j%}WU|0NfIxsGiD5)KydJG>?h!^k%0wL3uc zwpTM&C`NzBZsnYe#LjWhh%8!O`_9Y3-zo+lwUC{MOv_)8a&8=4uh@S+rXC}-DaQW7 ze2b_a_#N&wlxqauRAh_5FcMnYV!5JchN+-!iD#D5 z|JgvM1K0vwr}?i1Njhv-+l@+prlq_w-ogK7_W~z`JevpZN2YF6N?1USWtL!;9px0g zcgFI@06Peh?Zv<9HUswnKWLuaij;S{k*Mq^%`*pq*MW;8xa{@F^wj8AC=O}}7LjU2 zAMh!`J-Udj%r6q04LRU4;0=N?a}oF&*#_t0ANe-?LC6brPgyoK^z7IM>xK5se%JcfNu z>{*YF4olgpXix}lGLV@Gyh^axSFIgDj$lk8Gmv=P$*wU~A+}ocOb!V?9zwqNQS?p? z1M87nJx4;G83jH89whuwtq%ASM-HE>5b8&gg+3$$+D-5TLT&xP9r&khJ90l$mpFLa zHsmy-z9e@t@RIV(MM*k*Nd%#=HiD#jms7n!KMjf8qH^bcqzJG3OcE{GUSZ%|x$Qx| z-KAIr1SPZ}MM2$--Kch{i2>7^u5M!=Le74Nk^1n?Qh$e`P963m`R^*^Jo#44uOr9J z%(PfcHzaMW8@M}Zr8QtF za_UibxZ16uaf5|a_WNry=8_u9`*EV*@L0wqWOukQYa(f40{?@{=SN|Je*w+EV&R+F R$FTqa002ovPDHLkV1h0;jI00v literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A7%92-oracle.svg.png b/server/routers/bushou/images/60px-%E8%A7%92-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fdeddaba2cc12c4c68f68536877d9f9a055c9425 GIT binary patch literal 1202 zcmV;j1Wo&iP)5_++wd4*TAp}cTLNqv&H)=SpIwhmX?QYF=N>l! zcST*NyrsVo$D4p-;_p5dby%SWJtAKLUIMm=*j`&gZ1wO0al93H0vs2yPSwLzsOQxI zT7bcBydK@dck?$bPa4q1ei89%%*979`_j_kJG7}uB3_B=aj$N)eQC*43EV;%x=t|R za1L#Fx(z{T4_f1a-tO@(pw(A@PaF?RSqqT9;mP9o=REb&@bHwiSm6TtmhJ7U%K;Zf z{UN*3lILx-nOh>B1Lgq#Vvf=+KzGX;6Jp!Byu_` zWU6@wa~HxvZNroWJu#=F9R#zKmB3ic-1M&md$~4ku}SbTTJTMR>DOA|j9Y&Y7~#g> zA~*(M#V`e5j>WN-uZ3kWjj{4$%+7ez2 zL(xJvhHEAO8@`> literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A7%92-seal.svg.png b/server/routers/bushou/images/60px-%E8%A7%92-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6751b188d5e8c2922adb4f099c81626981a3cc GIT binary patch literal 1381 zcmV-r1)BPaP)Ui zwTQi?jny`36I0S8KCHc+Idjg;oH?`h$*B2Z*e5e;xtev3CQxDP?uhz(%0O{QWs_Kk!#VKcm1Puv?9pLo5S! zAx}E(@e{B@iH4O|E`08PM&zzG4nKY>HQ5HJqZ0oA5G#n_A(KVLiK>jYIm zFY@FjfR!=!9l!x&|F&CdZg2$i?^_y#j?-{r&;oP=ZAh@W80hj{ z{|dOC!nruh^lL>Tcry~!mjIUmjmGXnMXssP4Sa+*KZC~rQgH=uZWZt(a3rLkJq`o+ z;WmXP!j}}1{1|u`=mBa%`rTq|hky%!tpOj~fP0aAt_F=EeLhlIEkhO~y}*_d`dww( z&yack9J2V>ZvNh>z%5hgN1o)PmHekuwUW6M2~r@DyJFB@4+qf>EJ7l88?Y3(3wRoD zI`soHkvh8;34TXi5pogvW&uwCmjh>(>0=bw>pQ*$UPN+o=5Qy;mVfUfMa4!W*bRi( z-BUpgiSPzOun$QqJxBr4h7=Yv$iFGYDz7@=EF}N#Gj@+@kkhQREKW6T5AaKfO-smm zi(%wxZ$WDBXDD1pmjxG5dJb@qaIqlywp460Z6*chkaW`@W4FZjyCKGQ*tCt2RwY7P za04<;_C?rKBlFWDtn{=Pj=7!)+Jfs$8}){AHTiS+ycnNJ-*#3M3y_HVPLXRlU=4+< zsxjax;P?=q3nP3^IXV$?@A=Nv0=EJ`6P=HDAgiV@pPxEoodV18$gcukMb@)HanA#% z0p|jb`)rOOtERa=pDWC@O%+j)5El{t1dkwZDz8JzPd{b@YmwnSiIkSFAYyHil1af= zQYdr}QgJo=?Aj^5uI5k8<8{=#AYPjbcXo38u*@nf#91Ea(iR! z?C!(b2%8*m1Ms7<-Ks%QyOy?9(?E>fsA-EuWs3>mHDn39J|(Yzpj~*>nzq!9@H2?N z>0{;7DTKCQTPBW1T6yJS4I(-UBc@g1sx8<-xX$P&}7=UMMg=`7Hsot z)Pmqa@>9~97<*M{3%0p7SXhAM-e-Y_0_VGc4ZukuKI?U;30w*G55HW5=5vi9`*y*`0VSEcU2=kn{R+Cd^Q`*`9m&= zmy6AK#J}_X{vFv+YYyo*52>@qeSNm$6)2e%{44q8;5hICrEiEWMT(506xPz26l}LX z2a(-{g=P9_MWVTXM{z=fpe7pe$aO3FUFq}N6k}UaEJjEjQ1&|)Pw>37&NS1~9Mful zZDYUj0NHR$1s8%xBCV2R42kj}+cl}6DcHVTcM)9d*8uHl9cc>gFzt|{PYe4+?fkTk zTnHXi^l4!QFG}l3Q?Q+12Niu<*dcv-T1T3K_n7tzMV}VCOdGe&T2U-URz)tp8<~&y n>Eize>wpKQn#44wkum%Yqb+2$pg9>h00000NkvXXu0mjfPO^H8 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A8%80-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%A8%80-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad9cd323053f96405bef5bb00a835857ad454a9 GIT binary patch literal 1238 zcmV;{1S$K8P)Y;?NUV11f==LBzgb-Ooy+s8P(fuK+mr$^@i-l!TnR$uKyB+=7vHH=qZQiGkF>Tt< z!MDQHk~cm0R2b=Vqun<=3QwaOmo#a65PPv7hobZSLL#yUU*lw(`fA8KJ)9?`gtMaa zX{oXVGgI}~Xe|UCGQ1=^c-=G@B8upH^*C5{{&$Jb?xReH4^^H2Q{uDxDAVBsRp-P0 z4X2y*DI72H*?qJ-57%Ro5NQ$8#tvZtFQy0gNmf24M`c2EtxK}#H&s{}nUu0WhxgP^ zO6tY+JoEx(l4@Aey@kNWzZ<$sHt({S6mQ$(Y$xYZzP`ljQ5@k+H1mQ6=>(c~f|LW2AY}m_QoE7XQV3ZF8)Vm;<8lHI3dzPmEUU8JR*2FZd04H(Tbi(6Qf1qn zx4=pSP1xR_vfHcq0d7zjg%2dcPYc^7jqpjz?(qV&6~;6ndy2)s-hjAm8l%lQxM&nC~Bb(~fTbHV{OTJq` zrIU`idxg#LG##=r_J&f`6~q&=S<;-;f6G(<9drI~F^3%EWWVnDPLl3@mbyMHzV(Q? zOEw_cB|9=#gl{*84WseB`dLxwE0|@lN_~fK9YkG)(SfhjI=jOVpNjfpwOWVQ4yvMp z>5vUZwi?E7Hzxiz`Yf&=WG$t!SZ&lb!U%2h9|!k+Q2yPB0000007*qoM6N<$f~%@X Ad;kCd literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A8%80-bronze.svg.png b/server/routers/bushou/images/60px-%E8%A8%80-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fecbc775a66976d9b22b8bfa695c1c20a20a0396 GIT binary patch literal 1149 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%A8%80-seal.svg.png b/server/routers/bushou/images/60px-%E8%A8%80-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..be957bfe458897c5b4c85e7d6e155bcbde86509d GIT binary patch literal 1289 zcmV+k1@`)hP)n(&X}5`sikQpmeMDM1r_yZNmSHJMOjpD z6;u>KK@SFH;ae0zA5b7A1(rk<5fVKVQ6YrdhsKPllx2>SUyVBTuBbpS8|ed+)W^KEoLQZ^q@^{>kVrlt-{H=leAzw!t&;G_JsWoKi#X7=}{i zLpUrvlwk~DD>ma39Eq%J6duAqIUL_$dASM#=lGq4zQTdW_0CAg*8O07mO8-&pB5C(+6sm|8e)#j3<_Z{TC>6#67#VX;u~mK&8vQ$u(RYlOZ#7iZ#ZA)wiW z4S|SBW~S>WjBVt9>{NyAtIr1|P%5#Q6_#)d}QjaDSqlb*xBEGl%1; zQX)@-2l0EMyd-0t-bDFmTy+9@8cfM8&&Bl_ZL* zV4~bxQ!3=6?#1fV^%wA6gL}+QlxJpFt&$i9A4rsEWsrY6b^dvVI@1#6y&2?d62st~ ziE@_Z;*Qk$uBuYyB-g$D8RTmc!{F_Sa+axNYU=zzRjG24p7V1C`I^KqxIa<8HiP`> zsqd5tPni@YVPkK!}BU1O7Xa-QwC*W z8Ge&rmU0-UcFdZL^x;MPEv~UgabE}RXqtIK0&cx9inqFbx*e|wtF9>I{mDa-ULgsv z2sa6RzQ{4G6&4|T@JHboP#)Bru&hx279Z&3&10u{=HohCm{I-Q@?yy-^a{99y`=BAwyJdSgOJ)@;~PUzc7xdojxq8YZzC(4R8c;(fHv#?v(Fx!wp zwqCBRDPkw$i+y+}9k zNNNRMSGmi$Ja?_zpd0V1A13Y*mXYrXN%i46vhR0R{nqFb76kjW7e8-T-6Pr}&z#mY zVFff#*twsg^tpfX-+R*hB^bL_Nc)a4MicxCdgkN*wc1Rq00000NkvXXu0mjft!{)6 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B0%B7-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%B0%B7-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d88e7ac236f007665f33bd0a6d15d14b26742777 GIT binary patch literal 1513 zcmVsdfLjCe z8~}7#xQ+_U<-|;j5b_CvL+&ueJac0l8*5xPIqfa8K7D(Uqpa0B~*& zoUInVqS146-~`}0px;9LH?TM--g;!3*o^K69wcxKun2q4b|WEQo|pn`v+x&7D{xQ< zvY9}iLNExdAndB_!Z=_#GMa2gzZQaMoguUbXd(X{QUmZL5?V%w>lEN2B)sf3bbBQ$ zX$9~$&;hImZUV+z+MZQtvz+YnX*RHjVMDI9v>Su`@r#iyYse_iiPMmtFDiI`23bcU z>q5|;D{$H#*Rf^ zPVgv6DzJ<6C)l#n0m3JT><9i>Hat3cf z=203X-4h>fJb$jVIl=Pn4rExDMLC0qhz~Uzs*Pu_ITgVSs8v>c1A82S^^(~eK!JT4=2F_;@6%ugSB^%;7r=bm_bijX1m$= zZQJUBN0s;53I8UG4DZ_jJ_hgflx2o|wZOZ;8HoRkq7n%Ez-r({NBvsmT@wLs0DOsGEDbU@S1Ij% z%5LN=xZE@wkDgGxB8_n-CM$w_ky`;aR05YG*@^AQFti!@1F~pcMY3D68x&a`h(FJS zI~2iBCzMf#oG#7<&MA~eU_u7H7AkrTAvXgu;R8jec{Dl_s789!)U5}(5|IiMh|iUc zSv3ua%g}pyO8f+I^Tt*k(h>ePMJAjNODc`qImH@l5#6|8cgGUIUc^Xtu7&iAeT z|L?QcUTd$lp-7P;MT-2T2e99iK9m5bf!%6~lo<(RfQ6p%l_vfpVm>&&XFe&lrkv^- z-_I#)!pqS&Jl2%`J>!2m^}4`Xfb{<1zMk=4ocf5sT7dKnS9->~h70nNjtuwljQ(uZ`e8+kocE?29#{*YYj_|~oggnVTyU54xP*BvrW_SYh>ND-dZ+#?M&3J9 z)&OPU z45BVDJ%KY=k>7#E-DqzVa>6peJ>t#O)aeaez?yvm%m~nKv(x4wlokZyQVN_!M708Y zfWZOV--9)MAYi+RS&Ka3T*Ch$KMp;By;#$m6^;>{Qsl(=J|cETBk&0^y(xq!O%@x^^w-*l!RL)ru_G1~v| zBw&fDfAff+i;U?@wFGG!-s&9Vg-84lQ;tzlgRbEQV3qUzwnxqnQzl(4$r=5SDPc5z zwgSC8@)}LN&()AOlpzz5jPvo`9GmUrOjl7Cm@?ov?ady;@86B`TTR|k4S^x40#0F# z-T@XRXy=5<|BBN7QV3QcYf%~CIno!CKDf`pp0q1L)CHylcz~=@Y{P%!EF1f^fXTU)lOD5x8^}E(rNFx+wXzZ(0pOB-+*c!dmK@c+Acw@AbAGgD@eHLh#G2jHzKLDsM$!|y0? z>aY(1Rb9l?VEgcvlys?b9Wk@6i{G2f@4vAxq!u(A5krrVxphZgnBUK(DN2(8*cFk( z*q2SKksZP4a-NeDbxKSF-eCK4w8QVdBH{biZNX3n+@-zI46-X&pCvCCx!8d#M`l+I h=J*$pp{j@me*n=!$2n>PkZb?|002ovPDHLkV1nKP{|o>C literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B0%B7-oracle.svg.png b/server/routers/bushou/images/60px-%E8%B0%B7-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..46af0ef57c297c8249865c2fcf29905e6fafc105 GIT binary patch literal 988 zcmV<210(#2P)F6fJ* zBI~Q*gQB7?F(i42J}62=A5;`2B8aFcLIg1&%6i}d;>D_o7>)NPx|{K#9OmktnVqTX z*@gZ>!?OLa>ff)sy6XS09!g3|N=iyfN=iyfO1fZSf!A7sF%09&0`UQ|zYH0%P;AR>Rk~iC-bi zF6YGQX` z)hybs6lUsX(-k~{gQF^qzzu2w|HYL(^l>hB$Ts~e?#2Nz#P-W-{38ha4Hx&(*K)ik z+jK=3`eTZ%3tD(uc&e}9_z3;&hqaiNZ~P;i7U5cRigWOpeAC}y-+`%1#1QV4J)upS zgPGY0x?7q$u@vL@LRhYz#IgweM&(A~$vmEOemOP@x%VpUQ;e+mEX0FqL+^o{xKWKm zberCmvw<>I6{!S7A&-oa~l2k z75suT`s{xMPifp0X}4vRj6?Afrer^bAA~F^7K?E;ZpCfF@b8LFlSjAg!pFj{6z1oT=!1FP&-zry$(BZcv@*` zSf^&vC&v&`q~YNX=XVI}^;FLJN?bW<84}98tao#d@cpQ| z&peS6cSo_3`{Q!iCU)bxrr61hxM|_n0rQ3rWE;M#DejV-xGk}S#LA^R@x1Ix=`vw$ zU4XNMH8_h?g-q>}B46)(Ae#&vIW2G8M?fhdj0 zTG=}y)#Gd2BhjXMk;OwjBf^fwGGW4+622L2!Mnl@DJdx_Y2iQdaA=bj?DV1l0000< KMNUMnLSTZARO0&p literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B0%B7-seal.svg.png b/server/routers/bushou/images/60px-%E8%B0%B7-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..03d5787e33b29a632d2a2e6b7b1b68d5d1115baf GIT binary patch literal 1276 zcmV;h^9?Vbdd z0Y4W4@?ucWr{)xq!61?`TwdmpeRnKp^h4SYdn-2sZN_aHFs+D!p3 z0+-E$jwU!Ccm()`jO-+EN1c8T1AnPLQ@~!}IbbbtK^k?NM-T8cvhM0}I|e+^pp4bP zo}j~{AdW(FQB zk$|Bd+L4V%h!G_}^>%hnI7xo2`yMi;d+YSyhK$#a;Q8BRp3@a}nky{dm{;al@cepY z{k^lKZyU0sTF&gO$Qe~$7^5KA5pE+RJQURRx%;Ih{d>sBTo=?;l5i*4n*K*n=U+sb zvO1_(64YtJp}Wr+R)lq+@OvP?)0M|c`fI}BSU0t>RUoe?6HQoK{$^zV?EiO>YPU+2 z&pE={rS&qi$zAmjj&)O)wj!)udPJ4~3EE8~DcNBpM>Xo6cLMjRvc|Y7SH{Acu(pUM zJP6!~WJW?PLy~_mJ3Fa!+2PBWGpr^p?b2F7P54Xl$%Y7{E&T#3Ls(l_6ZS_aFmp01 zLulbjE=$_Np-cNQ-DvP1o=#NK!k+L1vr{qNvSlX+dM+6c>MBXtyL8@R*-3X_lvC%S zXWuYDsWjm;Idwm~`{gD58zo%1F`Q@Nz3#q-;vCu)s{ChAH;znxaE@5`Yj^Jj?k&(^ zgZiD9%JDBUny_`?kw8 zkiE!C5MH6msVwYI{JY5#{!PJx@U^P^n}NJM9CY_K%JbWGVL{mEplZxc!dqd0Y`MBW zMvw(zzY7|mJQW**X|m{Sb&Mbj!hZj{(?C`ky!TugBgBI62_$HE-9T0ub|seIFxshq mGH8KbVJxN4CRA_Q;CZeXF}nxllrA~ z3hxDl2XS3p!u#qH)IdM3!ltBsGge|LE)X94SmU=+%&B@n;f2>>L!+$6Wmt>V1!SJY z&-flcU@tzwPu0@x4r{Ruy9LqHnaVgGuSutAvBkt-B6k_XP%WBGft&Gf8-h8?Gu;v{ zW5a#egKMXGegc2s?`fVN7m-)faV~D~nJXOEOxTC(i;%4XcbfQLKZPf8H5OJRW1iTy z-b-YS3y)qawkITB%_!?Jlb7|~-3(MF@VFtVzguFgcGx*Z+m+o6G_M4SwMqS(8Twu# z99(lRUgm%QaT3EggoF4Le6J-#HMmIn?)#D!~_3>7foJ$UnKqBuT+~3 z&WWqI=aVc}f5-FhBL#(O7uexMuDWo-Dnq@H@s-FOYZbUFUAq&}Y1S9ddL85`bf z;vT#~*kBU}@Mz=jLE&W9V~rp?B+Os{i-e6H7w6><@Kz%4qNHB?N$&v@m)LU|W%Y{y zrd8gNjPj<$0+F(55=hUvRpLRDZTzc@@}|X035nY?$XFdmDAv~QBd8*+13vmT*#eH}}gsHns-ujwl)MPK-5vs^|^x-4i)~Jt( zICo5JRZGPly)-E+#0;L_h0LvZp%m+qSgv?P)lC_9h81naN)b=zQuYw;s7;#=F^G>< ztLSk&i}R`=m@8}fG9F6W_lX4D5@EwjgdJZjKDVTi6cLu*qDL~7Ghq&%H*uyuo1yH!1)C literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B1%86-bronze.svg.png b/server/routers/bushou/images/60px-%E8%B1%86-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..9382b8550ba510440c1c495bb30fb94f88844f5b GIT binary patch literal 1398 zcmV-+1&R8JP)^47)eAyRA_;$>pUR6w5F!#H;z1-7;YD2H5N`hhjH=!`FBLua_)KF4|GJ2bW=9MyFvG#&psAovbFya*03x4{SRUCeZngKDqFZ#6&{asFdw~`gV~sl z3FU|ec8a614I8l%-{2GRaw^3bEWlgXqdYI&3jK|baa$%=>6nYqnX_$z$ z{{hA7(FaA9DRPEyz?%ie4Ty8LO`NZO5v%(RIVHjzcjV0P7GaI>5mPdnEb{PU8mxaE z-Ypf`A-za5vDb66P*_eduiwaQHuA)>5s z^NIXp_flf~g7(!7yqs8INn-qYcnqJ5kW^H`J@`?a(M2Nfu0@wP?|Jj*HBzK#EFvrk9gB%<7Da9(jJ^xV;3YT3Imr@Z`>9l6n`R!YgU5&}c zogn^EP!Byia7EejnJ&ZvvYVyi))cZA~{$i zeW6z52&LlpC8E8vQ#ilAjJ9c_bZj=5FO%NABG`;4@RP8F-!p!Xh{L@ioHd)YY`{Z! zt_|68F9#6b_!)yXLZpl z?wpq42jNsYZO)rSW3Vo&x|5lVvqbVSSGsNzO#lD@ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B1%86-oracle.svg.png b/server/routers/bushou/images/60px-%E8%B1%86-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b16e41b05bd884ff186bd4d47472d3029282417a GIT binary patch literal 1121 zcmV-n1fKheP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1rZh@0aPwk6aWANX-PyuR9M69*xzegWgN%xSJUoS z)27YlTc0ZyA(lDPzK(3A?Ssm-YM??&>Owf8xcWN1TVx3DFt;5k$Is= z%G_F5oo%|bP12@0UgR`O+9W%tIc-7qeIVx~d7kq=pYQYQ`+T`;|0DarBk>yac_0z+ zkN&hjPJ?%>#C_M6_PxNXaT@$0@J#~XuLQo>>dtnS@dTdtI?~dH3`*-)Qmofmwrb51 z7F8`OT9FSw7gfVrH}TZw$M>`aKk4T#mEMwDuN0fRU)+nhTc%34xEr1$S??K^4>0C$WwWmORY?hb1{9)zHzxl%=ep3k<`rKmf#GQ2n&N5aJ?%};ZSJGC zmRE60$+ByH@|nNu9o8Ss)xwpFNt4JLY8VmOO@1jTDO$4DVWb?4175G+Em+vL!%JJi zsR)X@w{jeCkRZ4M%>iF3va7qXbc2*#RouU~;D}3RIYID99L4#>z-eO*lj@G(D~S!R z2gB_l7p?lE)&Sf9twlb_n13))l{*PxgF&Ng(j4Y*_A*l?@Ls?+OIoh<56aYxjY_ zT5ghs7JGFYOU1;d90k|f987l%d~fKZ>$?r!IEZvoe0V3pd!#tu7^v=D?6#{%!z|89 z_lh@fi~FTz95fJq-cBE8^m;7Z@ZWD41}qZhE?+dRyC2GBbI z{3&pK#5)FoA@6($cm*5>`h%Gto-M$1nH`tII8YtZ;ak8~U>(xKtw0OXle3YYt_K=O z^?HRT;bxvA31i`kh>QSBXhY} zOk9Zhz)s+5j%VyO&}+mYWynQ><-cJ$tDbWysv=Y4I#v4`g%kOxoK)>4Q5Bgw+@ad< z4E5#XiE6h;Rb=Y0PV8NkS|*S(P`>8|#?)cGC=D6vE5x7;CAJrsY0LVo>o#>*FHlx` z!6l{+|FU95jF>vCd$h(-Ur-{i6{ZgB2fHfAY9fb~rVi^8=|V$&K`B`ezg6unLw)(! z1GJ^JOSX1wCo{(F2i9BEzY4fccJgp8s=~0JS~Pc&3Pr2eZub6n6Sxh$27Y+grbsPv z{v7lxAs{JYt9Nt)8@wY|3VXxQZX2Q;359E|e;j-d6gG+}S zL(1z_+R3Ilmk!q&-mgc970N05&~sk5t>DsOUEnL$WA&;Xc1i@omBZC!&q4jAQKJ+4 z$X^Ic!EUlsz0(Ecmm%-nbom|^h6P;-*8&?!4ZATUknk&&!^nHK5-GqPBXql-4o*jPSun+i%?DVm+mAD3RCaxk~)Z>l~XMGL;kBM)4 zQj}wo0M*Q}FZXs}1u_&Dk=p+6?`ZdTv-?|-D#=bF(s#f6`0_#Ur_ls5)JKsib{;qp e%A16Qf1kh31G>-1Lqm=L0000^YRCN@<@sEp|tF5b976n?FsUb#GKB&k{C@P3TC844s z%&;V*2lh{qJxJ(ffAyf(9~Dv|2KGiO6itdsp|B9!%wG5wBVW@WzdPJJyE8lY-ksT5 zm;J(J=FUCmch9-M$N8Oehd%n~RrISt8_gJmVK@#$(1L+z?c{p@NM=aX&alXyqI^@N zFOnG;>9n-F{~_#00Waa9=zCfES8=8Z_hTGR!_eqxi9TB^t9Ba$Fg*G`O|bb$CE;og z7jRH;_8g29o^(&4fM2j0EAWv{dY61d`XrnzI6ovhialREZxs*8w4ZPk-(Va5N!)X< zxYz!~A85lS?91UpLs=s9N&#~lY)jplCM-GyY*&4X9n+jHI9cr7`x=HZszK*fAS1?L&uIT7a+|*Eu>cm96hX2IQ?h}S}ub~Muu}X-og?7i<#+g=I zCSfUl)6vP~aTqfiWMh{(1BUC3x! za5pZCj8}0hCg}V@&S|InR{c!Q&l2nq3~a-vScV&LYKC@Z z3yDC|;iEXOmd4hCp+e3%IH!IyUQl^He^5rJNf`Q13TfX4ti(bg2kx; z2*xIKrkBx49#40V>Dd^F$Hm!DL5R!aqU&>o;zIG-^TG&PrhM#99$UM~ht!;l@5Kgg z!L?=N?n=n)$KQ$bukZvGV7}6AX+h5@FF6j6h_{gkqVwho@?&)Dy=|CUL4IvQZc2@8 z&dnwGQEbq1VN+6x7JRML*&`}DOURjvvNv|!}?_rofBGZV58 zYZ_>&cn@BRrH$^ zvhUf>62(M3hk7RWub3MD3)&7fx z-W(x>tUH87t`cLERz}vPyifA2V#5mf*NEfe9$b+^=Q^be)`*n%x+S4EE32Wk7}5*G z^Ym9?^YC#By=jT>n}k(74GrtzCZY0BeA?@Uomg7dBy=Cmpf@?8w=jcVmuOZR9^RF$ z-ZfllCFJ}Jx}y_%i!8?kU-)#@vK{n{4&*Ch>YvcZWw~b9A$VxIJe(%f${a z%b{PK4t33m$BQ@aJH@d!E5q@x*x@`i>0-%uUQQdTayI^oZn9ZidCbFnr3+miCgO)K z+EI}K!hfL(_+0iRqCLrK=51YUt1e8yZrrKsaeKPh+1=7rNseh&DqY=sHJ6H=-K*8J9NLmbx=b=_{4Ag}-Bx7N!6Bc(AeN)Su*g;WcVsbm&n`72X#WgsSJn#+p-q zl5hL&ZLlqMXNK6>=NfEFx3EY^Hs&|lkUsk8#rzM;Xsg7MgZ6I#00002G z(iB81sFYTb7E?vsXoKQ|)E6H#prV4H4L#~hQ;hGA^MqLQ^F zp$FsHaZ$-yn$ni@?~UMac7A5gzddak7A?G`Y$2(5TeVxCU9y%W+@$L8cC?o(r+AJR zW4Yq=6XnXOr-*<55V~+)Rz3&2@o@olO&hxKgK8`Pg&Rv%lz^4^Rn_Tnyo3|W6jd~< z@RNF{NAaBK^7BelRv>+NQ@zubV;IliN{L!Ngo zKACv3!KNLb;`+4G@@KIKQ;pfv)&{%5?D~{5sxs-p2b!mghtQeXEfR5iU(K}{M;|^E z&W+(^T&udXIgZOR+lRCA9qDD}!y2*T85hgL87Tx#M7M|%9-MHfL z>xHQ+fVc1oE@{zzy@_G!fY{TX5nQUZtgRpKIr6T?#-aqKWS-a@cvW=yigVjUMzv0i z-^v8GxEz^NXQ_y-J5`+=!LwN1V7scu=H7%FbE6Bt2nY7yMO=krk6?eFs>3@{2rPnA z(A|RF86u3;j^$+q>ME6Pd}ZR~wZ5nd%h=+n&@E!`X-)2(R8*y9IeZr0#|2sWcie(k zvhs0dh$@0EJfwci?!t=f{$1I%drDE4BOM~<)-DUj@q+r++?ZXzHMPLJ=nyZ$zf+KPhExLcVg(*lT@P1|FLAS29ya5P% zTcsUOiNxX!v87WA^ApvxL44VBt{JxBKF1u>oPPjyU=*Ap$nWt00000_DjH=F zIBDP{8YDuqs7cf$ih?K_G;)wZHIPcB2SE=Df{bpKSeBJud-=H9V4Xwztg}03pL^Fj z`*=EE*lgB1|Gn4mclK+o|5}U~F`@_7;t8BpG5#9t!{%&?GIIq^VGpjV5dU5y{;Qm# zaNWT9jHlTQYP@3YKDKPNn>&@6mHjUhEHH& zO&XJP7f$MKdUcM*=jAwQ7rt!l*L8`T#Mab}r!>3~cVY$3#sd5y+@3Kza0ym*INz$q zu{#rLG?wT*%Z2V^+4+9LUVPu!zH96c;#t9XCmzA$iF77o3@@tw+39r~*ulh2ctd+9 zBgM9%k3M>42_D8a{3?y%kNWCh4vY)K#7%fjZ&&|kyoDEVL%)Tm;zrDMu^+a9xIv zM&(070^sGSerOEuiOS0w`&Xj+Nt~ZuO&?gV_49L7c&^9sTlCx2DI2cq3U3$EwoT5! zb;3A#R}`D{3fE=$Pa)}Eq}h}DAgVt%Wy5tDhBu?~`o?~5RDWK|MhD68N?|(Y$EZH3 z;j$Tk*{}fD<04_YWE!8~n-0f(f&I9kP7=l^p&ghl^xT%0sGAUw;( zx({;-pDi189`;S+Y2gkivY{k)UsRsTFMoEd!`C_w_hy7l-@;R{L`b*p5XQf~7+z6> z-lQzVWx_nu+x`cJi_F85IvY+tF0Pv~ysF&nNvF|Es~65u{%j9y$78N67G@h`!}ruF zDksltHyaNmhKBo<_o)}xDJmDYX@7SA68hOg$IU_luW0tT@Fxr%Yj9Y**$3(rm5Y_a zRA|xc5!_Ozs9apCeH1k%!^GJjaJjI^rD%4mFvBo(EEiVqG>sm^qv}~JmYtP)H+_23G>=xT zC9RJp)(0)tRw*hWja6#J`luEy6!8gy;IpAn5I<;9K|fRw5o)c73Vj$Atp(AlC<;=w zDi#~CG#b*TYJw&;(d7E!%w=ch?%sXh4Iw|c+}*q9%$)z-+1Z&h0~1UzuE?cO<`iHC zPzOv^$1{LwKrL_zFkM}r22=wz>UbuQSI70LyyAB)P^D}q0|US?@F#E!a3DxKJ8)p;~?Fkv}gGaReU&)*^Q!Nk)K;z^?&pdx778!$Av=+oaC|+JGjc z`PR7DoCN-{>Z}9K16nNG0&owoEoNL}k`0JJ{j(|4h*D%R(1$7Zg-jz#k##^nrr1w` zNm&M!2GfC;DQ(6D;K~f+N`*Y|0q$Z8Ky!AXB~K&pHQr(iz%`jgmoUqLZcK5Vz?;CJ z_S@501(*~$;1T5gtBc)ylv@_~NhMivIahiQUGLst9Q~`GZzf&sqE8w&MW$e>@R;LqY zGF*ntLET<6JMq3-OMv;>`GcC@b3S#R3Y;B1$SUPC$}Tj&7r5Z<$}Tb0f2+HcD= z|L;Bgnt<1lspBZH14$~RP91QBQlTTrGrYjVF9&SF`IDAv*BZ5QMuFMdwQA)zP2-K;@ z6tW#@^7=?@5O@L^k?FQ^GB%0R0DOTHTo=-O-Oxq+XPv(XoT=heA z^#BXY*t<2^6To`Q?healK4XAp%#Q6iu*k>97Tb&Dylhrmb{8ZPaSSfRoE>!o=Lhh! z1+Vk4yV$b3Bxby^ScWviVlcnp-FsKz%$mRyaYS8rqu#P@jTv)fS}^lehwy&B8j#^+ zyE@Ndig?4PEd<04eUjhNkB$Rt;l=YrUCd+`825CW?DAAKJ|5J$M!4E zm$-sg0B_+m&o2?NJubGh5V1?t`N!&eie=a5Q>XrigkIK(BX~LR4vyG;z)Ii`7u#A) zu^q}D%x4+kFQ0n#@+&5I4wBU<4&b)}*C7)Fn>?@wxJaFM0{2?ib^i9LTNiBm`Vw_$ zR)^fRKHxqiDd)x{q!VgW=lw{AQg4>_V%(rl-TFF}+gesxq6$8Qq;vKo>$7g;kQvPy zbv_7OkKAFM+19z=9oAb>#RP+NR^`|N+^LR-k)_p7T19*jS8)bgheESKu3qao+ zGUQ{MD7Ba!&fA3Bwy*&6?(Pogx8Cv#m7k9K4CjIOaZ)!2kaz7!h%)TCtlvP!i`4gq zOvOySmdi$#<0Gw%VS>+X?K>QLP8^0DvdmJftPlSLof~s8)3Lik_}YR~&0KEQDjJ}4 zCtXk;#SD5?2wz)pLwWP)G~?WrA;JY|^BuvGc5d9L`JRjsgD+R9O1{O(TtuN2^A6n~ z(toAq`+1Bw0&x!UM`!v@fn$VU^}kf}-yAcR)LDqkh>8I}9HERekn#6XN;95gjt(5L zhl#$|dM(jjg%#xr%xBkYXV17{FOJx)8OKr)wjmRQ#~6oOg(sLGBmM`cm&f2hvjt-S O0000@0Guv6&j zyRaR<;t#>(;plgUV=`XBu;~5_yjha=hFBzfGY{5@xeUwja2LOGuk7vTk^FotTlrm^^?ta&6feB zF&T%XCXNWkE-8qgkc-_VR9(G-F+$-V8`vOh0u(V2pQ!Bx_m!@+Nqis`z8q)Ni5(-X zu|?g!Z8NBtsZ!CaFrXl=A086&>#ioRE6SJLeFowOnbT-RBZNZp$@LHEo%EmZFSTZoFZL((b-pSf^tiP@I0YWw%}-TR(^A+D1#wt`LfaxP7f!qt$CunZmovCSlxO znY-VCje_v~!ps~qUG18kzYc1{s%Q=-7TjMdh+dD2qWk^vqSV+vq4pgojP1B>R9V8C z$u+_(J4beUKuALJI~Skh{3zyzT>JPI=xvxzoSVCMmXJYJjU2_x(wQ0_l^SmA1f(8= z@tMrT9w9S}8H@LXaT^;h8ZK?ksaPkSc`wez+^+tS%A}SlZ4&cj;@1dWJ7%WhO}grJ zeXE2vi)}(?HBasS_Z(d>OTDs7za`AtdFCoE3s>pohKrabHMJGDRN5xy+Ir004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc3<3xS0a1H_r2qf~4oO5oR9M69n15(iRT#%Vd-u!b z%2>>j&1wB@z3sa)V2{xN;uCeCRAMfMYIq$u%ZSOsI5%|6T-19u=J)e8-d(QJb=fX|>Zb%xQ*e<19Oj;-c*1#~mr@yt_uxn;{@ z7lQC+H0Z5tHZQcF$5Xs{^dSiMShlCNcU2VZ1lp|SvNWVeD}pf5wC|@2LFfvNXhYN@ z{%4z3-Y#v4ynj5PS5l*ZAH-5Z>3;Nd#dVQ>ZbI`Zd{^f?v@g+9_fd zf^fk)+ImgV_S zemnQ}=f2Sl1VP&*) zK)B{x_Z`$yLJrv!@{na89mk9hnWa;&_44(?HY_uH(+nND%_-iJI%B|nR>k2-$>6v> z^kr_d=G+>kut`_$R9ksyP_vx?DQxi-Hg2r3Tnw!Ck4;SyqrM2;&wHHZ7lW2MxV?0m z`|lYWAGXXn2W}+6U3ykXuK#iIU~@TaVK?ZKO0dq@nka|^{6WfW2erzq^UeOTYtv!@ z>Wr_(Cv=oE+lJ76`?-3z`uwWXY@k0;7aCMxtM>TN5A;qgXp{BS{IoGD!M7=ea3tNr zIUVjit8RE0dD%SPY9HVNT4?4CCjU#nN~@}_8@UgP75ru`z1rv%$j~&815U&$8i~0U zvmuZ!>WBXGoMG?kDU7F-smu!ba8@4IEN43ZXz=QDzWaDnWuT-N+F8SFelYE0apdMr z7Vt8StTtP%z{*msOd85yS;GKV@f00&(86iXAt~PHSf``)vxDt4lc0yQfqpS)dEl%e zY>a0gyJ}#u^;IaTzLAS$JL#m8D+oOtn+a07*qoM6N<$f=0ed>;M1& literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B1%B8-oracle.svg.png b/server/routers/bushou/images/60px-%E8%B1%B8-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7dcf033a19e0ae05efc7301f94c9882e038a0f5b GIT binary patch literal 958 zcmV;v13~A9J@kLi%DMh3UrHZ10f^OZo(2bT-M0es^3O+W1Zt7zp3RM>>7>J-^E$Tv1VyXD5 zwQZ`kYJJqj+{2l3ZqnS^IWx&MU%2GVWX_%6kC}7sfBrKpv&>L2lKA_!-~n8Uv0mLc zMtj$1I(j zAJf={M{zrjMf$Ewtg$o31@Swu6SJD5_k}RU=OS+Va7s~Q3pe@C9L38~c{T2d%6swq z0N?XXN>Qn&^r<-5D*rX$eKRRV`@Yb$7EE#yf53TYqU3Xa8@YRL;&&nDc)|}FtyY95) z2yfRPPY<#_UXn}-DWLYx(#EbkE;YhC&7a;GI&L<9;L-UA=Vq0VysHcz5*GPY`I2(d zx*-lUW`z;m9o1c2PFi{@8tcG_Lu!URO+AVm7OnibvGX>b;sT zt??r25;KNR)TZw4)sNzHO~YrE5SW_nYC}&%^>^z3Sz7W;3frM4@v1s)GlGvb&CZq( zn3`t=GrKgW>n-|6_dsrOU2p)8Xy&O_;xqk*_h(nv0dvLb?JP(2`81=hY)lB-sB;6!M8$~87J!E z5gv-bVZ&) gvb2z8mKg&61qXE;#JJ(h-~a#s07*qoM6N<$f^urvk^lez literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B1%B8-seal.svg.png b/server/routers/bushou/images/60px-%E8%B1%B8-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cea8c146ef2a0beeb5e29f1e434645e65702dc18 GIT binary patch literal 1286 zcmV+h1^N1kP)RX zVkyQ9qOMFS-~uecpD5P&{Dh+iNn<7)j2o~{Z70*8)!2V9#14dG@F@OP-Kn+0bbbpT zV|&VecjG1Zk3;bYcB(ysyD%)(uM;muZGJ&}V+qMPb6c?pH)B(D{gNvEhhu%z zW@7%5`^RB;Mde6tmJC3%BirH{_j)X9b5%}y2gF2dRDJ4xlxlkb{@G*OgtjX8yD#d0 z>p+B6yZJzwg7=lz&b8PQ*(YH{^t%fm?)iSW>QnZ#=zB*tGP7a4@O+j=<4wW2Y3PZr z&rJ2ZC9>U=vQ5D5$UZkG?fqhrAgT+uOGeaZltnL1^*cGTJs4ddg)bx9ZXBDv?EZ6t z5L8B1v7MwWd|eg$2iPV&5-=6tOFsWkWUM!LN=wj|Dz?!Wi_7qd%3$}J7RYonc&C~LQ*kL< znhqh&+@W?tGF^*K-Iz|y$9Iwr?!@oW?^RlS`VPZwDhr1myo7PWG8U(xE41iT9xIGk zdfL7tnI;mPjz{`AEl>i+Ov4|Nj;_M_d+9ST)qY{l8Z)6C4@l9Kw^h)(_yrugVac}lAv*AE|CMouD^_OuARXSTrJesN$Eb*kW$Zlb+t(RGn zrCk-~0e>DsbPm1e|`_yLpaY+u0rk|X)N^7{L* zlfeZp6RJ zPW+0qsa8|i$0k7h1tif`j@ZTGg@rH6@u^lsn(~2okyRM8h4k}ZXQ_|8hbxLG^A+pVB zxVns)DH)*FsXRV;J+fcXNO4(G5YC(8g5f>Y3;oZdHhn2bnuboiEE$OxW4|hG+m+9Y zi#Ve}8Z+Zu$w=H|?~(UJ$v>v)s-;>SB)qW`uc)azl4aun~;WT*Wl z&J?zI(xbXW-viEqsQ-%WBxc71A@z$L-5_LAeWf6IAl{Vg@12qr&Jxw%@2H21qI<1T z|6|Zl&KBO1n`L0{G#4Zf-_ox&?Q_JhAFkG7r-yyz5akVkZk#^2a`GomH0~H=ExFSs w)WSvKjH)RERhG2jYvJ{zecst2hRA{c0hJZq$0i{Kr~m)}07*qoM6N<$f?U9GkpKVy literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B1%B8-slip.svg.png b/server/routers/bushou/images/60px-%E8%B1%B8-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..85718fc8f8a98ad3cf60644c2cc5f14d926f0eda GIT binary patch literal 1290 zcmV+l1@-!gP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 IM6N<$f@3?LDgXcg literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B2%9D-bronze.svg.png b/server/routers/bushou/images/60px-%E8%B2%9D-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f8175259718901939a4713e0f649386cd49d1a8e GIT binary patch literal 1400 zcmV-;1&8{HP) z&Of^|=j@*3VLup>vpfH7XLjbFnT3Laf`Wpn%d`x2tpLshc4w$_%2EUL0s-(QFtb8^ zCj*ZG>wtw7>dJ-Fkzk|pCE|3syb{xO1h}A52eal*CI%b;UBIF;bS(r13|(IVwV8OD z5${tPZ~z|pl1fKJweY8WIM=~&06eEMr90m zJVD2Fpxr^wgSkZD!EwOfq&pgwcA&w~(FlCzC_jiyeUrw$ic>!V&m*m>IlT=yF_b?Z zJ=i|rVM+(D0Qe~XuypExPQ{^1!~6Fu_oC7XtO9aI50T4x`Qs zN}aUQ!T1!^0CX#L-pwf{E49EL#gW^MdUe1jO1-3VrJ-ZBQfCC1lW|Om+@Lt|AM#F` zwBkOneX7Veqrb~*Gm9pL8YJ^E9oU*6vrMUPmLcqU^Xp3ey`e9;bA@6&0Paqa+hvi9 z%F`CPX~44<8xEwmRsZk;5R0&uuetBgDoV#4jVIwCy`mmOAY;hUB~^hmo!x*V_`7RwO&RBth>y;4V*JKt}3$NDs+{ zo%qkId6#Q_0`O_!xxjfo%FAFkGH?Hhq?dibA)pD#zOGSZPRq-gRaD*@htPBEVPsHC znr3DIKPj>=`UK(A!q-`@j{ygOzrw%0$iUML>_-Nc{m8&J06YXdXXw}nyq02r2zXhM zZFO_sk6FM`^j2Hrsp}3!$5oE9b13a0+kK3??h~DjzS|Ix-ZCb$m1_qaW%mK!8rM$n zG42|$E#=#Z+Z-Hcv2tz9Lw>LEyV1wE>pOgk<@$R*#(;X@GEbRfk)Y-yspQqheJwAr z;u^56+axU*KmweNJh1bDrARVj@&z!eTyG+MNu#`xXiW5j{Qz%5A6X-CeHG}?f3jB5uo_63mTTKuWLnz8;3 zhW-yI4Gi=ZTSvye0J7qV8`+hy{+Yn%lm@c{xCdB(tjD{QI&b?Ja^2?aLbg)kYzQ41 zMY?VVl!=dTGlgOEp&*Aq9{1-5(d{22v!Rj(>EunOfw3S~dJ&nwSM;#rA z%CAV?TrSPP8!0x9;`eod7xln*DGmfkBC(F_p8DnlTMuMp!^(W%AB*t;;2FlxeY4;! z^g${>wtA|d8y`as*RtXyWI!B25B4Rh{6)`7N`oE*)>GLsuMv0xS#H|8@p`Is zfM&8BeN(Ro`3%C$%#x@@4&tIO`LuEvIe?#3uE*XQoyhc(#<`@QD(<1Y58QI073qfB z0ow?rr}=TtKo;+|K!<^+NMD*x3QLexi|O>H1R2|zZvcFZzPmZ4Sb(H>QQqB+{lK~g z*^7<`ISPCTT$HDilQQCktU*3;>IJ?5-a;NyK|w)5LB#)6^4M#$rZgA;0000n` literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B2%9D-oracle.svg.png b/server/routers/bushou/images/60px-%E8%B2%9D-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8e6d7a43158b84539ca665d00e411916ba98ecc9 GIT binary patch literal 1342 zcmV-E1;P4>P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc3m5@22nfTg(*OVjMoC0LR9M69m}_WVMG(h-iD{A= zG}fSKZ9)}ez!z3UV+<6ZeS)ZMgBVd8t4I~G&@PSTPs>? zqmkmHwOWyAZ5m0^SHv`F;vGM9GTC#_z2}}i_gD}*_rva;o&WxK_wJpU9XKw>NKQzI zo5#1zq=sD#{x=IdlV@4Nl#u>)1VQ+VWr-IbDK8@kgS2MpJCs-uKBhW-;!kw)Q5pmK zoer_^6;){ycRBlVr87V*d`MZEv=bSzsWV*QjI7Hd7GCk2x-@chnzN4*TAY!7ZT~>D z*T$msh_A`}tykMyna_y!pXa=^j{5t+VGcW2XqoEH0Uk1oP9~&5dw%G59N+VusyPcN zWwTj4oyJkOgfv%LZ=bfqK!$r5vXi*9_#OYOyEs6f_TIIzX4Op6?~gdgU8E;#w5i&; zR{vIeZM2F%5yX5}8Q+-wgK0QRLAV5H9zLrhLiTgiT%W}9km zpbuf5W3!aI0+<(Usc$DIzB$Li)zMCE1g4rE^Ky+ziQh2dS`XCihWb2ddN6j6cO;Bv z!ptPZP0o$>bvna#H%k18$DQCDZ|pOMokbDg8gFbB{fhm--({Yt?H+TD@#Syc(%x+9 zeTgfz{UOoSTxAjb-eXJrHGO%*OibdQM8p|3X|I+G{fH-OdoZE<*EXZK@FvrNC=DL6YtLYjVtY~)EjYG-ZZKonZkPKNf%o-DrD?&`kGC$AOcn4 zknP|L>vzW|UZ{}g09b5OtSNw-;AAf2pFQ!3t2vAyba4vJnqLatF@j_X%R|J!``qhy z6tvTlpbR(0#4d6kw}SAK5AiLbbw?*bGk7%cZNNcp^&zfs{tkk$f$~WESCK&Uy_f@r zebLX+uW)EPIJsc(7Y@_lXudS`ZGOa88?ZMgLP8U*2p;{zT}{!*TcF3*lYjV#Q#mgGANd!?LyA@gk~%g3001R)MObuX zVRU6WV{&C-bY%cCFflhRF)=MNG*mD#IyEsmFgGhOFgh?WD~u+l0000bbVXQnWMOn= zI&E)cX=Zr@MKLUDz2f&@EbOZkYSAlC${W5SVy7tJUy(*>vp8JsxV}}9H2GlnVIAiI2H=w>6c3aAq6rgjlrSmI|kg-bTFIer9 zN;z3LWwobiglHXZH|jmWZKa$nOtRV|1xqJdhg*$$BVpGsND$j-T~j$+Q5s-w8P5TK z0LPH6VhFhbO-7$qsyDZSMERIzs?ppWR{`39=aEd!rrmLEM6{v(2DMYHXzn04I}_R` zZ1W#*lVpMck}vl~^?OLR6!#xYA-4^f3oHaCTE8_R53G=M(@Z-4!rzS>jt1Z`wdrP4 zy+JOtL95@Wp9UT(<)mc*$>MA>XL3FqE-I(J>bU00%j=?b_^weeDyMZVo5CEvX4G9< zMhNCRu4P_I+F)Z&uLZz7;3C=YcuQnMycdrL#!=mm+oIpPfHl_G2f+P|`n)*Y3H+jz zlZTs{L0X5;E61g!AKABik?m(HwOde+Jtz%Yhkvu$Un6%sHnJZHY`2hUK8Pe6P<006 zr6XR4cNu<)HUme1MaH#mrR^#j5X0jHU|9h=KPQ=V?9d3&M(F|IXQRDTDJKgZR$H~K zv1Qy^dsUc z@&5$bi(O}1y~w-lN#sD?qyag#7>@*{8ORI&oMH6r0X8_~JP}?--dW@9$XEFn*b2N> zoGaOA1l|UY<947AS(6uxa?8>01hUk<`z=}9a$Dz_71XAOD|5)}BDt0ak^gy& z8n#lK^pDFabF)LH>c1VnnTULOFpc}jgWL)drA@h;J;=??L6UptrygZ5A?ffJ9%ZZ9 xk3{6dxIcR3Wg+k-vTW?*+LDrzl9H!}{{gGFWxnww5{v)<002ovPDHLkV1jVKFj@cr literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B2%9D-silk.svg.png b/server/routers/bushou/images/60px-%E8%B2%9D-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7ce2a6a76e88a1df2f326684431c6d0889789f GIT binary patch literal 1158 zcmV;11bO?3P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B5%A4-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%B5%A4-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..23ac7eaae253b4c68b476e38a5b7b0e158b6fdd7 GIT binary patch literal 1553 zcmV+s2JZQZP)#+uezQ;k}*YGV-}MXd3KSSW}H zVo?+XD+m_+;s+7>Nfgu%6+}g8wVtz!u=E8u3hoYk(f=6L5S7T$@Jev^{(`@FMmlr3CCl0)zd?P#sWy zgZm(EE+P)Ch>Vhs^3@4kjEp25CxM56=Tq9?j5`oT)fV4{tg-hZPAE~h7lS6?df{Dp*Db$v=cKO@ejV~YB`rsy)@`caag zz_hJPiae4n$pI@&X^gye$k4ax*sJ}I z;|CGUOwbKJYM@z#EM4m?JmxF+=fucck3@6JE${be|1&rEn1Lo3_7_=rv?}*;LvUI7 zcb?_FKElq9;Rn>dhl2p1-NHi+5ZWSS6{$3iEvV2PRn6ycLHlnqI7kXEaNrSTusRY> zSZIzA&X&~NV72fyfjO}@UjA*yTqtujSWOT{rGV64uDQV~t*LjRVlY%s0SIp@=40Qj zxf-m_W7}L0A#D$*HCXN8JTTY7N3Av4hBSl?w($zVcMt1+pw&R5%Q_jMQ>F&H^sw3+ zraiH4u*)#4o53orEp}B6HkEPoMzHm;iYS8*D)$A;7tpS>Nrf5d3_Eqvhe9s?mHuN>ZQ`FnON2w_Iq2YZFsW#{a-xb00F$4WLumgAs zzd3P0=2#a}?g**^LzvG|UW&O+^j?gN)kqOduXY5NZGP7Trva}b%hIqx_)*NK>vF)` z7KJB)D;;Ea01pEnBhD)LerH-^T(AJ~)+WV&1THarGZ%Qn@=b8HB!L-71#=_rFu=Dg(UO-!mR{)7&&C-l$%P6EKUHl0rvq9P@PE}1ztxQYZ-7G z=51sT@Fmi)J;(`wLk7CKA&)F0o2jnum5>d(>q>k?ykJ zwIPozWe)-`AytTfE%J`xcrq}_9PR>shPq-X)oL!4VHGKxMUgIIbo zmBXDuxVIg61h*kOEs)epFG7NZ14wU=M3c{82EOqhZO78n1q+v#00000NkvXXu0mjf D6qv<5 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B5%A4-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E8%B5%A4-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..105aa5de03aa3aa0d3d757a168c2acd93b2ab106 GIT binary patch literal 1234 zcmV;@1TFiCP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1QHiJ22^m?1poj8+DSw~R9M69m~Cj)WfZ`F^E&VK z<~H5t%TigIYiNd6lvbFU&R`-Wf*_gtr4J%wA_k&`ABsK*i~!kej2_Onf+thIJ6QNlO}lUS}ZkH7p`{2RrT0HLIS zU9{0kD>ryO5jc6bh*ChdZh8cGmc7=ulWP8@op>hx;|@AJ-^EV*d?NdT^y-(Kc5@~p z^LWnivGaY#BDF9R*vLnoT?j~WX+RKO)bD5LG3%#D+Ppkk?f6iDU11 z)y?HTf>1|kFxU|L6;W%k`5y=TosIm!_FyNY{e!>M<$fljn)e;7aFz*nI1iZiD%1U8 zx9LI+X!39)NPaDFbbg*x57eP2cuA|-Uz*@NHf!8@du-E#$)Uh+TLl?jEo+qA{ zIp_BRQ<%z85Be%I{CjhjUJC!o7_J%Om>rlkv^eP7EDbt(Wl?L(f9?5Eg?vl5^>tGb zEO@If+(l(Sy|X#&*u6P8>^o{xj5!02nZte^)x*2NU>DPgAk-ubh100!4nij-{;_4W zBg9yi^j%iT6^{DF7Sl;HTNs&QicwCEUv$1xD`Zhl;o#TAVZKK=-EXoONvEPnP9l0_ z+D%jAZ08c{S(XWSgd=uNd&9>Hg!PUu2*Qb=pC`f&_9p;xXmk=EfKv!UQ#xhqK$6Wt zh4xUTu2!R(`A(4O)m#rM-wfG%M~sE4TWR+1bw=(}-5)8G3XhRp>QdXSCVq}K1IJnA z6gt18|1R>VOkx3Z9skYalIIrgVY_*Al+SoTGvk8y?vQg2HCbY?$8u08q97Bed52*y zGJ)lqAPK+v$tn}eYQtWp2!K*9tL6r8WePh_uSek=@Da zqFIVkW#!n!l)a*X?)1I;Fs;<48IQ7qdJB0XzT_de^v~!ahojm6001R)MObuXVRU6W zV{&C-bY%cCFflkSFf=VOI8-t-IyE^uFg7bNFgh?WY|%RK0000bbVXQnWMOn=I&E)c wX=ZrGk9Hs^7Y&|2tz_p0+Ju>!XG}R>ga3}Y~(+E zLcOh(;~X2yp+BPLiXUe6&+T*Q$?JDE{#wLv=UMY~#tSxK3EOw_sr2~D9Avw(;j+hc z$@Wvn9PN}$)*h%>G57M8AC9a|SwcN6Y5^VP3|rRMK3Cc3<}i8ZNqx@DCsMmlOz_WR zeg880@q^a2?Gc|?@r&)XLxYYS_wtSpnrF?C7_}f>J z#<9y5PBYR9UhU0i$6Y_hnGBG*xcOqZ;0 zJ6cZO=v17eckAPe!nsVI_j&sQ&d0^9WI}WU!9MfxkaqE_EN(xtwaxUwAbGj~NvGK_yM!rRjofRJ* zJTrY7a_MyaPxGhd{r49vOV`a)1m-Z+64!{5l*E!$tK_0oAjM#0U}&LhV4`bi5n^O) uWolt%V4-bbU}a!%Sx0L!iiX_$l+3hB+!_`YPSOWzVDNPHb6Mw<&;$SiVbWRv literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B5%A4-oracle.svg.png b/server/routers/bushou/images/60px-%E8%B5%A4-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..07c815ca56001bcf348ded43b1db5de3182ce838 GIT binary patch literal 897 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B5%A4-silk.svg.png b/server/routers/bushou/images/60px-%E8%B5%A4-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..795560bda3d55a1ad22449307fb13e3eb5a67a32 GIT binary patch literal 1489 zcmV;?1upuDP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B5%B0-oracle.svg.png b/server/routers/bushou/images/60px-%E8%B5%B0-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5e2501d83abc63c0fa5e73fd9886b63c213f98 GIT binary patch literal 925 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 bGd3$QFgh?Wvi9>w00000NkvXXu0mjfhE!Pn literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%B6%B3-seal.svg.png b/server/routers/bushou/images/60px-%E8%B6%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e0062b449744cfdbc43ed042cbb20f9094d1b6ee GIT binary patch literal 1193 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 YAGs7KKR*Tt^Z)<=07*qoM6N<$f=>ixp#T5? literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BA%AB-bronze.svg.png b/server/routers/bushou/images/60px-%E8%BA%AB-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0c6885e6f4e1c67a7c8d317c51cab6cd5b6ced32 GIT binary patch literal 1093 zcmV-L1iJf)P)ESy+krWeX{S zl{kPS<9{DPXQ_&E<`!XgV%dh?GDYP{2R@KAy%$%Ps4G_%;!8=>V|W2qVoqu5a$-KV zN}8^egLoH@;xcrVBQtyM#MdS_UMa(3tUn;`kd|gHp2BygHhu(u<9VD~hS;n*5!Ya| zseAqpY$!!#PRzw8YMVZco3m`R%%ETtd#3nJhhtzl>%>N3ww^Klayc@yVJ&v4&uFE* zQi{?h=)^jFEZxxO7{uF?eE(eWlBY*EHsM=I6Nm7s2s$P*nDX1fg7i+CQ}8tQNsq9e z#ga*`?Z#hK*F2W9-f7W+>+uFgB#rJD!AD;mb$wWM?Y%kZZHjf+Eq(m$#)FvGKz;92 z)v+;4vCXnx(&PwU!)npq zhC6T@9>yhV_u>fN7qRsroQqqvP+GSSZ>hZz7{ZIVUHa_1A?2D(C#|fQCpH0TCU@Z> zEK}dO{Z$JXenz_4$2B%NEfZnrj9->+OgXn5Pfj@Q#!f62S<1a4u{SjS{W&7vH7g@c zsbpn%Ealv`s^i%>8OM*8K3tSh`*oAmj96_BF0MNMU97)@_(=3}g|vUzjHX92M>Q(_ zR3ek>O~z5+i=&I9-7rn*U%;s-~I9TstNy%X1cl7=(gEoIF@yeTPq51znvBHMA2 zh`f44Tz#!ry1q!cwk4ABYee>ARAU*+v~p9y+M8mLSVy-=-tP65TJu1|6uo0vj5EZo zKN~0bZ+W^w`Wk#Gb`&MBNR~*?U7uN|sJyvA(s0W^FRn$uq~T1rurqD%xxDIlSj_at zB)wvDQQgCkCXxjMVmJ^z-trUL7U>(0%--CaY0FaD>kY5tpR5{~X@);dIk&5D z6$MkBraik{Ir%d&ng5fLoO=K9W{6UU5J~S00000 LNkvXXu0mjfD0vI* literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BA%AB-seal.svg.png b/server/routers/bushou/images/60px-%E8%BA%AB-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e89afd69e24e8a1b18910973e23cb3f171c718cc GIT binary patch literal 1425 zcmV;C1#bF@P);$R8<_n@sIjUb14@}+t5m-LMsfjprQq-<>xa z?+b^Sd*__r`Tgdc^Et`T!^9Rk)`uJRU1BEJxXo@jiBz%9ne?FdT$KF-G*B zEIV)!-fpzgBD(aEI7f8Z?bwDb_#MBMJ|D)#i8A-%o;qX?!&ID)>qL(#^A{$RFyDuYaqnO@W#!#FhoY6{^)5!{*b8@4cCA@iA)~?dKrZWli z@D>(g8CL6l9{yZRF?l!@TNAR{aaCRe8s!3A8Z-oiBeDcxIcDnf8ki-&5Az_FMpf{!ht2du%* z!iZ`dC;YVhfvF&2qCb=u|`?9=B7P(rQo%sH$n3wBi zeCGK%l}067b(-|rxYrpf#%r>LJ`{2Fc{mFD)F|7A1&OlTa7dMWFG}}^IXr`cfD9wCt1-&{-jslAZH5~W$>rci-D`vxBZfhk2iIZH)-(7I`yic zD1*NhQ%jj6uoyGDsUz!Yx75hjPkQyVyio3ND6lk0^eTCH=VU~?(Y z%#4g$8wQi4d(6U~t6L2HahV7@c4&Nc^hgc4PbBhekbldlsSFm|G_x^Bgqs_6ZSd<= ztqG?Fys~kE(9yQgJ5S(zBx?nIQs`S}l8X>r^Y2 z>G(+ZV|H$f^ec=JVyy0#HtZ*{lku`RJ1)QfTmHkhmNOf_N*nsEIPOdy1U#L|^HA@q z*>m<6yBA3#cHsfl?|4khUCN7gD4OlC^$5oAYGi8?OoqH&`=`XG(v`Z_# zTzz*tCWyH=S$0lSG%bL!Dz{-e@Ses3hs!hN+i`B8nijxB{Gig<`SLC0p3lhHXb%c4 zC+IxyO{S0JyMRXgNlP>Gz8BXKTgq^;q{|w+M9+^xMu{b4Qtm40OK!c+OPXVBnbG37 zHM?d$yde1vai+@1X|duDxeid-z1OQeU2G}?MYNPuVu9wJ=ncjznfkWj(k9hc!Hh)3 z?PASZ?Ot=y%#l8&?7(B1dpQSjoVi9gmFdl{EW;FhB5m}Ay;1Q1z0<1IXcGr=pO@0e f7U|JPAFbwJ_YV269g{>000000NkvXXu0mjf9CpRw literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BB%8A-bigseal.svg.png b/server/routers/bushou/images/60px-%E8%BB%8A-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6bca2b6770ccd6a1b775d60e8bffe53bca1e0c27 GIT binary patch literal 1620 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BB%8A-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E8%BB%8A-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b13396b1ab15bd9aef00209ddef567b6efbfb734 GIT binary patch literal 1083 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-^Pl^B{&A4+FnV0QL&aSVw#{Pu=#My#s@+k@xFswXe=Jahl7?!g%%J=e6F z>_c={LdRek$yd$k5ubZ&k7|C5#wMTJ!N2&_*Y3|a<^A-) zrF%ZQp0Ur(Ztk?=y%@aLSFR{D#rBzVb6UvC0RFT&B{x29o!GHuZ&N~u-p$b3gYO@B zFZRq|-dCY$9GkRz_Z|McpqDjUn5?!$Ki?D2tM|Y8O4ni6P7ehe=?wPH>4H#bL<#RpB_MH-xMeW4et_x$naMXZmuUcGtz z`%QV<-doDL>Z?zxZJlv({dGZinefM<{f&O^;qF4;xSL|Ho!$Iah^1WoN_DWnpFLGk zSF$_`Ry6$JbS$X;GVSA*c_%JfhX=E5{>J%f-bInfZ5&N{PxjlD|0@4NrZ!~e!g-IJd`n$>gv z^74P_eLTD=f70Hr71KU%m>zOl;q8>*qyLkBo+w?c7rk}0liS);mW6v-?7vzkUy2Mq zH?!c(Le@n=CU&}(3;!p+{5|n$%-^|E(u)oKq`!6VSzr3vbeS*PVz)VFncEZ!d?Y6p z1#}p{n!-1CUEGzE{w#`$u zUp$>k*w%T>tB`nhMXT^p&Zi^lkM6uZs`&4?h16vAeJ|d$6$xIS-dwRFMp@1!*0SUG z$8gJz{pPE~BR52EKK-NqalF*@_`SM2CBFf4m}-e@L`h0wNvc(HQ7VvPFfuT-&^0j9 zHLwUVG_*1{u`)2wHZTB^BD`{-%#F~Ho1c=IR*73fYQQpApaup{S3j3^P6tlvF#CAAIEF+VetRP}<7%k{`-k%-x9;Q=pH9=?mGX}Dw4PR& zV&F_CR@1JS0Fgw25b=wxrGXbhFG#cgWQx4N?fS*9A~cb0;lizV4y>3nWu@im-1M}i z+jf2~**H1pxz60@bLI+fd46Zk|MxcM-&gP3|NQI!N&)$USz%DO=CT)F&DoLuZgJDDsS6IUNK4hVi8%LE&Dos_NV2}+vc58 z^RMXV4|6Ta>DOwyO|vhhB+d$-yl>0>y1n0Suh714Ghgyx_Hy$z8&8!f+8As+y68~$ zwyLAHVlwg7VI1Nj`-=AJw{UMZ)jxS@o!9c8H}bZ}v443n{la?h?=FV6XN%-5jNC%_ z-M?jR{&arF#pb+VTdh_0r2_3di8HI-T+WLAHzTa_VnWw-zW62k)=DfjzB_r6)Bew& zS#LjbSLCU>nQCENdSk8RtnXf2x2HT~{^nNC_3*CX%P&&}ru8rUyGP(wQTyK0h7YHk zl*w~Hd}sLObP0FR$uqXyCl+k5%>AupZdqc}%BK3~ zLG;_OWp(k2C3Dv7og48kysNbDQIh$J?GBS~ZLwVy`f|fP?v+z3f2f%so83~N`Rb3I z+d+v-nNy?P&c;10eE!pN@xndJPqy2g>iwAR6ftRI z-0UP9+vFFy;#OzQm@a!Sa%fu5WX-~ejxD=t*5)PlSMGdX(COdup^9z0o}!ydWbf8V zhx}iC4%SJ(snv3JT5p!7bjyV~UhCUcS~l3p=lq}OmA}kp*Y&9FSq8ziTtBj|SD%zW zw4gj@;(xt6&wkgxJfNszvo!A!+wIwFHybmTtp6P%l5}lVal7d)UXF*MQ(NV}$%*x) z{pXreyL;Wy#FJN^1TK!+DS7J5lrLLrf2K#}ZJcW6#l^hsrmY*V{RH`Amrb*-tZ;00 zD|S!$Y$D!!;q~R^{@dT~y!JA&^7chxl}mc(Gq;|Y6a4kt$>X<|hDCGq{W$CRx9ZEQ z!d|h&vUTRn%l~oxpK&3+V|7Q$t~Rs1B(ztLn~urD?>|d0|P4qgY}Oc&Z20@%}>cptHiD0-o77&Kn)C@u6{1- HoD!M{x%<)lE<`^WY^iVQ`-Y<$$ z5TXwuW?5mFQf4o#s1W*4got8g5^7XqmZcWhJA6=yX_%?yGi#i=efY2K*>gN+@(y=< zMa~}%`|PzJXRZBMd#$w(WXO;qLxv0)PDb3^%61)#%EfWS`#|Rc+jIb)3c$+|v41{jmlW+2cXs0zhYNP%;}-~{@O!2Kz01_EVB=pYCw zFeJ}#ci`NV`qh@67KWYh0@ozaPA6TUb1ZEah8<`ds$)Y1&;$70qn(0;9uItDJXE56 z>t?vl>iq@$1pHhqhRTZ75pWA|HJZJ0#B?RF2G|dDLcm{Q6EqkxsgV6s><+zttH z2GASmM>LofG+(0sdhgrO>}>@O0CyTs9|6yxf!YCVE)t)?Fapg?9?h(eIYyrqqn81@ zt?ZsqjD=EKTP)oP>`STheJtMx=wk1=5KKWhft~W%nNZebX>?De(XGn7(0ZHlqO)ZS3beYX8;3$ zA1pu3%Bz3{XeBsJ{|V4Fm;?plQDC;c_eJMv9=I2{0Qkf5A0pRplI0Je!N>!1Ia-O; z0ONpOVc9PngMbELFET0`fd{?v^MFr@X3Kwm113^ji|@E#6fhrniFBubAaFad7zz6x z%@x;4i_4I}6H4*%(C%RpwwK_WM^FlZo#9cEeOn5F8!QdxQfeqGX5HfPUL}qG` zSoT#Yf{`@JLlWvw_v+LmpLdw$7X!nA=YfBWc2`0lbCJnfXZbgg4eqpjPc)zlET2P> z&H=5G(8EwP6L~b+d1G`I@``q#FpZC2tlkQb!5&6?+N(DLE%iOfy>w`gyr#JxZ6-&D zjW(cwUwdoc>bRJ1>n^d5-aw9h19I&^Gv#K{85B9I(})}hhhA29HqG&Z(Vz2Z7aHvf zk2cx*^-q{}R_{gNSt7?|_%TUoC`aMZQ;hk&z!yZCeIs)D9M%%WkU?5F&(ZPZ8l%sN z(MKBnJC8OSE#F$;5~Sc35e@DN<1tM)%#RDz(y`RXm>!2ls}t}R+Akoj>BpG2Svt`e z8D{xWz;OV38&V>I9^jrJN^@;!k~_T6%{ z4fg>L9ILPZ^UxAb`uJ|71$U*Cr#%g5^fz06zxA^T_#AlG>NKF0)du|ykVladhbxWd zjk;J1ol3nyP;)hv|Y@229dzG*@s_=wO@{IA1XYW z6WCW~y-{EwPZZO3$PsDg4Mazfd-kBcTy)eD83&J{&}jpjsXW?4<*_!`5k(~(oWQFs z-yiMeJlfw$9$Xn(0c+5mv5R^xr4@U%5Y(Y%9#=^9B=4KHR+dMzG=@m&tVjFL#h;td zb?FI-erWb?0xqTH{ZonVdt1`rtE``s205ffKO+jhHzCbF_INTh+H$dDn!iI4vP>A#{~+&Q?e00000NkvXXu0mjf2ZZbH literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BB%8A-oracle.svg.png b/server/routers/bushou/images/60px-%E8%BB%8A-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..75c3945713b5a6ee9cef9c250a11f71ca5a58795 GIT binary patch literal 1566 zcmV+(2I2XMP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Urh<8v~Br{&Yc%KrXQ!#R> zH&nz6X6R(Yf+Aq4bhH%uYkT$wuRq@R*B{UewEytDf1T&N=X}rQxqP3)K{+S~Nbz&ZQqKUKLl*BH0QgWc&GgS&@&Q*n}=Jj;1IsPix?n!4W$oj`B!Iv=$ST1DyeT@01U`awVM2#TWYOaZjI%`}b9k0}8>#ft=iN!u=vL(*Q*uXS58V$C2)oN?4 zx5C!_nHC=typi?vCYY}&c77>yvN>9QH-Wd4^*GyAt5#s75k@#tqY7mXw{d>~H}3&> zm!y2*ivyDux6?NaWCvaK+WiBZhax4t4_p*6uU-dkOEa%t2L3Jzl)Vnz5OJ@)%OM^# zGS;qiXGcGtXpMh$kuqgV2#5Nq6I3Xbr`*qMG%MYArrZ2E8A1nZH$TfXliX~)(hmBo z1;LaIZKZ`;GqT)UvHm{_Dw9J-3$D&MrgQuw8r=#et}9KX;R`Cg?PkY%<{Kg)MtP>rfTw%CKnilyR4D# zZo@IhV*N}r4!78$%+acpqFt@SqVyQ{S(SV*pSfk1>rT+z>3X3n-#YI`+;y>;E>vZU z;O^Z=w%93VxWZb$R&2I%->FvMq^LM+uuhvX@&u1bA;(z9VVfGYxLlEEthB*Kb?P1K zS%>$6{0v+#9vt6kOGz()bmg z5MoBRLU38qsvA)c)?ie0Yjs$u9sP{Kg7g%%kdC@nYI0A9H>S2tPk+bDws!2{qc!S4+8 zpdh$EQ3$jPro}W@+a577kI7_I*J!-vff+9UBC}`}$`P z+~A^w<}6zTL9MxINwmQImNI=IF%Wf>#32puY{VIGR5#dZ&8)DZVL zKNI+VpCvftb-qnc&}?QFuCZQFl_fl!;3hBnT8*D)dD!SsK>We%3{9cQmTFP$*sSsA zbHTWt7hzX*`GN35A;G75O_uty)6uyH?_3?F&LW}r=`BUEz|gC5T2Bu8pd6F~DE|j+ zucu QRR91007*qoM6N<$f;8IH%K!iX literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BB%8A-seal.svg.png b/server/routers/bushou/images/60px-%E8%BB%8A-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e4922a760824498036cc99a3bc47911704cc11 GIT binary patch literal 1146 zcmV-=1cm#FP)M5MSB)J-?y zrh*6}q6eeg*m*DLU?ZinHRtg?H^%xFe1QF!D9ksB zGdPJE9LG6~#=c4UOxSU&D&NX4Vq2^#GZ-f@jRQD{qnL`y_3PXtGldbnhi~Hi%aVQ! zVhgUv4ty*qyg!{<)v`-4cuxx9DR${iu|AeScI5{5w)bNl^H|*ctmCZZhv6 zUcl+t|1TkyPR=WWLKAYgaWQtp{s&r||55o8f2|z_J5A>KyxC&^dt?7!TkPM1y>ZOG zC2Q9}Cyu3T`F_}9|I8QeU$j@w96pKdZCKypxCJR|a4!a;Qopn~CJX#mFG0?cLVIWl ztZO2p50Aw$Q%c70WuM{cLOV+U6q$;p z$e~#Of!|w@F@qmsd!LZ*X`8Z3`b?p{y~Q!d7Z}@&dtyDZgfRxua9f}+`d)rWlgp)cV)aTH+mAE<0-+nZrsV=mIn`w z8&IzhKR<|faken;b6wKCEqd^xu)#E*o3r>+a7un__-zc|3l7MraIqT4PvPn6Oj#PY z<0JemL{IHH7o$Ray~}(rt2Et8@nj6*D&f2x7B-;!gbOo=cjT#^apBn6E8ofg7d#+e z&XtoQO`Byp4knPD#Nf31=J=F764z$Wy{a&i)~A!SJwP$nF%v zQ|!`n4Rxi|23N?6F*u2#8TFE`fZE_HNn!A8LtQB;!^2Vu^>#^lhgXcjEA9^023JW6 zgHOl0@vUMdq%b&pp*^u^uP%|o;BjH6Ubg?C>;}Wq{9U4^rse|YA0K~g$b>#oSpWb4 M07*qoM6N<$f&f1@*#H0l literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BB%8A-silk.svg.png b/server/routers/bushou/images/60px-%E8%BB%8A-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2f664c1661884ce926559329b6489ebd23fa5e GIT binary patch literal 1337 zcmV-91;+Y`P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 bH8d+QFgh?WC2I;&00000NkvXXu0mjf_}Tj~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BE%9B-seal.svg.png b/server/routers/bushou/images/60px-%E8%BE%9B-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4e808bcf300a73309e4c5b367411bac4da3357 GIT binary patch literal 1152 zcmV-`1b_R9P)5P8uI=y+%tF1ojGUj*O_~V4jnoyXSy=J-+kDN4d{#V&tn>AF`J~*N&Y1M!5NI> zT$G;05qyjJjBU+?Ck4Z@J|4}=z^rSy8{4oI>#+`(VHGY(j#XHTUX-vJ0~iuo#idpE zJcSV)$il#^9nOmK3!>8GJ9KD(R+@AVHVXZ8ZE`-8q$Qz`4q7-`FUC0jP2}-nZf?(e6YcC$0PZx?95q69uC7Nk-VkBGFK((9FApbO#uuD!T)@cu1?YK z#>qtgr#ubItA?lWN+J*9sTBR47*6CbbFwLSO88!=wK?GhY{!~Nrw6y=sLFu#K-GP^ zEq&_Boeg#JH(TgT`Ir!*rRl2tBPvrzetFhLH_QEkv9Hy+J}i9NrA1JaxT~t{ z9ntk&8Qa}7djx}KRX*ve>BVlLZ+9(B0{0B;G-Pt+)XNMoxhZDXep{AaOtbr{zcYku?G zB=o~mmgeL*-Vwsc>X>?2&?EHk7lrw{)JA^SdzVnrK|&< z2X+E~Afs5%4=_yN>6M6i*{Gb9N#J@_?g^mPymy;^bx>+To!1F4%wEvRd_6*jyU&jB?`cMj(D#Vl&`=Y z$drwkF&#-t3$O*a-Lu_@PaSc;`&8h&ExAT_!3wt{4!2e2w;$P>dXX(=kkYkVjV4w9 zH;z0%d(`L6Af@Z)OW-o#EnozH?ObUMzl_{C^jUGOh=U+1H-jj&%-F0t`YvKQ%@QuG zOW;n5j)g~5+J38CH4Co{-zlv-RsdcDJ_4>qZX_ZzFuFgQ0{%963&0T74;xoleY;wv z?L(Ffc&=YazlNvH?-*_k>SCaJmeT_1caRZ|*q5-))A(v>E%0IA1{2b6z4xg!+kT$( ztvIc~N1VCRv)X!ZRcVtk?}_jgc$o@^2%N;Ky17D{J;L*`xnl5L!<{M|GNtuLvpEkr z_6=Ea6Dm(C-?Xp5`mizW%q14p!@&K>QEv>hIlPh*=bMz{-c zrQTx2tpjeXQ16zQ_+!8eDz2^q>k-xhF9F_1JRfP9LyVd|D&C&bdH|~8tF&|jT4_B> zZG=4l+=)zejXlENr@dN_u*(^L5}BHZkn`+uik*(qK$O!c@E!0mVp_Ve1@4W>6HD4P ztVcLHIu?-IiOHRs#03QQu~Q8T6cbtZg4(QtR|fop)fkpE_6Nr4(%tR=yArsa88 z`-|y=w;d4T;)%%0j!r^kZ7s+1UTU!lY+GMzeF~-#IIDw05^RCJyryXcK9HhpTI>Ua zb`Vs=S72LFohbre=Tp#E;1TOR_y(^A*#EKIh}>!YYQ47so3dDDZ+Gg$C`ExMNO%*PW?Rae9oG8_0!~hgjf;?-VgWg3 ohTKRlI@*DIasRWZ!T*wf0cRl2J;4?uv;Y7A07*qoM6N<$f`Z_WyZ`_I literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BE%B0-bronze.svg.png b/server/routers/bushou/images/60px-%E8%BE%B0-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..13822f46ce96679f35e2d9754c56792a46cd3d85 GIT binary patch literal 1312 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 IM6N<$g0~`z7XSbN literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E8%BE%B5-seal.svg.png b/server/routers/bushou/images/60px-%E8%BE%B5-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d1556576a9bbef1915858c074bd769c3b71e0543 GIT binary patch literal 1132 zcmV-y1e5!TP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0|N^Z8PbRH6Wj6Pox&QaS@0@$ixm-b>P#EiK zpGf#I|03q-)1x}nI8KzPus#38|M?x8W<&9Dte6erW2l-9;z1PW->295LFCsk^TZ5k z3e>1oW1*{6S*XfN3y|`1Zd9%Dh$i0~5M_CeSQq~0VOV6Ftv0)A(&&J{bm-EhL#wa+ zY=?w5<59W9la5G@tNPcM_IlKvmS((mfj*I4@erR&6OQ`Y^R_6NBA_D2<8iK6T<46V zzSSGB-UrrMJR8~WA(5V3hEt~V)vI%(2awDyal$h7>eN}4j^PXFvM0`P8pC{Rt+(E4 z%gw!LZrEWT+OI!O;zD=0*R57gs991@I<3{8TD3@OGZL@ElzB?ag!8G*K~LDEEUWeX z89OmUG-^*1c4_jUWm7m=I07lXBjmcJ0pkCmx*}eKVl|IP68+T$`RN7m2){ixjuPs7NGf zue&nJ)(gaMO&Xi$gooqs(J$=LfP`1A&Pu$0(%4NR$!RB^%V2AUwlU%Zlg4UAA`S7y z@kZ1K^w;MI?ViGj%hSK9&Ve3-sELnw4oU-vBW;(ooDuO5m&m>sr;oFt#YGtLaG+vR zgdHN`ibII2Y(R5-Nn!|vin7#Hh2uv@twuYQ8gVpUVoI_QH|j?5g#BpJ86RvOxqoAT)-?YTBv zq1qw~B$Q*mB2-waC~Y(1pl6-V*FC^oTf8>DBmH*g_Zp(aPR(iZx8v#=!?izSP$Y6F z=G*_Ej`25<$V>UZ`>FJq$mkTkbWTv@4Lxpl1+$O;0XnuDP+5x^e*gdgC3HntbYx+4 zWjbSWWnpw>05UK!I4v+UEif}wF)=zZI65*lD=;uRFfhw`#EAd^03~!qSaf7zbY(hi yZ)9m^c>ppnF*q$SGc7PPR539+F*rIhH7hVMIxsN0Bz!dh0000U-}<Jsxo5*5^HVFC!ljFh<0f1o;%DAnr*Rs;370>CU+{BQ zPP9Rvii-a;WybIh+#|x#1!6x-#NgqqK4A5Jwh@+aQjGUGvAFpNZ|mYXKPY_|+Nez7 zt};rO>EZo2BzmzK7Dca3V^)NsIbqB^{>r_(Q)E8Ia?j4-I(*rR(q*Y(A082zh~jea zxKMZx&J#<>X6eOi1-XxxRXi2j@xB$szDp!`41ee3KGCY66uYH7Gn#ktM)(oOa`!*9 z;TtV6DrVNyJv<`D`?B12Gk6QG5}W?K%;(D} znIeg|%%fIkFh}u0lXCjRjJ`X&=2^l^EoqmSz1Gf9q%H?LWzc`ok59GF$Vrh=c|n2* zkiw;(6pM?sm=OEjnL?S$)fckssjNPmd;W*|l~>ofUHyV!0Z)r0K(l8?o1U#AOOZGB z>aJ?kX7;HcYj1Q{oyI7$wA@p;Kepyun~X9BPZaK3*$H)=G6o-3f9%nYe|bnwnXoj8 zPee+V^ykDi@gpvme(?hzwc5KHrfeKOWX0es@z6T&^@_c6@j7hfJh&$EUqe=(ITzWl zOOxa_e5>=ht;afH+GFJcq002ovPDHLkV1nv9_rd@G literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%82%91-bronze.svg.png b/server/routers/bushou/images/60px-%E9%82%91-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a577843ed0b84fc86b5949ee8f52ff6d1dab703c GIT binary patch literal 1105 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~IDaRM{sMWbb5PV2<>3aSVw#{B~w^hOnbZn|<`JCD)7W3xm2BXe?^-*W&2Xc(nA(LXFUsc0U#15&D zq*-aT1u|vHmyV^R&;QfDVY21yzh!CX=U7@d{@>)`eCfwoj%Nlfa#k;wonLi3=7=a$ z#-f_V6Bqjg_s%_E+<9esUEa#(^x~dM(jd*EaD=rh@>E_{Mbqs9V|`6i z>1Zz=-rnjPk97{uI9Yd(v!o&NSyOozcfNnp`Ny*?9>=Yke#YzN8ks^K^^NT-mvBE= zFL+YmkC#k0yTx;DhWBS>U&+`lT=;Qn=?$TK|4I$7n4c|MZ+oeHe}FqHE8FYB%)K+K zbi90>cOLe-`&}Y0s_>!m^qXr0ufI%|Hb29!m|f}fpTTj-LaQET{RakS#< z>dO+xI&T%I8Fv}H-6Ck19jTMd%wW$cxM;e9Ez5_;hyB;@`nqFQaf9;WVc@j?>T1 z7)>}*^l;*PF}IzS8d=664ar+NZtdAo^HkyKqCD??2htbWOI~x6Dil)aS30%gfa0y$ zD?%T~Eobj|Fn^`jrZY1(Y%*1E-1l5zG5hJIm!|eQf7+|)B%XJtiSg}HP%eLdjsS;l!I?q1acff7Z^T=n~{oYK{DO*D?=$xul-H@-jkYvwh zU)czMnNQOGmUB9_m+or2HKSv0A&+X;e7-$le|bN}OTHEt+Ht(_!N%e)V7^l=ag8WR zNi0dVN-jzTQVd20h8DU8hPsAEAqFN^#^zQA=Gq1ZRt5%H|Lm@#Xvob^$xN%ntwDNm RTQ*PwgQu&X%Q~loCIEJc;06Ey literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%82%91-oracle.svg.png b/server/routers/bushou/images/60px-%E9%82%91-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..21302fbe3b3f7ab34fe934359c1af3c45bcb94b5 GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PnbD)&A6{JS1kp}d%8G=L>zuQ!#6|NQRI02>?6xUw=A7uwoyxTYm>-+sg+W# zk9=)7wc@5cIvc#!MPrfN9u8Ljst->#Hr*3(vFVt)XvM~li`{g*l7hTBZ*^V0axCSz z_pW14rgZ+k=KODYEq_|w=d`r@vn5w}dbGLC7TBxua!GSoO~s7#S>Y{`o2xfW56}=P zUeY0`=+we9UHkQs#f*6jR-PZ%o)AxN{+l4)CGkrCe$p+iw=V2+v=1JdCVF$N4CA~T^BtOOQs>EFF9-GBPE)I1-5DV- zliqLq;Cs%Jqnrgi&9UbiHoqxhn)B4zG@(}ax%kXYOqv288Es59c*@mGNLR4G8CQ47 zyGt?iL)oVvJN;s+RyFTQ?P}j5Jb|^`kgMm#`b~Njx`7XP<8LZ*#~qeP5L)Ujw5MZg zYp!VO?0Y+X`S&n2t1#$iE{f&5b4VqU;nIOD%MJZ554{<``Za71tIJ-+cIU)vr-c@W zH<)rT@@{Aq_#SX)Nu*IQ{|AQ2yT6)?K}(?4LBUh7HWZEMoj2~0e|cA{X@iV&56 zIg=Q^8z=64FO$?)Xjd5WsQlJhkB2XxN;vOPXqkOpNU*<%ui^5HI}7B@EqAFNDEwux zqa#T`{DJ$%IHoxZ`d2@(NL=dUI@#w)@R?2bH+?r;eLZk#{|YrVTbu1U_L`C(RLZ+H zG(Ff{qvNR|Z1mvaCLgh>`>b{6?31%*?)%&^>tFs~w(PajMItvaDFPFqYKdz^NlIc# zs#S7PDv)9@GB7gGH89pSum~|UwlX!bGBngSFt9Q(cvt&%ABu+D{FKbJO57UeEBG=2 PH86O(`njxgN@xNAfPY;b literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%82%91-seal.svg.png b/server/routers/bushou/images/60px-%E9%82%91-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cf36be1e788c98ff8e0144c256f2a0badab6718e GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^PnbD)&A6{JS1kp~&-HY142d}W_J)5)XsX2VkNt7_&A0AIUX(U-&h%T-;$pGd zX`%>=>I#8VF&ue1jv9r6DcyHOJ!WT!D(>hgcz8%a+>u-GSOAB%O3H;Z- zt9bu-k>WC&Q?^z2i(}8cFED#k8j5JNoW|K;4HvySot!j%W9AKHOV!qpR@YWS-OMhj^!kJa~IZbt%tj;jBZq z&+eWzoBNMUUC8+jS9libi&pSGvfE}Pweo=T3v>0umoi!Z`D{IA`;NofNQb>;*YZn8 zzlI-L(*Iw0e<-_Yi*seTZogG+x~yQLA`X zs_LJ3#`x+~$}GDZ%^bokrLLN{g(ddC+sPgLpG*z=rRI3=eaC&hWy9(p7hacz z?8q(s_+k^|Ll5g&&Ao?YyKi5d8Y8+*wEhdH`o?9l?R!6)M4Lr(|4ZIALxfMxHQo9^ z@>{0s8QUUrbuBW!<)64S?fo-1>jS-Iy*tcm#rgJSoce0A_j0r8L+Smqu0CG6d*9;c zvwoQHUIeCH)e_f;l9a@fRIB8oR3OD*WME{VYhbKvU=dbP0l+XkK*aVrv literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%85%89-ancient.svg.png b/server/routers/bushou/images/60px-%E9%85%89-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d938832bb12ed74fc6ce502d817b555bfa3c13 GIT binary patch literal 1129 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^4|(Jn7)>X?v(;r_U@r7@aSVw#{Pu=-#+^`+;~)Jm9h;Ih`^!YNt7c{!XNid~ zGM#eimY#^XlGrXS4%Z94i#S+yA2F}owL;qQ$ke7%^-BtmoWg?~S7dCQlC`vd!AzT5 zN49v*GCTil*NOR0{?GThHS^hj`Is+fUd=0hUibd}Iot2^tnX|yigXpM4a?ekbn&(f z5uS!bVKyHrqpTwv3~Q^tz9{kg?{rZ6?Y6^av%6;9TN7J!i*vvAyCo}sTIudP$l$!| zPi|+h8?SWHO|7+Mu9rF3LRR?JB%fmaf8ynY%k5dpFaKKHjumFH40vkl_+e`7th<4K z45q3!*OysD@y{sW{qtx=+2hEjpL{W$QQbmoeGaN8cb(>v(_@g+DxGjtHCcM^gkwSC z{Bf!C=WdIV-a7d~`JX2{?tfWUy>IQum8+c|eXbL!wtkrVePi|IL)T7nuCrcr*05Ia z(N~RMdG}hHwB`KS|IAaU$V{`|r^6A~bBmqz;Pr1=7qj;B9bB-?+@ab!rlJ&J<9b&?qtgBPM&wG*G3KD>IeP?evD@;u-*0fKx*KfhI2Q9{2#r0b8zc4 zp}oopLFU({{@AyRwZOTg^h^}{s;jBIanS;2eidoRT@J4+5I)Ck=&!fxh!LClW1mCC z+ibdKrw42<504ZvKg(FYd(PfRTCbn$nARsbZ+pNib~eyv?~U(AvR?BX`2Kj+Jf<#f z@5?pX4>otEG(Ap8zV^Vlc+Y;R-fz{%x<2QgF}yQf^+#h<*H1a?l(egAthc#b%($0% zoqhT!xA3qu49}6DLuGHQbxcK5?+tQ7zT%J9>t+($jwj5OsmALVN+t%BcKKbPgg&ebxsLQ0I7!nCjbBd literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%85%89-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%85%89-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5f13cc8e2368ed9611c7d10f71583c59b4ecde GIT binary patch literal 1244 zcmV<21S9*2P)Hv4f`WpAf`WpAf`WpA zf`S72dTl@qL%jnQS2JhjhOR+G5-K7kal@fjQ-DoZ-6>*Ez*vkLfU-5PT);P z+cKdF+-1rn(pKXhT0gK2c^E-Ro&~P4$nGQ>x?5AVI%l@gcI2lRnP-VQJO@0Ji**_B z1Z_v^z^$sj47`uMllmUmK|cLPVg`_*>TX~caDh%oW`HT+SKzXxUYAS2hrmRBZY<5y zz}G;NY=@=oc{vnEAMg(Ojm1}yUcG1RvKSQyVB}JG2)Wx&U4Y)%^|JXwkD8c>saj0`QQjn?S~H?evz^y;%k?DN{hGC{bsWDb`OU6IuW-E}#42@su8V9Pco4}>)K%R)@D=bPa4#|o zi{p|y9$nhZC`mFNaV#uRKZT@ZK!%|a+RMtM47y&Bro*;nUmO=raYZ{=aaG_G(sSxK zj}Anynp_fofS8lG7_#M zNUm#`l+r%Foz@)fEG4yJd)PQf=!llf4M604e7J$coT2}$yL>mt(Q9RucO|ecOOQ2^v&2E zKJBR2n}^9STd9ll+XerS)^9jZjwZRtH>7nN4%0yLRN->f)LlW+Lz)3(M=@Z?lu0@l z4o4E$n+h{TL+uoBAL-_sUZ69iZOOn~IHU}DJ7xV7NH#^Mf_lboWy~V*I`XZD4>tp^ zA-%nRyNMSPX@uQlz-N~8O=P?C2jq=RAwyIRnS+;*MMf1FeyYe<1GfYBARo=x*pKWj zwNkJ>5&ghP@)?RgAlj+*j7em|k%g0sNCZ8Qmov+yjC|H~n9dD0mr_T@*pG}p+vZzh zvf8RB(f)94EwZ>@g@k_xbh!T8})h1PB-)b0000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0tgf^EvcFci~s-xS4l)cR9M5snO$gHMHI(>Za#Li zo9^yil1)>s*-b-RLHZDFX|WW9U{Lxdz9?1%UqppIh?G7Qih`oPj63ds4~PP zi>x=_Am2wv=QE}EU37GGzHuic;_J)++LYcOL^~cHa3=s!rS~t<7QzEgiYrn}Ysvyb z0Nzq}t2adZci0-Y+5j(wea0&Ab!E$Mo5qHBx)By|M7aJ|8|PaI3pgQo?0|2D1-!+E z)39>gotRdSu-iE*Ir~WwAxfN1V(bZ?2qe)+qoI)|MVgfS-ODydiHl6|8_TS4jWtTF zDC0V#X5gI+agaf}(0p0Cd-{_dX5b=Sw<+0LMgwS(u{BQxov3B=D@-xL?_6Sn0uj<; zM{Y6B0xiKaq@+7Z_Flf;I`~<*zJRzb~jvRST&F1DsSwx*UMpEE><%%fq~D+$}wj-8<>OCEO|Q zh=;IPmbp{6Z{WLxg->~l$A-@RN`KY?IBGGi%l?3ODyFl|wZ=Ia2YdnVuQ9JaX*|xr zhE03i>S^gh-e#-3N-vqhTYc)6=9q8vsIh;h9^oBR)-cH`adu0GsB?;CAVHEO8e17K zImOE`wGkHCf}|0)Qu=Hq0m zPQZ<5m)NdPd^}_ef_K1Qxp5vHofS*H!--A_*rMO7@Rks8)Dzc`%uz@E0%y1^R_?yO z*Ulf(d5rkK{=-7VN3J=ZH+iiiK|Ifx5b~@`vznE#MVT1-BEx4_7Igup7N>8U$s&~&;R9BkHe z`YnD=;uRFfbv~ Rj!OUl002ovPDHLkV1h&CX;1(F literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%85%89-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E9%85%89-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f5af2210f1e6df40689d4882cb0c435e52d830 GIT binary patch literal 1196 zcmV;d1XKHoP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 wX=Zr$N&HU07*qoM6N<$f=A(>*Z=?k literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%85%89-slip.svg.png b/server/routers/bushou/images/60px-%E9%85%89-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..76d19b6868d651d3baebae19288981a9c96f784d GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^54ok-3{7_3$-cqBz&yp%#W5t}@Y@@)9aB<8*gwqQowxdO%IE)%94ajHlS32AxcUV2fAL(S`Em-b4LY4WeP zUC#S$_}V7+&25X_Z);xolz*|Au$aCyw`$iwBc*51@PJIi!-O>;|?O!1Y%<8ySbFn`Yd zxK!JzbDpr->?v~#?<5uLZaH*C@O87^&K}l_KeFXtTu)zQReCK_=InPV^=VW6*86Yy z5g0?bM;aTXJV^$&xt}@n&;q z_p1MID(5Zqcr@|L9XHK`3rrWMq*q?S!iIk@#+C8BSK)pY(|5%zacbQ`Q~&2YS9dIbQ&czQX5RYl!-@y} zr#%2 zUUO>?F!I@acjB7ork~8VWNA#j`E=dAfI}8*mx=8Bl^8!`#brnP9SWMuqV~7samK#7 zIyHY z^=4t8qSaZZSyxtFd{~@wY1XvPmy@r1-uyUY23JUA&dQ}?ojY@VPU_zKmRvRERCxF2 z#O(}EIAw*9wu!u01!dzfr3mWpZK6{`C3s;jD3FV^bsD=i6+*K>9I@)s-o z*pTpZ_vN1NqDpZSOH=iJEKNAPJtgGjq8MB57zyKB=`$Yj@k)gx9dOK*T6{IH+ADL% zF(vLZ=C{un=6z$H7A^Vro@U@3$@ju6x~uj)X*jsX@NfHf(^(IKuBeIJ=ub<(BVsr& zar3mEh#$8b6rY#AD2UqqIH*E#m6yJ|VH}Gd=gU9Bms1v2N^LHgbTzR5Yo6w*#QgyU zKKY_7xsnrWFRu_{xi79#JzwtN$DptBcbyo`Kj~SkEZxGlJ%8x|&x6}7h0df%*Jx>4 z#5gRjV9pR_`K>EmS`=*aQa3lSdH#o(gYk1%uRV6ZY*~IFQoPh_#xuFgMk#$!?|oM8 zpL0C>d?45FH(!$s1LvIfot(SnOv!fTY43Ii@!fpfaPQN8DNvq}O#S2kgZ=gV%Skb( zDyo24R<*=6q9i4;B-JXpC>2OC7#SFv>lzyB8kvO{m|2-vTA3PZ8yHv_7-*O+{Eng_ bH$NpatrE9}$ZSb(paup{S3j3^P6fR3V literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%87%86-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%87%86-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5f378d78c1775b08ee693974a0ea33afe3c82f GIT binary patch literal 1429 zcmV;G1#0?hStC5sqYfP+F&}xjtORSd^Y1)VS5NR8) zAcFOVisDNZAGBT|qN1RE5G;rn3W}&`DTW{-Rm4gw8Z6qTVyUT@S}?|>ZJIR4hn3;% zS+n|jO zOO-S#E8GB#5*C^R27$&3+LZ~`67^~h7y{;3(5_7I5K*By;46+pv0cCRZ9sJL|IuE!W`=s+A(QbU5;5?Gm;87Q$}XVA z!Cz0*@XIW`THqewFALu+ucxHL3#*8(r9T19F?Bv6YV^A?{3axx9=FuXAyHacyu6s` zSldqgTDq9%0}9HT0`1KMo(KL__4X2-CsIe_OhabF9|E&u>f8*B;O?4Jz}+5gHvzW; z8-R_#HAN{%h(5wy>N#Z0*>E=UFbYjTL3tTCH9OOb!&>q)@iGTz7Vrdxml#_a25!pE z{N$(wIuKDdbRjc!QlYwRK{6o6ESi9~uLjENd#Kdd(>Ip7_nr)7p^*i)+8feSq9f2-=b@>gw0jJ?kIuLbzX z()O3Y$q99MVL8#sWEyw@|7?Wm;mH`@XEU5VmTSGhK4ph3vr-Z|i3aY6fZG)BVkAxD z!jDG%5eKJ+{DVD=eTbZfgtULo@HY5}@WpIkH({~A16NwOKO;FU7lw>`{N~^^sX zE#}_lW_{ej(OuY;JxL5-!8?%g+6VL?W7&rGncoIrj)UVPcvPLAX9%ofNPEQ z>Czzaa)5=!8l{n@;427w^?-xtD|nxAd{MDRX{0H*+c+LU^2s)suSwzr4;#mGNNJ`{ zQ}A-*I0zp#PEc+7dKe^vD;a4Co(o)UoPY1&=^U7^hv66#+=F;8z%~a@?~IaoxXa2) zh_nQ+Hja-XuTyMD;^AHDyo>Ndtr(gKzdrdqhP#k(Kygb9w~lC@tg}>O)9~=EgqNDl zG2A2`oaMmMTN~J?dz|J~8qas?H?tt!Jj_ zH;gy}Eb^$M1)uIwX9ZC&_Y`4oNm!%|=<}?n1^cE}A0_-9NpBKk)4&5p5VVRas_?^qVTL;SMity`00000NkvXXu0mjfj0UDy literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%87%86-bronze.svg.png b/server/routers/bushou/images/60px-%E9%87%86-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..94649eea79d7f6eb93102cbb51a3918c6c4f8135 GIT binary patch literal 1100 zcmV-S1he~zP)4xps0wV;K?5#3RcjYQt@K#4_mBa6?JX>(b}$uBusXl*?E~}XST2(7?OpT zo%fw&lJ_!!8Z~NoU;vl~&IxQ=fyT+^=Z1YsNDF8cSY#(U5M@b#Dsq^q3PjuM|>=(ANhiF@j?Sd}9x;Pbu55bSEdW*14 zV?;fSIbBwbV4DV^or~Z~lc9^}9aGP&14QJgP?U8{i@;KzJpvZz}m6CwK;U4U9W`R$-()u#O$T32=+!6f=koER0aDQ(yhQARPyiwm?~qtq2%|n z5ZnwL01g2MQ8}$WTBcC5>KO1=U*o7C;%Lc#Z2@+p^65MUu#f18K&$4I)NTw zAL@Y_3cx68*ymA!#yl$FpF<7tpQya}2k;ko2Mi&P-7}?);-0#Y=FPKMmhu#*k&|iO zJPW~4yg&6b%^PPW_?uPtIgiAWm0-J9C4vV~8Ci2>+;OKJ=ttgL_D1|^f&C|Kdp?nO z7QTA;IB)|MeMxZb;lH}v>EKf+z65vZvR7!IRB(^jqX>KnHt$wPS*rkBuq1gflU%3R zqX>KnHYuNU@7NYxx*-sT**9DAu7~d)UKHBTgtRS(5!}uaefA~T^pbS5Ja5${g5T@1 z4i%p##+P6-@pKFAT?LO@^{NnThVn+Cy{lk*gK)L*9-;UWT+n6d_DvLaEG-c*>S!N{ zZ^4^{_8+Xe6Ct$H_bEGtLSVl66|Fz@lbY~4wR`vig)fL+ zgv*L9;5OmkgBO5XsN)rhN%ee%fLY)s@DL@i9Th{Hv~wHkWWckm9IR2J%J>He;^uAG SqZ_jVpGQzKc<-s|>rf{bU`?sMFsjw6b@F^p&S=e31J|x1jOILz*!nVHYLk_zrPdhjB zym%pB@E&*$JOM6{eYoU;gH%>E zReE&eZs?Ff0oa4fslG(_0%I*4wZzCg8et9Nq(uaH2YazqoYOjjO!= z;)6Xdz66kBqOK36_G_0Ox>x37l48=RRS9t>C@E z`PL_Jq~N3oZvk!r8w~vNg3-W7+}OOHz&lA;bZk>N1>8eJ5jbk-BVZTd)xeCvo}9p2 zDr_ynYk`GN6B3wWt;WaP~k-mL^L5_Y}9nMl|Rp5f9{95xBN zuSUNHz)J9f3>>+R^<3c;fQ_PUo~x|{PZxGk;Vc&R6NS@CdFlD47N_E1C0LHz9)%+# z{6gWZi?p?#P&KRs%bEGR!ja=#+g)59X{T-3R16;x)&yr6!!42agQ`7J;3LA{6pkFj z+GMmW!uec_Q*p2mTu*r_ii>a^;Y{97{7tC?mWcL!1K(mVQY)gbO~eVFL%4y~L3|FL zPx+J9z1m$H2p=mR9WkFZr+g3YtpEuxPg53xqj~pL3`dI5#^sDiyS-|U5|EeRCSiY3 z&Jz{HjJ0?3wE<~X+}Mzd@sB7PlY32gUIq?TUD^yeLsMEPwR&AeU=Ezok4FA zwi0|NIO5Pi`FmNKU|GO;ThYv8tEDm0)&$F&|Jai+xdo#OwREXqx#ZE8TwV&3&&oaM5k7{iuFiV*$TKz*Zm*cH zLRN}Ax^z2XUF_uvs1jKJlSdpnaZf)>fkSw#qDC-+{}BHGvZN5LdcS8300000NkvXX Hu0mjfXB88F literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%87%86-seal.svg.png b/server/routers/bushou/images/60px-%E9%87%86-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..1f076af02ff42cf5575220a84e05d3dce23a3726 GIT binary patch literal 1217 zcmV;y1U~zTP)mi90 zd{F4k9((8^dP{r=^1+Z2MNotUljtD^ifEv~f|x#D!h-zD8Z(`l#?!;vhrQ0eXPE^ohV4;3RMbm;fHFH=MW}0`3Bddc9L?M3EQ< zj*}Id0GEKJHO3W%Vc-H;p?83{fcxtUD;_7XLT7>ZfEBey6p^Q~VyA%@>kX$m3xGy} z|9!0BV_k_zF%aRJZvbx>_%|wh!tp%@{0yuQ9aKsT!E1rX3;Yi#`?}-X1FQyK2^~~Q z48bG7ssjH)WxIlxnB&%<5h-E_UJQ%^b3A@6c+&CRHOEIn2bB^-a03{`Kc5aM`#;Aw zWsa-x|HCQ~OE6?JshRQEU^6^K_FfN048e=c(I9TQV<;u%vU_z!HE`yP6g2rXD=^^RwZd*5oNfM1N=6OD%!;}h(gpHsdu z$1kgg6Q5;BfBYH#3|+>qhgawLR{;A8&hIG(k>;XEa8zQnmPKr$=1sb}70%rVY^HfB zI1drE5NR_T=5rcI$!k8uwv+dOzm;zqxDDJw9%hqf>=f`FFmBH23WsUlPww{XXeWVp zTGH3?&$HcNmg4!`OO+?#L&#Q)`z=9Q(hHDQQZ{ey^cOB^%i zH>5$Ctq^C>nFh+Be;XY)3cixWy=Oe}yjR_=!?*8%%WHY?P z@uze2{@4MAWCK>v8prn>S;6kKn08?k^hhraA}Yl#SzXdIG%qC5K6)+9_jeFt2;OOq z*U0WsL00fI&74>E-heShV=nL)QkLU6{vFtIzLDb}L8hC;Tqk%N8al(jd^3@-+@7&}2$G%l@58e~;;!Po=9%R!=37YxNN?4H(-z@Ir|%9J#~N6LP!Vq6(Q z3Vv4EUwOvpdDoX=fQv{I03Lza$ttW)F0 zT3mA!se%OgM?D-O&`=rPrR*QD<>*p2!ys$ki^d)V4s;e;mQaFq|NL>mIK4|zWYS@&zk_a@ z5GB1+*{yaG+qs8RP6NLhdnpy$%@Be&nB!&OREx2C?k&5gJcDctr$qbFT3OyjGPkG1 z*a1Xn0-S5(Gv*`ZoFHrL+P`;dXWcr91b(K?&p3$O24~wmuXfUXtJ8IScpclJUjR3e f#eSbYeX8+4o}eReE*$Rx00000NkvXXu0mjfgNZ*j literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%87%8C-seal.svg.png b/server/routers/bushou/images/60px-%E9%87%8C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3222d116694e24f8c1ae805e63b8e68179d9931d GIT binary patch literal 1260 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 Y|3E6|@9{Q|L;wH)07*qoM6N<$g0UG@LI3~& literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%87%91-bronze.svg.png b/server/routers/bushou/images/60px-%E9%87%91-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..03a5fd560528448a7ed80fe101cec7a2b37d17ab GIT binary patch literal 1092 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%96%80-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E9%96%80-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5a78686d91c9374a22a69c493e2717c700763896 GIT binary patch literal 1223 zcmV;&1UUPNP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1_cv26eajkRR913&q+iuJrN3JoO zBjIOmQ`T>vAtB+1+^}a!NciT3&eYxm;B;=_3jkDf@G$^R<_3NrfGr)or|=88V9Trk zu$kT{^d9Z1c7^ScK0U)3R;U8glz@;nb=rh9iCI<>w{-B1YL`aBzRgV*9p3v_2RBrE znXlNVNtYJS2x$`&5ff2kgTF2Q_{0e-Dn7vpp<}{5E^$}8?>k{5ns%^kW2|w5<8%k^ z7ghTcSJ-9(0FNrO>iV43tfNifCu~q=iV1w6%#;RSWPv9Z@VES99Po$3!PmJs(CPUQ zDlG9G9|16D1vf07I@TXy6WG%_b*Te&9`YrR7zgIHcZwWw=H1V)m7CV!qqj=)!`6u{jiGX59sQ&pf)9NF*CQ_!EUY&q~ww( zlo>q6w5T}ULWYuJ+1WK?a!sr61o?sMB)}YF#!4;6c%Rr*t6#YKH#)uiYp5c)s|sq1 zE(Hqseak@#zR0Jv2-szZ76C2lv23=HQ}##}yqGyv%)kij?ttod)gCfnSs(Q9Q}J4u@s>r-v!-*um0@+##Svn+7$m z53FAe75zVmh^P}0u|r5igMimu6~iUA=+IK2h?pG`VNiEi2c|eBdZ}%H^!!*c>HTE6 z+BCORPwD#1u6WC7MK)>qfR9<@I29^X@u=Ww2eN|VDY_&iymLh7c|J?5@`X}-&aSw_ zW0tkDGP*TsW)>Zxa>4x^&N162R}X@30DJ1dAy;rgD-7qkmHm%B0*g$pei>Ha83_ri zlB@HuJ$@Gt-*U7yHu#lS_W#&_-f%e@#V;O%0000bbVXQnWMOn=I%9HWVRU5xGB7bX zEig7MFf~*$IXX2rIx#sbFfckWF!Y?ZA^-pYC3HntbYx+4WjbwdWNBu305UK!I4v+X lEig4yF*!OlH##vnD=;uRFffI|4xRu2002ovPDHLkV1jXUAcg<{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%96%80-bronze.svg.png b/server/routers/bushou/images/60px-%E9%96%80-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd947d8d4b9ca46a1ec16030267abe08564fbc5 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k62j6td*A3n;&IhV6O0VaSVw#{C0+~M@XPZgMIxm8SlxOe>#gcEQ%KwY`LHo z71EuR9FQ9&%C@s3jMYh3DI<7`Ml_3~z?RMhz5+`YgoJc+h#DTzs6XU&a{kQ1QzvgP zvcCTP-X3e?@8?1|=0)B)J+u5>`8nI~&-bu?h3U}IrASQ=b!uOJY!g>AdX2ll(nt^022USST%|* zP_g*fGq*kq1I7>j$sqdamqUn@u&1{@e=cUyX@cPD_TLqj`r`ZQhlrL~$_B&=ibJ5BVThCV?xj*$; zc-u<7llm2UPYZPZn+u9-_#R4MH9c^t4A+dj9QBIq<2{qPmEYnRru@0vUWy0 z!y~nP&$w+)N!wk1)LC(`)ooX;*_6b-blKJ0+WmG_9M!m>aPZvhGxoWHyI1y|{w5VJ zv;2zFxnw)Nuo(^9#x6Dw4lUYtc?rM89R7ls;{AHbG zyJjY__P#n~FiCfl#a^U(fU$2{f{n~?#CGH(^GR30ncQ$yRJy7WXFi-Drnc#CixlP>_X3tm3{fZal zzwIh>`crmC+`dzWJO>4L&VK89A=UV*^1MUG+~jV%{JFT*;ms2{z-mno z$F6_Op@Jed6+&N?;#gi@T-{Ocpx?wLS2gJuJBM8NiWh-`N4pYc-AcNZa@+U1vw7yX z<345S>SveoJ8hb|{rAoHv%h~k%l9U#J$Hurn$NTD_%+Xe^ypEM?$ywB9p|^R{GWaA z`$v%*ifJc5O#N=;a6#){c|F$$3&{khbv`V5OBm$Y9wclExPH)c^68Wbi+e7dXFPX$ z$xFs)pMpL^zv4+b2|AbUJ{0R+R+cfnav=E(!-b>wmIY2{jr(xXde?)*+-Vw>^Ig4s z3|I2WJ=%64xn*_l?S{y_AijzoBhA^emOs?>H%c|WQRDZS$ehJ{-}eAtVsP6p>&pu_ z-j`u|Gc7gq#N~LtzFmgw4PTc@<}+Ie3(xVKb@f$O?tPi}2`kKN61=BBTE!BRoxWl< z=kp!j;VV+RdKoHKA9Age5}nQXVHtzZZqeOMX^WQZc$T_0V&hxp?BJN|IY&9Rt}gC- zJyk}0PK9KSriPi)r0j-rUpd=|0}Wo~tC~0a1TJuBw5!q#STOw|$I-}RU$-2!vN%2` z;m-OUM;;%$*!BIjUiuYhT{HU~XBJO5u4-Da*Z0pNkBLgB|0GY<(zZ#tz+R@XW!oJ; zC+E_ruHAj9Q~Si=CF{3|PdOO86_4`&I9-?j^`fub<ECnwEyk36tL7%(R~h*g8+@jk<_ABLTRtQIQ_azIhEq8VX4&_cGNvW3 zos~SLxAOLi>(0uH&vcptHiCL`T4H}Kn)C@u6{1-oD!M*TaSVw#{Pz0k{41d%2R{18U(Q_4A|QWdTXPAcSI?{t zZPSkRz0#?PCQd2&i@1IM@Mqo0GRd3BTc{|}qi4{?85mH|n84$^qHzoJO3eh%*I&LC zUzFc}#z)(@xc+h<=NwP9@AH2DxL5qn^7}u%@|3AdbTh6*J@2uYf8~DZ)%evL@5Cz2 zSKYeYW#7v3u4@V(4xdolDt=+N)q}OE%JRqUzxrK_yZlIQ>tVCmISygdq3_I7bwjM&U?2^QOq@=jc+ z`s=aM@5i64CZ5>0>Dz9e?ivBPtKUyNe69Mc(nnqFaPOvXoa~PlaI-u=xK!%EW>H(W zjcPV?uQk0s@xoj|fBpT2x2g{~-k4CGHFrhNj!pzb-Od?6xYys?W6uvC+=J## z{5bD$)ZOLh|Ni<~b#>a82Y>yhWX|7kuPNAbz9IjO23FSA2>dIRDZY|rstv1nxqH&+s?mexu?fAh|y>ojXK1g>_ z%9l3DD6Z-IJKZMfgy&JA580Wqu>}j;T;~Xiq3bh9enzQ`# zKc)om`Rjg;+>`ZST|q(lpD>Xvr*9S%@c+weJGwKi@vyGn%U5@DpTCOPeCg%4+mGL+ zHL5osoP70O>UOsOJ>8BE?i-5zvwOEuy&z?K@w_tkfBc{HFYn}={I0gq37CacOI#yL zQW8s2t&)pUffR$0fuV)2fr+kxX^4@rm5HU5p}Dq!ft7)QXI?r`J(7mp{FKbJO57SO SjPLIO>F{**b6Mw<&;$U8gx>!E literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%96%80-silk.svg.png b/server/routers/bushou/images/60px-%E9%96%80-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..41d49e0779edcbbc896a9bc3b3042e3ae6081834 GIT binary patch literal 1437 zcmV;O1!DS%P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%98%9C-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%98%9C-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..fa3971db6ab42c51611e6545fbb3314a595c28a7 GIT binary patch literal 1175 zcmV;I1Zew-P)5g;kraue6$g?N zazrVI9C1J#C{apjB*Fp3k<8}*-^|b0XtS|7xWBK>_dU_GlB8ISfC0Ro%OfBfkxmp@CvvMTmn8sY@-tsfX%=u;62do zD4oD@a{oDrQUI(6YJo1?oixc^U`$*N1+fZvLNrchOD*!xb;4x~Zvsx_VZ#%YcnQae$89z+sKCu2ci<*ju9wxB%<~76auW^-c%s0`&d>Ci!wA9}Wf> zv=1nA&|LvMwdn5#jydR7bKPJ_2e8DG{>9iQz;okU~yQDWDSBOiTlY zg{bQ+a7SyXc5C?!D9I{o1X_SrdYmi+hHH&8@Bx^E|M{X%nu+JY&|6x8MR7Q1!pB)R zth56ck(PBvJBHg0W#^IIk%qP`ovlds{fL~hO!dXeLvmYUPofruM7s{Rd9@-&v<@fU z#k35xa7g}Hhqbe`i^D^KB4krioR%Uat~ILH=h4XKCiA%jiGQs_!nZ1XE=#MCxOB#e zQhJOnMjR|c9Cl#~350o$5&uprBQFWJ=Qi>$j^W9`Htmbl;q2e0gi^W!3+Dbcez`@R$vDDn}P~pIdA}phMMY`t2aM?c3F(51BQ66>yV|c z8jUjT82)Z4zlOt-Vd1u=e3nL;*5MzP@)o7OAbwlQt2D}dw{R4*ceSNlwKVx|;Vz}V zAeLIne`=KZZeib40&6YL-f9%~XNQZC`)6C%tHEleSdGh7OEWU|dh-s6S!?J( z=7uidYg(Gq`Wn*mT&dd&_sDI5y-6Ar2AAv7W^Y!+$biFn@YztN4!y*Mi^J~>Wt9&4 zV!_2>(`@W3Pb)HfxA070frHL|%{ni}J-ByOvz;?pj zG?pXr=E+DVPv-X&J+~J_({*(MUywWMD@gXe?evy|tHW0aJ`UC+Dg2qVrb1vM;?z_m zd@~go>0mQJQL!618P;IeOuVbewTCUT7#FS=ba}HJi7_S7y3df; zg<_`!xf*H8!&t2}A@4NpAU8oSkSJc%DnN3o<|8SEQ_?@nkXd#(lBrjku0K0v=_@@M peJx1((rcs#y#XE|SEd7m;SUPVQC3qWAJ6~*002ovPDHLkV1ffGE<^wT literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%98%9C-oracle.svg.png b/server/routers/bushou/images/60px-%E9%98%9C-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..84adf080e9d89c24388681ff4696f59f3e247694 GIT binary patch literal 962 zcmV;z13mnSP)`DV^3{6~xo&_?f6fKNbKSUG;F14hw? zBVa*LMIOljH_=9a#pSAyqI_}^ZMF+-etSq!zSxSsqtAgX&>4R|ASGgo(C;h;&Y}jV zQJ@7FG2-)ubch(P0WJZvfuFz*)RbhB70?057(M|s#OKF=4o97N0y;!!0LD@M^cMMl z;9MW>mJ;Oq4(~%{RRD)jgO-buY0@j>vLCqZi03k_S)O%F;M?%jxO`L~UJ;iwJnNXi zx8cWexfV4_C#j6fDgiAbY(ZyM=N$1~BR*45mp96RLA0seiTHpKtCN-Hk4(7=s>N9b7T_n8bK{$WKel?o@Zl#A4k(tC~bBf!JI z{9bAYtzlFXeMY9ctJn8XH3%Xx^2UZuUdj~r?sVGwSpXMIg#7hd#!)Cn*p?um0P1rk>mvO&~ z)rW1kN=l#)+Of?Xb<`P1)JgTuWd-V~f3cm(!9+au57cV0O^pMsM*J1FVb=m9bu2_Z zPck2mLL0CC5^q>u2kodvS>reBg(yPH# k2vQHc1&&kV|Jf3Z->d5lG$FIZumAu607*qoM6N<$g5s;Y{{R30 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%98%9C-seal.svg.png b/server/routers/bushou/images/60px-%E9%98%9C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e08a56ea0c950c52d729bf5a9d29c4f510daa267 GIT binary patch literal 1198 zcmV;f1X25mP)hK?9R+sO$5Le(roR1aR=gO>|i~g()<5xU}ce|{!W0v7= zyoT*Kj;R^8Z@aF#18%|xI&-kt{=y@X!s>XWpTMJSZ12NX{3bawTKLTSV>pCC4Ar17 zl(kMArOkK%7xz$CEzFiiFL(4P?(M0fnz==JWS{P>ocdX(?C{mSl~X?-YdAZJ1-+Hi znz@0tRuuY2@Q~#6qO2`IALe5T&d&NLV;qMwd&Bq$F9&L_#4gqL-08HDsv;vtcwwNe zoWposTK$IvL|u^%w|hK~Nsr^-Qb2JO2b<2BBgNF0HGO|OJ`B_t%BXU%aVrMQESlR~ zu(2mvU^F8dV%K(X{W9qh&TV`dC#}KkKwDFV{=OMrJAn1dTiMRaidqmkhl>v1fXlOf zzWvO@Vl36jdHb*&m$tC?W}voO7!tSrJlAFI9r3$rP9DPBxVcV|k&pC|rsF~UAuUAX zI3R6N$FX19nueu+sIB-hJNLAqm>RC@v6i;X3AA;ewA#XiG=c-tA~i3&*TO=Z2)y^S zi7fGK!u3J6@_JTIoKNQnaF@c-?#DJf z->E?Ab9f8hQm#mjN)^fd(uzIq#3W*Ac1=Fj_DIFQu_%#|4i^`pop`(h8Sb9{2q$hHO#{+FOGltLbIo?pNpUsGFJ3J{>IfkTa$goCY zkQeFi#Epe(Ucvo>Ld?46@HT0M-i<#CZAdEdoQ%E74nOG>O&*GI`8U$fjjGzAV*dMY z#;Y)|(63TDx~|YaB6$Cf9N}{c{rdfGk-)ECZrvHR`UQf3uOT_fBHQ`jLD12;+u#AH=b%|tqUve7s! zZArVOy>~Ec`98c0KS_J>X+!b-@Mfu8vs#+3XB>-_=ifcOmD8T6eRx&V@fSgM!-;aZ z_=@Eieh#u5PL#uI3jG~=^rCD!)Zy@!Ae*%i;qXf7|1soz6=1VAA{@R=xdO2%z~(8< z2953LxN;J4MzT}G;rDy2r7IkioSncmJ=W3{UXb47-qC9z|I>nh093rBs6a512><{9 M07*qoM6N<$f~iSg`v3p{ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9A%B6-seal.svg.png b/server/routers/bushou/images/60px-%E9%9A%B6-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4ed90c8284ee850abbf896fe559cca1968bda4 GIT binary patch literal 1063 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 m-XH>m_mro7h8bpvdGv}Py zbIy+ag?X9vU$cKdX05f?`u~SEZQ8WSXDqJ36Ig|9=)wVfh)ae}S~-lyOf1CbIEe0? z>o6V|5~YLSD9pw({2||9mg$QsSKUuKFbm7EPjO>!;j5Ik<<-hBP7QOgS^wYUZj9-9 z&TWad&6PRm2cw0BCd<$^EWpLM6l+srJ`slR?8N==D)dp9$@pHc$b-W0Tr8NVCE`cn zWyRk9o6VO$aE|M_k_OYL;W>R9p4}9sLqrYhWt-iK5mgB3sNzTTn#y8{uo-DORT-X% z>vP)oRivZobl_1Ol0Scc$1Ovou{0)OjqDA`j~cg~@8I~M5Ia~p@w4nVS|8q%@LrN`OMFEhjZYIX-{8oq1P_L(*du?wZb|8PjBs>}#;w88&6hkl-WT76 z-HmgxBXa-ijJ_kWNSNRC*l%%Gb0rU)^TglK;z--G;wJLAS~z6X%XPty~kv@loghC~|v7#&!H+(~+?c+q-$pxM_5|7~TNWYITu{_Cx;{|b3 zYlRhfhWNbf7LouL7JTkBd=}}u9jBG3d%)bUaYf!Q?2)rp?A186z_UAWuio_04xCu7 z{Qh$S{#ESk8@&$To`SzIQCJK&;noth516I;Hn<*pQ|>R-oBnAT&ek|zqu0|taifH{ zx+~GXLD+7#6f0#Lo|=dqFQj&oJFzKMi7kU^vgh(ODe*NtnTY!VXI3G$ERqK5*C9NZ z(dY3*>`sj%V%RcHJiD2^mPk(kE=a^}*FwX4I{uMu`W5M0#rfh3-zFT}e7WT?M}B%| zrBIhja))>}WVNu>YzeLvHWyi@*9kf9Bv*+i5*Aei zye@wSwi}nH^qVUDH+KsKw_$Ze%wxW|!L4{hywrM7ID{mbAQacTaX}Sg%V4g!;d&l= zf>3*kuFTJCT%^Weg%%ptbHxqcnP{IOp8I-9v0~k@<#utyFQ&wd!>f^)d6lVa0!hPr zaYRP!UBX}4hH9iWhj|)T=9_ZjC*#HnbTy6pG#cI_7^{q`%B6()ndA(7fm5myQKjLr z8TY5)-JJGPsnT#>o#-6ArUE^~#V{co@^BSGs$zxsg7p&~692&MknnlL|AOe(0A0dK zh;SZ`Ci3>+^q~+~Hqmm)+ljUj;<>6kDG-d84ox(KO*(^bA+O%ms{sTW{ V|J>SRtU3Sy002ovPDHLkV1lrgMz8q@_GX{8*ZRJ*zV)r|TWd4I2qPrmVr;^7?G~ggUPK>$!KgAjF151)vntnZhCco_%e%DsUF!g(#nHr2|%gZb?cwi#yPIqZ`wvH@4rsoRYwu%l4-AYN1Q zvUNC2#8cQK7ydikfX+g_W3Z@l&6tEIRgd<+cnD)#E%;FB#BJ!23)_oZR4bbCY^Bcg zHP7c^r~Y&NUF};&`*9{d)nCXJ4c_@oK7tc44J)y?PCHqdRkx**xk(5;kdPnaPE4

%6;ABoIZV?{A%`%`;UVV)lwitjKJ+ zBDKF2xd^X_Wo>zSG1Kva-19E3^ZR1C!WWb$R%LKG3fC#li>Bdw+>39;h!^{tj>qKA><*FK*RmIX3-dmZP|jp5k(=SNLFz6m)IF`m za#fMiq_3%54`THob=wv-rBpcEja)BwDH<`Qa9?V6lxhx75_`*|#C%&PqNCj+;@VWX z?h)D3Jvg=U?pGp#SS_}3_a>65E~ym0QpCQ^vQHen{8PE^5`Wf5V*9pfQUxBxQ-XtH zANuz?^}57bJ$Zn3#t3W4%zU@-`rFconNH!eD%T%yl~|Sr;zaRhWY)Dxd=bziMwp1Q zHdn60k}t&)bEp|j@knJstAuJ59b(S);gUmqXNz3nQoVGFWvN>p_SKuW^~gN&W)Ulw zMhb5eU9Jh?e8R`c*V?^SyWRQNg zixbBO@cH2in^NH)aan_U9b%48sg&%#yHcjq{NAnFgHIIk`WnMT;SGb->l3EAbqH;b z7S@rG<;aIk3WaA@uA36HRm*;fm#t=(r7rnW)YD{JrO>RxC&?YrP)xOLG^=pYLvLxa ztx`xa!WqMQ|2U&rg=ZA*H#XT;DKx8a_UZ3V36u0zlEO<9TQL6%t`^%lN7V-@BaCna Z@gH%rVto%nnUDYg002ovPDHLkV1io8Z*Bkp literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9B%A8-ancient.svg.png b/server/routers/bushou/images/60px-%E9%9B%A8-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e4419732bab0b40ffa4629fdb241df7b21009f66 GIT binary patch literal 1677 zcmV;826Fj{P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Tv569Lbsw&Hw-fl}SWFR9M69*l&>4RT;qX&%G=c z7F^gRmiSkQ5TJr!N=_kZ)+A|Zh*L79Ib}LHIyu%fQ!i|$sTbw+=Z(XZ)}%E}Ogd&x zj^$vsDo7!zD49qg$im_R3+!e2xBPl>pFQ5Sy1VS}PQLN%i#_-G-Fv?0dCv3i{CH>l zpGINO-<;_~=9y`dR-={BoPK@S0bM$5^sL`GP_NB3xXC8jApZ{giShNoo?}Bz&?XPt z>_k7=Mx*nZdcHMAfo_j^)oz_Sb=jrUAq^hXZ8^qU;d~vg@-A?vujkYEUYX1`|I%T0 zlK#bQvE|EUZVc&TmMB^31(|YeV2ER^vP{`jO}5zX-63Bo^Ib4qrX!@QbeV`7Winr` zy>zkW(@z_PpLyLOtGve#L%suFb6OnL1e3vjV|@XC1|Q7>J|Fx6bl@{af)gldq3SbT zn1aoAVqP9_CwLVcLxU0EI6AeX5qs@R;K~+W#<)D-%ITd<;8!9!^w{rOy=bz>vcSEj zH_W_az?C%&0^DjVj^JA%Z!^apu*F&ShIE5v9tQgc4%ESDJOh;7<~JeV5?C$`Gs8bU z6tm+42h3o=mH6G6u-xV5nBC!*Nw@DfJ!U6JcE|xf8#Mb-lJ~ePJf6?_d@3VrwWb5? z$OGoe>A{dz8BI-*bZ9qgLhYfkGVgjGyK+bV4Z~?3G;r;Nxvs-(2=h?t(18N1qZB3 z(kqiEzZtFHm$@TtH}lE*n0kUSeww7K!wO_>hP7o(SFi%(Wiq$t)3`A-{`V1BbsxA=)_I`6VmIwQ7^A87gc{K3f4ToBu8ikj7(A3UbtCQ24W>o*e*BXhn;twrRy>fyJ#$jW8suaI%349{zaRpq|m`;0FUT~|D1JOBF`s=dS60Y3O z=))8exIJ3jA%myj#T3V<<8Lw)j7nYAu;{LjD<|+yEXWJqm_ALzlMzgXeq$}Q#z#GD>Tt~XXRHAuTN)}teU@hVgvW%eKui|GRr#9rFij$8s(3A`gX* zm-(vIZ@Jp^fnRbo!hdYi^# z?~J#5{2OU~uvj{>6W;&;03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SF)cDOR539+H8(mk zI4dwPIxsNhoQmN9001R)MObuXVRU6WZEs|0W_bWIFflkSFflDMGE^}!IyE;sGB_(R XFgh?Wl)*Ax00000NkvXXu0mjf*SaFm literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9B%A8-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%9B%A8-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b78aa7b6625c19783f5106827c7fe829d2892c9c GIT binary patch literal 1492 zcmV;_1uOcAP)8(iE))tb(X${EQ%C6^)SxzaqxO zkU&gKBqkaYo)sQ^Fe>p4Kf$Pp@xcZnJoumzL?(EF$g(|A3qKYc2IAc&4$GN8g^MM6G8_)t=2FwP|_4Gdm zbODEeUxD4gPTToW@GxKimCN}GZE^}Qb1(+0MK z-0Yd_1;oL9hWyi9m}NdSlcb7Rh1--KP}&8&hb;9C$i6n%2HXq`0ed}jeW_0f)09rh zDlEh++@jPdb_#errT^}TZyC!*$vi1$Fwm%UAaWjqT4WVmgm54_zrl(!>a*yAYObgaE`;Tv-(vGClSxN(rVjC5+qz}wYMTptb{~huHXwvymSxc z#@M91k7ERmv2ZPk73^f-F{K40LNYj^55Q~4Kg-6?KnIdAJj_TB527qYS~#!eVJo~I zxCaR_f3n*DLc-7nr`=!>|M_cBafR)3)mHdreSC;X^^C7t>Pe1~=PhCW zwc2f=FSptUC>Oi{bSnRI%2&-(%G(tqbY6RSNa-+eP~W#8M~%Thh?PzOFH(Lim5}8A zI$)VKr$L|RyJJRPUfM)j!${%oLZldH;}Fni*fXX9@zB0}7vLpEW?n9elvgyzgcya* zO~7wXy9qXCd&bOAzAsk>sfpd4^384{OFVg4_!p<$2;?ioU#xUSiac!r9#mN2W~Hu$ zr#RHcB}&sAPg4r7NK*O8gcyZQHRF4y-6-m-b6ush-@_~D(-&Z_WTN`1Mhv9P-jOV)cRY3WjWO@QBttb%6XzH|}& z$f9r~a0{|5eF_^3yT`}x)_dqIH5Lp7CLkB&kd%YRge(f*j_luUlqczsI4gG_+Q(OG zVD4{~E@tG<9c;XUWKNkJR~CiM{`Fm#Kyt>q0_`VpItv41zd=^cRN&4)pKipu9jBEv zCv*TGrtsGw`}Hdi?_K3>PZ|G?_IWd_fO(^dbPu_Vj?{0u_6#3N;i1YJd82J?e$Z3!( z#zSF9e)DmghxdWfw0L+kV&Qpt3I*e*@J^*I9^O_YqVgSS20s9=BZ0*5Fi0000Gr6_^ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9B%A8-bronze.svg.png b/server/routers/bushou/images/60px-%E9%9B%A8-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4d36f721a0f24411c1c0ef05493f4756790a4939 GIT binary patch literal 1296 zcmV+r1@HQaP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Tv4$FRYK;y#N3N7)eAyR9M69m|tvDbri=xw`;d` z%b)|DlXY`4NRSvM8d1js@kPu6%6u4xhs6hC;seAOG*L5y(HCN348a&4z!);4CMG(} z;)=RNam4^?fC7%8?bHcd+m)7XLfiZEp+7GDcQ0-4ZJ+wR554Di&adC!IluEe_uLCL zR0&E6mVInvJ#91raU#TtbBzcQt`Z@_JbwOU#_A;=L=<&Jc+**h%K-Qbd7R-gphQbF2#|57Nm}T)43FAB!ZJBS?@d1c_IM_#TFMj%EXk1+H+J zIcB-cEYtkTv=uQqP-Nk_b*YTA)~v^M%+Lk|_%Wj}xM-r6WdMW-5C%F}NrPrF%YB5+ z`1`2z;@LdSUIc;wjoOHfwG8rwoUzSZpob6$qB!z2FC!3qQeaM+dZ+Op+ipYL3&0r? zQtr}bECIk@V9tI3TFntZ1b|OU!vyd%2tW$}e@RU%BfQ5_0L~UeY>d0*e(jbim6pB+ zU>^d(7HPR1f#5|c1rdB?#^WCOI|)F96Tl2F0mxndM_P0Oa94)CsZg)XB8EX;VLej- z)B|Y!#@|4KGa2@G7!%tKwds?Zn*`cvHmc&rp-vx}Ukd6Rz@pB)NkB37*;a(d`owzO)f6hQx_sge17an| zV`s+wA^~&6-GG`wyoN`#djVN{_yf~y)+C=f;^n}3qEdQ|)BMcqI>c@|dEY8xJ8)c+ zcHuzDYF)2o+#d&Ansg3WRX%Ydi+Cpq<~X3^@jj9no8rq_M#&gKXk{~9yKfc3VFZV= ztlcsh)2a6=-;F$A<*{sb)gf^X^#nhja zamB~-lJAAxxVX3O#wJsi%qA}`f6Py z<-0{vSY4TPG2VFHZR=p8%%@?`C05bRa@lvndG&>-d=`az^v=2swueOz_lj<%{r2C) zp4?%H$79V(0H-isX^45|2{W%m)k7AA+Pm0$gss%0a+Rq3gxJM8Af)!&LxjS?fmDTR z>uAHCtVHyD=n)=q^aJZ3dpYR4o-^<`fcjav#AP0*vHN)d@OzI{mH6{IWj_jtgXPpL z6X!VbF&lx2)Vt;9OvxU5HY83l0Gt&4dHY_eTJ2fK5dA2?r((yZxS3N@WT=mJ@wB=< zoykm!-J6b7rSbPW96q*sUA0QPK@xS_k05UK!I4v+SEiy7xF)=zbFgi3hD=;uRFfiZJBDDYj03~!q zSaf7zbY(hiZ)9m^c>ppnF*q$SF)cDOR539+GcYC2}(aqJ48wZ?zqhP!}{pa z3#}b59=&+-=#`$uj+goud_@i}-SJYTF4wPX(N!<|Nnflql8#pUO)|?px@YdBIo0#_ zJeRw4N4g_aeQU(IDp{L zC*S=sPr>Pv*FOfku5s>5-PPoGP>9WWyTs=9ME9N@o2~sim}5U?F==!P&a=63uf*y` zCX2<&rq}~4?9(-`@4vF^K8N?(#>s(=d(%qSoG(1_EX!l%|McQe`{RO5rN@_jD}M8S z;?Hoe-t+7o(b>oI7Ry*WEPQ2I$9peE^}(t3$9p6SbNAOuTXdhE#Eua)DsvOUBMdO|L_ z_$u?64$t<+Oja9~ZT3Ra7OXv;p6vF*-d;C3FP)CtKVysVm9MVb|VqLXr z!ETF9cmLUaU0SpwsCrehJLBwvKG~}qg?p2ipPCx{!t&a6*E%oRMXSF)^$cX(9XRC{ za}n1LiF1XMo4g&u7@sd@*w0{YCj+G8H6E}(FqGJ_pzN#h@>kc}yzAcGUi~V0KCfZY zR94f|8pjXX^Bq~W@gAe*@%;%id4lEuQ-W%VYeY#(Vo9o1a#1RfVlXl=w9qv$(={*+ xF|@EUv9vNa&^9ozGB8m5aHtAJLvDUbW?Cg~4FPMbjsZ0=c)I$ztaD0e0suhNFaiJo literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9B%A8-seal.svg.png b/server/routers/bushou/images/60px-%E9%9B%A8-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..dade1f03dbf7b2f61182bea60440671c59e35367 GIT binary patch literal 1074 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 SYfyRs0000R literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9B%A8-slip.svg.png b/server/routers/bushou/images/60px-%E9%9B%A8-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..12300c9dbda485e024fe036c976a03bb3c1047db GIT binary patch literal 1526 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9F%8B-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%9F%8B-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4b4019a96a27b2f1e5616e9d79c4aa07cbcc9f83 GIT binary patch literal 1371 zcmV-h1*H0kP)!pW!a%iF?qNk{bqUa%^K@g+C$~1>eG0m&j3GLzAhkM*--#q)?z4uY; z4~u*EK4-1Kt^(U`V3FgeWUI>#Jfg%|Iu75T1d681vOG%U{dGEU6RyTIj1iko7dmkme_^K> zfgSim?8?{R=~R1<<5#f^`io^UKrEF(7=lq4CU*6yi41A(#Jf3lDV?V@j!s^C+>V7f znri3MW*f-bHOpc`0c{+{aMmt`$7sZ!xH3ut2~UdQ0n`%TR@ zFrWY-nk8$5hl>%*VpLMj!gOK(uNNC!nh%;4qOUe=h;Ty2C4!6+qcAKf_0RW;O{Zu! zVUDm4g>r+KPOGsI`?TH$uf~+36|M2gNub~ntj9_*0J&#qo;CckaOy7*Yj2cr0){5f z^=;Ms>1J7rHNxEdA{>@397swR{ua*7fgJ5tN;@WEKE9GYVqfC?RtZ=pPsmnyK`VtS zi_5V=w!*74+SF1hGPLS10*cwVDET`FlTJ`?CqBe?A{yI+^ymnQKJnHiLkF~)3gQm_eJo$wBt?Oaf0t15>xW1FlY7eU_TD#=y!mK z!)vU>14;X(@|wn9eGgt0?&ECXY8K7pjDDXfp`YWpE~C>m7+rS9xGbaZP9+9FgG4$e z-RXU0b(rFojJ}V_`D5pC|K@A$X~B$)cN>M-YMML>ZxGIVnySu;veG!um)+@NjZK_!ge6w!bx+{79I{9p0M!l1sHhiLS1aGZUh${2awdt9r($KF; zg^4&h&8&)LsDu%CQud~_0oUp|Azvs(W;{A@Zc?U*OvfZ#h?$z3O*^nxTy5B&ls!r5 z)O|JL3*m_5rnd^8BVyCJVt1Y)L_|mz_tMHXQ)LD+_G#*sf7>kF+Er2vj#9I9~cI!54zl+h$lOF0d zk7=A*Z#7xBO{8Sg^=B3@X3ylEW@(p^=5Nu|oc}cE<&>dMl>I6U*@5oN@mqOJF@5y+#qDld(R(N~r`6E5A-P3|ux?|~1r)fSb%>q2D d;wb4q%Re(8pUK|G&6@xK002ovPDHLkV1jZeqhkO7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9F%8B-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E9%9F%8B-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca3463c01e6c0fc5f4160d6e7520a995f9f0c9e GIT binary patch literal 1326 zcmV+}1=0G6P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0~rK3H&w#J!~g&UHc3Q5R9M69*j;GVbr=Wm&)#2j zzGXUHlyey|#nKkJ&>{kZ5W}b&i9qO1P=qeLFe;3?kT80KE+Uc4C`f|n#-M_Pgh(?a zbB_6vIh~tlHqY7XIbHbQ+5h~vvvbzY28Pf7;vAme@ArIv&&%(5p5Kq#bjwh=gA%&5 zIpRHQ@?BOsN!V(KtarqIaM8)>()VL2t!7WRnHwdgY%_D>ON%BrzfOa@Emr3)i!3ug zG}hrOJ0uF}<5KH9t;tIBvd&33>HB4Q+!g^|7#b_fX6h2Wq1HOQs=@lSpkZOxgA$RQZbX1<^C^oZ zXs|cf-4^g^25{~=))xVupHW7$n7Smw|Jf!VWSF`*CvblRxMn=yVU5H7`_3*$BaNKw zDInsBHa?D1xJy(2#munGIA9M((9I(YVL23#`b;$Z=7#)IxXtGp)kS6GrP@XZjZcI~O z@VQNaf(L9+p9#DuBw%n9@Z(;?6I%1=I-;gN?|6DUr%{n<>cyd@y`zK;OrYI~MS`tO zmv&ddKO^I%c>%Xbg;Hj}4jl%?0*}U|#L_9ECz4QF(B?Q88nH-eI@qH*H%ynkugYns zv}n)!n$l{8Yud5TXK9rpj}<%9O-j6A7tWRTcsRma9W6GE2Bf4U?U?Q!c&i~Nrs}Rc zKFxHS{*RQ;i@;hN-Dif%203`q5#&HL9>&{g@5I6w-p=M)d6T zyQfaCRFDLx)W>0}ve+UYY1Ho}m(Uk(Q6e|E}?J z&lu7tE}_>B&Ew8KG*uDsP7bYy%qhfi8g2oXTH+q{?(tBLxd%fH(4M(IyE*rH8m?RFgh?WXdxx%0000bbVXQnWMOn=I&E)cX=Zrd~T2p{I>bF~?ng60>i9-G0W) z`>sq# zJPvQ!^gd?I8Phb@Xs6ZR{a7vX4g|N=ZWfV@nR9pX-S>9Jed}{Jye+$uEw7{M8=}u> zlXCYhqxjXkRdrEbN!k^+vgTTaYChX}T>q@h>VkudD-*wKav!exx?8U&^E`9)`bhxTu_FBxf+mY3?YtqhH?*hNgHm#Id{=N0`t}EGB7OTjdbKfo( zbdDp_)jix*tY(DwD3z;EekD_`GP={TG3yw;DypNn5@NZq8D?(^gJ4uhAoIwM;TEchLy6+XAU z^v1f-#b2+jHcvXzfA7<>l~ezGw%=OMm~-&8kCfW2UBG;xTH+c}l9E`GYL#4+3Zxi} z3=A!F4UBb-OhXJztW3?U49&F-46FR^i&D95BKe2mTBMSNndf*v93jeL$FR) zOW4ZTrsG(FTU*4G1wR-cb_Vm?1WXYti*j5dG_}!bibv0cj)Dxo=w$}l$qQHf{~wk2 z?p@07S|kNHACs0``@bOu=yVXR!!;Oc*1M#Avx|gRmYhdqAQ9m=FSxTzTkJ6!1YBl=IuD8 ze7M^pntR`qbj2E*NpowBuUH3VEwwwF>7oAH=f$-}ff<{f_8${DBK;?`o3q08Mo*gU zv*-RXE0YpRBKAjWeBM@m`R!+?#Q3V|tFA4~sH%GOy>;1_Ez&J-UuI6<@vM2uCc}>P zxxV==|Chi0zRdF1pYD%w0qf%qCOr=}y^_7}iuRuci4xbWRD3@5c{8hh4BllM_p0kc z;#{_c6Z(EkX$o~)=;SCdf7P<;ty9vDx1PNDH!b7({wLnCbi o11kfA6Tcq;GYyi4-29Zxv`X9>b}ozh3)H~i>FVdQ&MBb@03>Crt^fc4 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9F%8B-oracle.svg.png b/server/routers/bushou/images/60px-%E9%9F%8B-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3739f203fe630bfa316d17ae74945826d518b9c5 GIT binary patch literal 1054 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9F%8B-slip.svg.png b/server/routers/bushou/images/60px-%E9%9F%8B-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb3713abc6bf08933612e1352a63443a0d8286a GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-J{MH$Xa4-;l!U>5RpaSVw#{Psq4#vE6X10V0tiqKzq>)I5yq+IUMMOP}; z9?fcM&0=-ch?5TZ;3(iCU!x)Ns@p^Ui>J$yI007uh=o5CUQC|O#uc=<tbNcH;vb)~)=%0dVX@i;o%91PXF_A&@v66S zJ>AluGoib=_QrhCg-W$ed{uKS@(YGi%3{ob})LLd8B_qclzC@M%_Ip zPX9ify&&5CstcOsLjR$SQ}6@KYeXXeA+uBHc1 zpOjC2=W_pEmh2X@-t!iWT@g9mweMJj=LL1FEZm&vXfWkU@V`G9IuA;>{fw!1wYPh* z&Emq4xCjXMXklw%dW%#zL54v*UC5JTKc_d0socw8` zb1vlkmw#caV{&J@v9i}>+q`rCm#|;1Quukq*A>%aWcX{o&-q=r{#i-j_NtpUYipzS zA7*Icl{KDk-BjTVi`JGrpS*c($(+~I z)_)JtH&o%M`xt!mcjMu*9ct&a@>gYCJZNuMTz{&2&Xl6bbL&jhW|$b|=AW|g^KaaL z>Rr>?oE(EWx)p&dO(*H@`1=3SjyX@BZDyU$ulsuwtH12A<9}x9{s;+rA9m(izctIj z9oyCzuXC#{%bdSI#p3+a_&A4x(2XUA!2H6XTH+c}l9E`GYL#4+3Zxi}3=A!F4UBb- xOhXJzt&9w;Of9ty46F5GWs zKOfF+_UvS4 zzS*7KD3U*XF!SwyXV2L=Gv}N+3-g%AJPM){I6Hv%2(UMh`=7>hKnvLB;dB7|6W(WY zAyl3C2~ng4oaNxGP@EG$vo2v8k@qhH&TPXuUA0}@KGkj@%fNOQn*XC4>&l>jK1xq zv_*`<-y!QM#e#r)CLI5F1#nD-Cj*{03o!~G21ZqXk%eQLVTi(g*k9f`fn#|Q>z0O8 z`$o(4>x}+ij&ZcYrvOiocTEd``;2>j4H2+vJVV}{i~>7>9l$>0n$HBc8r&9e1o#&C z3OHz7J4VT>%6rynT>9RC+WjKX_VyA!yHyxtkH#RP+Hj*@Ot1gXCYSMUC8eFIFh^i5bB3rI0SqI+zh-QB%K9SWJ^bo1b!=0 zSr`C%k)+_k4#kyZtVJ)A4a%+ytX0&#EJq+L~vk>vWb zCFGqMqzrnIYzh1&4;}M{&Tx7vX<`$wCTU;TMm{IXDy)_C)pA#;cBsPB*dwVy)h>Mi zP*!2>&U`11I&D1aWaZ`P#4eYv7TV(WAe2>D7qU8VZz9?fLT9)Gdwp2vz{kDPc~Dki z^H6=cm6e|rpTedI+m3j&8PB=GW5z=-ckniQq=K0KWALd4-3ZtO`)4!aBwCxg^ND$M0*9Wd?OBtiQ~0RTEO^ zm(z|Lg*p}16~1<{Z)h4BjiQm(AQB(kwD+1@Z;okI0G1BychE zp=ye&lWVnXTt)ow`A9ff_rYI^17zlXi0s>~bc35jK6u%Qd?QjhRv}fwA|c>h{d6hS ziy|gH23&*$^8HAH&;y)|d)AxeH!l;V>%0o%p6AbF9{+dz1FPL{mUX$8WdHyG07*qo IM6N<$f<@2MSpWb4 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9F%B3-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%9F%B3-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf9e5c316262e65226dd668c39542fd90e08f51 GIT binary patch literal 1498 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 TL?NF400000NkvXXu0mjf$4xN+ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%9F%B3-seal.svg.png b/server/routers/bushou/images/60px-%E9%9F%B3-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e18f73faee5110ea2776ece8ad6c8d113f2c8a GIT binary patch literal 1413 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 QKL7v#07*qoM6N<$f(*O2z5oCK literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A0%81-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%A0%81-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5807b77fa6484ebc4d258e2cfcf41e3c2cedfa32 GIT binary patch literal 1235 zcmV;^1T6cBP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 XmAExX7Dn~~H86O(`njxgN@xNA*{R*e literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A0%81-seal.svg.png b/server/routers/bushou/images/60px-%E9%A0%81-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..bd29e2a72d745e59e9d3bb9814ca7b97a79f0630 GIT binary patch literal 1208 zcmV;p1V{UcP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc2nq%s5^Z$*2LJ#Az)3_wR9M69*jtE|RTKyC-#Csl zqvmazoXM$)1nr_=6h=Kr1!WnOg+ZAZ^`J0OLbs>DrydlhqNj+cpc|o)h%eHG2$jt2 zLKqI1O&7~?nv0hiXT~|RdvJF;*_m^(eWVB1_i)blt;PO-Ywfky`mc}ka*m{`4BIQ+ zXr4KmHJGKrWDFaO+CjqxblL3%J?UO>p3j65uWw9B1v}M&l3|04>x(Zru_WLX=7J7; z9Kr&3Moo_$x^UDOj_TKKuOCx+yjgI{^6Y)Jp%~Q3l}*9#1n=eCuZlrEs5Sen#>MG@ zj|-lR|0ifOlHJcf>&*i13qCR-C2X~^2wY{EJ^xCkAs^TfgTF8(@C-q)N1J^)nfsfu zJQ=+-C2;c@i+6ZJ16r)JL*^g46)AyRau)vF@-z0a#kL&%BPoF|jf;Nb=Dhkk?b)!e zO9_0LAb6#q&AlfPY5ejGQN)zzy*tuDW4#k7NUmsby3PtPZR`4Oet911_iS`hnJ&3FRK`o5NEd2;wFq?k!=OHc1|1XhV_2;j7P|&) zvNdITwF^$VqJYJHG0?ZCrMI{E7>7J+yP;U0Cu`Jbwq{KhxHXcXxeliExJGaEXhg5x zGg{%_S7%xV0&kR%&qv4UUjIoh*I5vB#G9Hc!!)N@V}D-Ieb#BLEX|!@P2ArdUezCY zX5G0M@@7XiISFe7!Du|=74~>*3~wE#IVlKwtaU+UfuGMFo2o2{KYa~&+tRXz-ZJE| z2-2OM2Ct3H@ULrUB{F+uOsnlK$$8r3X&>gmZ%z%n%!uH7H|5pVT4KG7;ADwyr(}ZL zE7wR$r>8A~0rQJk9TWujry~Lj-Gz-hir5X5$1{t|bApVPB38A!1i_MYz+VdX z7PP4IpsxhMu5@R)#*pBparIYuQBOQfUua6_?;=64IFPF~1H}BZZHUEzXEDww zwi``0<=uuv53KJv$FjsGeSWam zdHKJ{pH705UK!H!UzYEio`uFg7|fFgh_f zD=;uRFfdo;Kx_a203~!qSaf7zbY(hiZ)9m^c>ppnF*hwRI4vF literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A0%81-silk.svg.png b/server/routers/bushou/images/60px-%E9%A0%81-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cd606f8955756bc4a19374accb47e8bf85e09b5d GIT binary patch literal 1188 zcmV;V1Y7%wP)zd4{L_mGqY#Tu z*aD`vSN_2<1%GI4NVDzMEQRIe1;53eO^*E=A7L@(2Nq&YOU1 zi>ft2K6)%6DiZj>q}90e6XbdbIHTrRz=2RJHz7w?-_$IYiTm?^`tK{oMnK^T}k9+0WwT&)}W zp-3B-CO+F`fJIy-hGB(D12$^x#rKPuu^1PKnEF03bxUJzYNrwZmvJKSD2ZJvZbUCm zF1E9Z?R1sNz%;exoh9uO-U?HMvnq*RDFTrrQ^t-i_Pwn(`CltNE+3FgQCoK1FY3>$ zg)u*gibvX1--}6YSKT7LA_uN#RDW$z`z2>XpQu)*8MO`XiekV#T!ycTef!jpzy>_a zgb|;LAms`XaHR2o@(rm@H8Um8%Kq5m-{~T#cvGz5G)_(Ye{7DLa^)433B{A*)s!qN zjTDuUq_@7Ky)v`oD(P!@w+K!)s7w?JB8426cCo?2&G=q(9(uE=mUIP2i74wz;h>UX zWC1^@@6ZN4m#Z{*oyd*5k~#QC+1NG8-n{FWp)!kFDW-Z?GD2mXy-LPEp)^aowiHao zDT(86#4D+5nW*+P^pHXDV|Od0ZE5%flRGIYPsZY7wMOq0_2*V9r~{TBkq)j<8+^Qj z6FMg?e004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Tu}y62(;}KmY&)wMj%lR9M69*jbEJWflkUAKeJ* zXbWzrEkVUyR8SajUt)|*e9*XyTjCHkDh3mM&_o!8%#6mU(WoRqT!<3GIOCp>xT7J8 zVoMA`$3`MF+REYv#X#5bp+C#6>guZMy5;!d|2|aisq@|cJ@ z6HIWNV{P-54r_JjNWW|4ev8|iXtoui;?b$i3vRV*qaxnV9H$q~Hfhsg9cZ$P-HbF` zQxE?QuJB^^XwUFnifFZe7;9h|pP|k*$HqeJTb-Ge_EcMh@RO;wuj0GC$v#iiYwVPb zcz%lYs2cqTyVF)7Ovysq!f?%6z!sb2wEM45yyr*If@L<<|Bg>fS-C^MRt?c5 z++S_qR>D$w3^b}=#FI4PwQPCZCWOiTSh15eLatf?X{vIWx4_XwwiZ(?v)nUoaagYv zx7i18q_0RPcXR z2rH}B^%}592nU1l!e;07*!3%ga8o)zN?yok?@e%r5H18Wg}GpuQw+ukox%&r_X#09 z-Wc^UUI>2&i-il&h(fYM6xvxCoyn zZ3b_HkvJkN@e(i!3o+I-wCTVAcNm4&3&c4ef&;1Cood0cLbx6$2qAB}lO5;Mlxm%+ ziF_oiNNfICc=H)BOb8F8gvyt6;nxa!Y`ySm+K^ueFW29XyU{5OurIjXv(7ih5P!1X zM;^1ZAc%%y4Y=6|Y{;I=UBdHKd=3}F0+T$I>epYg6K@kr-_;gx$frWn5WFhPDzZ!!!e%Fyc&-$tHjemf;o>68heEi#m**T|aieHk zg}l9b700<{d@mRBsV`^7`NBIzmYKrxvfXxHA>7g!;(L3@*X{z^E}YSa_opHWhs^ju zm)0KVqeaqH>?L2)mu?k~@6-QmA>5sv_)1aIR~LG}g8v}vg|#&ajEZ>P zXGKMSJDaOy>RcfTWwcHVwWVY>K3v|2ifhK`5*B15o@_KF7+m+3T5+q>qDR_E8u<6Tn5`bf<)=8M+Z zy&mH732{x$>vyoo?0Tl+@}EFQ_v0G7S>lvNHOc-d$X(1b*dO?P@iVrc-+J z03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SF)cDOR4_R@GB`RhI4dwPIxsMFFYy-u001R) zMObuXVRU6WZEs|0W_bWIFflkSFflDMGE^`*Ix;vqF*qwQFgh?W1#(HN00000NkvXX Hu0mjf|74~s literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A2%A8-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%A2%A8-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f87c692b4697c6fb0ef86a4f91503df8a043f1bf GIT binary patch literal 1683 zcmV;E25k9>P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0U7`}74P2GasU7Yn@L1LR9M69nR#r~MHI(B+b!*G zuRXA(wNTnh1jPsqRFH6qG$cw5M=%lKS`)xokcG_b%5wbn=w<17V{cPN z9~0RlXFCb@s?Ie?++PZ@mzA=1+zB|_u*dzUEJn)m7Hw0eC2%_th4(bmDWi})nmE9E z8y_!b7?ljAj7r8y{q5#kr&X>MdvaOfeW8oH-7GPT8^kIO5jKs}TgZ1-&%2_tD$`1O zbW`>4sAkmtG?@T~Imlb)Mry6U!#{~k(0PhyvS1Y`k zT+mI{&Qx83XqOhfk__;E(Rr!lOjYFUjk>F;FpL||9=a`n5A|=4UzC=5kWGBA2`zne zkjVrYK@cCsR5L?4yB@&h>{zG8Di=!55#q!-#<-N?bT%(=UCLbIJfKc=ohLbGh|{Gc z2+30!^r!{c#qRWXyYWyg_mF99hrSP(oM0(iIVfA z!B~zlLub=x3@$VXfX76Ax-)P@bRDhu@J<7CjPc5t<%UBf&es4;6SZ1r;Dk#IQ+NS> zGEDrLW>gVlspT1#$Nsf9iApHJCGN+~G}4$JiI?G`hplX6 zhanT2#bQQ@RIiV&v6(jsYuwX;7K%vow&dh<%aCCu=x(Bx>CQI*tQWOvrvTzNNIaZu zV7zjRM0rs8&N2<2NvV=7JMOX10GunHPCjR@`i3Eb$ZWtzfDGIeki}r;2+wvglzOS^ z&eVYu8P?;g^8oB3PTZ(yqjCA9L!dmg&9gYG>}Z8@6HDR>b5yKX z|DH33UsI5_g+-dw_?&Y>Uo4&>S_}&s#eGbof^rJ+6A*DKQ^cfJLWF4H5|=o^KIuL# zgZ@l`GX-#?sW#4XHf4p!#I?v_j}wo>zoqT3hhE@4PQY zKU)^iNDX)B|D=Bb(7WvWAt?K#0000bbVXQnWMOn=I%9HWVRU5xGB7bXEif@HGB#8& zFgi6hIx;XTFfckWFs&Ke%m4rYC3HntbYx+4WjbwdWNBu305UK!I4v+SEiyJ#Ffckb dHaapeD=;uRFfiOiV{iZf002ovPDHLkV1l8)`yc=S literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A2%A8-seal.svg.png b/server/routers/bushou/images/60px-%E9%A2%A8-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cf29b4420134c0c1a649655dd4b927ddb9ea1024 GIT binary patch literal 1491 zcmV;^1uXiBP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc2nY-n14FJ)V*mgI+et)0R9M69*lBE)WflkUUt0>4 zmX<|A6&FydhKva6I1@Ea+%lTDfJTi=6yg%s#Kb5%A9NDO(WtW-O$-=y68++WOJXoC z2<{qFL~v9P6{DgQD7{cyDD9aKedkW^rMzMhF!} z&H9Z6j(4~Q+xt*6x|63iJ)jkPw0P6wL-A=h>J%mZ?oKc9E$##Fdej=5?F2jQ$Og2@Mh4#l8UP&YG1g(h#6-BQ(TL^zmr|2t$@N`LQrU>D=!jnb~vdPilsYIo} zH5E)uMjPx*46I%is_d{>i*~ifr<3?~p~oalv92hynvHG3igXe;;TzjfuM@4>WRm~R zWKOpXs1sILqf!larIB}>9^si1R~;&Z=L=7&EI4|w3N)9<_$aVGjjCsYulv=-7_eLW zUSr3A7t%A{m`6R<^Y+WWb!gF|RfkT$7^mLxSnRztXS_s+K1`t6`a$fv%ijh$!a*gT zgKj_P(9Sdyf3jSQ4z(IgP^Ce&I^&JkYMFIuFNkd-k1dY~VV|^HR~B@piD=2A&VYVQ zY6ux02sYDNyK)527E5>%k(g+G4A% z9bZ`LleF5nQwV+GG35$<16Ms)f*_YJl}7;x0|5dCBs;H5;7kW)C>g zB6pc%s<%qF>MMm7jizfCR`%moy_n{-Jjxrwc6H@?@e!6f8n+7Hs~K?KJmH!g%B4cM zAnmREu-Gg8$!$}F4!_I!vEZLV*f*Iq*ZnpK;XA({s&3c`mM024zfW|ZCv+!y_Ww|4S`l_r z5*i(vbEO>MKf<#k-4Sf`t*|k#hN^Iudxl!#+`IZMVSQ3-{6D{J7BWfFJ1lri_`&o( zl(9)N+-2TyF|G1WG1gOG%VOZsi`7K_(QmE zWTIA$zw}9KcerIFL*`+YY4eFY(l?%d#W3T)gTf5@rt7L^0000bbVXQnWMOn=I%9HW zVRU5xGB7bWEigDOFgR2(GCDFbIxsUUFfckWFdheg8UO$QC3HntbYx+4WjbwdWNBu3 t05UK!H!UzYEigD#F)}(bF*-0aD=;uRFfeag$EE-P002ovPDHLkV1nFVokIWs literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A2%A8-silk.svg.png b/server/routers/bushou/images/60px-%E9%A2%A8-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..80b127e10729b6d578621a99149aff769576b771 GIT binary patch literal 1501 zcmV<31tR*1P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Tu}y62(;}KmY&)cOS3Ro*)I?)H=}65>W^UQnpA6}Xx63+TWiC$>ByY(M+q9Rl@%GqGMCHs z!v+~GgiJuj(##4K5CVnMADnx5-*fN#zTC?N*XHy7aqoG~^E}`8yyrR3j{{ffe@HQ8 z5pgAe;}JA4YvO??ArSn`S#1KsiF3C-& zVtjzZSi&;WSxS`O`Llr-OXC%0kHT|vDdSIs%`?Q*(ZkNA8^J|hl%GqdM4n_9&2ksb zPoFkE9>{uAl-k=qa|)- z4lC&5meBxjmj-fG)+tf0qXWK6o(i-pBzKMWmHH5LkmwBjhBR=9`D9S#Cu((4Mm}?V zG=D`PIO2EfYMg)~wu++{_334MYk{FPq6erkd24#+VlVojXr1GeNpIs@;Jq6@W{TdSGMwzYB_e;Z`$oMEHrL?HOl#GOjL zkCz`{4QY5RE!}F6-Q*1Hts|Z@@H`y0Jk^(JQV;@R_-XeVnJ?7$d?tDP6;RGWSc6 zpA0F^`_ARIzzeA3S<77HGIyxC(&P#`zESS(NzH zFI2F1BM_WbZsq0=1V@SYxlkHTa)(0&T#aCWbS>Pa`jPw!f#6JNU}rLjpuoV%_em38 zDwH34W+;FkL$F25$$i}AS2m6wKecm^w3t=eC5(&dmeN}h2004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0Tu}oIDl=!7ytkSjY&j7R9M69n15)MRT#%V?QYlV z{+La#nb~y9RfxK|pYclTDHydPc(VwIB zj7iMO;+!b`?ybisr15SwIlot;k>PQh*fe2%(!|g8UD zQh98Fx^ch`=rcd0t2En!zMHDU@?bmeJLRS+$r_wK7-mE zA#c_tD;N;6q#=X`sMHhV21YGMywkjSjeR1c2Do36Ly$OW;RoMK_YQ!1#>A;r#yh57 zo@9Y>0**+PN2y^l0L8p7g}fIyrkBsMQCggF+)5vsayZ7F!$83!< zKR4so_)8)Cl`c{K)Y5Vp7j>O}w|5aazGjFMXC{j&BSInP=wLtV*d*=~=2*oS;`}=5 z_7NgCu%F>8k{5Dua3um}YFD)Cd6pqgDZ)CFflHT$`>U@!w1)h#%MGcmq1dNXk0NA zh0 z4iXT{fp)~skE1HtOuTtFm*cJ=XA%|;9|X%oqf&^O3Vv;XmJpw-$IGNqO1y?X`6xOlf&M;Qu5r z1bhcPiht{-N1+|_;q62=_7%u1I1iaM2_!ajIXt@pY#SF!kXpLd8H$(JSWQxM8?Uqb5pwE&ta?I0Zn@h+=1IeX@FbEeYY+#L zj?zQG@4#=!da6fyOBqZhJ;B~sR;LH z#sCs5Tab3sS#dl3KnzCaYK-9RlxBrZl-}nEpDYdV5#R^l6W~?kRKps!PRvCLkW!?- zltR)~1u~_s0B%Q48l#{eISJIz1w4Wr*&O!a$t%|2opMKkbx76JhT=?_z zW{4VyN)dw}LTYI@hLPOr-Yit&-4D-0PBGl5M(T4nenP&@a(6hB$Y&Cthc!G1OMo|# zjlzB;N_HUSq+iO|p~xvi^0AxGuP5D+MYemSk?%rc!z#r{8zV0Ek=N|v%a&5s;s52H zd+Z_RR+V-Zlx?JtlSDr(Kz2R7z%2o~F9TjfIw_j2X5@2>Sg``TC*6j8XHjb@H%vb* zfz;y*kw9pEYGDoAptT%$5I6@of+YSU$eU^fzQ!A53Mim}0t$$V{{X@^xi8#8xefpT N002ovPDHLkV1moO&tm`p literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A3%9B-oracle.svg.png b/server/routers/bushou/images/60px-%E9%A3%9B-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..414860e6ea42399ed11cb2d189f516f85f86369a GIT binary patch literal 1084 zcmV-C1jGA@P)0Jv?&4B0T(dl z5)s#_jHy$gB`_P<13V+zpuApYM5zM>z%*bVP(#y9%Bv{ts$QrxC?xX z_}i#7YqzEdcueC4Yk{l4T3|pRw<}O3Ub`S&!s9Z7)J87@D}io}a2H{sY5B|qbSPkS% z){nQ`(>RfIqG56W7dV0W2l%E0)3GH8cVS*R3Ooe1k^Xh+e9Y4nr*n%<>vRqlK`F2} z!y0nr$QJSxYqiB}xKF?|`MrP^nEmNybwBI*jalT^U{*m@m`%QOzyn21-Y6q=FKu)E z1@>c>hFQ%m+|35BW9gM|&uVlHCxAg|bzn(5!pEIgfayR_%pO+<%;{ki1(;?cn7`4h zVg<@c7F=eT|61f9P*qol<|f_^5!-Ifz7es?KD0#Busk#BVVN%tw{Xys5>3OmMcmsm z|Fwv{9D-{aevFy8>X~Sn|5n5WZgQg0G@Jll1ma;pM~nPtA}(}R6oK~1LvXV^ADC*9 z`&7imk*{(@+ps)Cnq-mtM8rjS*fP>KEbmHVUu%$5k~{|hOmUMFM$>R1;k~VDi~L`} zCGopec=~wKU=iVdc%EgA$q_XU0j>08>QD$gCt2tt;_XlGAZ)q<^LT5n-<{Y>Smex@ zweo=N5%m(7ZZ6}isKJ;WjG(Y13U$kfK8^eUj8mu|oAW}@ee~MG&cJcZAzE;Z@4#54 zF|3#+gnR>rco?S?I7zbcYBKPJHMzC3(DQhMfz6nwC;^=IJYEv=bbePl2M4<2Y0aF9 zZ8VrYj;Ga4HgN@G_5xYl4QWyi>?RAlpd2~=BmM!|EP}4aPIxB(0000F$hRRK?^PDR@!dY4`()e=ggg*SvxyZll><*J9E!{oHO^{^STQqlu*L|8IzM{ z04N8}0%ihbz)-U66bE&{2H+qt24sxV2i%k#Ytf?$*oj+6UB-Zil43AwEF-_LrqIh0 z;xSTe#Vy#+z!Sj3z*sJdN>uJLP> z48$#PnWgT8@qD3$ejTFdB0+gn1BJw?0Qz~Bx-K9E`~dudn6f@Z)9(U?qhzoc7{+}@ z%~c;DoCeR9KY?2dnLO?-4e+~q&p5x;Ky86zoe5lDNQbz$G`L;Il<{1t+U*4v1D60- z0G9&wGyqQnqvW>afI**)d%KV=xEHuM4k5x|GO!x)l7f_uDe#OC?RDuQnPcg~dcre2p!yCe`e=wT8Vg}A z>T^*63<6V)x*=pGK1LMK8iO{7+w=MfxX5^K0@A=DU>>pyDx5Ko06oYyPYiSMuE2c; zeL4A8c$1>PO~grxsO_-!lQmKS^bgeg-M|juS)c_`RN8zcidMWUyw0HCtZ08B(NKj$ zuK+%`jA52EZ~*uMcpg|%M0osjr@r?lsiYt~K6+Vpa zHQHQlq1*i9TM(zChhYEuDE6SEsHg(o^N(g>VG z?l{DTr35GCnw+)^EVMU)7l1vg{_EHz2#E%un{X?3r_;ygK4u+<>3F@f2V#&T5N87& zzzAOEQ%LmkjjDgl={w8PXPzT50i zW*c+(=>fC+0elENiu+?lib=rxmdVqICN*tgBi_|-H|Y5Ue#=4+GD+`IfHM*{(m0)5 zx^x)XvY#TM-vOiDLd0jzH}0@v&~zPj4thIccCNJ0Kz3allKkt-CqNcq1s+7UPd(6& zHyJk-cm~<>HZx(iAHps0G~-zd^&0R7vcnn?i?A3u%T7L}b|4=uHe8O~d}M&# zh|S%m>X#b*^(wX)w0@s)bvcUo=*tO?(8h%oc=O5`BsqQ$a@Oh)du-ZfGa;Zq#%%`e zZ_C(0*;f{Pd5!(#nv@Aii^b90%-;ekQ=7n5rsKpxq z9K!1qbg4E^8MIDC+Z;8MQKfk55sz!Ws$Y#)D{C7*#dz*fv>V8|s}lyz$gQ3}Tbr?G zMcY+7GX*pYZ))}<5{P+is698PwIRn@NwC0KwC0&JgG6i#3zQ=?I`D3>Er?HD$d%25YMhRM_LYd~@^d>!kc55Y zn1kE^tO0JvUnvDa|1oVt$bL0Q2zm^!(E7$=Lg5bbYv~|NL;UtnfPILw5_?{{5VYYI zcvYN}C-J8ieWBJL=j2HUtX<3faZa9uz&cvm7w6g%ne2kdWHA&z!B$hsi+!vQn dLJ1{=#=p(+tWz004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc3mOm~CR)kNegFUksYygZR9M69nQLrRMHI(>Ei`n2 zw(^iiB^0XG`XH#0hr9w>9*GU0fS5>)X+$(>D6tZVMKB=(5;35XB8rmuLFLs%D}g3N zNJVS`Q_D*!CG65{OSjwYcDvnex4Y{HZ-=>e@7))R@dIbR%$zej|G9G>bIvT>qyIGx zW-*^oO&gb){NF%kvWla435w?8vAYX7fl_J+NRWN)_}zjWM=4iy0Q;JsVX-gTKdf{J z%UHn-k|bUyCpkkauP{g9Br_6wqQ0^pi#V*(We`6nC}5y6W0Bz7NlgssFxF$%9A`JX z8K;_6C}jH*1G^5V1~kCe8c={TA-|9q9Zw`(HTJWZ3Y}lh61^vA;0QICao_{e8P0Hq zGK``4>BY$<%IS!-m1MT7zPF1EU9$^>vGdUOZFJ{QK$rBRjXE>t#RS{Jyl7Q09gp}~ z2bm%AjZp!1a-K4lVT#_5PqU2=lztkYvQ#6VqOyV;)Z@ZICobA)$4NWwSh*FCb?2$} zzECAg!lv*WS(qp{}u@oFf}Z<~L>hqB7&xn7mkauW81xMFRF1gEbajql{Z)1nlJs-|;qMjdi@1 z?MiPyZ{ib|q+JP|d7R*WTEd=~69*3LG-Ae#1q&9s!v~OcYy%)jDO**BbyEQ@0qDUEcxlB>t5yvQ z@Dt=J^K~~jO?CGk3CU2RZw}_Fm#*P7g{0`hW>Bw5`QnA`VDIhhCMjY_J;;)X3JYSR zQyRPJ0lawVrWHFjuJb4L1fsWr%@Mz26{F+3Cc@FGC=PH(Oe>mrQp7_;T0*Zb)KPxK zCyk3E!i^%2HGIigdayGp{N#MPbz#o|Fq!KT?+`O3)65`?XL*?tc2UkbRb=-Xc#f1s zdJK-X?(X^4?BZSF};Zr z(t$4oXQgWHa7y?iLUQk*f;TkviH;vnrBX@k0_@>EoIpA^#Sdpu#Q=7a%@$4xke!xIHSg~T|Dpg#H#(y8DP1$FylsoSeySFhw6l^|TOO)R}fJHHrQprk}NXPae z@Q?_bKJpR)Yob<3>T*?YA5N)C9s_KVHgYBrz-0t!+kL$HCi`gvIdqGI%urQ||RPpOJT_i}5i<*-#rZi?!%zoSMbS7!Nbi zaG_12(AiC%!TU!F5AzZm_@2Ks>2PJ=ot&hK%2iZzfFp{z=+kKamfk}Gn7KhK9=w=H z#Y85VjMR+}ZZ@$KfBbf^G7c|pV>2TX@z5HGp(sB|k?PIpj%YfkB7&Paz)GXJ8A#`03~!qSaf7zbY(hYa%Ew3 zWdJfTF*hwSF)cDSR53O>Gch_dI4dwPIxsNYB3YsU001R)MObuXVRU6WZEs|0W_bWI rFflhRF)=MNHdHY-Ix{gkGdL?SFgh?Wt$*Pj00000NkvXXu0mjfwK?S) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A3%9F-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%A3%9F-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..21075b6289948c81773719d341e2b2773fa8511a GIT binary patch literal 1423 zcmV;A1#tR_P)iHZCJ2(ErzR*O!VG$- zATaW+fr!WkC~SB!$el{1x`}TLvJ?DJqo*Udh zZ0XW?7)c1ezoGagT2FZwItA1p*q7v<^*Gx4ea z6wQV=acI}1E1Apiw_;_h;X9n(B^gVh2X|qQ#>!U1Hr$L+U68jeCg6F4S2P`(i=bToX4@n6#rS|EKsGYjI|!{>h0vE5t|H)U?zs zauNR2`nJ<3tgEzhys)=ZdA`8(j%r!q7U?Zo==Px7GI-)9E)#QUPxTV<*+CbB)e z(=hOE9$}!{wO=_su~K?iw{%J>lMCgAS}P2IIl{_nhKXX2{VP##zc4XdrrsPLEHe^u zbLG7gJJ2V#uAPZ8^rd~{UPRKBSEV}da~G(W+(FOs)VjGPkv$fQF|Y=r&33@-nQL2Wen-{iMY)M8Wzpa zBR*p4$l2Foo%<+bNdJPb#4SRVQ}C=X=u@YjssryJaY)%;7%E5M7-^>+VX+Mh7U{el z-H*jXrBEX#3j4T|%JvyJin`8?I-}?|d}tWnB=*Q3BC6pi$LBrp7;g1qNpOCoez`k>{C8 zT95Qq&a;N;BbOJ{SNIJ18-w)*&ec)UcSuVN1NTmrHS&U9RY@ByzasbHq(nXA@m`{? zM>{BcOZ*@&+y=ZW-z#f{M`WY$n)He-tm^FB zBo?$?I8C^153VV{QaropDvOnSaOe}4@P~+-$*gmJ&d{h;%ox0;T&4SkpPJa#eyWMT zbO>~6$QazG_|Z$VVX1+O+a&Q6>MetJ5$~gu8~G$*8lE8BH-mlr{WpFSUeDErky~ek d5k}}f{{mKX@$m!(urUAt002ovPDHLkV1hr?zPtbc literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A3%9F-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E9%A3%9F-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..07236e658c3ae72a49f2aa24ad0af781d04dd396 GIT binary patch literal 1062 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-?a%-QFCwhUolVAk_=aSVw#{Pucm#??}p;~%e|lhfjrpA@j@>b5qgrrk5H zxQeq)6?Ey7TdT9;#WuY+50yA}X&S6hP}G=U*)oMyFvLyut(sR%+qDB7VK1+F+-bfY z^)~18ZC87~?k8YbO z;v`X!TX%!)zDf?q{;28VKSULIZe~VtJbrhIxw^Y@;rXnX=Mw~;?OmZ4{l=)-Y5TI2 z_?He=pT2M2``GqSL1anpymGaL{TZjZeoqm2_T_c?i3v$JRk;(d%#BRQ|K`t{ag4Eg z@AG2y$?5mL9X)0y?I$n)c}1+#k1b!eTug4e^!c}#@a{wXPBSj76)k0JJ)FLG^QGHq zt+w5fM*Bn#1zuM_FSPkki__8B;k$3=cC*)cbI3=BeJWX+yw~*ho4-C6SEpXo{pifp ze|wT@MQdnk*xq}aX4f9$rfRov(foT;PS)Nme^zD7d3(8_^dG$z^UZAbvo|=0 zsh{Wd;||t4EmmW3b-C~JKQn!zAO8}0e>%M~e5UZdmD@~07Uw1$%1+oRrW>_IE32S- znqd9(U6i=ydM|eGfN6DOKj#*-I%l3ix*Jp1|DEC{p3d)+@p1L7xzc%IB8GU?LNxDz%1eE;usQf`0b7OjOn2=$3I@LJC|!w(pPd?G|}y?Q`bKS z@u^D98cUs;{!QrotGa7Livq{)6SF_5aX4Mr@IpQ^Rzy*dHIZ$#fuzTjkS?czT3oH_#d^o_G$V03{T#=AdZF6 z$zE?__DWjpnJV;Wk$~G=p+m+iH+0Vx=!?#q$(VRYHuHcyS92cATt1HEYt#B;^>}tE z>TkcTA7UG-S2j)V;WE#SeC@3toHn{&70vp)<9ds3lxe1+`{td`X0DgplhvFh`8Rff ze!Sb|`1dL63;0&)8=SG;V!7t?EMek*op(#$`*79T3?{&d~qbFBQz%Gm`r+YMS0}a87O1cb@xu*~&<+ zecIV8@`at|f7|>>_g9Ov@oa`Gt0MOclwHgDC%XEtM$6RHw3*v~yD-~*Z&mEIT6=2S z>F;YaudfbIQ(t!SdPm=pio&UWIQs_&YL< z^YGDwQxBEPoH+Aj%k00qja3=sMRrsP{a7UOK=AiQo!!NDFMJu(jIHj>e|qCX^emR` zN%I4~ww3X7KWq&7@A&Rq@8cB$H~TwPZbdzguAe$T^!lpP>v;ZbeDW)jqkrkKvedr2 z)1>~)6o?F)yJvr5Y1A7Xdyd5NgCURhY>ne^KW)3p_v%)+7DMezN#YhdK1+;GUH%m$ zv0cyfTiU|=YhT{Yn!NUFe05vdpy85}Sb4q9e E0Af(jU;qFB literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A3%9F-bronze.svg.png b/server/routers/bushou/images/60px-%E9%A3%9F-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc0ec31dc07b365fb201c0b86d692b63a3966db GIT binary patch literal 1540 zcmV+f2K)JmP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 JPDHLkV1jdX@8kdg literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A3%9F-seal.svg.png b/server/routers/bushou/images/60px-%E9%A3%9F-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..dea297cf987d86f7e36b3db51494fefe31a1d0dd GIT binary patch literal 1216 zcmV;x1V8(UP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 R4y6D9002ovPDHLkV1l;R8+`x( literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%96-bronze.svg.png b/server/routers/bushou/images/60px-%E9%A6%96-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..37dab81500d98e40139eb8f9b03e0bc476c3ea32 GIT binary patch literal 1468 zcmV;t1w;CYP)r9^LUOVLt! zR4gdfN|V-Ti$S!QNQ{YS>mx?Q$_HaK#%Q&^KA9L3O*DQ0RO0*fMMZ;&FVw`S5JUxy z#-J!FDT#_wsV%f(fnGnHz3JT9ncca2_io$d{*y^(@BHV?Io+AF=bT+Ap@b49Gs?$X zff#ThFa_8@-ik!U65wV>ZVK23`~*xbnnp#&2f**hT?<14knviFi*OgAap7E`DTGrC zECc2Mr#i?yQR%n3D3PSWPXjN6aM~F2D=r4KDgEg#N+h}O=K+<#Y+$d2)2Q@kJIGWG zKE_3fr0(zx#8`my0(hq@{W=G^ElNM-qDWE(&$IM(sAuw|5ScaP?uZH(MUpbOUg=K@ z;LWnkG2t$9iry^&z6<7?c)aEwZ?r>V^Hv+4Gm%ZyY;2|U?j*7!TFYp8KBk&6nZhip_sl=oVuGFqy z1a1JTfioQDA4ZJ%8Ti#}y})nC8U52$kuq0e0jL0Wlk0)QFbKQ{Yz4jqzCoPPghv_h z6mI8jKeEj`uzT_ejWqB)!A9;v&hJttae4=^5cm$Wk;A|fz&YclUCii2&Y;QA)wm@E zlLkG&D1KwN01L)ZucBZT<}Lgxj;UJ`h|5u&0Iac$y^qASS){x+3LGEMjx+qN2A%=# zk4f*yc%0zyZWFSt{|Mma(@sgoEHmnnI~aEyY->l69W`!PV^FHlb|_%%!(_}dqaJzO z*pwSaa@6(6Ssn=BW{^O?3vqIlz)J>Bdm@%u@QOj9tfBYfuOy~`+mUl^n%AT8b>Hx5 zF^q78Rjn6c-yscr(%0C&bR*; z*MO9JItefQMZzVRjU5Iq$U{yUlJ@Cx&i2Na8payDv05ab-lUBm1x|}*mLIc_HwUI| zoB{5LAoEg#oLjxI`wU|PNK$gdFt!UhW(A`eSc_~|n|Iwzw36=>q-vqcddwT!7OwPo9*s>!hCPKz$Rz~vF` z%fUi}@Dbo9{AY84##jr(K)>n_G`><|g0fGf2{*M;zRDBOOe)|4-%AuqgiW6zHuD{ow+E!<16S8OM@ ztn*-=>(wCvi*D?)Jmo~j4E#y?ijXz#lN*utSkgF&I zKG){#Mq=YD5r>s6xh_JYHQmsxgUTnZj16hvD}zECfQvDIh`P?e&!_bfUL7eas*#7h zNx8p}w+OcZ*8&e9A9hAH_Io6xoe=22zg^>M2Z2Yh2O>p9SbRDkxB~gYWu6- W{F#-<=YNa<00003BnUwR z3J8m?Dk#r4v?z22Did_qA&zYYJ|OC>x%xK&$DkMmyqTbzMZA;l)jgqXv&HQQ@k>2<8Sn#9 z=QaXUk$#*3_B9>N!f~sYAB&Lp-||&hNB;uu!!AOGsC+~5Xoka9po^2g5+VPyBkK$7 zRQW2h`{`|}``D9@2hIq{H3LT)o9nKij8kF_LTUvt4){#-9}ykQa-m+! z90dL$yGy(lmU226hu!N9pj{)&ca15Z0d_n0o5E5~hxJ5>E=AVKjm5EKJNq?o6!4WJ zYZhzlHrUTG1AGB=NU)uTe3})W+;_MZyH&i&kzX8=c%e8KOK2O=Bf+i;+czhAI^W?* zj;@y@e;^p^6u2Kt=*}E=^BueIJ>AicZX?+-uUgf;9)NFZOv92Ll3>#b*hBO!p6c1` zQ~8*f^6#o{eOj_1A|7?l{SgT^lYoxc0SMr9&t?rWP%Vrpzf#lwK>NaI3PL#S?rzSD z(U$=ekZs{eWMKg?*t44p+>7*cA75%(0SqjZXed-7VHq<*`xv0QnVP>x^ULyRqX)Jt z+)^k}2=_^^)%)Sd-07m5ruCYdH`p)hp7J0fdWG9sYW+22f!0bHRn5^aYkpII9j`rAf?=G^xoF~cN8xPB~ zjge0IL21Z_!eT5T-O9S=SYFYtYkvBWiJM6x#a^y_O z5Na&OAe#%2!N^~7x~O&T8wv^rM>*0b&4$63rCPeBD6cY)7|^M2=HtiW;2hmXL z2({@+^o^OXVjwbg#XZpVz$r!YDJR_jGF~Bi8d!lWGmZX6m3^!E8`SO`$Hrejk0a{n zA>`k#q|v+R*q}rvc=9&L18_e{bHMhv%AV8w7{_jEOdDg7IM*_o!TIneglL%~I}*Fr z%^>}=kE5Td@}-)8)Uh31WWN8Q(3RE>O{X9WkBP`az|6CC$p0PgQt?Dh&5oza(QT!f z;~DJR@lX2p0%v>nZd}@gdbT-bjwwFnbm)Stbo^0tH`#k(khpXPcwh6!Ic5H&G=Bu< zjebOrNp~VqOCP!Ynl^3vzZuxoDCaibN$iNqTrq;#$5-=eXQEz(3j}j zb+1~oPbU5s7=et;uCw0(CzX;^u`v|*73r_f()d4mS~NOi=iXMdq6zRXK%NKRbP2sh P00000NkvXXu0mjf#yb@~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%96-seal.svg.png b/server/routers/bushou/images/60px-%E9%A6%96-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4adc4b224fc0e30d279c5fcec0ad9eac9af61149 GIT binary patch literal 1438 zcmV;P1!4M$P)9Y-5 zW7=w5XeFkiXsxY^)glF5h_2LyF2qHl;=-z+;-(ch{uYXeKOok>rKo7dUv%ML1*=r7 zRf?v6iEYeJ^O~6Sxi~Y-nfuPXzqyka;e9a7y>ri8&Utg^+i(fLTP*DPWZ$(*o=wGWwB(zV<1Z zXT59cksU;eex4xHuVg+=klCYTUiPb^Use$*T0|U`#o?g+&xH0t)yGr5lxy+Tk)p$? zuSk$P6`cPy+FF4#RedzAQXyFwyws^r7&4avy+QdGqy0R@tA|W`&mmJfg3LLp{HxJ^iBs<}Wa=X8A^m%T z%o0_$mXEVeeR(R46j>OYSLGywwL`L2S|2*~)u}X6WMQ!8RKoQkRbFGXzl&@xLi({+ zZ8ej%!F>tW^;g_x^${d2lr+E389E$O zL}FXpfKA9d+^b|a5QTw?$Zo2S?AHX|SVr8~9hCPCc}M=4tQFMw_*E}fNJ zcj|7yz~Uj~b(j~ct$T=`Ryl9n2|SLxf36d{y3BnSse2CM&+pXD14PR2Guk_erlus% zI|)3EOg}DnI$06Wok_oyg;PPIO3Ie zBGZd&%u&REHOO?+jl7p%8nUy%-^TTi=fspNVFEab4A04+{7-N$1myza0Ivi#s(Tx5 zu+HoqLKYP#9GOw--@|SqZt%Q%hi9;}g=uh8F{v_%KD@M>2l9=ZS2~`iGapabN_eLw z^xBIk%}g}hU`-G3eHC(g+6m)U`dT@LDvKoJ+u(NKGS7W#hADN3HQ~eHV-?!RfWMHb zW>lTEw++2`8#0VT)&bY3x)ork2_FU@b?UDJuOUVbl5QHwA>V5a1ohui^yQ5W#25E> zcza7(N)$cJ%zX59)TPWQVUzf7ajl`33Zg{t$v;yx? z8h+hI+zC~~N+d8it@_%7ry0d(_HZHck=c6ZdI5=C>_xt(*14l4!F}f<>6iiFZ0G(% z$ah`)J?iR>1<1DZwpG%6k8XxK_d3mD%Caf=Ql|8zcZ s1~Ljl!YIc9WXSKv{=Y<%CQWSq0}>0dW95}nM*si-07*qoM6N<$f-IS>^#A|> literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%99-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%A6%99-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e8c5fc4ff4db480a15028a82753e8829323f13 GIT binary patch literal 1586 zcmV-22F>}2P)h_;|9P_UHNKjvND z-rldhd-wWY&HE-BxZcd{%)8y0*_nkr^2lS5PzWpnI)VG+5_()*f?`G`&dm(}0D*mp~sWLkEB+pd@SB#e{J{1JDW_!)~B8`hk}j z;!C+2*_TIgH_{sI$X6e-C_%h!kfBF``+$+zQPUgO0G|R2fU*GE3BXSL4YkJG0kTSg z#lQyOo@lB^!!lAz?gei4pt}?}sL=imd;q)x9L8zzy*_hR0L=<*eY!@3!CAmR%H;is z6B?$_j3E_Tb^~*PV&(m7I1QfSG2d`tokF)8I6fXz%rO%&R8{z0QbsLK{_Ra*lnehe zI1N70W3IDn$zpam99WCf=$*jC0N$@P zo^2j7okg#cA}vz(c?Y7oO2LL(~Qrx@j8C3o+{+8MAOVdH~o8)FG<@ z#Ie2ZLbpnhR|?DrjwtWHBggXT%a9P|6=M^?$G}e>@3#SKfEJuTUIIBiL`#x3-3noch{<**zh%>4L?gB2* z=o)};f$hjL{$F7h_Ak0OyXs^X<;a)Rm+>8gr9h^aG{`cp1*QVmA&G|@enC>x4&>mm z2iTl^&Uu`SWLjHE-&;2$N5`B>JU~Ly4B#Vzs~b^92XH5YvnqX20L(@_Y!pL!k!r_g z;12`(wMaoAE2zV}gwux@u@or)Tnk(RY|`j{*JKs};}LJZ5__@18tuS28MDd*^*DhVw?oRGeRT zb_o89G~Vd}^!31V%5w>ll&Ik5NHx=faW5*0!RKqw>$K;0kTR@SMx-YVenoZb zP@&hh_aP-C3)lO|NDHHI#$Nr4|C#*zTn`zGH2zm{kJ%HDuW!-m_2`+(yMExbaHg1H zil%HI&M#yY&U=xjS0!*Bk~yuy>EQ>En4Uno{p*1?oIkAYCyIeX%KMBo*yd6?7#LG0rc}V`X1m$g0DEKcu|wFCX~i$ zK)<}wMR3kK1G}=#A?K_@zPu`9VMrN~p%&6Rfr|}zs&MWr`A)_*{x_a1jpSTzrX<=)n2-J_oz&!Ytv5#Gcf+8zSQ` zz|+E7Z|HQNjRVSwZo{>8$eS0Db^metpNKVy{x{d5Hx;Icuh$=NdIq^G67qJSInr+; zeoXZJMOY@e<7BidC%X}+WR%?!kvk{R=PK-p^t(Hw?uvLXqU>v&lw#~mEW=_X}`*tM8i(x*v$qq0ial~sC;otKSP9D{^c zOj6HzLXx4UJx8ujBJNvG4qx9u2A2Gk8zuP;sS7e#DG;9WsVd)a?-=j z!0!=#TMF&d1d_2Y<t@?)#&v?%O&Y&j$V*ou*QPwtSKJr$S`5&Y>;WN!bWJVki$BJ z)!k-&omhkqg!npkPPAG%;WzVA-tf3Gf`wJuw?^uA=B2zL;Z;WLi_{&;OL%W29CJed zX~MDTdoVBIy^-*aNL^cA!uty0_Pm7mM#7twPvMTdg!e|m9m*2`l?XQrXUwV58wpeH zxMGBd;3Fa5bzxe;y_ImaDcyuug`~t_AvR8ho+5mXuvT{pDW9ta!;46!Ymzq!mg1(8 z&-?Q>FmK#09_no^lvuR1P56?wMA~lcR_p7)B-vx((lV=i&94uYo@71ccsKdFpeLQy z`kdr!6%q%j&=cWd5%1%kL|vzFy0Ff%?c`wL#?B-mv>cNd^Hl?F%oWYbQ##L78M9dV zbe>;}(w>~shjqPtMtH)=Kgh8-$B3^OVQS{piR475@OKU45b%(2UCf0000Sa1@%>I3!>H*+Cou5 z1i@ml;Dw?fqCWIRgD|tTqNOG1^3;HSzfH%`&qm zdpVbxvnS>JAk6OB|DOE6GqXGM%?y+&QzlQUfwzH!z+K=t&ilUsL)+E={>&EYJnq242cSKN0;5f9cMarpog7eFh8z zRskoo(7$LLw^{b$oP|hDJw)EnnY;=72`n={n~SdD*IgR~sId55FRSt*GO)G3A^o+7S=);V z?z;=dMZjlbbjQ&_n>?k;O+b^>C2BIxM<79@frg0t z?kdfJfNL+Hf3yu2JX(D=x--r@ffnE%a5dt-r&YNx;98{xUp{On51D)n)FCw#M77}| zC_VfKc%XDQt-DKr=g?hIDn#>*(#$E6C#Q@@g1Hr=3(CIoBI*9k3#2+m7nFVFMX3Zl z6bCP;AW9|R6gv5EO40!jGmiU<@eh*@xL%e0Ku?lJa$zwvuxR5pF|IN*78TotI*Hm17Nv2ZY6$wDsNl|Y_96J0*8@c zdVu$lY1mA5yEGIwab}Y){CO|PE`dwHStR*bge;c#qW6gmS`MQVj3!_KGNog(OKH9> zuC@GFL3qCjvc(|{d>wMV26?vAz#De04aCMt0^Wq?4Pnw9Pp z5@-s^ki1}zP@Epa3a5$RfbtePxE3Tq@Xq_td%Ok(*-W5U0)G*_LEOr^Zz=K~1B2bi zAZp6F@&q!n@`CL|-U0t>CL$YOZXq>Zrc9Z_cnlot8~_|=bU6S3002ovPDHLkV1hPT BG=l&D literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%99-seal.svg.png b/server/routers/bushou/images/60px-%E9%A6%99-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..380fa51399afdc79e9fb65939544b40a2d13be0c GIT binary patch literal 1623 zcmV-d2B`UoP)TyOxOX3{Rd5fnR`6Qj`yX{wdbA37Bv0&jto~@*Q;UN5y=f z3VaA0i#o8XF&fCB(Yx1^X9m#-KU4JWCZN-NI{-|~M$B}v3JJU)xQ)Y?z6Xg2e*n}1 zLxHD=Ix7#{pM`K)tivs6?zNcbHefZ-Zk}%jj!P)t1<`H$k5rZkf$N1H{6IhNc z_>kTaF&v|TxxhLiVy$SyV4s%&vw_!0_=tU+q{7KL+gH-|?-zC`N!Ik3Ix+W|C>llIKLihAHaU@MW(Yk|9oJgpkwWunn6 zj(7|QZbhB2i^w^76&R7J^cCWK6vAq_Le%Tjj*_1kUZydKKKU_5XoFvfh_j11#X$cn!Y zTm_tzg1o`7>+me|Tm#&IwtCCZd|ZsIHAE_%M`}Btc#GYEV%q?Bns@Jo3L84YqlldS zttNer_-MsAWOdy*S}pJ>>X36#(0&ZE*sl@I^K~Y5qn|xODB+>by%p{OU?K9WE%Hb` zp>XaFAaWNsB(!789@Aq<4MGVwIQK4*wuCafo%>vw?d&vpn@eRZg;2srJNJ3#egaa_ zp=cC$A(d|h_7s&Fi45O(q_X{h-;wKReeE3Ts3tTe%I&Ds;coTLHSg+)-%$Jwd;?tO zylVs&#N^!%JWCK4CG0vHr=az75(?KIXl} zK9dHibSPohc*GH&h>X&#qW7)Hk`DvU0-i<(PRWL0nz6Xbm1oB(M)F(N4=p z$f|UM=X+TQox`2Zy^nAcrFS{aM2BxaLbk)=0)u5Ebc9P0wrcz~T5_x^*P)IWi`MK( zL_~aElx?f333r+FMD%aR7PLvQPRC$VM;nS}^v53wsfrPH=Ve@7c8)JWKe%j9sA~~A zK=%>0ofkwn>p5(lg@q)Og(yG}S@AZ*=BUqH`=jYID!(N(h!?a5#j=(Y zd1F2wJe3g+ox?daj|X|`T84gN84LUfd}Q(uL`G^Ng*&Nk6b6ceC0rjOa2ip|J@^T) zN5O#ekn=GU`Oa~5e1_s-pL*JJ3k*tBok+^E@JK-N!x1m~ASf9ZNV!=Cno_ z%KJekhkj(~39P*c`XeBXUk~@1H0wB%9pNCE(iPHZ+e{gjAA-(fZA#ae=oqkwX@Kea7vS#56=Y_!y)Qedt5Q_y@py VzqBxl_jLdO002ovPDHLkV1hSZ0h|B; literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%AC-ancient.svg.png b/server/routers/bushou/images/60px-%E9%A6%AC-ancient.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8bdc5bfcaa930812ee2397198becb790bb9411 GIT binary patch literal 1339 zcmV-B1;qM^P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 T`g`mKYGCkm^>bP0l+XkKVJyXq literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%AC-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E9%A6%AC-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..abc9d0d6bff661fde705fb9b40526f3e7a2e9932 GIT binary patch literal 1061 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^kC-@_1>}^Z=dNI2VAl0?aSVw#{PxCa|Cmyd10VU77i`(`pjl~Z($!KNkG+szU{<(zU5!d;a*vu*a!;V};*HA|WF{LrZfp~Y>S}BW zT4`{GVJT1l>olXpTZ;}CJU_QAz4-mk{rBg-|2y}y_4D#`1)fTiCaLbfxFm9BvEOU+ z1@}GoR{4ra{n^4lH7Sm1^D#m9?R@Qj($*P#tGu+wvhnw#($jpJ^M9LV70liLcg>yS z4;zv#&;L2#)$b+An=ZSvNq$RkccSRCPhG8h%1d|O_U&59plsDUOHf?geA>RgU&ljs zJmB?v@v(hIR`0rlOGKEGb#|z!&bjuuN3q>k|Gu6t)9*{)?{nOdnc9DSQtFX^D-K+> zn11otVS}W+2VP5zqHKB!w9aN;Gs*ijg)7u-$Dz+|M|+oj|CICa&`VC;7eW#1g@PxY z+8AVc&dbZgOJcIf^@XZB1#=lUXZhS%6}tQFIX#KBLc+mQFRJsjPha_++oowPQ@;C5 zqjepVoz9Ehde=EWm~r^l z7AY;38BuH7-k$K9dev;#QMa$J)?RzN;BTa-n##^=hWTQP|F0;#v*-BY<8q=LK0B8g21qtMf)tY;}$Qn zc+mEgEqLF9(qq%beSS8*{v#TiJWtpBm5!Ty;G*>trXH)G>Ky;1W>xH@N2m91Vfd6k zed~vXz`Ued;u=wsl30>zm0Xkxq!^403@vmGjC2hwLkx_q49%>J4YUmmtPBjMDs1&a d(U6;;l9^VCTf>uD-fut+44$rjF6*2UngFlN=Gg!M literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%AC-bronze-warring.svg.png b/server/routers/bushou/images/60px-%E9%A6%AC-bronze-warring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9e98f7e10df76d4b470037f3e97fcd708ebc97 GIT binary patch literal 1145 zcmV-<1cv*GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0to{U9lH|D5&!@Lfk{L`R9M69*jtEIRUF6h&&=qI zj%AjWrj7RGKBU zx;3>Av|R|3^9rpOgd0#{rm)xO^vT3yO{R{Ow<>f)nCL~-78;p6ISUQ>feW|@gvsjl z@PVP=a*l1qRULY(r`z;3Gnp;c(^bam;t5x((59F3^mDqtdgy9rmPdav@$x^aKTIm^ zA1#&|l2rj=nkRi{SjlSYJq%jC>1+Ig*8~9psF=&GDlJ>D9NBx>jRapQ^30(ICta!X1ar z_Y1QDPj^8{gH>XBbOpOXF>Yh_78_F3AzzU5ZQ53?qyzAGw-YD7D z8Y|K?x+!1qWZg?<`%`L$pM`hI_YGvc5T3^)!rrXX=V%&Xk5CUzwObfd4s0J=gz4#g zp)ezV?Ec>Pu@cKI`S!;LiswFc2Ym%9YH1gEIp{{4jXK0SR~V5ew!2w}J@!Tm6Y>OC z9nrqcYk6MwT90UNNblQa)<}ip1Fo>C004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0to~&JJR_m3jhEE>q$gGR9M69*js3qbsWd>*K}oN z<{_81nGRDrpp`*VOGDBWFG7N#qL89U6w{Kt3QSTm5Jj#n{@*Tqc-)qU_22*h7s1c(=J`Iq!~6L@zti{kSFTK%vF`7ZJKvGqdRFcgpW3A+_3eCWwB8)eLbxTD z&=Q|%y8!T9+NuOB7mjte$?p8>DZWgahBiA@+UI~O^DIQ28c>Tvx$}08vqCs7gw@JA z;oY*nPr;Ltf)(gsX|774Am;k%?)@9`-HIFW67@@s#)0Y8B;uOrTR|m z*B&>337UkatZH906Fga$?Wm~6ig zW^@{IZ)FQ!Z<&YOVWOE9*&ZhFd)-vPlS^ zBzY6H2}=^I$Qog3uE56^*58-$~Ecx?(kKesEK5uQz~`!w2+>!5C=7A;9HAL|sQ)iM{xy2UyQFv2P zvO~Y$A#a5+KVL!Ya^X9@(91d@V{(TT`&%dV%LjI*jKk@W>TR=dq(eN}-)~;dJ@!dw z)pyvX=;H@rU4Bmrk2vjw2fDl+u2GntKkQibe!XBMwNf~0Kz^`gDlNE3>^(}murWX2 z(j=C=u(k=|(d?S;b(yuf`I5mevOO#HBrMyJ?AiqfA4tO9f`hNSQXW5zaH`O^9^=#r z9~Tzd*J6#r-Zb7QfW}yrgt;e;=*d2NIju0=Y4vK=I%8UT+4869s`Ke#u_bE%6Iq{5 zPRd!UsGIOnN(@nIys1j?w;_cd&4V=wnM;8tt!6 z!>r0Gw-*9?G)11&l3tuv#ysI+S3qTIljC`o%C>TYQ+Bzgt3m$)2{^XE z@}8Dj0000bbVXQnWMOn=I%9HWVRU5xGB7bXEif`IFga8(G&(ggIyE>eFfckWFi+N; z2><{9C3HntbYx+4WjbwdWNBu305UK!I4v+TEigG$Ff=+fF*-FkD=;uRFfcxgB((ql N002ovPDHLkV1hk-KWqR1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%AC-clerical.svg.png b/server/routers/bushou/images/60px-%E9%A6%AC-clerical.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5d8cee4fe720a0647a8a9eee77ebab442ca3e4 GIT binary patch literal 1264 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 IM6N<$g6Vi)zyJUM literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%A6%AC-silk.svg.png b/server/routers/bushou/images/60px-%E9%A6%AC-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..98990d6a70444f016d2559946d7ca1df65e3186c GIT binary patch literal 1277 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AA%A8-slip.svg.png b/server/routers/bushou/images/60px-%E9%AA%A8-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..781452aa102c4611f18b2907f21e400512454508 GIT binary patch literal 1292 zcmV+n1@roeP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rc3?Bp@I42C}(f|Mi6iGxuR9M69m|bjCMHI(>P})UW zX(`wi1zH-aSosjpAR8heBvnCMVz5CHKobZbAx4Av;ETb;1Y9*fXsC%zgoHE@6N^Pa z0to~^3ZxB?k_t4o1kf&QQ`@qoWxL};r?Ydn>+bE`yG=+q^DuMIoO}LrX6DQ}Gw_fe zI4Y-`%lJqiZs4N`1cC-8*byITOKB=E@evtuWx8ZtOpRMsr%{VQu=Rg>XHd#}G)jvF zf+}}_S4nkEq$-|=#eBd%F3_t1M#^G0fUA_c4L~8AsirF?T%^=%gES-$9ZFr0rkF4R z8mPl>;e8xm?TCcHuX1=0FGM|!T;VFs+`>Y zA7Z*i={dp)c6J{g^QoSy)O=y#|Cj(&AUN-2jdP`vlNP^xgu5}Jda1`p9Rfj^5+`fi z!F^I`;!W;r+~*hrz`yutr;9GyXd^%?y?}>ptYH_&oE;#qbAZWFy!WMr6~i3@zmdRi znX4FS^w$%z&LLYn1M}I;Zye?w(vo3q3JbYr*;3uK(QVplk= z3&1grx4;Z|3j#rhJcaV;({}7R_OhFAIYB^i&ycDOS0Gq#2Hc-N`J%F^FrP5da)g!= zlzndla6%=+kDF#6VNR)a8pt+%F(l8(zOQBS(1Jj)-82#Si&r>KSbi;%wE$9>N-dy05UK!H!U$TEi*AxFf=+dFgi6hD=;uRFff7Yq2vGn03~!qSaf7z zbY(hiZ)9m^c>ppnF*hwSGA%PPR4_C;GcYeQ)ICzdXt7r40AisVfZcmgPS=?HLZO*P7q z0jhfjo4R{GVW7YHua8eEQ zO~nboCzuWT9oP!=MBFa{{~(?*x7vy)r2wo2MhF|R54agN_}$~It4 zk_wX?8d2E`EI9 z;HP;&3-aKn1J7u6kIzBB%;_RH@SJZ^XBMyyIH=YAii~HHJY0H_@_!syhJ>F!Q;`Kk zGq4ai4e4or*P|^e%8Y;i<1`ti{|LzX8vC%FRz8uLZacS^q}$^zMvwPfP*X z#n2VnNV*-!8NeZARkhzB|K}94Q?byX%mXRp6@lfzE>G6uz^R5d;sTqBq!|Rx)A9#_ z^$}&8k@c=WB~3wgH9LUC$h371G9UYFMYeu=k?_=~(Mx~3D4oXOIa+=TunM>Xamyye z$Y~C;Hvw;W|925I7*D>F!D&Lv4lVxA;pnI;FhK)N2*4gL~& z$F4#~=B3KL9>nDVjzJzoD{zLFSGkYi)YWfjTi+9I$S5H1v|4tZ ztI}DybX4@yLpct0$DrjM(eRbCahK(>B^%4OV$%KxCGpkM?;T#!naZT zkGk(B*wdSBDw#erh+_`$HFExQxI)>y*#W$TZ0e68U*Fn9e07d${sYsX(97NF8&3cL N002ovPDHLkV1o7}t{4CS literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AB%98-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E9%AB%98-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..248e1dd1e8d1fe6bf6876a7d8fd184343f5029c2 GIT binary patch literal 1225 zcmV;)1UCDLP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0tgE&34M=d3;+NF(Md!>R9M69nN3VwRTO|fh8b|M zl^H}@G(d)u8rzzHh}1-z*xH40W3ZC6nl4>6(S-}4Nf$0`Of+%f&kjsXAuKd$NYm7$ zYK^sO4PYR(h)sh;T7Cwm{1m3(yDsMPc<;^of4oUddfwu`x%a&L%{lL!d(Yf~`|`h# zQ+!CW@YphD5DXU{{Wb!D;0I!bwRcj21s@a+TSTvl6)3b93jCf1D-dKk9zL{`PgUS` zjl<9IaG2Pa7?Ge=I*3xuWfeWm8{t4(_*R8nWv}dwb57&*Z%Az|^l|!7t5ez(LnDAE%y>|?H zf;AG>(>lM4y8x`QBtQ3C=shUgPQGLgfUJDhRHBaHc53;9Nd$jU4@{eC#b}UsUo%RC zCYrdxJ-emPy;=3LuU$4ep}5*h9Biq@ zn=;5bMr0N*kOg25KZ3m9VsNQ^)2$3zIyoDLtK$GnnPN92MDQJ3oz?Kb%MP1F2;khp zvEnM_0tZ(k2PkEpJ8b7g0BShO-^{YYqAYnzC?dsS01ojdv#bKkcJ+t7H1J(s0q6cw zxWIOQ;Qj#E+|}XF)iK+5d5r;*JVG@|OUn*(+7DPiw#XcFq?urt-x<_xj>RNMkRZ;Z z?Bf-ll>IgST>U))!98j$HbU!6IU`*?>Mxyg7XQYC`(*(Dg-f<2gCn?DZV29Gqv)Rr zV(~2>;EZgif>@j}>`S7a({c^*D}1oKWg7Y?BNQ4+NY4A zA}>B%yV}g+S=sK@{XUFI+_>78HVI6RVEx(bfNT%xdY=N|rsf17?NqHegY_DHvOOY8 zzntWPYBiL4FsiunO>E(3*e$wcr0mY#{vy__%1n(MpTMdU#n^%iQ z>m!7nz4jKb0t#mhy}$6RjA6Ze&Q*h}=kY0*5OiCNy{tLa6#UF{hVeHMmIqUg(nh~5 zY0YIfC+Xp|&cz$Di(`fT!{EMH%6|^un<@h0d5!=803~!qSaf7zbY(hYa%Ew3WdJfT zF*q$SGA%GTR539+G&MRfI4dwPIxsNd8!jUN001R)MObuXVRU6WZEs|0W_bWIFflkS nFfuJLI8-q)Iy5ypFgPnPFgh?WkVclD00000NkvXXu0mjfMUEj+ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AB%98-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E9%AB%98-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb88f9ebb9887641a6c91536c9d1aef2c437964 GIT binary patch literal 1288 zcmV+j1^4=iP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 LNkvXXu0mjfjcGb& literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AB%98-bronze.svg.png b/server/routers/bushou/images/60px-%E9%AB%98-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..df9ce7146ef41784d7fedb859fc449d357e752cc GIT binary patch literal 1263 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 AH~;_u literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AB%9F-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E9%AB%9F-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..021e074bbcb9fcbbd54d3a822e8a52ea71d5737e GIT binary patch literal 1026 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^Pnbl-B@Cyn(#mIGVCM34aSVw#{Psp{M@Xr}@sItcm114&6$ey zIh(ZI)`+dXVpJLacJsN)qX*}q`~JrGpvhaWs+iTc{><6V z@o-(rm1Xe}Mq4z!4l})Hn69?C-==M;tH`Yw#XWQSqGg4inakTma>UL&VKmXEeU8aF zCEG)c{AMDL%AN9?57&!5dvblX8RzcW1zKx7_tx|;K9t~mJ4XAB%rx(RZrL^Km`hfy z+U?i9`>UD756@HsSJw&!`46l!SKZgBNvdbE(Q1)zEjVDBu+ZSexth}}pUgBlE&FVz zCx`LbPcs7yxphK?hJjcx8TS;Z@J zMbeg^Tg%yfaAsAj?n_zm=#;Iz&v@mlW-aICV7_M%8@|l&D zeXBY&Wl3OL^yTd8mhej#iyrQftZY1e&hz|v^95-^R`>LB&gM+MFIIP9UioC5mm>F0 zx!e=4GU9gb_FI_eTxWVVWOl1vu<=G;ryti2donM4qA05PrQ%$#^4qJj*Q^z5UUju; zM+e8t7gbBmP3b&a_UhZO6StnHoUcBqwfVo%+3APOxNB5fp1S7#S|@U7amLqG0`s)k z{;az&|Jn~D#Wg3gbAP4liXEz*dE)P?L$f7!n>yzDam}soI=8{yB5AJWxjeRSM(!=| zuDC?9-$~jV`|Hb2^Z)<-celQejrbznlHNLN+oFxrS8(Zz{6Ch`8c-N!ceXy`tIzV} zqv?C%XUx7{WG=Gx(d>&1;e{0@2aX3y^A^<4i=I`_y5rOS(-k~6Z2#Whe5t;8$tL|- z`^)8m&;8<+UutyOvv=QhU`A0bag8WRNi0dVN-jzTQVd20Mh3bDM!H6ZAx6elMkZD! pmf8jeRt5%gy|b5~Xvob^$xN%nts(z{vII~AgQu&X%Q~loCIE6U#RdQX literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AB%9F-seal.svg.png b/server/routers/bushou/images/60px-%E9%AB%9F-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7a54eb33dd2bd460e1f213f8cea36edefe1bccd2 GIT binary patch literal 1500 zcmV<21ta>2P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rf0s|EkIYKfqd;kChrHJTta)gqc|#A_^(L=!cVCMIpw#A}}#qp7`UgI3V^V3nvZsA#<5C02z@ z0F4S%)IqdLR0a?k8Fd84nX~%9KBwoLnK|b$=S$;*>w7tC@3p@FxA$4=zt-OTB>yLA zsLAShbImZ_WJAFS!+niiLZ>#r^G)`jcDgm9%5&lVzxIGC^Vhjc13vbek9?*Bd+Y|o zjlekVR`>B6Wv11B80>0i$O+3FhlwuKT%+F{?ZUjlZ}TGIr4$Ftg$`Hru{qEEPAwTZ z*KT2xF@pzQCfu2R|5B$A9yh8eH2*GyzZUsiWRI}L)OrHz4&jZ0Hr+cySZ88_y*KGi z1)KT0g?7{Hi|7_T!Z`)K(IZ0G;2_*8gnv7*mU9C>D z%vHXE6i|mc3mrE49w%qD%70cZ4f&_5jJax(Ap_2A&|Tv@y7XjQk4Ko8=9^9OoCb?M zoQPtfUZ=>}>lQnyvw+l-O`r$(O z)d1E9drt`es6WttBZL!+Mz#ol>({m^tu~XKUMH+58F^6HW>`PLx;#7BQ-pA7$=KOK zxU!G!UxctQn~Z)~*sif`W&aV@m06xGCp=vtN%unzvOE2s`P9473%FSbvx_X7eJ*S; zI-B)gBZL;0`_3%TCQLS7m$0rhdc)fd;vbQ zJ^}ZX@%y8ge4a;x^YOm1t}pXG!4j7Y4)_?&Sd*H$ z@~x)LR#N9xzR7dFVZp#Z@1D*mt9B`{ykHZ{Z z<~PPtqj5_==g69Xn~<{|bYpm*6@Qpc9HnxPX?VpQgAJ~+=+Fzk!n6T^k1g@~xdqtf zib}~<8F&oo5KbE|H{Zb}z@O;B(IsAYYQPO?rv@dD3!4iEvRt43a;+xqWsE&X2(8t6 z?8+>rAHYFwY4JfzEsNt_ohxI17KEBazHJWN$Bxz(!Qk7;MWcOY{i$gdfT-+ zlC~K~?9ZiB<@RTXf9=-+eq>gsr*Zup!26d8KK8nw05UK#FfA}LEif}wGBG+bFgi6iD=;uRFfh0?K=J?p03~!qSaf7z zbY(hiZ)9m^c>ppnGB7PLGA%GOR5CF-GB7$dH!CnOIxsNFZum|B00008Eq_`!df>^0d1k z<8dTAErd2RM+Ik7MzMOk_AQNEuW=J?;vUUT-|+xMq0-~MZJ-ul#U z8-Dqi`|tjLz4rd?&h@YB?_cNr|5(0fU(A2&2f-b32b0||G)c(V{NQrp;gqtLRE&Bl zV)8@IDTKZEtRqLEMMO?`md=MK2?y16a&$Qzla^o3YCJmU!G_E|+ZMQX>~>7N9eG#V zZ}Ji8BYBsa8S=MoNG)Oerf`IxYvu#}G7evkk9~{`DX!n6Y*gCI>KeBzy2vW8E$wh) z*6osfC~t8_#CfH|lg|cG&wbZ?V!ksm^UD^^r5!UJtX}WPeQ3@Wm=oGD_2N|xIR&MZ z-~9jjBGT44$GC({exq+@+E!iqNHuBq{s)~LhG!O@bKawR(*J{)i?OV17Sq%Y)4C>Z zf$zyLW(%g)HLVuhY508~qv2Kk9QhWG;x^VTQwd~HVaCoytQ!_--i&wSTAZhjV8$2x% z&jZpGU8XI}ar*P&l9!nBp^}1^OZ%F<9%wxhZr;Nr?-2<%qeH*;|H38xIF)zkH=zq5G&UJ3@R> z|HUxX4)1&WB%bVykrLv(oyPUzobeGwef1N?9i4h#bso)l{C0sv;f39oU-Erb*>y#< zqo{qFi`}EP@b`1|lkUl1?zrHz%6q;quYBa|qj~k2$!vOVXL>E~tXtmnsp7V_i}Bv% zG_!x7`mS2X>AyZb)y(KF$LGK2zke<_wV1QXY@VMqr(v_o>7%y&N8+DMs&wMs{Da%D zLuyviv>ERwo@CuO>E!<(<&V|R1qFM((3L&}%xbD7t`Q|Ei6yC4$wjF^iowXh$UxV? zNY}_H#K^$P)Xd7jK-<6oNN$^amLEk!ZhlH;S|x4`$Iq2+25MmNboFyt=akR{0H#UK AL;wH) literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%A5-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%AC%A5-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..026be083e9569d200dcdfc6743462813d7cc68e6 GIT binary patch literal 1668 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%A5-seal.svg.png b/server/routers/bushou/images/60px-%E9%AC%A5-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7ef4bd5a287adf185ea86398cf1d1941cbd891 GIT binary patch literal 1541 zcmV+g2KxDlP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1`7xs94co6V*mgJ4M{{nR9M69*nMo()g8z2SCLWr zAlPCFV;~a+NkwFvkC8Y9GYMgcG8VJAOtXlKiCKnQvScpXGJ|vTX-k+f5@Xzhvf&ie zKh!GQ7&AsO_`o(DV^EN$#nLtf3N5|g{n3-_g?3kdzn1MEKR3C#_nhzV_dZYG@A;m? z$NC?s;)JXwyV7}PX)w+>60dGNaR=o`JEt{iSHN(3|S8P&i@~KH>ZNg?saY*9+T> zcDryrI)$Z}DI6+JQj@R*D~0W;Y?)O;A&u0K8uedmYF&+AIO+_{MJs0FQ>apv?B?Qh zoQs`csdWn8P~rAG;JGUC9C~mOc40<>A53mjV*^?Cf=MpU~b`wag?*peFeiqPX-p?Xe-kCUf>k<7_Y%C zrl`bhld#6`yzfpE(i(Jwp+D(w{>$p@aJUszXM z2WPv-%k~L}iaEwo2aoaLR#U-kLbyEd#(2LFo+$1_12Mce&G&$w7W&fgKV=Fy-yvah z{tTqjOG0?lMJ1&V2!|44u@F|MHcfS^pKqVg zlY&v^S*sxQx_sK?_c7rY$J$CdS!e4i9mSuKR052|Sw9v(CjBebw?Nlvw;xZi%Lfd)1EmfDfU zUTK>U4p=p0GE?gh$({DQOZ~_lRC|SXcMQ?j55vqgniPcafiH~&_F{*H7fn0?+gToT zR4C-hr;nf8zX^ZJ5Q{FgUFaWf(EOTkz_d)yOtw>aE3>N}qs>FQ&qryVf-pZnwn4ve zLC&-FFY|+!2yMBBY>CiP?#c2mJqJy>E>SiKlg!8qo|TgM?CP+Kd{+@LjdZD$UE78O z9+%Egd9;U=5as~a;BZcG3uQv=M}VtK&d6ESNxAK!Jh+<^xtAPL{pA~79^78O)n(OJ zyc5a+-cLFUZTS@79cGaObFZdtB1b5{HZ!7PMWmTW1Di`?ebcK>f_Zh001R)MObuXVRU6WZEs|0W_bWI rFflkSFg7hQF;p-(Ix;yrGB_(RFgh?WiN%=C00000NkvXXu0mjfXK%`A literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%AF-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%AC%AF-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..93b4e3fcce60d3e588ed34212e5654f79318aed3 GIT binary patch literal 1496 zcmV;}1t*Q+fpg{r7U zK|mxRN_`VCCW?yUJHZzZyge3f-n^L%#gV~fcu^|zNc{W3x^uGGUUFpSyTcW4DNQ| zR13En_}t(=5@N#^kF%*@>m6_jx?#4!mBrCWBvtu)fw>CjB;b34vm`|4!9cgid(+8- z0x=fdxMltDYk_t{CId7BuLApw{%4UW9fa}Z_ZGy4GW5XpdLA-oAyL_M+H8vqxhsGx zjXw1at8?%jMX<9E8T|Rm*i5BgjnKA8p9nT7lWy?(Rw#X4 zz)cpp>w#W$NBe;LEL?RrP}lr2rGKPFE)l4E<&VJWAGxFe8 zqQ5a8;y=`|wH_;8!Z)}bIZT)iUt^Jb#=;AFI6>Iv$+SA!?u13?29NLz$o_tt+^7E( zc4xEg{ygTb#t)clqB>Cs=Aau}3mgVqjXk$*F!e^Y8t;lPl*vD}j88^?C{5U-G2|XL<^}M6QaFho3vF0{z9y@cu@vx?GQI#mh}8fO zAdy}TRF%MbkH6b8-^q%;KX5NGIb$mN+PqO2o8NHy#rF{uUNA&KAYUbyP7U$fN%1gYb;U@$^btAL)=V`j=RwvxTqigO!OeukjESq zz?U9>2QbFb)>u#lwBb9j9ed$U#ihXe!1Ktu4Z{TdB0`(@yXcrr?rR#hm*#_7pb`Ic zwV5LSXH7JsJKc$7Qdc4CFDS_`M;^{Jq<*ym*lOr{4H%xF?M_GoFA$t3??Xzqzab87 z1^x=*XOKg}wFBvd3+AG4J1*^O;0}V5lmiY`z`Z~V`8&BAsZX6)1bbt}MBrv*ZMNXw z7MMZqfLo(+p$5HpkU>sBgBl~y9iCrYbCSm_bcfr3xw%33oo_pLNc;Bz!}KeodjG6 zJdW(gD!*}{4R^u0O9mV94ejsVI1J}2dU|58D-jGwqHEUBTO#NhhQ5wtyEH5G zJFPH`GV~o2LDwE+{eypz9t+}hxX<`~b_88V;@h?*f}TWCfu1&YAs@B4V4W8-YVdbJY|Ogmm?L;to&YL&adOXL7xG9Z1lAt8Pi7OHBEVK3{rNTfK(~ZL_SGU zQ4hQrvyHLiIil6HvRl#rrZA93zy2(=H4`o16%BPr4xNvae*^1o#hxJ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%AF-bronze.svg.png b/server/routers/bushou/images/60px-%E9%AC%AF-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..938daf8e736808376147fbf69e473db5f7780e30 GIT binary patch literal 1556 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 P00000NkvXXu0mjf=-Qde literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%AF-seal.svg.png b/server/routers/bushou/images/60px-%E9%AC%AF-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bbd67f6e2939fb0700f03bb3c7925674a56887 GIT binary patch literal 1512 zcmVP)VABcZ6!AGJJWAul_sEL}0+8C7tZP55bs1FjO zRY9VuA!<|#6iN|jX|F%dPWH^)y^rqB?Y-jtlFi+nGmmq2=AJn-vrwTzg$n;8s)2JO z(wl(#0?OC;Rj0U21il2)K#L>m0eXRZBFZfc${h;I?gQQg8VYFhG~jn&D{y`+trPGF zqHr3x+L3*vWUm9`m29(;>FW-aXDaXtunkzI(wD0IYvU+g8>djfbvf#3M|$xT;7+9X zmIA}T-NF5t$X}u#_!f9KC_4-21Wpc~%`ZTsx<4_2?y=ZG__i;Oke>x?S9#WB_q5A6 zU?ni1%6#UOX;-o}$zxxK^vQsQEuH)%mmJrO$cRz3O_>E@ZfZ3|Yf|U_N$lo}})L#`TkN(z{c#Nexuje)2a8k=lAQ7G3S4x}+cHiCHFUf>^Oj&<8R0hyN@f-B#~UtiE> zwyAJTn2P*o%`{bvYbWq1_I6J!lJ>A>GOz&ok4_4%35Wx7sVAI{YLK3uLS_`!g-lDI zA|vLQq6XVDAE5}*l#k`1FNTrm%8&wX@ZCr`8C(P0=%ig)3Pp;|G-OWyj!b8DYYFx8 zMgtOctwA;kqP+4j@NB6ROhOBCgz`MF2{{+aHT@g}UPfZ`{|x5=FCZaczWH?oI|g4_ z0)1mskM!ganT8D_>*5aJabN|q)~yFlS7o{>FGre{ChT*h{m8Dx3S@ZZ+kbjTm5n-L zEjwPq-s5V{ojrp&s{CH$1(r2m6FQyI8f(yJ%AJ(?*8$y#qFo8W2>0wj%TFS(GS7WbsKEYqav1({A8$kM+kQg>1MPrS>5Q z+rF5Ay@ozO87w6mfu9ML>cc+hPD&l{6f%O+$O|qx(~;iQp8F=xZL|WfQlgW@DCQ9! zo0_2H!jfu4ap$xiWPyKG@LY?0spEdFbIfrm@?lCR_ThMi3Kc3;$j86I(d4>{ThcWE O0000x9R literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%B2-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%AC%B2-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..12d7e9a07750ec4e757c7966f6daacd0c5cfd4ef GIT binary patch literal 2007 zcmV;|2PpW7P)EiXN;`>;l?dA_>ihq9jTzOH9j(Ld`NoNJT0yD212O zbkrGjZqAIShqb?RKEGM(JNvtgGxdj$^PPS6UVE*5S+~7U74RT19T*J^2L=KIfDWJy zK`U?$Xa<^qc2{=Bm7jCvO+brlcN{q4p3|;wGd+wdU@tJKoBKI~3`DE@Y@$4Pt?tp# zFNS72&<0eA{n(jF6h91dPfwu**aJLV0PX~)^dK`A1ATx| z!0-Za2)G9r+@maA9Mlzn!^j%H22ohm$bR_0p#}J?DpXJf3_)i45?~}S0=Nw5>z+V^ z*M`3L2d)MtcLS5{Ks_=E?T9r9bWXtu(c#LPxzL)lxX*gv1n@Pmw*tu|5$RM}ezS@MEH;auqMsDrIYdHxtk}Kv&_;r{>5& zbxw4OO4-?jG&Eam+2_>AOJI%8v4k`muJOCFCV=l(AOIp`|a{m9k#D zq@#?biF-AHd#zcDF6lG^UzFrPUIIs5!Zgh1ZgVyCrX{UuWNn#ef{zxw1c{fYAQ9B1 zi0@pBL{8PfxJaAPz$-{_a2lDt7Ru?JKMQnBhx~G-<9=1H0A;6QsG~jw9MC>lK zA~RV;1~-gDz;DPPH6XdGdf+7RtNZOtlFl@N9|N975(2#)^+kO`^O@;aEuu3jG;9SHQ=Y+|#?8QTWQD}>z0o4@QcR-`;Q4N1d=R2LwgW!{ z3y`Jli`NkTEZ&bI+o}te#5DROxf~^oLJsS!H0~^=zpcOoPx@8BN`*%FnXWbb(5QR@ znCRJgfa`$wfE|dZRYa89ElSd%Z}bRGVuAk(mYhy_8VaPXk6b6}fihae_k9&*mCK{G4cuum}WLUfA{HUi6x-=Z!n zAgW#)o!Oop)&iRi8iDfAY>k z1>}r2icVl5c1SrKcmuys_84+77=?B+Vve%U3@^bp4Z9E@y%JtWQneb5P9%Es!FNjg zRa(X0jm|0wya-*`PGAkm4#ValGi_<@xGN9=Rx544(JJmSI*Jo`F}kpafoDl~axfQL z=!G8bS19e)YZZ4Homc`}!fpd@@?b0u9~-=!0Pd~OR&zo&Xcc{zbT#&#-GZcmvSKI_ zg=zfkBmVGxta9HzM{_992XEhFS(Y{0i4b36gfXqTxoC3Zzew%>UTg&y-vY#b6 z!+UHu{;{xyO~Cg^{;7bhf(FOLDav=X>Jg>ZN%=^onF~`h4-xOfZwDSgRzet`BA4yL z*bGdC{LgOgaE~v}P}bo0l{K zgLqaoi13!4X$oF^vIssgXcCMy$_HeixeRz4J2zG`OJRX6mn`oY&Lf)AFdzGrq2w!s z1-1kmk{3q~mOGi%5)_eZ%ovfmr4LH|2aL-68bmO%csk{2uor-ken(I%p=#^b?DSl~GKEPAyt3#@C! zC&_-_aw>X^edL0F@cE|6R*sHkudI~>*bk)NH!!Z z=FpY@Mq+%4mqQghkbiRx%Yl(7-a@VoZbzJd?Pfq440UwF0)G{*5LMv=ki62LNWy(N p`TNq{jVqCaULBIWSV~A4{tN9aDIL=vqQC$E002ovPDHLkV1n%3m(BnH literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%B2-bronze.svg.png b/server/routers/bushou/images/60px-%E9%AC%B2-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfc875847b42f0784df67bae3115fd9769bc740 GIT binary patch literal 2611 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 VDPVyK=EVR2002ovPDHLkV1l2H-V6W$ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%B2-oracle.svg.png b/server/routers/bushou/images/60px-%E9%AC%B2-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..81368773d94a4e06eb7c4248feaa423170d38705 GIT binary patch literal 2471 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%B2-seal.svg.png b/server/routers/bushou/images/60px-%E9%AC%B2-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ff461dbdf9fddd1cd73c260ecc514a5c329022 GIT binary patch literal 1278 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%BC-bronze.svg.png b/server/routers/bushou/images/60px-%E9%AC%BC-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6685fadb02d0c568f37b1974bdc4cac2f4117d GIT binary patch literal 884 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^j~LlltwnEqUtbH9ukmzo42d}WcEbziq@^e*7g>RJ{mtl>H9`V)&URkf9S zt}J`Gv+RZW;oaX`rt{w~zHj^d*}+v|d-^{0+AUhQ(RYbJi}kvL(*;=+&r40ek(43DDvBU&^cf6{thnRRS^Mv8iT&+jna5Bn}WzqxuwY37n&1ygI^ zhPSg-tl#XSm_Z;&JOmHp4B3 ziqkD^k6Q{$xiU8P`EQyT=f!bIa;@>TYL>(~63=T`Kl}4~UyX9e`Y!WLv)E~KSo!3& zO#2qy6)T^>qp)03`QbC3qLy+tt8-%8(_aZP+eOEJTpv2yBF`;y`-8VR8=}{&dmO!1 z>sFw6?imB`X-t)M6V?6OWHwuA-`RJdPOL?6ZHV~)kF}B9Z*=*0%ro70g1I|0X#z9D zHf!xI-9NX^;o8z_CoF%>?`wg=%ls|ZBQzKdL^|rPupO3}@W@kP)-`r<=Rf~gyO%vK zI&pj67RPB{4#@TYkP$lj+FFjIS6nPK;T6Mj$=HO&n#-y#RB&spdi$en>UPJ#+~W`b zPqfOsP$si3`B_vEci)A#tF!qI${rEBxqiCjotVIrvQ738%jNn?WgSmkcqg@Io@dMD zKkRQGimi^S{KXr0#p9Fz;#Fn9q^Vls8c~vxSdwa$T$Bo=7>o=IEp!bGbq&ly3{0&| sEv<|UwG9lc3=E9RRw$xq$jwj5OsmAL!AVHu5r>mdKI;Vst0O(9{AOHXW literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AC%BC-oracle.svg.png b/server/routers/bushou/images/60px-%E9%AC%BC-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a5867e6e19b24c873b7f0afe7fc476fda6f57e54 GIT binary patch literal 1032 zcmV+j1o!)iP)#i>OGcWck-{CJ)iS18N#@E=?@O%UhVMGXFxLgR$ z`2U{4un;8!SdS}lrx4@7Rvk4 z^9H<#i-pc?9d5w6IeBj>DD!Ae+L`SNEQ3ATZ=avwVQd$A=Id}E$8LL&_?otoo6PH9V7Nvy%&vNdvdWOFuNj%pUkreqJSn^K1A4leh$Z4SB8* zBH?=+!e6!Y&6<1lv4mQa@rZIdtp7AeOI!5KZL%Of$7e#@92dfOxv&UWq5Z|mZedo| zF`cfK7QzNRAgp|1_6uP>QM<;4kMvLN_da}(LPW|oJQrj5DJOleFvXndqL!|(QRtN7 z_W6hIe)z8Osp3xQ#vbY_g{!shh2Q9%v~q|i5%D#Ri+ZLmG3$k4s?ovUH9P%guLP#% z9$ClU7RKaPqx2KP&c>2wSk|#?Yw7*?IC}R^F9fEfPj)CeBs;s?q&c*Q$`q7pJzT_A ztZjJy$n3@*oS&2Df-(h_?eO){^N+Rr5S|x$@A!R^DP*sRCmToci{>z%z~g35FqR~P zLin~Cf5))X5_h!D3yK~64G#)iLnj40Lkk-q^8QfonxH8(xU{2cM z+Wk~vcXLEIQfbA;bdqK%!{JpqX zY?sC6FuYs4PYP@2lb+4Oj^=H>7E)1BQBhG*GXDcb0kh_G9+IR00000fjm8)Q z#el{K;e+vmF+q$E5>x$viW-fvKB6H?qDCcv5rtqdMtnd}d6*P5wgoLx?1L7tTR)t= z*|~G)?tSm_VgJb_d*_~W=A50GGv}PSP(leMlu$wmmjUa5pMZHq)+KRN07rnaY&!s) zR#c4=#%<(`wOVVjlo?lmF{T*$?n7q2;7CQ}uL0_TG*AbW8)z;E?lANZ0o#E+z(BSy z1N0$VU>mS6qJFWU3FrX2aW2)k+fLxd!kFbm3Rnq@=20+68wUOa_9HW#kM?Dvug1W5 zR8yiGSO&}mCIQvirh4Ehz~?v(cojH9lV1+Z0PX?4Gw`fRz$RCm51dp69|WfR z>0P1G>dr0@{2FYEecORuz(L?2;Fy7?0eA+OrS-oJd;$E3czY8sz(Qb+)>n|@Nk1lr z0`S&hKfCt_;C&3|lCBHD?||Q>dRTj&2wdosw--55EFAI4R|d3ceJ6n)pZt;VAkKe! z3u3qzZqfL9@m`kIz{iF$cZJa12ETjwO`sWAqV&xNenA3+Uf^HE(HvE1>VXF|S(A|f zVyo6)i5y{Vz=G_vjt-yt#)eygABcXm^Z}hp>++z_0IMlNJZ)hP@FZe<#-Lzatq)m2 zjd3X+$3Ip9T$*jOmETo)c)EZQWE&huj->%)YxDwpk<@T6@Lvo%76i4xS2$ib6x=0G7x+ladp9aiW*Ov(s9NFgN|wb1@G@GugnOv=(#k}CnF zk$n1T-~@J~7rBh{w?eZ%0XuwQGBPWcB5RT3C5E&3BkuoDX!HDwM48@qyQW02X1EK{|bVMSKU$rTTZ zhF{4k^;V2>)4)r}zSf;l4{|2IhV1$CVjR~Kt>mJuEx-*(kY5v%{952~c1ky6t*B*pA5t~w=@P(ld_;eTz*e2<$Qz^niO002ov JPDHLkV1nV6xo7|Y literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AD%9A-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%AD%9A-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ff93852939b981ce6f2a35f5543deb394d0a3b88 GIT binary patch literal 1557 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 P00000NkvXXu0mjfZYOB( literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%AD%9A-oracle.svg.png b/server/routers/bushou/images/60px-%E9%AD%9A-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ce4b0d79223fe9ad7a03d60cae5915d53d2b4798 GIT binary patch literal 1566 zcmV+(2I2XMP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 JPDHLkV1g6(EB^oh literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%B9%B5-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%B9%B5-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..c30446aa4a8b4b4276658facbaffd13d17d5e6b8 GIT binary patch literal 1591 zcmV-72FUq|P)HK8(W0ouje=6#wJj=5YfQJSO-x^s7eCCsymQaH z=e@hV`_kG!40)Ne&D?ut&di((|1%U9Xx)XtEMRMa){hl)fpLpg7Fd>8a5rg%hk=SX z7oQa8Vip>e-&26=;#@p#8*T<3)_9GU9Ob}Fpc<$F#(=>%g^L0S;A~(S@FtKVy`8<# zKA;^jgXuBL?itm<%|IK_hd%|g(E;Fb#0(|`E(SILBSfd98*KqcgQU@@==@y;fc0G}G>9w6p3ya?D~5XPo=T*j4X<2D-RPavK>+x)Sf;b&=! z4+G!02z9$Qt_<S_8)_b?;q=xgt?%)qcSRTJ2mFvSX1`yd!@S{9 z<+trz)P%hPI7S;&g}Wn40nci@21ULavSQz2b>Cz1&}*1-Xp!WvZaO~%IaIVkIe189*MP8l;V64tCaqK`xQFO z8y-=9S7zzA0(ea0{e;BgOL10P8~U}F)P zRgz6w9~EkZw>_K+{_v!-@LO72DeyKzxY;2~^ckG=6>LSy|Bi=9wvkN#O%eXU;ZF(W*>z);c zxouh(UVQ&(GzgG~d)pn%dt|t`}4pm6a`FSK+@cICLK!TV{kr4HeMJ=)=P0pwlDeN6~IF-!s z@zsJ#6a(}t*4Qq^;`VsOz(qj4#?Ka&MT#iSVI9T5$w(YM!}>eZqSG-~NBWQ&m|aQf zL1Og*;1^_9e1YtU34t=CJkwA9&f-|}-(099nzPqL2grRZ5j)o4?MlTf{e#5iw;|zY zXyn6&YmuYJ7H}F8Czm2NdIT^D(=0b{eaW6^w3xXjeX9ls; pL5tUG{lC+qfq?5C!4VuT_zwbw=98%O4Ws}7002ovPDHLkV1n!1|DFH< literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%B9%B5-bronze.svg.png b/server/routers/bushou/images/60px-%E9%B9%B5-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7ee08fa8db6774a55e2d6c51c66f318ba0e4b3 GIT binary patch literal 1468 zcmV;t1w;CYP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 e;~2*{O2zk_NEX=ctf*lC0000-O`pK*rM2? zt+gl`Kt03<0Bel6hCNu@xfAd z8=L`@JK%F8@GmgN0k6=g0{#TP2b!(?Cg2D#KP3N&zyY8)Bp+uO0}KL5^}Gs<2Rc>y z{E+-#QheG&@^Oj>F$yP<(MTdAQyPMA70{=6EeB%2OyCjV>JWTGqXc*uIEq*CPt(+| z$dd0Oi`O3DFCYOtPq>bBh6Q+)zAvCo3(%D%zjyF<;AUV}cro2#4MxCAeP#2I5n2~O zcO`H=GL1DlEMCt7qa4fX1g~L)oM7cw1N&6|(g3$*RAq`I>-rP4tR81-!<0v zJe5uWZwJt6MK1uRBcnN9<-O-Xu0Xg@_-E_;QH$qH_5K9d9YD9<`fkMASwA?CD>BsM z-Iu=sT7kGqH>IJQY|$)2*0fH~2d>4T2-$DIOwB23e1UI>X4`dHjp|}`uP>{pzcu5o(y%ja> zbczH$JAivI{&*5`LXH`Hi4pua;5x)w2aV!lV638BVU@MySLECfLmYiA^iJSZRaOuD zW0gIQ_~aUuNatv}viyjgJDPxRF$%?ji+y!gS>^r{jVG+KTcQ*+EEex)Ojs`iEV#ybm;fUV9G@4dL!b?#Y&#cxzD1!9@2kYJ)2aZl@zJw4NfnO^%_k^AXch#mL{>FBKB zO5rYoPbG(gIPeRi&}QT?z6)`1E<*01PWRFD05<@iXWNJig=-NjY@>ADN~%^@A;Vy8mT;f9DX7&9AGVODM3oAXrmtF?ki$qhM$T}-W_TCdzo7ykeKd$s4Yxpo?i4Ul} z0af>Y%<}6ABdiOBYXb7hki!E1nU)Jo4MXfg;UMcAN2Xl|vOWEd7@E<(w#Ol%WCe0# zQK{-wBO_XZ?9J0Gx@ky2_o*a)ku& zm@jX3P{n*fUymdaMbn*jgh4s7x9fIRMbJi8C`Hzi7UZi4+j_-nXJ@WV!cOU0yoRqW zB)?2pV|_P}{m*VrF$dG@M-Yn|6&mpxuAKhN3p>L0^++pnqaPJ^VSM&O3>|Jp0)61# zhlF@hLvMjA^Uzib8Zig!%ktD_3*yvVo~QOacm`2+8(t48YBc7tt^W}NzDDkdhI5Kp fL=i<45eokS2FTD|o;75V00000NkvXXu0mjfp!~gA literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%B9%BF-seal.svg.png b/server/routers/bushou/images/60px-%E9%B9%BF-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..24731462262e742e6a4c941959212045a41b5364 GIT binary patch literal 1809 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 M07*qoM6N<$f=Qee{r~^~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BA%A5-bronze.svg.png b/server/routers/bushou/images/60px-%E9%BA%A5-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e2502c5081fba1bb811f0414d47be4ca409da0fe GIT binary patch literal 1276 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BA%A5-seal.svg.png b/server/routers/bushou/images/60px-%E9%BA%A5-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..63a8e8e29e40eb367e10a56762a0777b1245ee76 GIT binary patch literal 1329 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 WUEgx2it|nY0000 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 U`ei`&c>n+a07*qoM6N<$f`S(V=Kufz literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%83-oracle.svg.png b/server/routers/bushou/images/60px-%E9%BB%83-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..db58c859642d5855d91d0a5d1a4cba7eb08b2e66 GIT binary patch literal 1301 zcmV+w1?u{VP);M1+w@E}nRA_x%fflvEVS~ z$rf2%QSD)x#lsjOa*DG(AoQO@!k^HA^HS6Se`61JU@Jby3Sm@kD)ZzYLDicM;p!~n z>zzW1nU!!@dO1x`d@?D)Ml+n%H_7 zSmjxCUTw$pv=yasILiKn`G>^Zt2U2s7e?n|W+bfhBxxLu#;Hl)aNJU{+FX4Cntz)d(%g;FQa4b-Ik!< zlcbr4cVKeSbv+KZ2`ix`6`oHO7XRyoK6|hy9Tftdi7_^*0-!VwZ;4#5t&+D>Si25W zdvQKkveCCILEcQv)w)pf@wu;u~QPX$kJbl|mF$iDy-QTMsl+Y^#{1vcp?(PBTR0 z5n9$uwRP-RVHMTq&W_SD06(fd5G~U;&a5*tUHzl)3$2luFK;V#YM~H_%*LO}oqnh_ zGV@`C(xcN?BhN2W*uUyc$7ERZwwk9E9N8&;w_=nKOBXx+n+Bc?Hi~vZc&`%+s^py} z>_rzly`s?q^Jcb!_#^cT~!qZ@ZStm>Cl!I7)sSDQOi@);DZzm22rE<2qGp5 zO3tA58AHe(h96-w-dHE8CUGg| zTJ6&V%09OsJBxGbrPd67=qb{3IDY`ysYG@Mo>eEg@j3@<;h)L%`v;J{G`XI_*Q?R# z#6*o_jpIzbDY?Imf_=1g3ES`&$n_7RO}9n8o9T-!_iK(dxCb$M9lo8Fql{b*`y8+5v3EL#?*E zrg699CgJ#o#%g>>IHLQpD|yJj@hAKu^S@%dU0BL<;!LlKALC_KIO zyQGSe{cuFL0DYdpV&Qu`?VpI1i5)&f`9S*N&cYbu7m_ z@jJa0+=pw0WvpEgrbA+l$dZmt?oZ&`^2*+a6Eb66htJ?OBCt7VFp0Mc58Gb1v&wPt z1pcfXEUfM_?pY#oYVY@V;Zqjq1uPZe=5^RBKXW%`6aKhTX^{WiQJ5coj=>+ zv7(YTT`-9YMdb6iypp@|V_YJlp%m97{qNL2o`;p#D1w-o%yVaP53Ul?S0${)mvx`X z9rzM9=$#0hDx6a)e=AvDicZeXOn6|AFsbsO=COj=O=FuX)P94;P8uG~V#SzLm>_>a_zaiUFt?xKdjH|tF zUPa+){7a|OoA7;McH8kcQJ7yL^5ZWmEAe4r+Ox_1SBc_Z%CXK``oOqNr@8fWLYtHR zclYW4Gi8(hY6ZTPP3ETLIz4qraeQ)pSC78SaAM~E-hQN-#29|*skgsZL`gX;5hoVK z+4^RezRPioywkd%ChkMyc(GR7gl6zL<=Nb*Onzt5?hV&Q+C*uz~ z$vr7N?mfztjx;&A9rwzod&TkIH6nfHg{5MTY?o!~Y+FTwQW^89HVlfR@D4m*nCQz5 zx0UP=dGYtedY-O}VAD83q?i3>@m_o!=ZduSkj6LkR`!Nb5ozL+ha6s*xwo_M_v!M7 z>4zlVu5&i`iJJ8iu|A6?{fq_TSR2;s%&7M2ob6SjbkqL-!+7b4Io5_Vb$%7F53kJh zTPG5YcE1Cn(lM&#RtwJ8c^o<`yl*#bP_BFbRQ}BApu(6a)uwgg^qeV&GnAEnLKO2R zn;=^iD?~1wZaE(rV2t%Tl?OY_DOk&07i`y#kROoII>$sIcO1!Sj7J!{tHDFpXZ|G RNB95$002ovPDHLkV1ja+A`k!o literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%8D-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%BB%8D-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..49be13b5d62d90bc9c2fde6ca58fcd56cbe78aa2 GIT binary patch literal 1789 zcmV=Mitl*+7*CL0ANIU@X;1G=>mlxs(K`{st zqat4MN+eO^0q7SaAs7@*Fi{DK#28my1w=fMs02af66Ml`0L!r)$_noIp}NyOJ@3uD zneCZb&Hj^@?yXndT{YdWs=B%tn$e7A{FhN&fH7mhC}1+s68N3RD3K!uVWPb9T*3+ z@Fsnhs6qs)2gW+@DuJSqcFR?}k3-(yicxkC(4*0kdcq*glB)$eL~OTMwOJYPt_!dq zqww{O7t=4^#|Zao#5V6J{+}Fr5%7uC-$$Ng^onzVhUvh~0@ zUM2O2=@>z`0B5G**9ymhixq7ui5C4u-$I5Nlx$D}d;?sn{;mVw0IGpQ7GG=Nbl@@I zaz(2}+>O05z6FK>e|ePAJ9+~L3HP~CpDjSgJjk(sCkt^YRE@>B~ zh%xJkxT^N5?1=d1tAKLg05A#IiOlTr9LiKs+>gxaG2~nQ-yw#CpR<5ZF>Wl5Smwn@ z*m-K91oVYgz`ejPMEj19A~AFnU*4op1WW|Blbxm3vwlII<<1)ONff>sxE--kql@M%8-P^Mo&6KMg^jn-V{tG`(%GRWOnsTzek=8R20lc zg!>b?%%T?|QI?Ab5X+tlvoK2Ecp@KH2Mogn>0A`fD9Sf9bS84^h@#&Ki0J#eti$6*4Sv$P}fRwCZkEj#2%u zLYAY(C{?a^`j~+1xava2uzhUSNdaF9ms@@5;Gmx>_c*-$Re98*2Q6b8w!%UC>qzjW zu)TrT3hO;$Oz;{VZBths&XKSv%Er;X8|KD`ZB}<16&<2My*vZxRvgQSWo-lYb3_1+6r{Q zY!%m%7 zwD6^{j%_zM^phk84BBv&V19trA$_?s5Ad~BAC#et-Vj5CYrrgRjS@^2#1_`}(Y>5D z>lJ-&$avb_9il)7Y(ojobbwrI(29+*=t~uCox|Uk^jpBO7SEgzo}5Bo0G%H2?p^h+ z+M*4^2t3WHv>^N+OGeU!Z}1GK f2_?jvkplk$G<*1x)o5LW00000NkvXXu0mjfwp>~X literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%8D-bronze.svg.png b/server/routers/bushou/images/60px-%E9%BB%8D-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b08dba3e57467d9c2ba83038ee6b6ab05c0673 GIT binary patch literal 1498 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 FV1jmt)hPe~ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%91-bronze-spring.svg.png b/server/routers/bushou/images/60px-%E9%BB%91-bronze-spring.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfbab0c83c1bea1606ea268369a76609570da46 GIT binary patch literal 1283 zcmV+e1^oJnP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%91-seal.svg.png b/server/routers/bushou/images/60px-%E9%BB%91-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..bc687759f9149dabc2655d1d4bdc96eb7674d6ee GIT binary patch literal 1511 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1qTBJFoK-y5dZ)L?@2^KR9M69*lUbc)fETuACIA+ zqw)}is1*h4P%F@g#R@`cji|8%B^pVJQG$=eL~M&`Xbr{G#AjmZ2dVnWQvKi~NLw&8 zmWogxi3vnth(JZa2cYOE!!Qr-UHve}Gv{0$^ElV~#sB?s*Iw(~|6OPA{aMF|4r$h)#X$!&*=~b%O2z-$NuE&>-TJ&|O!17DnSswe zZ-YCG@v6mYFvJo(;BL4&+#n~O}<*M4~_ zO%dW+9L`y#PBU)*gQa2_x8Q!Hvt-YJwlYr08F!rh>sVM4eXCmLjs$AxVs`<)#^xTUCo)Y;Na`3Q&nwljt3ie%Qf z&XuM*yVJ-oZMD(smiweSTHTKR>WuZFfw`yJG-}lBO9$=!dJ0N^|IubxYCmX`6I1I1 zFF5z>A%0pYrOGu#vrw0Mzb|ZYQuS%?6T;Heo+N}Hr}hwK;mPWf_O?g}ZzaV7ZW6+@ zOw>Pxa`A1{fsy_tgjG(?jQ&9gx94ewNpT@VWWE(=*x{EkgLnZw#pL+^Zz)_rB0t@oM|JS98(; zUDGq_sqS$_rtr06x{X43!w7?|6v8q?b1~;xp)4Fa;^`jYbn_G4ZnQw(WWE1hN!a5T z6)Je9>3&j_@;vjb(kg@|e|ARBdxhOXSmUBEOun7sDP^JT z?=CJ*+t$KT6hfSnGylB6^HvwpwnXY01|3VP+n06C(H0d%4!z z3HfgG(zdWLF3btyokHYlbo&av+M0y?i6T8$7PIy8gUtNryUgC|&BaPnjP#X4bUcj``8G2SR_NbLccyua#YzU%br6W@%3)}{8)3gVptW2;Tv$4tDU zIkTPG+o7+}WKYt0SCx3OVR$KXn7I%#9T;!mvT76Gh6c~4_VtNGjL5{S#w9&1hDXOR zEyCi=$ogcjKAuzb5U#H#@e-lM$khI+5L$%Yxx%+bc)5DC7b^*mWft0cp~=scg)1|W zvxLLORfl%4dSRcz6=Hcm{*k$wXzxwxh1a@uJ~`&;VXaWgo>+CB;GlFX}{D}+C$_W4?J3Qny}!anEpocJCg zJek?+qa6^|c-sdK)tZ5q7a;HhwxfXiY92NIAs*N z^?Xh^Wc(4H30j3;SKNLs$dt@Nct9wdeN^ACgx1W-v5L4|2#b#SHeM2T7dtT>4c9s> z{N*^pFxXCEMYme1PBBrFu)343@lvhA!s^kEvQMZ_uM3Zj`9kT4b7c=P+zw$+uI@VS zOz-bfY^PW$eA?wsYM}p$OrO$Y)M&NI=x*Hu?i1B0j3c{!!X4+`oZfwlZyNst9~|ZR zYXDyV0000bbVXQnWMOn=I%9HWVRU5xGB7bXEig4LFgH{%GdeIdIy5*dFfckWFayni zDF6TfC3HntbYx+4WjbwdWNBu305UK!I4v+WEigA!Ff%$ZG&(dmD=;uRFfekEIF$eZ N002ovPDHLkV1n&=*vJ3? literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%91-slip.svg.png b/server/routers/bushou/images/60px-%E9%BB%91-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..063e01e232b9d6013fd44fe473b0341e1c2334c9 GIT binary patch literal 1380 zcmV-q1)KVbP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd1s(<>1WPPIegFUjY)M2xR9M69m|bjCMHGO)#a7!= zTd<;(KU*tO14@D$gH>CJ#OQ+rAF7a8qgdl#6iA~9i7_=swA!YMgc!AI08{G=CWe$! zTQO0zXsDv3>=Gc_EhR0jfo@rr?(X=|+0(nf!rs}951e_qGk4~Ech1b5Ip@M<$&g%; z!k9v~u!S25@He5%edR;A6aXW%atyeQO5hs( z&c`x7;{pKlsAQRp@}lg5?*`y70r~*A3&_*&a_DCr^VvujKhnh}8MVj0sk>1qI)ODP z6i)!pYlCjJ^mEWGhW4?@KKK{Cf{?>rwv!F4*MJu3HG?k&8=}UjjHiA09^I+)k6_JdLvL3`l80 zkhPrQede0Jmwrf!46=`Bn4XS%cy&VPDK?}!&x?t<+*DA8i`{q$Fhnl_t_8rwCwTD@ zOkeEL%Dqy{VrR_Ed-;YYo~7zyV-UwB*rpsOPMjogDts@E_#F{WNe}CKyD8^c#RVN(g|mar5nFCR z`>ClsqQL~VfI+S94c(G$$$}@#VgO3ytcQ5WRBo);E61Zc#z(E!Z<;MGGuIwAPsbfC zTq$jxG2kw-&Xlv+U=MsViXK)+c&1PcctZY#+%7k@?LPu}2~0n^mf@#bdA~xZZxi|w zF(g+pB(QIJMV{L&eP;6>g9J^UXILw!{p2%Ul2bo3qI%|C3HntbYx+4WjbSWWnpw>05UK! zI4v+WEi*7wFg7|fG&(ReD=;uRFfeL~l0*Oi03~!qSaf7zbY(hiZ)9m^c>ppnF*q$S mH7zqRR4_I=Gc-CdG%GMLIxsLB)GGJ@0000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re0|yBiC?^-YhyVZt8A(JzR9M69*w1fORS*a8PZ5wp ze?#O)L7@B+MM$U#iJ-bS-ag)IUt4-_kw`js@!mNz=YG$bJ2Piy7@-jwp%MDOQNfT` z6e?4yRGE^j*&Et4yP?Gu&BM9DaaQ}#K6S#NPm79m}_}wJ3O9L)#H8V zspx;Z!;ZNqrNeR?6=0*?Dpi`P%6#)IG9H|^L}!xo?uyQkwk3LH5B(qrUhgG8#%s}v z=aRrq)*%QkTil2DUS41dbqRv62YT_SL4em84R$!uhj+f8HSOBL69XI0z|?cjRcc() zrd?x(cP+Ak@+|oxxaaH~OZMaYWPj!4%7bkMWviPbljDCY!bvkvrp-7ox z6(&WzvyQtgEiJ71J^{Pmr(CUafty-lO8)KFi``vh_%|1$YU+;{v$x=e+D;6~^7EEOV~e%9WX*P>CWB zTB@>-RF@{5Qcl_K^l&7>$A{=re|ctjPW-C%s!YsrsGhKLT9ZbNnl))~#oucC%}x?f zk#bcQsJ2xQ9Eh7U50zRoSI4|0`yX|;Lcm=E9$eM;S!$swB_@C-tac1<6AlQ=`zaj_@X34J+1Z$JRt`-EFG9l-JpwrB( zQoLRevQmNqX9XvdhNpdk;Q45@To8PlBe7c$?8utgE(pn5Ff$^{ofVCD2tu!1Yl9&8 zEo)|>Aox59@OnYenDO}if^@IKWl_}W8K0%>tAd&&mqhpFcQR9QR^x!1IWp%WmwO~D z>;4t9a=HaW1g?n6)oyw~2@dzUqq`dv)3WA{qQH#!z}+wVB^u2JzxR>qZX=fDRMv2R z{A+OzIFhrCKk{^Xx+~&abWoR&NAk9T=b|N3eosY59;0cFEa4ViwADYF;sO^a#*ex( zR|bcA)yX{t{N7%f^!o$n7lTpCRG&GOF|KJgyO^irnX(~S@A6)!e*tEi@R%sUnKS?Z z03~!qSaf7zbY(hYa%Ew3WdJfTF*z+TGc7PTR4_R@GBr9hFe@-HIxsLdCly2h001R) zMObuXVRU6WZEs|0W_bWIFflnTFf%PMH&ie=Ix;mnG%zbLFgh?WMtZII00000NkvXX Hu0mjfON&Ke literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%92-silk.svg.png b/server/routers/bushou/images/60px-%E9%BB%92-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d3cb7ed5b0e9125c563592dc5af0889cc5778ab8 GIT binary patch literal 1183 zcmV;Q1YrA#P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Re0|yBiC%34k82|tSr%6OXR9M69*j;FrWf;Km-<;oT z7EzXxk%5v{2Yn(&Y8IrBP((q6%Y(|qAjzo2IxwU!!oChNAz2+nWJT72D@e+$v{YIO zX*SzJ#KlBw>U5j$)xmDxw%KH_JkMK!*K_b**L&a3{pbF;KJJIp@*kJ0t#-k`0X|P? za$)(w=Lq3jgUSt_Erjr3xxwobcvX3^S0-$$si!)`fKz(w$@JT-wVd<4LO}>ygif!h zDi`<*A-swywh9fVl>>W6+TRZi#30WL1q<`W4$+Xn;ZtXV8XY2U^gWeto)z{uD=+ZmgIx2uvG|myWL|6{EfSe zGXRT)7M1y=!sz2UrZs8T+e*A(E>WoVEXyFiM=@8mnmRH=Go_w|4DtEfXEXRa5wF%+T zQln8RvfSK0+xFTcK)dDM&U)6jsP8j=9e+A)Q=Mf1VWcV>jZbI!Z#kqjR9nC0Psd0N<7d{|wAbC2m(` zGQv6`{9$zV;3a8kuLTbXVSTZ+$_634mp%APAv}|;6+&3i!|`?rVP>}2VU7qpis`!b4eMCkO|M3BE=M%hEc8tvynIr8%z33j9<8b)}Yiq1~9`{6bwm zAKNPI)M;$-78RmcR}D)kvbMwuu3vI}3XNT|PB`ZBqFrsR5SC^Su2m>r!nVOlB{6gUJ0_c@Dd;=taxr){e*y+)K11c16u18-4^em8$X=5C)0eBxM zQ}ltrVZ?x$rq2@|-8at1V4&HfuK|wEkII>&3$UI*`Du!Go}!O8{i+nN3FxbM4=dhI z;EX)zoiQ#VP%Z)7ta!I7dLPrTE3jAbFEqTb6z>2qI}f^Ngw?nPS1aDL9_{ytzMrao zj~LzvV4LE%1CQf=G6ly}Tw{L$dMJLaNB=US|3cOG?GXMD;CbL@f>`ikE)>rM!+>82 z6mA1%7@2h*?}Laj=BfTaqu*M52SpRRpuQ9~cxOb02ODcrWLg z8ss|Sl>x^AlYu7*yZ~Sm@G7ta2|z=DJAmP4j5=T`P!Ig&UAvK&mJKNQ8ol7($Y3O$ES_dpgB6vl)?1L&uvPuG5}pqJ1H6o^%T2(!z+JeWwjQWKmb@n5HN<-W4kDk$3M6US7eoJo zVFAgra)FU41GXxDJ#d8LS0PJY0x|aVylNa1cLJA%(7WNLjtShvq>NxI=wH_U8NMQ8wl;NL}ANA8i9|DE;0V6|XrV-@9 zQP*0a-1Mtg{7t!6Ju{5NRs6#Uxv=lqzcvz{i5*ljMcXh~oJFz$Cx*!NLT1UzHjRlaLTIByXa|rq(&AB|A!6*$Rr}O5^~wvXkRW7d?c@&ntTVFHI*_ea za;=1WPQfr5*hR9jZ=~oq-^f3cLjGMP8@0vEJH`WlkZf!nl2>FqLG58-PnY z=rbO8g`mzH=c-3CH#_T7fRz-eIA4t<^1f1k0{0L-tL4b7r%E^yz>i2t_JE;(L6M?! zU&O#hEXisYcU1UJv_6c~wXYyx=D$UJ2DOBHV(vP_jDrJ)8R`&b@zPaEBU?{O7e zfw*ENL80M#Bjc~z6}YnrQbyXX=&gijaYex#lGoQ!zyz;-z9%=EaD#^_+HQhx_8i>6 z*C{p;gOJLiHpD;v^p9Hn12${$a*saR(8s9p^>NI8Iu4jAk&Ax-%)zZWHzVKMX~4xE z?Qle2e!K7rT;e5CHfDk}xU zM3NJU3CN7=os_@9w=P|$#yX_v-cjJ+M`IlNr^uSQM{{rYhN zcq!&s8_fN1)jni+QKyk9k*&e~&HZM?SU*_30DPfo&8C%L$_AT94Kn+0TY~&ve`PBuj{qW|A}JIf_^41TkCyiO;ml@d_wMe@ z?(Hq0_n+MC!2EmWoSE4(=bTx{A%`4t$RVrfe7F_J6xRb^0NpJ4-vT4Dr%rNo1SSG) z4ZOub3YcaocMtGA&?dQR*}*G_A-5ZNRf_kKrQ9aPPqfN$XDKfR_e}Myu+*Uf^KNLT z@dw4wC2cSp6adSBB1?Y0?`c9i;4A~@fY$D7Dc6HI2A>ZM1D>+vpQ@hK2Hr7Rdw_x4 zthEz)>o^7vRL?uG^QgzFXSIR1Piwa~aP{5tkA)6th+}YX^(+L&TFC9F+O-DmeyzPP zlqERD&~HQ>gY{J%ZQz!~kgIR$H4(f#;JO%cjf0t>zcUvo1yUj0o3!>g;JpZLKds#r z_!05&J&}nk1I`A@fesq?PfNW$h;z)W1_o>Yz8{#c{ksF=bcO*l@E$SMz?(n~vTcij zQs7)*h{ijFoU?@nT@E6hE?*5qsey2O-aL@5#=>;=w<;El)ix&;CKOK}w)W;yn0z-+|%g`E_O zEM-~aF->?4aB>K5rQ%Et=qtuOwrrxMB47^CppE@I@Dj3}A3%bV6wrv9xMYm>z;AeG z^qBzO0M+*?!H(#0T+bb~OF%-;9ol$nfSXBwUuS8YK4w$w@F3}1=(7NxQ_l)2@3cX7 zMhbYrFy2Vqolp&26~UdTcuh$4BxB?unT+4yIX+$~vaNz90^o8@v0f45l_N=h3V0i{ z5f>@$4+fq!hT{$Y-Uljy<9)nJqN|E;ss7g^#%ha%rzzlN?2?jEia*~(w8g8q2A79$ z`Xe6vjgbD{$m*wvt~$Me1)ZjF1}(yOqGNL;CZ9705R15yEjM zZF$5v709GD;4Kb}iTK-lR9{tu+*s&>ySlSNIL@j(8q(hvw}?JIgi{E7r#Q2Heb;C@ zOhzVnH1M(dze9M72^pbG8*ByXN6l0u;#p5{kOA)M))HQDpQbpwNIy$U@J3ZlTDuW= z$krGebk>BYkP5^tzy#bG-hSEjfohxeT7-@*}i4QhKimXAbRjALiYMIXGyxd!0k0A3g1C&ii4YTC6hhT|Hc{~D3Acr0>EO+emRr+-vyD3_^Q zZws7`yoY^}@NZ;7x%Eh~zX_R~dZe;Zhm?vo0be2cc&niR$%&UJC7eW{wSG-VX=rFt z1LCg44ag0IgO!LUZa|WTY9u6_f&FJlI`$*E?<%C&KM=SRIMK&z1TI4=Dp^H;yfglE z2ycv!w* zF$Up!%1;d3CCFB_xyj#v`CG0>aH}dAAV!Z07*qoM6N<$ Ef?w<=zyJUM literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%B9-oracle.svg.png b/server/routers/bushou/images/60px-%E9%BB%B9-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..25d1d8fb95ac0d80a058088112a554bb534bcc18 GIT binary patch literal 1314 zcmV+-1>O3IP)5F@_?2^D>;PXz@*^iF6mSb`R%n4l7oS!C_HwFUXIX| zbM9T_{NQj7cb=Jf{(I&;^UTabNl8gbNl8hgXlb+q4#og$fF9sG;CN%*$%tc@MobMX%5v;3X6~-IsAo+pOtIE3K&z?(=E&dQ7oHo-)i zj0w=jb3iZR;H??!q)ksvWE%y!@fF+xELP7wIqJoIljj26h|pdFMrIRV!R=I|=~UI; ze;Mjs1*`_n11?5HPVw}mE?iDEIjA7c$FbV7%X|G1%Ha@i*kl8+5%?P!lCyye$R2=x z2X+9zAm8y);C$eir=P)CjNhC433we?2`ofJnsgay%ZNF#OY)$C@Lsi~SG<_|UmykEH%=oPh*sq*9L2b}_hv=v{(<<)( zP8#LwV)`A2Oo7_w8XpmP7!TZT{kF<*c338D$UrW*+|+L5QM@)s>fAB<_^Q_E(#RXzpivux()my%8!Q87OX4&i^`bkVic0f$AyL?2s=(algMEyPi*~u^+{Rg<$sM`vBY1QwI z>Ej{GW{pvHDX`ZnKL}jptt^47tDBWs6`0+%G%-c7R5W5CP6g&{-~#YEt1qK@D1u(zk03NVBO$3oV}A!#C-Eme@+ z5f@{DEy{Kfc!Yo(ct!IVQL*dEwpeLJqHc)or@FBanS-_14a6rYrwtpaihYIn#ldMq z6Os(<1MX|EFE!X})KD}d(^gvFGm$m*JY*|qF0!T5fds5KLOWJeU>HFJwX3TG*`e%G zS0^IUwT2zF8}VJp-c}DHszY7v8QUL55|hJ7u+xY1jXDNOhH{6DNci$pw&7slFDRc4RV) zOmn*J;Dngm530LMupS9V95xz#$}r@#Iz>VV-mmV{GT3A}6x*ckg#@q=f_0#A&FQ}) zr-WIC>3U?o-kxUIC|2S=@B+z?AI;I`sLi86HrIxc$iFLf2576Kq@={j Y|DR`SxEG0!djJ3c07*qoM6N<$f*ziLZvX%Q literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%B9-seal.svg.png b/server/routers/bushou/images/60px-%E9%BB%B9-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..4e9ba135b932cb067e336ed3dd6f65703f058635 GIT binary patch literal 1241 zcmV;~1Sb25P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rf0|gccHZHfhg#Z8p;Ymb6R9M69*jSt)QNw9?XZ{f*_&~@VTIepb|o&pr9m#@}q}L zg~ku8(J3n%8=7ex$GNk6nB(c3d+&T)XOH#Zx?I@n?0we%uC>=*d*96^`Jc%gm*uoC zeVDc9>+;_8fprP~_*Ugy@`PN^al^P{dUmL0y9GzHJkEQ} zM}i+Mi49%h8Ak=d6WOyOc%1=3w`VP#Dy+#%KDFCneQAykdOp`*1oNO%>A2Gl+2s>& zS#crY4#U~97FUuZ(3p85iAdm43Z?oy>|t{)c^!jds@L{$j0` zNK|}nD1Nea)Og&0Bo~0Y&rRAbw8(r6>i36Z_WR0?ssa*C?zeZ`0(sIFvtoN(@|qVg zY=@l=J7tLv@U%{gwYlBBTJW7sevaww%Yxut%d#hHs^+-Gi~0oz)BP-ptWyze2DiDs z&T?975pL8YcrzY&n_xSbsn3BL@G?WTfrkZWW0lSY&I;Cn#exx~47?HCDP#xvZw1fA z*`4k(OP77Qlq^*xW|FhD9S_6-ci{7JS3`o4wEY>@#sRlsf8j}}I$!3&Kj12JV}XAu zZ2zS?zMnrB4Cs+q83TL;Sy2dMhWg(V$;s@*IYsbXoEf+3nKDm6KNmfR5_61XTW=&M;yL)pJb6J~#d;8G2EY>zJrc+~GRXlf*Ijf0n_C9$|k z^kP9_{77u@HFYl=dW~o*T&+b9_42Cgl_bsMzAB$1fQuX9)#$D>>U4G=GEH-QEjsIL zjonq?=%H@aWlx>{FKA?r%acG3`O7>5srHo4!auS(IxsjoH8d+QFgh?WiiDn&00000NkvXXu0mjf DIKMDL literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BB%BD-seal.svg.png b/server/routers/bushou/images/60px-%E9%BB%BD-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1663a80e0166d6a8df97488908c28032ad41de GIT binary patch literal 1573 zcmV+=2HN?FP)kOK~!jg?V4L?9z_(#e@U98N!zrQT5Bt{rqz;QD$)j|^%6x9AH)X* zsh~m?TC@*774gMrAAIvd1wn*r5Q;Zc5Y#FnQZEp-UfOyo8k?l4+NNz1o4bh*XV&lR zWM_7>`(2WfKP)>tdv@piXJ*fwb7o-e zEvnp7g7%AwD}X=9jc`A(x|j--<@tS$z)e6CuohSjECm(-6+m6YGkw5kz!yL#&<*@; z&i~|Dzr0~9@IASa%hxf4biyaVV?=jY(QyO$C+a$m02dU8mK!e+R_b-&c3`79t_2QS zG6#U0foGUX>Q!J9@@ecwmM?w(LrP<8|3|x0rp+Pq9ATxKP5pdeP}TRDI*s|j9l(Ai zcVGV0pB~ByE8Ogm+pT1V5CazA7j^F&Pg@O2?&B;9XTb`@a|+PqkUOW!9l*cp`lKq4 zc-k6M<@JfQi$GSwYpm-bhnyzzyLIoBDvx{G(z;gp)k^k~G_ak9Nr&91D*tBPJFCh* z!rJdX<&=s+R>Buq*S5h4pr^1s!jld;8!f8b?N`f*RjKI86Zczz!vI!g@v%z8ts}nX;9@C5ZpMom}Tm0Pkef zJ2fhS515{}beZ*zSEl*=zCsd8f*Pa51j!V({o%HR&y6E9CzETL&uD24a1|06)d7nU z*YZwswqg{hww`MP?zQR$fWyF#=6neF8u7$tJob-&RMv6p!+TdZSIiK`O2`W|DH>HCVj|=UDzuS!o+Ma^6go9D5^h$+g!B4m! ze|QKo0$N;Y_r_8Xos=NiJj4l*sD1)eZU z`3P44wWh3N>ng-IUyFo@3xFkrr*VH8#nTe@O})jy<47+0UBc7e9+gGpmbY4Dd0U4N zb7fBgoQ=63iL4{6aRNyQbRj{)w+Y%W673@g@L6&_!X3zz9{}ES$R9xx^5D*ady&>k z2UB_!KUqjV!bz;OUW!s>F4GbY67Hj3DM8Y2*pyO6k8k8mwvXwNB%L&@epvAs(&+;))`QXL`uFq z@))viwyHXv$=IywwZ&bH>{Pskgo{zXJtPTQ@{Y|&uGp1;KZpeG+f-c#VyGIC>_$-k zl6mJ2WJb6;@f>hX!I{ON8rc&H{^__HF=T;tu1BVMp!A@1J&FVgAi1g@!X!tKQGL<8 zdsg6i+@of1j8!4~PxZ+3E=KM=@2Ev~6{85ZmQJn0q8drt+Jpy?9Jjr>e%@d!vRv83 z&j3#&*~#+`%a9-1#)zKg-vJMj;pdf^iUuSr;xcI6h=*0M-NaJidc=Dg!9C)x|3_vu zmIIF>$$gvjFmQkAR4XjXksnkK5$&#~#!US-CV^iO@9H?>iOoa2vJncrX+DQJ%p&{; X8^GRdjViL100000NkvXXu0mjfE=cP% literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%8E-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%BC%8E-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2af9ded83d0782a19330632a421aae11d42dc2 GIT binary patch literal 1487 zcmV;=1u*)FP)^cT}2%S@K3v2N~tZdltQIK zv>~DpOaw|uAkmPh!8Cz?Fq&XAu>_*xtGrCWw2f5~Kx0&l;tKLe%cBj2tx~Ej(A{?V z<9BY(+_UFCcF(=L*W`Ya$(=j%n>pX_nb&V-4t?~|M<0Fk(MKPBbO!@7`0P_Ki2XCj zVOp>NKgKxT!v-8Tql~(U591#~Y#R397Bk!9I*w0ZL@si#=+3F|%@`^v`$^m|Jv7_L z5H4wuw;J!tg>Au!ScZqxi{6IQld^+Z+V*acu7VAM@Mj9?m&jXk53a+kg3X24Bp3aM zB=2)c`ofO0u7K@=)K8MMRoIuMKZ>O->R2LP*qKS%<8r~vJ4LoC25?A_`b(C!Sd7_W ze74Pc7U3*himUOBq~38{RF&vp)e15kChw+a3xUIe^fNe0blV{uFIw_Ad{DfY6SDtv zTRf+7m+q9{l;|KH>`=W$^o-yt>*pc7D2BpwVi=6zzghk|tjXdFDm(|B6TC+dpDiY* zd-1<4@8}ZygV=@Fvft4rb+1X{JtO#_5IuzF@v9P>qj8#8dzWH`7`w;f@Wk#N{0Vo7 zwL3+tG2RlL5)8YA;1x;Q95K^gg_9>y*GKUK69peug&>_3JR&@#m14#o7whoXG$uMC zy7g;#1ux@SJRw?|`c~~J!P{_w=(?whiD;`>k`6Die^)N58IDNeJtg?1B)&ojCPWp5 zEf(I?GT~F7h!4qIa|1SJ@%c%)o)Y{*5yco{y0^Mn_58jfsH*N&w8k|e$Iq}55R zl)Hdilk}%e-2aw^{di1l7G`H<2gGDpv$?M-$xgQLKg9{gT;WD86nowa#fIQq;XV!s z@-+uz2mU5p(f5-2X5%|JCi}l14|I@kNARS)HEx??9jD-C@d9ggjff%9bGT7Xat!Nn zlDv!7Fd&?d3$PYn#V@ea#I8Op#(hs>4*ssaG22eKU;QlIlUR)3nYzeP;Z~kM-Nc(= zk?@0?;c~H_KBr#LzwjIU8Lyit`0*xnuEvi{&Q0wIzKH|4sSVq?Vq;Mgw62hUoqEAP zE2(1+zAZofSUV-w74Stl!MjbIl#2MH#)6MjFZkz${4)yW4+yVpS}`Qn%o>SJn%^Gm z&{#0_&c&~@v}15*;W^{@Zgu)o!(9a;`!X`clgW=2?8*fHHOYTV%+7lY<;L-QZ#W~hd-6GlvjEOs%(&$k=c_B>XK zy>hb_{+5Y7VHnryu|04z%o01MQT0M@EU~>+;~}sMx9jms^CR#} zZCyL%e=7e(;Xn8^{#~#ePvT{_4SSRLz9!GxE#`pb_@Np2=HpuRUF_lpc8?`?t4i`` z3*UKM2Mg4_;@D01>94Te@K3x+|^GJtNPO47ryU3%I}10NV{yAV4}M& z)ZPW#lu=dilUZnm?b+`kv0Rm5r&!0|tjMV;s&?siF`WHw)40pNQn3BM#$4f)tZ!no pRvg>*)Yo=ZFwewK4*Tdf-Us|f^A!;GkGlW>002ovPDHLkV1fwZ@{Irh literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%8E-bronze.svg.png b/server/routers/bushou/images/60px-%E9%BC%8E-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..408d4eeb6d0d737b026d98ad5d93a544fab5961b GIT binary patch literal 1708 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%8E-seal.svg.png b/server/routers/bushou/images/60px-%E9%BC%8E-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..d67d1cfc282bc2afcc3280d9a938f6c49b4cd14d GIT binary patch literal 1388 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%93-oracle.svg.png b/server/routers/bushou/images/60px-%E9%BC%93-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ef89ba33c9db224b212e969f0035f193e11c164b GIT binary patch literal 1515 zcmVFz2W{(uAc`%Bq7PMkPzq6mpg#Ce(3%KU8W62$ zTxe+3n3!tS2Dil6+_qjH{u%E-=bpKD?wpw{k`E5|?DPNkEc5^842&~QAtsbi_h#Ux zv;-M04geb>)T;#gfS-Z#R3%E84A2WqDN^rhAnS$2X$w^dmw&qqmrDv+L8i!{(<2u4VE0Iz4nd|*NhpgYJs_cvieODU& zC5DT_gDPGDEL3TKMCSr`5Zuix3-q}LXaxpR!c3AQk0N2M6EDTqLkE!@Z6+cVG zD}ePX-EZ_U2iR5M8EfN-X2(_GuT*>yaGe)FyFi;Cjr83VUe}k$kSjHAA!krzfp36W z$jE0y!cwD;R!g1lRs4^%l_-TOpp&4mLxd|kK>h~SWz^Y@yz&NA-t3h1D2ZBRnuaN< z!!wrlpR4j-WLK^;+MS!K1~HfiyiK^GCx9oA4a{V(s&@#u4EUH)uCPx%`NIB5{<_sP zQha7qrzf&ImB4%Cgnh6`{c6Oj3RAW(N#WA)O*4qa?8bU@?yqgHe&WQ0na1T_;>OJ{s-6x+)vQnw(+Q?y=`Y7c9tWGM0pjN z;WOY?g6^eer%}HtEhS1}8S#|Wp^c!;?X%XXH!5st(*cOXDque_$;huW(%&WUtpAAX zYaX-YWq=oecElF0LQXf%LkdLH^WU zXVmFaWnUyEY!aAG!DLjn@(^N9`etQ2IiL4$ z#IE+~M0R_hYmGkNagZ-@nkj8p?j_&B*lYCJqRKMB^rVG$IUwsUvHpB7XtY9Q1V^}y z6r6vTDgCXHZbmN42J@?iqW^#u1RZ^Sd{l>+n8mJiisCZDT}HYEaTL0N&E(FtenU*o zNr>QAsy6eGkr9uFZ5t{G=`9C zRDhR4`q_i5U7gpEzFOgI#x7`-uu1jP98zZh*#mUmP8We)*TZXwA8g|^VuWNYWxIh_ zRNB9z^4Ffi@HL4_?Z^glf}KX(!*+rK*GKGYA~G9Hg`LdJq}PMK zL@P%Q)y+%oBShmQ;*6M#n!Bbch_kLoqmBF#it@>W&j*(FqXzBi6bk1@?5`SeC(ZWG z_H+_#Bl`PyOT<2#LfT)Dq~LK_2b?0h!iOpT%||);%fk;hCaysV)B%54gen%^M-KPG zSYM#6=~WFY2SbF468eFMuph|pSM_!wR+*oEIW=t}&`o@W{jk#L^9nEj1aPmHSAm>h zX32S2Bf=8k7vd@UDRSjvvJ_F&bTb>gc7r$^T!h{4ltK+~CnD%YxC%ZN=s`yLuDBhHxT{qn{wZ|C;_!o44QkX|k R^9%q0002ovPDHLkV1jFX(fa@Z literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%93-seal.svg.png b/server/routers/bushou/images/60px-%E9%BC%93-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3ab1e27545af52e49111d9164f67842802ac4e GIT binary patch literal 1618 zcmV-Y2CeytP)Qy2|VJ-#*>Xat2(nKGE1d%I+Co3&+c(p(yaAru~Zly)Og#tecF9JRV#yGs9 z00p=oxDRLu8ShwzzTV(N;d#IU(x-1Gh0jxZUC4N)N*4l^iKPp`hr;DbYaE`jc43Bg z(+3%+3V02;Sbx_7yMY@#$oL<8D4bI2T4Suzeurl)SC-+u*8)EPHwXCDz}vv9#0zl) z;6veFrQ;o*QMk|H8L!&`oO1Z9fe(SHfpJd)-|77-pb40kR9GJhA5=Ql;TiAzm&2=2 z`kTXBj(F|@U<(qz+w|FI$n>s9X3AV(2XJl@VSOn4yV7!pXTp-P@Jygs@3$(g0-i^d zZ3b=xKE@_1-N<3OkWUaReEkm;TR9t(`MT=`oA`~u)T zXY2)@bvP|d0a_ekGF@+A!&QUwS{UekSL(BE8QwDy_!e<`bs3)L6{SeRZ!Bl7F5m&u zr{G3pjb5H%oLjWt=Yzbb7`Vib$bN7o;$Tuh51B17o%D6<;&$!3GbhsJ2;U<@zaFFS z-P(7zSBVs3!ke5nih&7wzYs|gTa-T=vG{ag67Ul6YoNbb)1~A9aTP8@rrt%Q$KMJh z?3lcIDv~X=17~Anu|YEf6)p|XVSx*gZCp05>|Q5;qewMlClX`VU>(_9;A!9+B$NgF zcOrjWBk3t@-Z2ibY6W7=na)*7w5mk|5@rVbv)ZwVObUtfu~CquvnOmtruq(Ktse%C z0Ed7-5Kj+q6B5fo{J>B76*D^~AbIaJ{7%6y5i8#ncL1L?t$JjAo(Dt}eSK(DisyPeE&`OXgyV;?p za%px+O$p>pj5Wx=zBxi$lb!t%p=}LzM)V`)pA<6fOS1IK3Lh43S9(rJyEF6x*cD;i zHsnMDB}R_S-1HAWnB3AS>QLQW=z4JIOKUs#saf-MeY z!%_y;#$NU=bwbQWb~r}BdgLgz-QispVVru>Eo-h9{EM6%tFeiLIeK{lTeHrFQs70b zf*r^-How>V7dJWPA;R@Kyk*M!F-yNWNWIx8w++d;#~=w!3Q0AG9cmHb4m-R$A5|JG;LSj)9kmYcE#Ow{t_Z|0fTxdKe1Ftp zHur9o!(>I118vt~mF-2gj4Mc279^noPYV0CaJAC$NJ5gr?p-SpM`q59n~@T46LM^N zV3098ltu|>d57y|&58bUhc`dQm`kt)MKzu`20+~kyO0lz|I;3qVa`mmHPn<+*-QXcKjRb|kR#g%^u92d! zDeL}k6mC@-Oixc6BSqo;N)s3FMvB7bdygTlR^}5mh?UP8VmU@Jis6QT0a#b7NUhBx Qh5!Hn07*qoM6N<$f?XEoVE_OC literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%A0-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%BC%A0-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..7766eb217e1bdabde4148ca669910073110f8b85 GIT binary patch literal 1571 zcmV+;2Hg3HP)Z!v zGlZZ>P%u^{MvXCEe|aRtBSpLt6SY`Pj7r2R+CqazDKXZ1RfA${t%cI|=O1r>+1c%E z`}@tzwuJPXOn&>@nSIB;nfKnjSs2GSjw(zreC`_HB48rW1srrHQOw9Re6AmO04P!J z{cS1B0ieTcEx>NzL*QRay3SAl+zEUE3<8N5S{LvrGLxJj!x5bmfeV4TK!x{voFm!* z4IX{#rQ=Fr9ZG?7fsMcd@7@5g3TX5G=OflD2j&510VhY$dj?n?m#{7|6Mu^CRPL7m zF9P2I_bT@n0$UlnOb!DxMnT>YaSSjOnZ{>&tpeX69*ZyZ2g-BX2`W?;qPvcvYx?n6 zG)NIk5uv+7LiHn#?0j!rk<#~x^8C}G=S~aJFJP#`KO-;L7^Yzf;3^;wXas%$_5e*l zGr>?YS-Dmn*;-%+aEJF?Yl!{|4bN%7*#wuy5rx^nHhc>mL@cL67BC069r%)=)=jp1 zYy`5gunuKN23Co9=CH?|2-G37A^{X5&g)dfxn-rmW1%ZyO>qwJEHbU*NIt@?-9}i` zIGhXI0Ne)5w-F$OLr7}*6YwpfTotfH8Iu4CF-$qrozhvrO~8Ffb~T7NsU~1A;&^(2 zPGr6Qmm=MMB$w7H@eM(RGk__;_i4%wq^Ix{B$+P(>VfxwkFeh~jD$YTy%QJ(h5rH; zA=XQnFf&9>iuY1NItm{qerxIw&cMJj`8bkMfaKa?PhDwB&~+TP#U$VqWRp+@R3pwY zj80Pqt`(k&FK`hOK8lbHM4{4hk+d}1>&qfK1Jhx@sem^7;aNzys6;ZQ8Hk1AMi2hR zVpK2-2}imtXdm!fL|-cH0PrdB6f&JJMWTZ`rrAb#lPUcUV$ohCCvE^f13pLg!S&v_ z!@w5rS49t!lyoWAKO&h`hlbxi;5_AjlYz`uSd47)!-@XsNZ3m5iI+R#*F@05w>qM0 zh2!xz4}-vs4r#X%RJg(+Z6i!VrgKuDHIC`;S7`Sz#-TI=cta7$YICkZEp)B2kMRnXDgSTsCkqvbMJ) z)sK;sY6D&XY7mR}DSf*g>yZ+&k&?^OVa6;%ESO9}hHD+bt4K1T+xIpqV_$QjK)Nxl z52+pNunajfo~!9g=D_Vpg3^lQ%q=7ED^#w-h59kWWZ-S0t=Nl9Z4;=+IMvpYI>1Rt zwNgzCY7pxs?`<@stscT9koeyGQpYD!s( z?3NP1W()dD6#7xc!xr4F=k5Sk`ZSVx? z2BwGlc6xoCq;@zKg|+w!Z;KeSi&5BAk+q@U8dI zFyoSWeVZjeEf#ph_cC;LT&W27z5`xr6sV0DQ;xqy9l*|KXt9;(LRy_7;4Kb#tyJh8 zLhtckQN|2l{_Ut1r5@wo8G3p*9Y6N=dt+^J1;NDQALK)tB$kKzoloi29^v~neGe*( z>oxr*C?lv)GNXGFcn*2_YM<+R8VyKMJ$$&83H+ikzQiHV@W*RWZ3~W%P|J|F`Pqo5g*Ni>PM83;Zt0wKp7q+pW5q&6{rwCxP zQAic}z~#VY1QQddC_tvp3QgZjh_VfyFh>RQkkf^5IVcCoayFCRVfHx2F^+K<<9`ls V9ZijTRgVAw002ovPDHLkV1fan%XI(% literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%A0-oracle.svg.png b/server/routers/bushou/images/60px-%E9%BC%A0-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..49e90f9338f8eb3838169c699cb5a2b479fd5f7a GIT binary patch literal 1133 zcmV-z1d{uSP)WSQ`$G>#*o~m9e6X+#qCh3ctcNfkD!V{8qKlzHL?$#Q88gmwai)iL4rlLu_MAC$ z&c4jp`NG0+{ny_6_uG5zwf<}ELx&C>I<&`3%qd$$QOv~w4CD5awG_hL7^#%^i@4y_ zA})ff(34Uh?aCh&q$PJ2Y*_r4VN0J>i`^ zGZ8yc$d8jx@Q5&A^`b8k8;{w!?Fi3${E4@)!sNT$sNc?jAozi9myRl%5^Zy!Yf5Ze>aNMun$UH&VN(`jLqop5r z8vV&dZ`Pr_OpJ#Y)SK8VJ;`WPK2X1Ih94tszRS@^)1(bZY2^S0$7pjH_Xt^8l_l7O zPlUm-bZ*j|;p?y~Q8y?gGQTJ4zrZC0dKfpi3W>yMW;a&aZA;WwcS5G)E*y-+hVe4a zD8xaFtX6OKRkbeqMk1D+i%-S#!t@jE=1&@XG%tl7aYH-AN8g=^crqWaaxs2TfAjVU zgV@iwA$$4b=N&b1LpVDT|0)t6&^U>hfpyZ;(x)?3-6H1*i9uCVa-BOSC z#ix_#R5AyDn1JtKJ3OamCb`$OS={U%VfvZW>`^nc9~V^WZx%QE6XutoFH??{K6Uh` z)U7K?W9B3`=SC|-xTPeGnX*>%%fJ!5W`gI)V=+xw^^C{#fUsZH=qu!erb~E7quExp zye&SsRZAc4z;VS(&W0tz7Hx8|zrGSbPuRo$ED_(0Wkrk4lGCtV+|;T>n+14SZ5wA8 zkC^})b*<7RBqCMAgE&8>-4tO-_z+&lSq16Kg=OmB<)fbJNAzm9U0AN1{JBv4DX%G2 zO+iFInS5BXmO{8fJjG1=eaKP8RPn^)qM|QeG{bl%^8ckJXegX+wI97~De}T)ePjJo z*vuoOnEwmr3%{`4Ubc`TSz(f=j~zO6D3<>K+oROm;>)CJ00000NkvXXu0mjf_Dm|- literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BC%A0-seal.svg.png b/server/routers/bushou/images/60px-%E9%BC%A0-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4f2ffebaf70bda5a4f18a18d5698b89164be62 GIT binary patch literal 1415 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 N002ovPDHLkV1lGrQTPA= literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BD%92-oracle.svg.png b/server/routers/bushou/images/60px-%E9%BD%92-oracle.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8175b0232049d2642bbcf21f5a65b45bdcd97473 GIT binary patch literal 1389 zcmV-z1(N!SP)wH0Gy ztC-f9M3aq88=JQ2`fz64GiUGY%$=RxtuTKW=H7eeo_o&yI3ITx3KS?%pg@5F{|9sc zTUsqdGqDUP1FKpsNIh8O@$FT?`|(By(kx_Acoopq09l#>ABFpZcQ3G_0kSj&J_?_s z$~WXKNVDLh@Oi2{khdVsLe>?&K5s!zMf`%er800FIIXqfWP{HNFIMFaV0F&2WWoKw zt&L(nLuG}_zy$CVaB-ssOuz$y98*AN+D>gA0~`X*h@p)G-vI}JKY)Y47&0j{Kq+|V ziH*QRLHQQo%QT%jJO+qU7T|o~-V{7aRFt=GSKBx;fkz#@u2bcH8lZ3j=c@LA!qqiq2>#~S~bdMSqA2HWDADqL!z#45W}PmN(tDh>UOf8LlToK ziRRqX)HZTGHE5af1r;N)-OxTIoxgm`^y@~>Vp2c56F?>_q+45%3%05OY#6r`_&!1C z{lF3j-$CR&*XsMMqu*{t&pS>B;A3jfcrW5sN=Dct$YfnngZJIQHe@@8{SE?~fJb8b zXoY8EzNriEr~&rX_^u66ZU8xp?H*$+LJU`$%Y`3_PHZap7_BK)uI2a2z|S6hHBJ)m zw=G=9BN0AsX}aFQaz>_b(nsNORc`ftRy*+lO-=Z0X>IyDfOCOAgL)SdY;+1ISSb zk!EXlBeyFW%T4{al;e9}0BHYvlPZsT@X!jUP3vr`Xfv{}(hlyc@Q5le11<{6c82dk zF6v#kjauR3hBiqw&kdntfW^S=hQ84ytP8#h+hqT-;B8lUJM#C4bq*dn1)MOnwYYz9 z*U{P_QJ1s_$<7*rJBS*KpMv%~O?!CFvz%%p^r+&u#n4tFi!fo@4qx$n{l4cai(p`tcacE`*jo?x?S?*l$ZZb!dTG@Y#5G&79gY`zU}8GLs zDqc32c`|6fD}jF*c)3CPIq@LTAjI_yBWK*U?**;9 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BE%8D-bigseal.svg.png b/server/routers/bushou/images/60px-%E9%BE%8D-bigseal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..222286880dee18352e0076298e2aedd6e57fae2a GIT binary patch literal 1721 zcmV;q21fabP)F1x-q5^kGbsvbT&@nEP;^ZM-(W@WN5VQ1&qdBA1|xrrUt#%Dsg;yZlA zfu{r54lDuQaNq~ZcZ7da^asEikM2Yc6bFF4L_g#}beF?A<*PszyIw$Vpuub3qWJV2 z-V3~&(9Zu5$KeLVNdIa8hN$*B;B}xG*oHiSMvqsYYv%(`2FPCqw0N{@YFQGT2Yg2Q z8J2x*Q#z-s`yZw0jLQg*1tzAc6q$?d$l}z7%*lnSy}zQz0n>nA$&LI;WYIe6$!c>| z>{1fx1FQ!wN9I<$r{IW3S0aarMvq5h7x0khP`m2WSwLqKvI4ud? z$YDl5=nYAnaK$9dksaaPPs`~-7_D^dDuH|hJrPHIg)dv}lQEs%0bG!>4b7O-r=)mX zDLaIDT=P+Cr(2Zl)Dn~+^hc5lU)iDv-n)?Vvd_Dj{3=H==mq?&mO z3B8fijIU@tvhi!>JIGH$09qB#Y)5_lfVoIjH0S~Uj+Br}h9yebpGdA<3%p_((t-KZ ztB@L(-#$7*M-6hu^^bs23CAZCe*aW7uColV=ixLYb<_r}Mhbe<)V=+Lr;Q^KM}wR@ z3cLn9jTzSKku5S+)F2CkujJDZz9#ZRd?)4t6Bf=>kjStd-38o>S(a_Fc-E5go0Nr? zg1-n4%X*}!7Bor+k?q9BEtomDraOW00eu!&vX{koD;QT;2I#G5LPWp&F>~E4QgE}; z1RPU5+dZA%se1>I*E$+KkUF=PKPjefd8o7$Z$U=M|9=v=Got^8iuX8XSb~J%CdIRZ z-05lv5=nmB*W@oyl}Lu=^V}EHzdSswgq;8`MGgphPG&ql8#h}#*9Y*-Qal~xzs0{6 zGrE=p$f)-8&mm!*?h?#}YQAb41Z>3&r$yve-#XwI)wVW7#~#el4KnyqOV9Ko{V9l# zEo1Bqsu4M-YGYO+Mz2u!4q=vUeAJP@HmoLpwXHz59-pU;+%YsY3{(obfU86J>M-YN z7WmQne|JdVW{c0iR*}C?_W^b*p5^gfibe%ucm^|+gHVl`HtK6dM8BDs5v2Pq4d5S% zESMQelsi`;Pu2w$NC7|_y_@LQoi8Zf$H?Deo(kww4_xSIQ^~Osb5$N!fM3tc+mJ2B zPFUua%GjisfoW(~ENsQbNujjHVwl6sZ} zhGAwyTah!f3+AYPotWQU)dSzF_QOQ42i<~3%!Bzp;uYvBF^__+R{KD5ThTG{)6#B5 z73PPX?MT8O7tNSwZ2MHy56O>%Dk$9wy`^*!{XJD7tWmNyQHEa#>V!Xw)TfhRFlMD> zdO~@rVkqW{+)6qhX3tkL|G@mb@r>d|a)xary*Ko=nAOl{Qj(h(RY(XwPw)vS38rA4 zy@#bNzwFQhGvRpi%$n0ZxQg61)kz6!&gFz>5r@~EX+ydb4V2-2{J+D$9W<7hTp5yl P00000NkvXXu0mjfh literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BE%8D-bronze-shang.svg.png b/server/routers/bushou/images/60px-%E9%BE%8D-bronze-shang.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8b0d25cb255397052bedec54fa93421c5231bd GIT binary patch literal 1256 zcmVP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0uBcW4A6Ylod5s>@JU2LR9M69*ja29bri?(&xMwP zw}3%p2L)s)o2U>MFeMsDz@kNYL?t990trST1_czO1VjujM1qoFfe)UB(9|P2C7wJNJomU;cOgGxPnQnRCwk&Y$a+B#R|@T?Z?T5L4x} zeR6%|LNb=yQl7vGfjq0!2oxKX3~+|P7Ci-~in;7PRc2q?Et(|+Zi^3`#W}5|TCUt( z$pGJg({8~TZPdz_uI07eA|)YkfxvKeDAd+@J+yEzIoYsKh2v_a%T{fpO8t_Rh>HY` zezTHS0fq`JHo-=LoCISfA?qQ~E%bcEwO^k2O8cl$iZtAk9A8_RY@-T+^L}$lpwNKm zYxP8Lxn#Avh9kpeVUb0uqVsl|3eWr_`#YNJg8lkO2QCT|XPAA;tkt4XuFVMD;)?oC0xOq`GKpquJjrl;wdaJf3NDI2vuMoyPrbzKg(y zD8Q?{-H=kL;b^`UMmIdULKhSK@LbXMnt|sXP^(HNXsuA-yYStAFVMZ|1>tchqS;iV)~%^YQa}$sm|IV3scm~0Pj2N zUF8DX!4addK;V(4(_A$^G1w38H^;nCT|MnHao;%R5Xh4jKI-zO46N?<2>dMjKhOBm zaJ(omu&JXu^@?-n+>CeBY8AC0=wPCG(m}R;V7HyoLVMeyR*}a;IkC%3^cI*Otr#n@65*fTH3GWLgU}?(T8`kT!4M#g0XS}p1!9xT(BSo3Hp`c%{ULdelJi4uj zW??fwNZcjFtdZ$CQx(g!G`bD8I;0~WN}&uf!yHGAmBvKpaV7fU*Kh%O#ybw$pj~v} z6705UK!I4v+TEip7yFgH3dIXW>iD=;uR zFfcw!#NPk_03~!qSaf7zbY(hiZ)9m^c>ppnF*q$SGA%JQR4_L>FgZFgGAl4JIxsL# S7kpy?0000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rd0uBZ(7Tq+bb^rhatraYg2t!v5mE@h>1z9QByJAqA_B;#R!@hv8gF(;{|{oxt=wSfA$6^Yp)5jr92+mUbB84ns@onS5>f(%U>FJ zFZ;A~d}xbc*&5=X0L6Mru1#)l9YiQS%&_e~jtv0&1JO+2Q;t)@WeS)*qFsKF2%*>o z+D9>as8ICsjT+VyWg0ro!Ret!3!j*TeTSw&q53&UCOOpWJ?jlqu*rA^g?+$6byYkK zDwk{qHl8Y7P=yrv0dLn9=_i%>(+tU?Dbs{X1;Uh!bgAqU-X@w|bZUa7n1BuEs$+Ja z1CWm({haorBecLL1E|!&ZAGCaz-rgI z!-SY2)qeHB8*HM08oyUqt?ZAlq}G`#p*;1-Ynr1oIPFlX=VmsRM+icmDcD@c+=?AC zm`R<=?r?dO+jUxU6q0 z!dZK;NecF7SJ`CIj3CUn1sg{tg7BlOW60O?nQ8|%l3NHuDG`orm@YBzaN6^iiERkN z-^97H(>24_1l$o}26!r~SVV$f_G_);p#f!g!DeUSvj`st@ZonlZ33682G#8+)2Tw} zu=kN7lx_rJt0Om#gY+Tvv)JBzI#}V6Y>)HX^ znKL#w3*W9(830>qs)AqiZKTcx`x~(YDZ*L8DeCFO!vXUR`Rf>A{14eKSsI3>as&VX z03~!qSaf7zbY(hYa%Ew3WdJfTF*q$SGA%JQR4_I=G&MRhGAl4JIxsNDwu!X>001R) zMObuXVRU6WZEs|0W_bWIFflkSFfuJMG*mD)Iy5ypGBPVLFgh?Ww(Bto00000NkvXX Hu0mjfAcG$- literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BE%8D-bronze.svg.png b/server/routers/bushou/images/60px-%E9%BE%8D-bronze.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e89af78b3d63755c10ae6b1576f1007479c8f421 GIT binary patch literal 1171 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 LNkvXXu0mjfCz#(T literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BE%8D-slip.svg.png b/server/routers/bushou/images/60px-%E9%BE%8D-slip.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5aaff146091596b3717bda5d67cf5147362d184e GIT binary patch literal 1588 zcmV-42Fv-0P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 M07*qoM6N<$f{oN&4*&oF literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BE%9C-seal.svg.png b/server/routers/bushou/images/60px-%E9%BE%9C-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..381ad5d0e4335a9e4c366faa354ecad0631546a0 GIT binary patch literal 1379 zcmV-p1)TbcP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%E9%BE%A0-seal.svg.png b/server/routers/bushou/images/60px-%E9%BE%A0-seal.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1e082b89d985095c8d0f2e50798d951a3e5919 GIT binary patch literal 1683 zcmV;E25k9>P)m*3*IxUw{KWT7*WD0;GR+%l@ta5yAgtifzN?9t?vVdmdvsQ z&=XjPkUIv9QTasR2%hwil2{iQl|U_i`aThBpA4MPwx56=MYS#g%)yiW8Ys)4Gt20_ zSv=Fi<3&7?waC=YgeqioQ$Q;)x+vBK#vOR4bP%Y{p+6W|$0^_s;H*Tg3ye{CXXFUv z6IG4FZ(Fs<`VWds>#0x-16Cs=X0ZooMz*8|WYiBLqq+;I2Q~orAzM}%upGD>`6F~m z3~r@$HSSP z9onxpOZygNwshpd-$4=wE|}SgcW{YgnlWS>;!IX*{cqqd#BqH}l<+34PXWf`9bKcg zHz$`a2GIKW$&r%U8C2RDB*ob1mSl$J^}!P^2ilRT@4WIT{Hy@K#%E}~H=gj#fq8Ta-AE5h zN8^qA5*ekpwZ2hx_Gg&K*@_^7%;g<#Z2eX=CIrnce}IPJVf-j-EqEGQpm_b`TIDM>t!Oy))>8 zOmmB%S1%#gaPJPqe)2{XDMsE@RXbEt? z=~s^o!ek>moV@8Lhp$M_Yi-v0l}7I=mARY$3M3z$Lef4Cb>{biA>@>{`{hn8o!7Oa z)TCvzmaV{_`rcsl>H^yKKawKsf(y6Z*o0e+mggGT?pPZ{omHQLty6>~Y@N$B$ew$? z)~6x+X$5||kHe>1k7{`X{tq|E{NC9C?FQn%n;3CH<6AbS=#n$ z+2sfiH1BpaT|jZb$TEGe(V}HTOz!H#2=qNlD8d8GyFLB55VMhv;o3LH@K^u0`KRczhBEudFXD%C-#qbq*zRhLB6)h_n$S&kxR6E^Uf~aGa;Aase&@#AreZ= dpT?<%{{Sk$3A$$P^6UTr002ovPDHLkV1k50FDC#1 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-%F0%A5%83%A9-silk.svg.png b/server/routers/bushou/images/60px-%F0%A5%83%A9-silk.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..2dcab21dc519369d60cac915db606c5e8623edef GIT binary patch literal 1322 zcmV+_1=aeAP);m2c76CQDz;X%nNdwT1 zI9kg70M-E0%A(W*6M@s{oQ+x|FeQJ<$+-mBLo#OrI|tmGxA3Gqj@gOU?srcChb(2n z)(%wVtUWe^fn)R*-v(S4DYwZ`E@}(&5}uT&F$CU$ys!@UOxp~s1|9|Kf#Jv} za0PH1umbtkqxH_<{(~(Jm9>o!?_7^WMQNfcn{9LSI}_Q6gu~HX*g`hW7J<2zKChwo z1o?$`&kT&gJQRJ{QJ})mXC?51q5S(A!D%P0g+L)?8#Yz}XCu!Fz*^)pit?4F(KKQU zz^}lF(6cTiK5p!OKN6S#Oag|+X!{iBhi#Z;$nqEEG_q2(#pok8HS``E^T-;-+`yD+e(i-f}7J&tRT+#EjMaV{A zkfqKrpv6+}_E5Q-kV(kq>{7q3=$MQQE0drmBpM2*U+b{%eZ#w|TaeGg=IqN^Ii$gs z;Rvi1_!bH9ZDqPRzqZc7p6xsbEXl#AlDtW>XezL+z(v3-*yHj)=|fq}0`M$7gZVhN z9@y=8e+2n_`Wy||mz$*aBN9dRSq1^m06&x7*-!DDm(D8i2brDgfm&cJl7_ho$!t_B z>Muto#Llb)W=#b!5BLf9uiAk`as8HR;3eQVrHAkdB<0gDxfa>ecA)!Se@C{F{f;{1 zq#;h8>nw0{ImD)+4#_$snT=PML2qJ4BUc*IeA|o~IL9Mj*kwNpK7BAhOAiG8^;hV$?POmu2cf zOtxVbx}VZQC*j`M2euDM@06Vfu#0>_*~S!f*O@wiC-Hlv8=GC&1ul)z&J5r$M_Xar zfh6?Hf=lE#G26Nu$zo`nK8ef?xl`&IVcfvK7Tu;Iun)*7=^kLahY?sKaB<8w#{hdv zv>Ud)$o@JPUQ-BqH9@;o$eOKnx{aPW?98}BA*K__N5^FVvTxQV0?%~o$&?D*rvZVT z0>&roqaOP~Th!W-``DSXQYoed{lQw4D&Spod+H`KzFa<8AtF49X|FArsKveZ2XbhzM*ua;lJ&0&@J)=;&iviuP4#Cab2SrEuCUr_Y z{Wr(ri|CR77OOQi%BT5$-t%5N(Lue}X=2*3tMi0@zbX11De-;T#ka*vBNMKC-Iwmu zXL;n$KlfXojlG*JKC8@*Iy{#vTts8S^B$SdR7ErT7z@PVM*}oV;7}OPjA6o9Vhq zAuEH`-H)9Vy>f?B|E;81M4!oHd{;pz6jzM!a5Epd$~Nl7e8wMs5Z z1yT$~28I^81}3@&W+6sKRt5%EhKAZe(!gMnPC6*M5gKyyQ!>*kacg*7cz-8Q1B0il KpUXO@geCwY7VPr? literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-ACC-B00014.svg.png b/server/routers/bushou/images/60px-ACC-B00014.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..54522c97279a1bc2c1a8d8edc8f9a4b2d24b9d75 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k675mSX9`{#g%|Uw>@1PLn02py=>^k94NqWL3~r<;dg4sw79y&FWfs-Tw!o< za|D~Ub?z1+7DI{Vn{Uk6QnwoP-pJ@`FnTY}eE2`l;XjHk0!|!2;$P3TQ}5Y|b|y(y zn?2cOq{$X#)%EnQ`PP}YCP$0E+b4FfIOBAH_s%n4wg$dXn4In_Wk!$kEzM|^w?^LW^wmg#)Uq!{~gmg zFGOu~=J9Q@&YV_Uy*q=}2F;vRWn%bMXtosCElxkS+c5~wNtbSar}+-(P1O?Dh?11V zl2ohYqEsNoU}Ruup=)5GYhV^)WMpMvVr6WmZD3$!U?AiAuLng#ZhlH;S|x4`xe{)` QkY`}>u>b%7 literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-ACC-B00015.svg.png b/server/routers/bushou/images/60px-ACC-B00015.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5959f57d1cc8c8023e039b44a5dcb2834041e2c0 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k675mB#e_TpWgu#+TrQq7!q;#?IlCM!wv$h7sPv>9*I!A!%*eta6Hh0{riJ} zEm!6+uz1QeDGNC|IpWd-E+Raoz1}Tiwmq-L225d3R`L z^3m-#s#|(1*IR$>T6%Tc{ix{3EZgXsmBq8~&--;{Y5TpIk+WXfJXLpd0f9g3&11~X zjaJQBp#k)RYKdz^NlIc#s#S7PDv)9@GBC8zH89aNFbgp$O*~y3Ln02popIhfBv9nIy>Y5v+Dehgj7cnxT1i_3yXqWu zquJi_bY@&EDsy#p*)q{Vz|lmb{4ej@sI47cX~8oD)&5@5%$3VJm;2H0vb6X6i?;LJk00RG=Lra2x>mS%&aOUFbf_u+rss7;OJKl2WC)4pv>kp|i zeC~6vTXsL*n09Il*B`HAV*Ts;d>zD1!ya5Wx>j9to6#dvZxP?0uw%S(_rn;J?4ldh zHJJhe8s~4$V4e4T@*7unv)wTU+y|PDZb2hT95B8O8How)Z9{NDa`$HAO$!AYZ)Av8#;pJZ$GtqQMl##{zk4IHY zyJaiHH5t-Etn)T9zt_{AV^^>_#+A8Xb5Et{jxIIr0&RxN_ddl(6gi1D8GrFmetx;S za{sp*4eL*rp48N;x}#DWRWd_8a*EvNohd%~|?+v@exR2}G%I%MtEcD+UJhef6 z#-vWAZ>yEcjPwPUU*kGkFqL)Yk-{)pa|J>9J-LVFuN-ha=5;~x+*+k=)7pi;w+i-U z#y6X^@AO{C^4IPEs_=POo(6%%a!VAIf{ybV)p2vBy;`OZ7DKBBMVRz7v=(eJO4fv25G% zy!OrYX^QNY=i*+ie5RcI<>R~O%gt^blAjKa$)dju3_A~$R=<&`0VXNc64!{5l*E!$ ztK_0oAjM#0U}&LhV5Dnk7-D2(Wol++WTH{p6QnC z=jK?SKjW+*z`?@Qc%XG*!K*B1M*BCu`wQMo{GAtZ@k+><)DoGOr)6GBWW7H5#xvDw zm(lP2XPZ5_?7#UG`K^_?CI5HzJZ9(IlwTf8?J8crUVmkGo3TvvtAIm&S4_K&gRWjE zX8+l0J+Df8Zqa^Oe!uXqb7rrL4h%D1uHzVcQuXS@Td$KodVHTe@1M4R&ClDVR@|Z+ z+alJiQ=7D+Ln8NDMRqCc?QMIvuamvE-XTG4+YSS%<1Sh|Z#b0yxjX%7&cPd8bIva8 z+)>j{rXi8fAe^+e|r8$SLkUi zrBLs6S&`R-{2jw*=iUA_-7`ctG9WZG_`(TSp{Mqn^tES+&z_!<6?H|Vck#;pdy(Ix z-q+vB6q4`WAU$t_130k6r_FaU)sJdORhkHlE7cO$h?11Vl2ohYqEsNoU}Ruup=)5G zYhWH?U}R-vW@TieZD3$!U=Z^D@^2Ikx%nxXX_dG&sBX%32WnvOboFyt=akR{0Jxk3 AO#lD@ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-ACC-b18626.svg.png b/server/routers/bushou/images/60px-ACC-b18626.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3ee40021462b3a57984abdd86657026650a770 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXLSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXICJ|Af_a5cNd2L?fqx=19|Kv zp1!W^k6755d6Zh_*ga%mV2t*3aSVw#{PybkEa5;A_6PbK)z0$HoY}h|x|~a^!>%DZ z_8a4!-31S&e^{)m5hz^Bv1_G=IIC{iq?sv`wsdk!`#5}z*Nr$=K3)9W%%69w(>N4c z1e`dYhrJG2rQ)gf^47J>Q%k<&N;WKHp1)^%_Rr79c5aJ_Ubu9FuBM9TI(^9#U%rS| zO?o6Q|NcO+|J$|Z_clG=_qvEVb|&|Korl}=X4Gfb+&&$wRg;sk%*xx7ZaRLRxxsCb(4(B3$4!O<+hP-NtYeY#(Vo9o1a#1RfVlXl=w9qv$ z(KRp+F)+3=G_o=_(Kax!GBCJ$>&$Ev4Y~O#nQ4`{H7sc_Q3q;Z@O1TaS?83{1OPt} B@3a5_ literal 0 HcmV?d00001 diff --git a/server/routers/bushou/images/60px-Shuowen_Seal_Radical_038.svg.png b/server/routers/bushou/images/60px-Shuowen_Seal_Radical_038.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..cec0d3494344a9f542c85ddf587dfd2b65746095 GIT binary patch literal 1514 zcmV!nqrG^S}xP14VYv*Vs` zzuj+lW_Q0Yf&5{~=FFU#`F}HW=A1JNQdpn$0r%!TC|lG4?Fs8@!k@>~-R9Lh0@OQ?E(EnH_1^>b15aA&oe)!gzW2Ardon{B z!fn7+-up63-G-QQO>)A_@bnbzjK!3XsP{(8w#y<7VLhmEOI;hn(<5s+AS=R$Qs{=^ zuzHVM{#Hms_+RyIOZc!wxoz8Jk%q7~CRxw0S;k|)0n4__A`M}^)UqVp3C!}|w-dkL zt&oPWww`e_7DU*Rt_2nXuizg`Z#s;tEb3C|{-fTfS?XSmEY+V8TTqY8Y?G?91L#RH zzEGqgJOGR$gS90LaGdvq;T_->;*Fa%(hx2He<8l~NtU|9h`($w1pEr@MFNYRDaMs6 zzCwr(5pNH4@bGcYTk}Y5W1KK&-rqnU68`BUt;W-7^V*sNoP``y{fNz|I_^Qv%0kZ1KJ0BpZny~egnWsQ181il zXr{q6&$TUgfuJPNEv3|%=q3mgPq zbm%7$E+<*m@lM3;90i_1Rz(sV3+z&T9KcT@g<*%P+mf&kD`>*oBkC+cjv8%jwvvqW zbCepY5nxe7eNA{?A_kVwgm;CMHv+o}x3KFdZy?XbxA0>KQKQ?BoX0_E!V9d~B!DLT zZAke_RlW^)oZ@4uTvC0Ls&_wd8gk4T*+-QAV4CoJ7eaB+g!=+zZAkP~K)f##z%ND4 zPvdWQgtWU)6;UxnIUeT$_mS+!yO>e~fa+$WTRrU4(Hv-=&Suo0i2|)M}RsOUmTa4T?82NP}dX2#MUim0+ zi6?JG>_Al5SyjTPBS%RA8NAL|UZeE(1IGt+AExw&GFX70H5s6IX;+o7HdJA=xL%dN zq~sk)hO>ZNy|#wvu2H&gD|zmOy9p}fL z{Tv>OkeiI*Fws}0JAu29BmwwIH{)Dv0A7gD{SAqi`;j2U1S*++k{E_g{9p79C7*@N zY res.send(require('./radicals/success.json'))) + +router.get('/episodes', (req, res) => res.send(require('./episodes/success.json'))) + +router.get('/tokenize', (req, res) => res.send(require('./tokenize/success.json'))) + +router.get('/images/:name', (req, res) => { + res.sendFile(`${__dirname}/images/${encodeURIComponent(req.params.name)}`) +}) + +module.exports = router diff --git a/server/routers/bushou/radicals/success.json b/server/routers/bushou/radicals/success.json new file mode 100644 index 0000000..8849c88 --- /dev/null +++ b/server/routers/bushou/radicals/success.json @@ -0,0 +1,3941 @@ +[ + { + "no": 1, + "radical": ["一"], + "strokeCount": 1, + "meaning": "one", + "pinyin": "yī", + "hanViet": "nhất", + "frequency": 42, + "examples": ["王", "丁", "七", "三"], + "order": "%E4%B8%80-order.gif", + "glyphOrigin": [ + "60px-ACC-B00002.svg.png", + "60px-%E4%B8%80-oracle.svg.png", + "60px-%E4%B8%80-bronze.svg.png", + "60px-ACC-B00014.svg.png", + "60px-ACC-B00015.svg.png", + "60px-%E4%B8%80-silk.svg.png", + "60px-%E4%B8%80-slip.svg.png", + "60px-%E5%BC%8C-ancient.svg.png", + "60px-%E4%B8%80-seal.svg.png", + "60px-%E4%B8%80-bigseal.svg.png", + "60px-%E4%B8%80-clerical.svg.png" + ], + "note": "Ideogram (指事): a horizontal stroke, indicating the number “one”." + }, + { + "no": 2, + "radical": ["丨"], + "strokeCount": 1, + "meaning": "line", + "pinyin": "gǔn", + "hanViet": "cổn", + "frequency": 21, + "examples": ["十", "中", "串", "丰"], + "order": "%E4%B8%A8-order.gif", + "glyphOrigin": [ + "60px-%E4%B8%A8-seal.svg.png", + "60px-%E4%B8%A8-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 3, + "radical": ["丶"], + "strokeCount": 1, + "meaning": "dot", + "pinyin": "zhǔ", + "hanViet": "chủ", + "frequency": 10, + "examples": ["丸", "凡", "丹", "户"], + "order": "%E4%B8%B6-order.gif", + "glyphOrigin": [ + "60px-%E4%B8%B6-bronze.svg.png", + "60px-%E4%B8%B6-seal.svg.png" + ], + "note": "" + }, + { + "no": 4, + "radical": ["丿", "乀", "⺄"], + "strokeCount": 1, + "meaning": "slash", + "pinyin": "piě", + "hanViet": "phiệt", + "frequency": 33, + "examples": ["乂", "乃", "久", "八"], + "order": "%E4%B8%BF-order.gif", + "glyphOrigin": [ + "60px-%E4%B8%BF-seal.svg.png", + "60px-%E4%B8%BF-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 5, + "radical": ["乙", "乚", "乛"], + "strokeCount": 1, + "meaning": "second", + "pinyin": "yǐ", + "hanViet": "ất", + "frequency": 42, + "examples": ["九", "乞", "也"], + "order": "%E4%B9%99-order.gif", + "glyphOrigin": [ + "60px-%E4%B9%99-oracle.svg.png", + "60px-%E4%B9%99-bronze.svg.png", + "60px-%E4%B9%99-silk.svg.png", + "60px-%E4%B9%99-seal.svg.png", + "60px-%E4%B9%99-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 6, + "radical": ["亅"], + "strokeCount": 1, + "meaning": "hook", + "pinyin": "jué", + "hanViet": "quyết", + "frequency": 19, + "examples": ["了", "矛", "事"], + "order": "%E4%BA%85-order.gif", + "glyphOrigin": ["60px-%E4%BA%85-seal.svg.png"], + "note": "" + }, + { + "no": 7, + "radical": ["二"], + "strokeCount": 2, + "meaning": "two", + "pinyin": "èr", + "hanViet": "nhị", + "frequency": 29, + "examples": ["貳", "于", "云", "些"], + "order": "%E4%BA%8C-order.gif", + "glyphOrigin": [ + "60px-%E4%BA%8C-oracle.svg.png", + "60px-%E4%BA%8C-bronze.svg.png", + "60px-ACC-b18623.svg.png", + "60px-ACC-b18626.svg.png", + "60px-%E4%BA%8C-silk.svg.png", + "60px-%E4%BA%8C-slip.svg.png", + "60px-%E5%BC%8D-ancient.svg.png", + "60px-%E4%BA%8C-seal.svg.png", + "60px-%E4%BA%8C-bigseal.svg.png" + ], + "note": "Ideogram (指事) - two parallel lines. Compare with 一, one line meaning one, 三, three lines meaning three, and 亖, four lines meaning four. Duplication of 一 (“one”)." + }, + { + "no": 8, + "radical": ["亠"], + "strokeCount": 2, + "meaning": "lid", + "pinyin": "tóu", + "hanViet": "đầu", + "frequency": 38, + "examples": ["方", "亡", "亢", "交"], + "order": "%E4%BA%A0-order.gif", + "glyphOrigin": ["60px-%E4%BA%A0-seal.svg.png"], + "note": "" + }, + { + "no": 9, + "radical": ["人", "亻"], + "strokeCount": 2, + "meaning": "man", + "pinyin": "rén", + "hanViet": "nhân (đứng, nón)", + "frequency": 794, + "examples": ["你", "什", "仁", "仇"], + "order": "%E4%BA%BA-order.gif", + "glyphOrigin": [ + "60px-%E4%BA%BA-bronze-shang.svg.png", + "60px-%E4%BA%BA-oracle.svg.png", + "60px-%E4%BA%BA-bronze.svg.png", + "60px-%E4%BA%BA-bronze-spring.svg.png", + "60px-%E4%BA%BA-bronze-warring.svg.png", + "60px-%E4%BA%BA-silk.svg.png", + "60px-%E4%BA%BA-slip.svg.png", + "60px-%E5%84%BF-seal.svg.png", + "60px-%E4%BA%BA-seal.svg.png", + "60px-%E4%BA%BA-bigseal.svg.png" + ], + "note": "Pictogram (象形) – side view of a standing man, highlighting the arms and legs. Compare 大." + }, + { + "no": 10, + "radical": ["儿"], + "strokeCount": 2, + "meaning": "son, legs", + "pinyin": "ér", + "hanViet": "nhi/nhân (đi)", + "frequency": 52, + "simplified": "(pr. 兒)", + "examples": ["兒", "兀", "允", "元"], + "order": "%E5%84%BF-order.gif", + "glyphOrigin": [ + "60px-%E5%84%BF-bronze-shang.svg.png", + "60px-%E5%84%BF-oracle.svg.png", + "60px-%E5%84%BF-bronze.svg.png", + "60px-%E5%84%BF-seal.svg.png", + "60px-%E5%84%BF-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a standing person. A radical form of 人. Also simplified from 兒 (elimination of 臼)." + }, + { + "no": 11, + "radical": ["入"], + "strokeCount": 2, + "meaning": "enter", + "pinyin": "rù", + "hanViet": "nhập", + "frequency": 28, + "examples": ["內", "全", "兩", "汆"], + "order": "%E5%85%A5-order.gif", + "glyphOrigin": [ + "60px-%E5%85%A5-oracle.svg.png", + "60px-%E5%85%A5-bronze.svg.png", + "60px-%E5%85%A5-silk.svg.png", + "60px-%E5%85%A5-seal.svg.png", + "60px-%E5%85%A5-bigseal.svg.png" + ], + "note": "Ideogram (指事) - an arrowhead indicating \"to enter\". Compare 人 (rén)." + }, + { + "no": 12, + "radical": ["八", "丷"], + "strokeCount": 2, + "meaning": "eight", + "pinyin": "bā", + "hanViet": "bát", + "frequency": 44, + "examples": ["公", "六", "兮", "穴"], + "order": "%E5%85%AB-order.gif", + "glyphOrigin": [ + "60px-%E5%85%AB-oracle.svg.png", + "60px-%E5%85%AB-bronze.svg.png", + "60px-ACC-b00945.svg.png", + "60px-%E5%85%AB-silk.svg.png", + "60px-%E5%85%AB-slip.svg.png", + "60px-%E5%85%AB-seal.svg.png", + "60px-%E5%85%AB-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 八 is two bent lines indicating the original meaning of \"to divide\". This character is later borrowed to mean \"eight\" because of homonymy, making the original meaning obsolete (now represented by 別)." + }, + { + "no": 13, + "radical": ["冂"], + "strokeCount": 2, + "meaning": "wide", + "pinyin": "jiōng", + "hanViet": "quynhkhuynh", + "frequency": 50, + "examples": ["冇", "冊", "冉", "肉"], + "order": "%E5%86%82-order.gif", + "glyphOrigin": [ + "60px-%E5%86%82-bronze.svg.png", + "60px-%E5%86%82-seal.svg.png", + "60px-%E5%86%82-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 14, + "radical": ["冖"], + "strokeCount": 2, + "meaning": "cloth cover", + "pinyin": "mì", + "hanViet": "mịch", + "frequency": 30, + "examples": ["冗", "冠", "冥", "運"], + "order": "%E5%86%96-order.gif", + "glyphOrigin": [ + "60px-%E5%86%96-oracle.svg.png", + "60px-%E5%86%96-bronze.svg.png", + "60px-%E5%86%96-seal.svg.png" + ], + "note": "" + }, + { + "no": 15, + "radical": ["冫"], + "strokeCount": 2, + "meaning": "ice", + "pinyin": "bīng", + "hanViet": "băng", + "frequency": 115, + "examples": ["冬", "冰", "冶", "凉"], + "order": "%E5%86%AB-order.gif", + "glyphOrigin": [ + "60px-%E4%BB%8C-oracle.svg.png", + "60px-%E4%BB%8C-bronze.svg.png", + "60px-%E4%BB%8C-seal.svg.png", + "60px-%E4%BB%8C-bigseal.svg.png" + ], + "note": "Radical form of 仌." + }, + { + "no": 16, + "radical": ["几"], + "strokeCount": 2, + "meaning": "table", + "pinyin": "jī", + "hanViet": "kỷ", + "frequency": 38, + "examples": ["風", "殳", "凡", "凱"], + "order": "%E5%87%A0-order.gif", + "glyphOrigin": [ + "60px-%E5%87%A0-silk.svg.png", + "60px-%E5%87%A0-seal.svg.png", + "60px-%E5%87%A0-bigseal.svg.png" + ], + "note": "Pictogram (象形) – stool (viewed from the side)." + }, + { + "no": 17, + "radical": ["凵"], + "strokeCount": 2, + "meaning": "receptacle", + "pinyin": "kǎn", + "hanViet": "khảm", + "frequency": 23, + "examples": ["凶", "凸", "凹", "齒"], + "order": "%E5%87%B5-order.gif", + "glyphOrigin": [ + "60px-%E5%87%B5-oracle.svg.png", + "60px-%E5%87%B5-silk.svg.png", + "60px-%E5%87%B5-seal.svg.png", + "60px-%E5%87%B5-bigseal.svg.png" + ], + "note": "Pictogram (象形): a cave" + }, + { + "no": 18, + "radical": ["刀", "刂", "⺈"], + "strokeCount": 2, + "meaning": "knife", + "pinyin": "dāo", + "hanViet": "đao", + "frequency": 377, + "examples": ["刁", "解", "分", "劍"], + "order": "%E5%88%80-order.gif", + "glyphOrigin": [ + "60px-%E5%88%80-bronze-shang.svg.png", + "60px-%E5%88%80-oracle.svg.png", + "60px-%E5%88%80-bronze.svg.png", + "60px-%E5%88%80-silk.svg.png", + "60px-%E5%88%80-seal.svg.png", + "60px-%E5%88%80-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 19, + "radical": ["力"], + "strokeCount": 2, + "meaning": "power", + "pinyin": "lì", + "hanViet": "lực", + "frequency": 163, + "examples": ["加", "功", "劣", "男"], + "order": "%E5%8A%9B-order.gif", + "glyphOrigin": [ + "60px-%E5%8A%9B-oracle.svg.png", + "60px-%E5%8A%9B-bronze.svg.png", + "60px-%E5%8A%9B-bronze-spring.svg.png", + "60px-%E5%8A%9B-bronze-warring.svg.png", + "60px-%E5%8A%9B-silk.svg.png", + "60px-%E5%8A%9B-slip.svg.png", + "60px-%E5%8A%9B-seal.svg.png", + "60px-%E5%8A%9B-bigseal.svg.png" + ], + "note": "Pictogram (象形) – alternative interpretation, either an arm bending out from the side of the body, or a plough." + }, + { + "no": 20, + "radical": ["勹"], + "strokeCount": 2, + "meaning": "wrap", + "pinyin": "bāo", + "hanViet": "bao", + "frequency": 64, + "examples": ["包", "勺", "勻", "勾"], + "order": "%E5%8B%B9-order.gif", + "glyphOrigin": [ + "60px-%E5%8B%B9-oracle.svg.png", + "60px-%E5%8B%B9-bronze.svg.png", + "60px-%E5%8B%B9-seal.svg.png" + ], + "note": "" + }, + { + "no": 21, + "radical": ["匕"], + "strokeCount": 2, + "meaning": "spoon", + "pinyin": "bǐ", + "hanViet": "chủy", + "frequency": 19, + "examples": ["化", "北", "匙", "比"], + "order": "%E5%8C%95-order.gif", + "glyphOrigin": [ + "60px-%E5%8C%95-bronze-shang.svg.png", + "60px-%E5%8C%95-oracle.svg.png", + "60px-%E5%8C%95-bronze.svg.png", + "60px-%E5%8C%95-silk.svg.png", + "60px-%E5%8C%95-seal.svg.png", + "60px-%E5%8C%95-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 22, + "radical": ["匚"], + "strokeCount": 2, + "meaning": "box", + "pinyin": "fāng", + "hanViet": "phương", + "frequency": 64, + "examples": ["匿", "區", "巨", "匠"], + "order": "%E5%8C%9A-order.gif", + "glyphOrigin": [ + "60px-%E5%8C%9A-oracle.svg.png", + "60px-%E5%8C%9A-bronze.svg.png", + "60px-%E5%8C%9A-seal.svg.png", + "60px-%E5%8C%9A-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 23, + "radical": ["匸"], + "strokeCount": 2, + "meaning": "hiding enclosure", + "pinyin": "xǐ/xì", + "hanViet": "hệ", + "frequency": 17, + "examples": ["亡", "匹", "匼", "匽"], + "order": "%E5%8C%B8-order.gif", + "glyphOrigin": [ + "60px-%E5%8C%B8-oracle.svg.png", + "60px-%E5%8C%B8-bronze.svg.png", + "60px-%E5%8C%B8-silk.svg.png", + "60px-%E5%8C%B8-seal.svg.png", + "60px-%E5%8C%B8-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 24, + "radical": ["十"], + "strokeCount": 2, + "meaning": "ten", + "pinyin": "shí", + "hanViet": "thập", + "frequency": 55, + "examples": ["千", "木", "卅", "升"], + "order": "%E5%8D%81-order.gif", + "glyphOrigin": [ + "60px-%E5%8D%81-bronze-shang.svg.png", + "60px-%E5%8D%81-oracle.svg.png", + "60px-%E5%8D%81-bronze.svg.png", + "60px-%E5%8D%81-bronze-spring.svg.png", + "60px-%E5%8D%81-bronze-warring.svg.png", + "60px-%E5%8D%81-silk.svg.png", + "60px-%E5%8D%81-slip.svg.png", + "60px-%E5%8D%81-seal.svg.png", + "60px-%E5%8D%81-bigseal.svg.png" + ], + "note": "Unlike 一, which was one horizontal stroke meaning one, 十 was originally simply a vertical stroke. In later forms 一 was added, forming a cross." + }, + { + "no": 25, + "radical": ["卜"], + "strokeCount": 2, + "meaning": "divination", + "pinyin": "bǔ", + "hanViet": "bốc", + "frequency": 45, + "examples": ["下", "上", "卡", "占"], + "order": "%E5%8D%9C-order.gif", + "glyphOrigin": [ + "60px-%E5%8D%9C-oracle.svg.png", + "60px-%E5%8D%9C-bronze.svg.png", + "60px-%E5%8D%9C-silk.svg.png", + "60px-%E5%8D%9C-slip.svg.png", + "60px-%E5%8D%9C-seal.svg.png", + "60px-%E5%8D%9C-bigseal.svg.png" + ], + "note": "Perhaps a pictogram (象形) of a crack in an oracle bone, used for divination in ancient China. Officially adopted as the simplified form of 蔔 in the Chinese Character Simplification Scheme (《漢字簡化方案》) in 1956." + }, + { + "no": 26, + "radical": ["卩", "㔾"], + "strokeCount": 2, + "meaning": "seal (device)", + "pinyin": "jié", + "hanViet": "tiết", + "frequency": 40, + "examples": ["即", "卬", "卷", "夗"], + "order": "%E5%8D%A9-order.gif", + "glyphOrigin": [ + "60px-%E5%8D%A9-oracle.svg.png", + "60px-%E5%8D%A9-bronze.svg.png", + "60px-%E5%8D%A9-seal.svg.png" + ], + "note": "Pictogram (象形): a kneeling person." + }, + { + "no": 27, + "radical": ["厂"], + "strokeCount": 2, + "meaning": "cliff", + "pinyin": "hǎn[1]", + "hanViet": "hán", + "frequency": 129, + "simplified": "(pr. 廠)", + "examples": ["厄", "原", "厚", "厰"], + "order": "%E5%8E%82-order.gif", + "glyphOrigin": [ + "60px-%E5%8E%82-oracle.svg.png", + "60px-%E5%8E%82-bronze.svg.png", + "60px-%E5%8E%82-seal.svg.png", + "60px-%E5%8E%82-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 28, + "radical": ["厶"], + "strokeCount": 2, + "meaning": "private", + "pinyin": "sī", + "hanViet": "khư", + "frequency": 40, + "examples": ["台", "公", "去", "參"], + "order": "%E5%8E%B6-order.gif", + "glyphOrigin": [ + "60px-%E5%8E%B6-bronze-warring.svg.png", + "60px-%E5%8E%B6-silk.svg.png", + "60px-%E5%8E%B6-seal.svg.png", + "60px-%E5%8E%B6-bigseal.svg.png" + ], + "note": "Ideogram (指事) – revolving around oneself – original character for 私 (“selfish; private”). According to Han Feizi, which was referenced in Shuowen: Compare 公 (“public”)." + }, + { + "no": 29, + "radical": ["又"], + "strokeCount": 2, + "meaning": "again", + "pinyin": "yòu", + "hanViet": "hựu", + "frequency": 91, + "examples": ["叉", "及", "友", "取"], + "order": "%E5%8F%88-order.gif", + "glyphOrigin": [ + "60px-%E5%8F%88-oracle.svg.png", + "60px-%E5%8F%88-bronze.svg.png", + "60px-%E5%8F%88-silk.svg.png", + "60px-%E5%8F%88-seal.svg.png", + "60px-%E5%8F%88-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a right hand. Original form of 右 (OC *ɢʷɯʔ, *ɢʷɯs, “right”)." + }, + { + "no": 30, + "radical": ["口"], + "strokeCount": 3, + "meaning": "mouth", + "pinyin": "kǒu", + "hanViet": "khẩu", + "frequency": 1146, + "examples": ["哎", "古", "只", "品"], + "order": "%E5%8F%A3-order.gif", + "glyphOrigin": [ + "60px-%E5%8F%A3-bronze-shang.svg.png", + "60px-%E5%8F%A3-oracle.svg.png", + "60px-%E5%8F%A3-bronze.svg.png", + "60px-%E5%8F%A3-silk.svg.png", + "60px-%E5%8F%A3-seal.svg.png", + "60px-%E5%8F%A3-bigseal.svg.png" + ], + "note": "Pictogram (象形) – resembles an open mouth. In the oracle bone script, radical 口 is used for characters having abstract meanings. Such a character can have a figurative meaning derived from the phonetic part, e.g. 右 (OC *ɢʷɯʔ, *ɢʷɯs, “right”) = 又 (OC *ɢʷɯs, “right hand”) + 口 and 𪪺 (“strong; powerful”) = 弓 (OC *kʷɯŋ, “bow”) + 口, or be an unrelated borrowing, e.g. 否 (OC *brɯʔ, *pɯʔ, “no”) = 不 (OC *pɯ, *pɯʔ, *pɯ', “calyx”) + 口." + }, + { + "no": 31, + "radical": ["囗"], + "strokeCount": 3, + "meaning": "enclosure", + "pinyin": "wéi", + "hanViet": "vi", + "frequency": 118, + "examples": ["囚", "四", "國", "圍"], + "order": "%E5%9B%97-order.gif", + "glyphOrigin": [ + "60px-%E5%9B%97-oracle.svg.png", + "60px-%E5%9B%97-bronze.svg.png", + "60px-%E5%9B%97-seal.svg.png", + "60px-%E5%9B%97-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 32, + "radical": ["土"], + "strokeCount": 3, + "meaning": "earth", + "pinyin": "tǔ", + "hanViet": "thổ", + "frequency": 580, + "examples": ["地", "圣", "圭", "堯"], + "order": "%E5%9C%9F-order.gif", + "glyphOrigin": [ + "60px-%E5%9C%9F-oracle.svg.png", + "60px-%E5%9C%9F-bronze.svg.png", + "60px-%E5%9C%9F-bronze-spring.svg.png", + "60px-%E5%9C%9F-silk.svg.png", + "60px-%E5%9C%9F-slip.svg.png", + "60px-%E5%9C%9F-seal.svg.png", + "60px-%E5%9C%9F-bigseal.svg.png" + ], + "note": "Pictogram (象形): a lump of clay on a potter’s wheel." + }, + { + "no": 33, + "radical": ["士"], + "strokeCount": 3, + "meaning": "scholar", + "pinyin": "shì", + "hanViet": "sĩ", + "frequency": 24, + "examples": ["壬", "喜", "時", "壽"], + "order": "%E5%A3%AB-order.gif", + "glyphOrigin": [ + "60px-%E5%A3%AB-bronze.svg.png", + "60px-%E5%A3%AB-silk.svg.png", + "60px-%E5%A3%AB-slip.svg.png", + "60px-%E5%A3%AB-seal.svg.png", + "60px-%E5%A3%AB-bigseal.svg.png" + ], + "note": "Pictogram (象形) – axe-like tool; soldier." + }, + { + "no": 34, + "radical": ["夂"], + "strokeCount": 3, + "meaning": "go", + "pinyin": "zhǐ", + "hanViet": "truy/trĩ", + "frequency": 11, + "examples": ["各", "冬", "夆", "愛"], + "order": "%E5%A4%82-order.gif", + "glyphOrigin": ["60px-%E5%A4%82-seal.svg.png"], + "note": "" + }, + { + "no": 35, + "radical": ["夊"], + "strokeCount": 3, + "meaning": "go slowly", + "pinyin": "suī", + "hanViet": "truy/tuy", + "frequency": 23, + "examples": ["夌", "复", "夏"], + "order": "%E5%A4%8A-order.gif", + "glyphOrigin": [ + "60px-%E5%A4%8A-oracle.svg.png", + "60px-%E5%A4%8A-seal.svg.png" + ], + "note": "Pictogram (象形) – footprint (pointing down), variant of 夂. Compare 止, which has similar form in oracle script, but has leg pointing up, and 𡕒 (as in right side of 舛, roughly ヰ), which also has leg pointing down, but toe pointing left, hence different evolutions." + }, + { + "no": 36, + "radical": ["夕"], + "strokeCount": 3, + "meaning": "evening", + "pinyin": "xī", + "hanViet": "tịch", + "frequency": 34, + "examples": ["外", "夗", "多", "岁"], + "order": "%E5%A4%95-order.gif", + "glyphOrigin": [ + "60px-%E5%A4%95-oracle.svg.png", + "60px-%E5%A4%95-bronze.svg.png", + "60px-%E5%A4%95-silk.svg.png", + "60px-%E5%A4%95-seal.svg.png", + "60px-%E5%A4%95-bigseal.svg.png" + ], + "note": "Pictogram (象形) — moon crescent. Compare 月." + }, + { + "no": 37, + "radical": ["大"], + "strokeCount": 3, + "meaning": "big", + "pinyin": "dà", + "hanViet": "đại", + "frequency": 132, + "examples": ["太", "天", "夭", "夯"], + "order": "%E5%A4%A7-order.gif", + "glyphOrigin": [ + "60px-%E5%A4%A7-bronze-shang.svg.png", + "60px-%E5%A4%A7-oracle.svg.png", + "60px-%E5%A4%A7-bronze.svg.png", + "60px-%E5%A4%A7-bronze-warring.svg.png", + "60px-%E5%A4%A7-silk.svg.png", + "60px-%E5%A4%A7-slip.svg.png", + "60px-%E5%A4%A7-zhou.svg.png", + "60px-%E5%A4%A7-seal.svg.png", + "60px-%E5%A4%A7-bigseal.svg.png" + ], + "note": "Ideogram (指事): a person 人 with arms stretched out as far as possible, implying the meaning of big/great/large. Compare with 尢, which is a man with bent legs. Compare also 文, which is a man with arms outstretched and a crest or tattoo on his chest, and to 夭, which is a man with arms outstretched and leaning to side (running)." + }, + { + "no": 38, + "radical": ["女"], + "strokeCount": 3, + "meaning": "woman", + "pinyin": "nǚ", + "hanViet": "nữ", + "frequency": 681, + "examples": ["妳", "婆", "奶", "如"], + "order": "%E5%A5%B3-order.gif", + "glyphOrigin": [ + "60px-%E5%A5%B3-oracle.svg.png", + "60px-%E5%A5%B3-bronze.svg.png", + "60px-%E5%A5%B3-silk.svg.png", + "60px-%E5%A5%B3-seal.svg.png", + "60px-%E5%A5%B3-bigseal.svg.png" + ], + "note": "Pictogram (象形): a woman with breasts kneeling or standing. In modern form turned on left side: enclosed area is remnant of left breast (character's left, depicted woman's right), while right breast has disappeared. Graphically cognate to 母 (mǔ, “mother”), which has developed similarly, but also includes dots for nipples and has retained both breasts." + }, + { + "no": 39, + "radical": ["子"], + "strokeCount": 3, + "meaning": "child", + "pinyin": "zǐ", + "hanViet": "tử", + "frequency": 83, + "examples": ["孩", "學", "孔", "仔"], + "order": "%E5%AD%90-order.gif", + "glyphOrigin": [ + "60px-%E5%AD%90-oracle.svg.png", + "60px-%E5%AD%90-bronze.svg.png", + "60px-%E5%AD%90-silk.svg.png", + "60px-%E5%AD%90-seal.svg.png", + "60px-%E5%AD%90-bigseal.svg.png" + ], + "note": "Pictogram (象形) – an image of a baby, with a large head and spread arms. The legs are wrapped in a blanket. Compare with 了, where the arms are wrapped. The big seal script form is much more elaborate, showing a baby with hair on a head (囟) and arms on the two sides of the body, sitting on a stool (几)." + }, + { + "no": 40, + "radical": ["宀"], + "strokeCount": 3, + "meaning": "roof", + "pinyin": "mián", + "hanViet": "miên", + "frequency": 246, + "examples": ["家", "安", "寧", "它"], + "order": "%E5%AE%80-order.gif", + "glyphOrigin": [ + "60px-%E5%AE%80-oracle.svg.png", + "60px-%E5%AE%80-bronze.svg.png", + "60px-%E5%AE%80-seal.svg.png", + "60px-%E5%AE%80-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 41, + "radical": ["寸"], + "strokeCount": 3, + "meaning": "inch", + "pinyin": "cùn", + "hanViet": "thốn", + "frequency": 40, + "examples": ["村", "寺", "封", "射"], + "order": "%E5%AF%B8-order.gif", + "glyphOrigin": [ + "60px-%E5%AF%B8-bronze.svg.png", + "60px-%E5%AF%B8-slip.svg.png", + "60px-%E5%AF%B8-seal.svg.png", + "60px-%E5%AF%B8-bigseal.svg.png" + ], + "note": "Ideogram (指事) – a position on the forearm where the pulse can be palpated by compressing the radial artery. It is called 寸口 in modern Chinese, and the meaning of a unit of measurement is derived from the distance between the wrist and this position. Compare 又, 手, 九, 爪." + }, + { + "no": 42, + "radical": ["小", "⺌", "⺍"], + "strokeCount": 3, + "meaning": "small", + "pinyin": "xiǎo", + "hanViet": "tiểu", + "frequency": 41, + "examples": ["少", "尖", "當", "栄"], + "order": "%E5%B0%8F-order.gif", + "glyphOrigin": [ + "60px-%E5%B0%8F-oracle.svg.png", + "60px-%E5%B0%8F-bronze.svg.png", + "60px-%E5%B0%8F-slip.svg.png", + "60px-%E5%B0%8F-seal.svg.png", + "60px-%E5%B0%8F-bigseal.svg.png" + ], + "note": "Two possible interpretations: Starting from some bronze inscriptions, the dots have become elongated. Based on this form, Shuowen erroneously considers it to be an ideogrammic compound (會意): 八 (“to divide; to separate”) + 丨 (“small object”). Compare with 少 (OC *hmjewʔ, *hmjews), represented by four dots in its oracle bone script form." + }, + { + "no": 43, + "radical": ["尢", "尣"], + "strokeCount": 3, + "meaning": "lame", + "pinyin": "wāng", + "hanViet": "uông", + "frequency": 66, + "examples": ["尤", "尷", "尬", "尩"], + "order": "%E5%B0%A2-order.gif", + "glyphOrigin": [ + "60px-%E5%B0%A2-oracle.svg.png", + "60px-%E5%B0%A2-bronze.svg.png", + "60px-%E5%B0%A2-ancient.svg.png", + "60px-%E5%B0%A2-seal.svg.png" + ], + "note": "Ideogram (指事), a man with bent legs (jumping or collapsing). Compare with 大, which derives from a man with straight legs, and in present form has slightly different strokes." + }, + { + "no": 44, + "radical": ["尸"], + "strokeCount": 3, + "meaning": "corpse", + "pinyin": "shī", + "hanViet": "thi", + "frequency": 148, + "simplified": "(pr. 屍)", + "examples": ["屍", "尺", "尼", "尻"], + "order": "%E5%B0%B8-order.gif", + "glyphOrigin": [ + "60px-%E5%B0%B8-bronze-shang.svg.png", + "60px-%E5%B0%B8-oracle.svg.png", + "60px-%E5%B0%B8-bronze.svg.png", + "60px-%E5%B0%B8-slip.svg.png", + "60px-%E5%B0%B8-seal.svg.png", + "60px-%E5%B0%B8-bigseal.svg.png" + ], + "note": "Pictogram (象形) - A man with his legs bending, and a side to the front. The picture is variously interpreted as either sitting or lying. When used as a radical, 尸 is usually derived from a variation of 人 or 亻, as in 尾." + }, + { + "no": 45, + "radical": ["屮"], + "strokeCount": 3, + "meaning": "sprout", + "pinyin": "chè", + "hanViet": "triệt", + "frequency": 38, + "examples": ["艸", "屯", "屰", "頓"], + "order": "%E5%B1%AE-order.gif", + "glyphOrigin": [ + "60px-%E5%B1%AE-bronze.svg.png", + "60px-%E5%B1%AE-silk.svg.png", + "60px-%E5%B1%AE-seal.svg.png", + "60px-%E5%B1%AE-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 46, + "radical": ["山"], + "strokeCount": 3, + "meaning": "mountain", + "pinyin": "shān", + "hanViet": "sơn", + "frequency": 636, + "examples": ["嵗", "密", "峰", "幽"], + "order": "%E5%B1%B1-order.gif", + "glyphOrigin": [ + "60px-%E5%B1%B1-oracle.svg.png", + "60px-%E5%B1%B1-bronze.svg.png", + "60px-%E5%B1%B1-silk.svg.png", + "60px-%E5%B1%B1-seal.svg.png", + "60px-%E5%B1%B1-bigseal.svg.png" + ], + "note": "Pictogram (象形) – three mountain peaks. In the Oracle Bone Script, they were represented by triangles rather than vertical strokes. Compare 丘 (qiū), particularly earlier forms." + }, + { + "no": 47, + "radical": ["巛", "川"], + "strokeCount": 3, + "meaning": "river", + "pinyin": "chuān", + "hanViet": "xuyên", + "frequency": 26, + "examples": ["川", "州", "順", "災"], + "order": "%E5%B7%9B-order.gif", + "glyphOrigin": [ + "60px-%E5%B7%9D-oracle.svg.png", + "60px-%E5%B7%9D-bronze.svg.png", + "60px-%E5%B7%9D-bronze-warring.svg.png", + "60px-%E5%B7%9D-silk.svg.png", + "60px-%E5%B7%9D-seal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 48, + "radical": ["工"], + "strokeCount": 3, + "meaning": "work", + "pinyin": "gōng", + "hanViet": "công", + "frequency": 17, + "examples": ["左", "巧", "功", "式"], + "order": "%E5%B7%A5-order.gif", + "glyphOrigin": [ + "60px-%E5%B7%A5-oracle.svg.png", + "60px-%E5%B7%A5-bronze.svg.png", + "60px-%E5%B7%A5-silk.svg.png", + "60px-%E5%B7%A5-ancient.svg.png", + "60px-%E5%B7%A5-seal.svg.png", + "60px-%E5%B7%A5-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a bladed tool." + }, + { + "no": 49, + "radical": ["己"], + "strokeCount": 3, + "meaning": "oneself", + "pinyin": "jǐ", + "hanViet": "kỷ", + "frequency": 20, + "examples": ["記", "改", "忌", "龍"], + "order": "%E5%B7%B1-order.gif", + "glyphOrigin": [ + "60px-%E5%B7%B1-oracle.svg.png", + "60px-%E5%B7%B1-bronze.svg.png", + "60px-%E5%B7%B1-silk.svg.png", + "60px-%E5%B7%B1-seal.svg.png", + "60px-%E5%B7%B1-bigseal.svg.png" + ], + "note": "Pictogram (象形) – silk rope for binding objects. Original form of 紀 (OC *kɯʔ)." + }, + { + "no": 50, + "radical": ["巾"], + "strokeCount": 3, + "meaning": "turban", + "pinyin": "jīn", + "hanViet": "cân", + "frequency": 295, + "examples": ["市", "帥", "刷", "砸"], + "order": "%E5%B7%BE-order.gif", + "glyphOrigin": [ + "60px-%E5%B7%BE-oracle.svg.png", + "60px-%E5%B7%BE-bronze.svg.png", + "60px-%E5%B7%BE-seal.svg.png", + "60px-%E5%B7%BE-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 51, + "radical": ["干"], + "strokeCount": 3, + "meaning": "dry", + "pinyin": "gān", + "hanViet": "can", + "frequency": 9, + "simplified": "(pr. 乾、幹)", + "examples": ["旱", "开", "平", "年"], + "order": "%E5%B9%B2-order.gif", + "glyphOrigin": [ + "60px-%E5%B9%B2-oracle.svg.png", + "60px-%E5%B9%B2-bronze.svg.png", + "60px-%E5%B9%B2-silk.svg.png", + "60px-%E5%B9%B2-seal.svg.png", + "60px-%E5%B9%B2-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a pestle. Also borrowed phonetically as a simplification of 乾 and 幹." + }, + { + "no": 52, + "radical": ["幺", "么"], + "strokeCount": 3, + "meaning": "short thread", + "pinyin": "yāo", + "hanViet": "yêu", + "frequency": 50, + "examples": ["幻", "麼", "幽", "幾"], + "order": "%E5%B9%BA-order.gif", + "glyphOrigin": [ + "60px-%E5%B9%BA-bronze.svg.png", + "60px-%E5%B9%BA-seal.svg.png" + ], + "note": "" + }, + { + "no": 53, + "radical": ["广"], + "strokeCount": 3, + "meaning": "dotted cliff", + "pinyin": "guǎng", + "hanViet": "nghiễm", + "frequency": 15, + "simplified": "(pr. 廣)", + "examples": ["庀", "庂", "庄"], + "order": "%E5%B9%BF-order.gif", + "glyphOrigin": [ + "60px-%E5%B9%BF-bronze.svg.png", + "60px-%E5%B9%BF-seal.svg.png", + "60px-%E5%B9%BF-bigseal.svg.png" + ], + "note": "Pictogram (象形): A house that is built to depend on a cliff." + }, + { + "no": 54, + "radical": ["廴"], + "strokeCount": 3, + "meaning": "long stride", + "pinyin": "yǐn", + "hanViet": "dẫn", + "frequency": 9, + "examples": ["廵", "廷", "延"], + "order": "%E5%BB%B4-order.gif", + "glyphOrigin": [ + "60px-%E5%BB%B4-seal.svg.png", + "60px-%E5%BB%B4-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a man with one leg behind him, implying a stride." + }, + { + "no": 55, + "radical": ["廾"], + "strokeCount": 3, + "meaning": "arch", + "pinyin": "gǒng", + "hanViet": "củng", + "frequency": 50, + "examples": ["廿", "弁", "弄"], + "order": "%E5%BB%BE-order.gif", + "glyphOrigin": [ + "60px-%E5%BB%BE-oracle.svg.png", + "60px-%E5%BB%BE-bronze.svg.png", + "60px-%E5%BB%BE-seal.svg.png", + "60px-%E5%BB%BE-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 𠂇 (“left hand”) + 又 (“right hand”), hence both hands. Variant of 廿." + }, + { + "no": 56, + "radical": ["弋"], + "strokeCount": 3, + "meaning": "shoot", + "pinyin": "yì", + "hanViet": "dặc", + "frequency": 15, + "examples": ["弌", "弍", "弎"], + "order": "%E5%BC%8B-order.gif", + "glyphOrigin": [ + "60px-%E5%BC%8B-oracle.svg.png", + "60px-%E5%BC%8B-bronze.svg.png", + "60px-%E5%BC%8B-silk.svg.png", + "60px-%E5%BC%8B-seal.svg.png", + "60px-%E5%BC%8B-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 57, + "radical": ["弓"], + "strokeCount": 3, + "meaning": "bow", + "pinyin": "gōng", + "hanViet": "cung", + "frequency": 165, + "examples": ["弔", "引", "弗"], + "order": "%E5%BC%93-order.gif", + "glyphOrigin": [ + "60px-%E5%BC%93-oracle.svg.png", + "60px-%E5%BC%93-bronze.svg.png", + "60px-%E5%BC%93-silk.svg.png", + "60px-%E5%BC%93-seal.svg.png", + "60px-%E5%BC%93-bigseal.svg.png" + ], + "note": "Pictogram (象形) - pictographic representation of a bow." + }, + { + "no": 58, + "radical": ["彐", "彑"], + "strokeCount": 3, + "meaning": "snout", + "pinyin": "jì", + "hanViet": "ký/kệ", + "frequency": 25, + "examples": ["彔", "彖", "彗"], + "order": "%E5%BD%90-order.gif", + "glyphOrigin": ["60px-%E5%BD%90-seal.svg.png"], + "note": "彐" + }, + { + "no": 59, + "radical": ["彡"], + "strokeCount": 3, + "meaning": "bristle", + "pinyin": "shān", + "hanViet": "sam", + "frequency": 62, + "examples": ["形", "彤", "彥"], + "order": "%E5%BD%A1-order.gif", + "glyphOrigin": [ + "60px-%E5%BD%A1-seal.svg.png", + "60px-%E5%BD%A1-bigseal.svg.png" + ], + "note": "Pictogram (象形): 3 strands of hair." + }, + { + "no": 60, + "radical": ["彳"], + "strokeCount": 3, + "meaning": "step", + "pinyin": "chì", + "hanViet": "sách", + "frequency": 215, + "examples": ["㣔", "彴", "彷"], + "order": "%E5%BD%B3-order.gif", + "glyphOrigin": [ + "60px-%E5%BD%B3-bronze.svg.png", + "60px-%E5%BD%B3-seal.svg.png", + "60px-%E5%BD%B3-bigseal.svg.png" + ], + "note": "Simplified from 行 – the left side of the character." + }, + { + "no": 61, + "radical": ["心", "忄", "⺗"], + "strokeCount": 4, + "meaning": "heart", + "pinyin": "xīn", + "hanViet": "tâm", + "frequency": 1115, + "examples": ["必", "忉", "忌"], + "order": "%E5%BF%83-order.gif", + "glyphOrigin": [ + "60px-%E5%BF%83-bronze-shang.svg.png", + "60px-%E5%BF%83-oracle.svg.png", + "60px-%E5%BF%83-bronze.svg.png", + "60px-%E5%BF%83-silk.svg.png", + "60px-%E5%BF%83-seal.svg.png", + "60px-%E5%BF%83-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a heart, now highly stylized." + }, + { + "no": 62, + "radical": ["戈"], + "strokeCount": 4, + "meaning": "halberd", + "pinyin": "gē", + "hanViet": "qua", + "frequency": 116, + "examples": ["戊", "戉", "戌"], + "order": "%E6%88%88-order.gif", + "glyphOrigin": [ + "60px-%E6%88%88-oracle.svg.png", + "60px-%E6%88%88-bronze.svg.png", + "60px-%E6%88%88-silk.svg.png", + "60px-%E6%88%88-seal.svg.png" + ], + "note": "Pictogram (象形) ― a tool or weapon on a pole, the pole having developed into the long upper-left to lower-right diagonal stroke." + }, + { + "no": 63, + "radical": ["戶", "户", "戸"], + "strokeCount": 4, + "meaning": "door", + "pinyin": "hù", + "hanViet": "hộ", + "frequency": 44, + "simplified": "户", + "examples": ["戹", "戼", "戽"], + "order": "%E6%88%B6-order.gif", + "glyphOrigin": [ + "60px-%E6%88%B6-oracle.svg.png", + "60px-%E6%88%B6-bronze.svg.png", + "60px-%E6%88%B6-silk.svg.png", + "60px-%E6%88%B6-seal.svg.png", + "60px-%E6%88%B6-bigseal.svg.png" + ], + "note": "Pictogram (象形): half of 門 (“door”)." + }, + { + "no": 64, + "radical": ["手", "扌", "龵"], + "strokeCount": 4, + "meaning": "hand", + "pinyin": "shǒu", + "hanViet": "thủ", + "frequency": 1203, + "examples": ["才", "扎", "扐"], + "order": "%E6%89%8B-order.gif", + "glyphOrigin": [ + "60px-%E6%89%8B-bronze.svg.png", + "60px-%E6%89%8B-silk.svg.png", + "60px-%E6%89%8B-slip.svg.png", + "60px-%E6%89%8B-ancient.svg.png", + "60px-%E6%89%8B-seal.svg.png", + "60px-%E6%89%8B-bigseal.svg.png" + ], + "note": "Pictogram (象形) – hand and fingers. The top stroke is the bent over middle finger, while the horizontal strokes are each two fingers. Compare 爪, 寸, 九. Note that unlike the other hand/claw characters, 手 has consistently had five fingers: a mammalian/human hand, as opposed to the three digits often found in the others. Compare also 止 (“foot”), derived from a footprint, originally composed of 3 toes and a sole." + }, + { + "no": 65, + "radical": ["支"], + "strokeCount": 4, + "meaning": "branch", + "pinyin": "zhī", + "hanViet": "chi", + "frequency": 26, + "examples": ["攰", "攱", "攲"], + "order": "%E6%94%AF-order.gif", + "glyphOrigin": [ + "60px-%E6%94%AF-silk.svg.png", + "60px-%E6%94%AF-seal.svg.png", + "60px-%E6%94%AF-bigseal.svg.png" + ], + "note": "Shuowen: Half of 竹 + 又." + }, + { + "no": 66, + "radical": ["攴", "攵"], + "strokeCount": 4, + "meaning": "rap, tap", + "pinyin": "pū", + "hanViet": "phộc", + "frequency": 296, + "examples": ["收", "攷", "攸"], + "order": "%E6%94%B4-order.gif", + "glyphOrigin": [ + "60px-%E6%94%B4-oracle.svg.png", + "60px-%E6%94%B4-seal.svg.png", + "60px-%E6%94%B4-bigseal.svg.png" + ], + "note": "Phono-semantic compound (形聲, OC *pʰoːɡ, *pʰroːɡ): phonetic 卜 (OC *poːɡ) + semantic 又 (“hand”)." + }, + { + "no": 67, + "radical": ["文"], + "strokeCount": 4, + "meaning": "script", + "pinyin": "wén", + "hanViet": "văn", + "frequency": 26, + "examples": ["斉", "斌", "斐"], + "order": "%E6%96%87-order.gif", + "glyphOrigin": [ + "60px-%E6%96%87-oracle.svg.png", + "60px-%E6%96%87-bronze.svg.png", + "60px-%E6%96%87-silk.svg.png", + "60px-%E6%96%87-seal.svg.png", + "60px-%E6%96%87-bigseal.svg.png" + ], + "note": "Ideogram (指事): a man with a painted or tattooed chest – original form of 紋. In current form, tattoo has vanished, so simply an outline of a man (head, outstretched arms, legs, chest). Compare 大, which has no chest." + }, + { + "no": 68, + "radical": ["斗"], + "strokeCount": 4, + "meaning": "dipper", + "pinyin": "dǒu", + "hanViet": "đẩu", + "frequency": 32, + "examples": ["料", "斚", "斛"], + "order": "%E6%96%97-order.gif", + "glyphOrigin": [ + "60px-%E6%96%97-oracle.svg.png", + "60px-%E6%96%97-bronze-spring.svg.png", + "60px-%E6%96%97-bronze-warring.svg.png", + "60px-%E6%96%97-slip.svg.png", + "60px-%E6%96%97-seal.svg.png", + "60px-%E6%96%97-bigseal.svg.png" + ], + "note": "Pictogram (象形) (Shuowen), indicating a ladle-shaped dou (see below) held by hand." + }, + { + "no": 69, + "radical": ["斤"], + "strokeCount": 4, + "meaning": "axe", + "pinyin": "jīn", + "hanViet": "cân", + "frequency": 55, + "examples": ["斥", "斧", "斨"], + "order": "%E6%96%A4-order.gif", + "glyphOrigin": [ + "60px-%E6%96%A4-oracle.svg.png", + "60px-%E6%96%A4-bronze.svg.png", + "60px-%E6%96%A4-silk.svg.png", + "60px-%E6%96%A4-seal.svg.png", + "60px-%E6%96%A4-bigseal.svg.png" + ], + "note": "Pictogram (象形) - an axe." + }, + { + "no": 70, + "radical": ["方"], + "strokeCount": 4, + "meaning": "square", + "pinyin": "fāng", + "hanViet": "phương", + "frequency": 92, + "examples": ["㫃", "於", "㫄"], + "order": "%E6%96%B9-order.gif", + "glyphOrigin": [ + "60px-%E6%96%B9-oracle.svg.png", + "60px-%E6%96%B9-bronze.svg.png", + "60px-%E6%96%B9-silk.svg.png", + "60px-%E6%96%B9-seal.svg.png", + "60px-%E6%96%B9-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 一 + 刀 (“sword”) – blade; tip of a blade. Original form of 芒 (OC *maːŋ, *maŋ, “awn (of cereal); tip (of blade)”); later borrowed to mean “side”. Other theories regarding the origin of this character also exist. It is unrelated to 㫃 (“fluttering flag”), from which characters like 旗 (OC *ɡɯ, “flag”) and 旅 (OC *ɡ·raʔ, “troops”) are derived." + }, + { + "no": 71, + "radical": ["无", "旡"], + "strokeCount": 4, + "meaning": "not", + "pinyin": "wú", + "hanViet": "vô", + "frequency": 12, + "examples": ["既", "旣", "旤"], + "order": "%E6%97%A0-order.gif", + "glyphOrigin": [ + "60px-%E6%97%A0-bronze.svg.png", + "60px-%E7%84%A1-seal.svg.png", + "60px-%E6%97%A0-bigseal.svg.png" + ], + "note": "One of the three characters (無, 无, 亡) that have historically been used to represent the word \"no, not any\". First attested in the Warring States period; used interchangeably with 無 until the Tang dynasty. Readopted by the PRC in 1956. The origin of this character is unknown. Probably an ancient variant form of either 元, 天 or 堯." + }, + { + "no": 72, + "radical": ["日"], + "strokeCount": 4, + "meaning": "sun", + "pinyin": "rì", + "hanViet": "nhật", + "frequency": 453, + "examples": ["旦", "旨", "早"], + "order": "%E6%97%A5-order.gif", + "glyphOrigin": [ + "60px-%E6%97%A5-oracle.svg.png", + "60px-%E6%97%A5-bronze.svg.png", + "60px-%E6%97%A5-silk.svg.png", + "60px-%E6%97%A5-seal.svg.png", + "60px-%E6%97%A5-bigseal.svg.png" + ], + "note": "Pictogram (象形) – the Sun. A dot or line was added in the centre to distinguish it from visually similar characters, e.g. 囗 (early form of 丁). Compare earlier forms of the character with the astronomical and astrological symbol for the Sun (☉) and the Egyptian hieroglyph 𓇳." + }, + { + "no": 73, + "radical": ["曰"], + "strokeCount": 4, + "meaning": "say", + "pinyin": "yuē", + "hanViet": "viết", + "frequency": 37, + "examples": ["曲", "曳", "更"], + "order": "%E6%9B%B0-order.gif", + "glyphOrigin": [ + "60px-%E6%9B%B0-oracle.svg.png", + "60px-%E6%9B%B0-bronze.svg.png", + "60px-%E6%9B%B0-silk.svg.png", + "60px-%E6%9B%B0-seal.svg.png", + "60px-%E6%9B%B0-bigseal.svg.png", + "60px-%E6%9B%B0-clerical.svg.png" + ], + "note": "Ideogram (指事): a mouth (口) with word or breath (一) coming out. Compare 今 and 言, where a small stroke is also used to represent words." + }, + { + "no": 74, + "radical": ["月"], + "strokeCount": 4, + "meaning": "moon", + "pinyin": "yuè", + "hanViet": "nguyệt", + "frequency": 69, + "examples": ["有", "朋", "服"], + "order": "%E6%9C%88-order.gif", + "glyphOrigin": [ + "60px-%E6%9C%88-oracle.svg.png", + "60px-%E6%9C%88-bronze.svg.png", + "60px-%E6%9C%88-silk.svg.png", + "60px-%E6%9C%88-seal.svg.png", + "60px-%E6%9C%88-bigseal.svg.png" + ], + "note": "Pictogram (象形) – pictographic representation of a crescent moon. Compare 夕." + }, + { + "no": 75, + "radical": ["木"], + "strokeCount": 4, + "meaning": "tree", + "pinyin": "mù", + "hanViet": "mộc", + "frequency": 1369, + "examples": ["未", "末", "本"], + "order": "%E6%9C%A8-order.gif", + "glyphOrigin": [ + "60px-%E6%9C%A8-oracle.svg.png", + "60px-%E6%9C%A8-bronze.svg.png", + "60px-%E6%9C%A8-silk.svg.png", + "60px-%E6%9C%A8-seal.svg.png", + "60px-%E6%9C%A8-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a tree: branches on top, roots on the bottom (more visible in earlier forms)." + }, + { + "no": 76, + "radical": ["欠"], + "strokeCount": 4, + "meaning": "lack", + "pinyin": "qiàn", + "hanViet": "khiếm", + "frequency": 235, + "examples": ["次", "欣", "欥"], + "order": "%E6%AC%A0-order.gif", + "glyphOrigin": [ + "60px-%E6%AC%A0-seal.svg.png", + "60px-%E6%AC%A0-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 77, + "radical": ["止"], + "strokeCount": 4, + "meaning": "stop", + "pinyin": "zhǐ", + "hanViet": "chỉ", + "frequency": 99, + "examples": ["正", "此", "步"], + "order": "%E6%AD%A2-order.gif", + "glyphOrigin": [ + "60px-%E6%AD%A2-bronze-shang.svg.png", + "60px-%E6%AD%A2-oracle.svg.png", + "60px-%E6%AD%A2-bronze.svg.png", + "60px-%E6%AD%A2-silk.svg.png", + "60px-%E6%AD%A2-slip.svg.png", + "60px-%E6%AD%A2-seal.svg.png", + "60px-%E6%AD%A2-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a footprint, originally meaning \"foot\". The derivative 趾 (OC *kjɯʔ) refers to the original meaning. Compare 手 (“hand”). Note that in oracle script, composed of 3 toes and a sole. Compare to 夊, 夂, which have similar shape in oracle script, but pointing down (toe pointing right), and 𡕒 (as in right side of 舛, roughly ヰ, toe pointing left), hence different evolution." + }, + { + "no": 78, + "radical": ["歹", "歺"], + "strokeCount": 4, + "meaning": "death", + "pinyin": "dǎi", + "hanViet": "ngạt/đãi", + "frequency": 231, + "examples": ["歺", "死", "歿"], + "order": "%E6%AD%B9-order.gif", + "glyphOrigin": [ + "60px-%E6%AD%B9-oracle.svg.png", + "60px-%E6%AD%B9-seal.svg.png", + "60px-%E6%AD%B9-bigseal.svg.png" + ], + "note": "Pictogram (象形) - human remains." + }, + { + "no": 79, + "radical": ["殳"], + "strokeCount": 4, + "meaning": "weapon", + "pinyin": "shū", + "hanViet": "thù", + "frequency": 93, + "examples": ["段", "殷", "殺"], + "order": "%E6%AE%B3-order.gif", + "glyphOrigin": [ + "60px-%E6%AE%B3-oracle.svg.png", + "60px-%E6%AE%B3-bronze.svg.png", + "60px-%E6%9D%B8-silk.svg.png", + "60px-%E6%AE%B3-slip.svg.png", + "60px-%E6%AE%B3-seal.svg.png", + "60px-%E6%AE%B3-bigseal.svg.png" + ], + "note": "Pictogram (象形) or Ideogrammic compound (會意): 几 + 又 – a hand holding a tool, hence activity." + }, + { + "no": 80, + "radical": ["毋", "母"], + "strokeCount": 4, + "meaning": "do not", + "pinyin": "wú", + "hanViet": "vô", + "frequency": 16, + "examples": ["母", "每", "毐"], + "order": "%E6%AF%8B-order.gif", + "glyphOrigin": [ + "60px-%E6%AF%8B-bronze.svg.png", + "60px-%E6%AF%8B-seal.svg.png", + "60px-%E6%AF%8B-bigseal.svg.png" + ], + "note": "In the oracle bone script, 母 (“mother”) was borrowed to represent this character. It was later specialized to distinguish it from “mother”, replacing the two dots with one stroke." + }, + { + "no": 81, + "radical": ["比"], + "strokeCount": 4, + "meaning": "compare", + "pinyin": "bǐ", + "hanViet": "tỷ", + "frequency": 21, + "examples": ["毖", "毗", "毘"], + "order": "%E6%AF%94-order.gif", + "glyphOrigin": [ + "60px-%E6%AF%94-oracle.svg.png", + "60px-%E6%AF%94-bronze.svg.png", + "60px-%E6%AF%94-silk.svg.png", + "60px-%E5%A4%B6-ancient.svg.png", + "60px-%E6%AF%94-seal.svg.png", + "60px-%E6%AF%94-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 人 (“man”) + 人 – to juxtapose." + }, + { + "no": 82, + "radical": ["毛"], + "strokeCount": 4, + "meaning": "fur", + "pinyin": "máo", + "hanViet": "mao", + "frequency": 211, + "examples": ["毡", "毣", "毧"], + "order": "%E6%AF%9B-order.gif", + "glyphOrigin": [ + "60px-%E6%AF%9B-bronze.svg.png", + "60px-%E6%AF%9B-silk.svg.png", + "60px-%E6%AF%9B-seal.svg.png", + "60px-%E6%AF%9B-bigseal.svg.png" + ], + "note": "Pictogram (象形) – feather or hair." + }, + { + "no": 83, + "radical": ["氏"], + "strokeCount": 4, + "meaning": "clan", + "pinyin": "shì", + "hanViet": "thị", + "frequency": 10, + "examples": ["氐", "民", "氓"], + "order": "%E6%B0%8F-order.gif", + "glyphOrigin": [ + "60px-%E6%B0%8F-oracle.svg.png", + "60px-%E6%B0%8F-bronze.svg.png", + "60px-%E6%B0%8F-silk.svg.png", + "60px-%E6%B0%8F-seal.svg.png", + "60px-%E6%B0%8F-bigseal.svg.png" + ], + "note": "Pictogram (象形) – There are various interpretations: a man bending over to sow the field,[1] the root of a tree,[2] a man bowing over to the right, etc." + }, + { + "no": 84, + "radical": ["气"], + "strokeCount": 4, + "meaning": "steam", + "pinyin": "qì", + "hanViet": "khí", + "frequency": 17, + "simplified": "(pr. 氣)", + "examples": ["氕", "氘", "氚"], + "order": "%E6%B0%94-order.gif", + "glyphOrigin": [ + "60px-%E6%B0%94-oracle.svg.png", + "60px-%E6%B0%94-bronze.svg.png", + "60px-%E6%B0%94-bronze-spring.svg.png", + "60px-%E6%B0%94-silk.svg.png", + "60px-%E6%B0%94-slip.svg.png", + "60px-%E6%B0%94-seal.svg.png", + "60px-%E6%B0%94-bigseal.svg.png" + ], + "note": "气 (OC *kʰɯds) is a pictogram (象形) of clouds flowing through the sky. In the oracle bone script, it was represented by three horizontal strokes, expressing the \"feeling\" of the sky. However, in order to avoid confusion with the number 三 (OC *suːm, *suːms), the current 气 (OC *kʰɯds) was changed to draw a small stroke from top to bottom. The glyph of 氣 (OC *kʰɯds, *qʰɯds) and 乞 (OC *kʰɯds, *kʰɯd) comes from the same ancient form." + }, + { + "no": 85, + "radical": ["水", "氵", "氺"], + "strokeCount": 4, + "meaning": "water", + "pinyin": "shuǐ", + "hanViet": "thủy", + "frequency": 1595, + "examples": ["永", "氷", "氾"], + "order": "%E6%B0%B4-order.gif", + "glyphOrigin": [ + "60px-%E6%B0%B4-oracle.svg.png", + "60px-%E6%B0%B4-bronze.svg.png", + "60px-%E6%B0%B4-bronze-warring.svg.png", + "60px-%E6%B0%B4-silk.svg.png", + "60px-%E6%B0%B4-slip.svg.png", + "60px-%E6%B0%B4-seal.svg.png", + "60px-%E6%B0%B4-bigseal.svg.png" + ], + "note": "Pictogram (象形) – compare 川 (chuān)." + }, + { + "no": 86, + "radical": ["火", "灬"], + "strokeCount": 4, + "meaning": "fire", + "pinyin": "huǒ", + "hanViet": "hỏa", + "frequency": 639, + "examples": ["灰", "灯", "灶"], + "order": "%E7%81%AB-order.gif", + "glyphOrigin": [ + "60px-%E7%81%AB-oracle.svg.png", + "60px-%E7%81%AB-bronze.svg.png", + "60px-%E7%81%AB-bronze-spring.svg.png", + "60px-%E7%81%AB-silk.svg.png", + "60px-%E7%81%AB-slip.svg.png", + "60px-%E7%81%AB-seal.svg.png", + "60px-%E7%81%AB-bigseal.svg.png" + ], + "note": "Pictogram (象形) – pictographic representation of a fire." + }, + { + "no": 87, + "radical": ["爪", "爫"], + "strokeCount": 4, + "meaning": "claw", + "pinyin": "zhǎo", + "hanViet": "trảo", + "frequency": 36, + "examples": ["爬", "爭", "爰"], + "order": "%E7%88%AA-order.gif", + "glyphOrigin": [ + "60px-%E7%88%AA-oracle.svg.png", + "60px-%E7%88%AA-bronze.svg.png", + "60px-%E7%88%AA-seal.svg.png", + "60px-%E7%88%AA-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a hand grabbing from above (in earlier forms from side); compare 手, 寸, 九." + }, + { + "no": 88, + "radical": ["父"], + "strokeCount": 4, + "meaning": "father", + "pinyin": "fù", + "hanViet": "phụ", + "frequency": 10, + "examples": ["爸", "爹", "爺"], + "order": "%E7%88%B6-order.gif", + "glyphOrigin": [ + "60px-%E7%88%B6-oracle.svg.png", + "60px-%E7%88%B6-bronze.svg.png", + "60px-%E7%88%B6-silk.svg.png", + "60px-%E7%88%B6-seal.svg.png", + "60px-%E7%88%B6-bigseal.svg.png" + ], + "note": "Pictogram (象形) – A hand holding a stone, referring to a man working with a stone axe." + }, + { + "no": 89, + "radical": ["爻"], + "strokeCount": 4, + "meaning": "Trigrams", + "pinyin": "yáo", + "hanViet": "hào", + "frequency": 16, + "examples": ["爼", "爽", "爾"], + "order": "%E7%88%BB-order.gif", + "glyphOrigin": [ + "60px-%E7%88%BB-oracle.svg.png", + "60px-%E7%88%BB-bronze.svg.png", + "60px-%E7%88%BB-seal.svg.png", + "60px-%E7%88%BB-bigseal.svg.png" + ], + "note": "Pictogram (象形): 乂 + 乂 – 2 stacked ‘X’ marks, indicating cuts or marks." + }, + { + "no": 90, + "radical": ["爿", "丬"], + "strokeCount": 4, + "meaning": "split wood", + "pinyin": "qiáng", + "hanViet": "tường", + "frequency": 48, + "examples": ["牀", "牁", "牂"], + "order": "%E7%88%BF-order.gif", + "glyphOrigin": [ + "60px-%E7%88%BF-bronze-shang.svg.png", + "60px-%E7%88%BF-oracle.svg.png", + "60px-%E7%89%80-bronze-warring.svg.png", + "60px-%E7%89%80-silk.svg.png", + "60px-%E7%89%80-slip.svg.png" + ], + "note": "Pictogram (象形) - a bed. The original form of 牀 (OC *zraŋ)." + }, + { + "no": 91, + "radical": ["片"], + "strokeCount": 4, + "meaning": "slice", + "pinyin": "piàn", + "hanViet": "phiến", + "frequency": 77, + "examples": ["版", "牉", "牌"], + "order": "%E7%89%87-order.gif", + "glyphOrigin": [ + "60px-%E7%89%87-seal.svg.png", + "60px-%E7%89%87-bigseal.svg.png" + ], + "note": "Mirror image of 爿 (OC *braːn, “piece”). Shuowen: Half of 木 (“wood; tree”) to denote “to pare; to slice”." + }, + { + "no": 92, + "radical": ["牙"], + "strokeCount": 4, + "meaning": "fang", + "pinyin": "yá", + "hanViet": "nha", + "frequency": 9, + "examples": ["㸦", "㸧", "牚"], + "order": "%E7%89%99-order.gif", + "glyphOrigin": [ + "60px-%E7%89%99-bronze.svg.png", + "60px-%E7%89%99-seal.svg.png", + "60px-%E7%89%99-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 93, + "radical": ["牛", "牜", "⺧"], + "strokeCount": 4, + "meaning": "cow", + "pinyin": "niú", + "hanViet": "ngưu", + "frequency": 233, + "examples": ["牝", "牟", "牠"], + "order": "%E7%89%9B-order.gif", + "glyphOrigin": [ + "60px-%E7%89%9B-oracle.svg.png", + "60px-%E7%89%9B-bronze.svg.png", + "60px-%E7%89%9B-silk.svg.png", + "60px-%E7%89%9B-seal.svg.png", + "60px-%E7%89%9B-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 94, + "radical": ["犬", "犭"], + "strokeCount": 4, + "meaning": "dog", + "pinyin": "quǎn", + "hanViet": "khuyển", + "frequency": 444, + "examples": ["犮", "犯", "犰"], + "order": "%E7%8A%AC-order.gif", + "glyphOrigin": [ + "60px-%E7%8A%AC-bronze-shang.svg.png", + "60px-%E7%8A%AC-oracle.svg.png", + "60px-%E7%8A%AC-bronze.svg.png", + "60px-%E7%8A%AC-silk.svg.png", + "60px-%E7%8A%AC-seal.svg.png", + "60px-%E7%8A%AC-bigseal.svg.png" + ], + "note": "Pictogram (象形) The side view of a dog." + }, + { + "no": 95, + "radical": ["玄"], + "strokeCount": 5, + "meaning": "profound", + "pinyin": "xuán", + "hanViet": "huyền", + "frequency": 6, + "examples": ["玅", "率", "玈"], + "order": "%E7%8E%84-order.gif", + "glyphOrigin": [ + "60px-%E7%8E%84-bronze.svg.png", + "60px-%E7%8E%84-seal.svg.png", + "60px-%E7%8E%84-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 96, + "radical": ["玉", "王", "玊"], + "strokeCount": 5, + "meaning": "jade", + "pinyin": "yù", + "hanViet": "ngọc", + "frequency": 473, + "examples": ["玻", "瑪", "璧"], + "order": "%E7%8E%89-order.gif", + "glyphOrigin": [ + "60px-%E7%8E%89-bronze-shang.svg.png", + "60px-%E7%8E%89-oracle.svg.png", + "60px-%E7%8E%89-bronze.svg.png", + "60px-%E7%8E%89-bronze-spring.svg.png", + "60px-%E7%8E%89-bronze-warring.svg.png", + "60px-%E7%8E%89-silk.svg.png", + "60px-%E7%8E%89-slip.svg.png", + "60px-%E7%8E%89-ancient.svg.png", + "60px-%E7%8E%89-seal.svg.png", + "60px-%E7%8E%89-bigseal.svg.png", + "60px-%E7%8E%89-clerical.svg.png" + ], + "note": "The character's shape was historically very similar to 王; a dot was introduced to differentiate the two. Pictogram (象形): a picture of a cong (琮), a sort of ritual jade totem. It is also interpreted as three pieces of jade strung together on a string." + }, + { + "no": 97, + "radical": ["瓜"], + "strokeCount": 5, + "meaning": "melon", + "pinyin": "guā", + "hanViet": "qua", + "frequency": 55, + "examples": ["瓝", "瓞", "瓟"], + "order": "%E7%93%9C-order.gif", + "glyphOrigin": [ + "60px-%E7%93%9C-bronze-warring.svg.png", + "60px-%E7%93%9C-seal.svg.png", + "60px-%E7%93%9C-bigseal.svg.png" + ], + "note": "Pictogram (象形) - a pictograph of a melon suspended by its vines." + }, + { + "no": 98, + "radical": ["瓦"], + "strokeCount": 5, + "meaning": "tile", + "pinyin": "wǎ", + "hanViet": "ngõa", + "frequency": 174, + "examples": ["㼚", "瓮", "瓫"], + "order": "%E7%93%A6-order.gif", + "glyphOrigin": [ + "60px-%E7%93%A6-silk.svg.png", + "60px-%E7%93%A6-seal.svg.png", + "60px-%E7%93%A6-bigseal.svg.png" + ], + "note": "Pictogram (象形) – fired earthenware pottery, or a tile." + }, + { + "no": 99, + "radical": ["甘"], + "strokeCount": 5, + "meaning": "sweet", + "pinyin": "gān", + "hanViet": "cam", + "frequency": 22, + "examples": ["甚", "甜", "甛"], + "order": "%E7%94%98-order.gif", + "glyphOrigin": [ + "60px-%E7%94%98-oracle.svg.png", + "60px-%E7%94%98-bronze.svg.png", + "60px-%E7%94%98-seal.svg.png", + "60px-%E7%94%98-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 100, + "radical": ["生"], + "strokeCount": 5, + "meaning": "life", + "pinyin": "shēng", + "hanViet": "sinh", + "frequency": 22, + "examples": ["甡", "產", "甥"], + "order": "%E7%94%9F-order.gif", + "glyphOrigin": [ + "60px-%E7%94%9F-oracle.svg.png", + "60px-%E7%94%9F-bronze.svg.png", + "60px-%E7%94%9F-seal.svg.png", + "60px-%E7%94%9F-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 屮 (“bud”) + 一 (“ground”) – sprouting from the ground." + }, + { + "no": 101, + "radical": ["用"], + "strokeCount": 5, + "meaning": "use", + "pinyin": "yòng (shuǎi)", + "hanViet": "dụng", + "frequency": 10, + "examples": ["甩", "甫", "甬"], + "order": "%E7%94%A8-order.gif", + "glyphOrigin": [ + "60px-%E7%94%A8-oracle.svg.png", + "60px-%E7%94%A8-bronze.svg.png", + "60px-%E7%94%A8-bronze-spring.svg.png", + "60px-%E7%94%A8-bronze-warring.svg.png", + "60px-%E7%94%A8-silk.svg.png", + "60px-%E7%94%A8-slip.svg.png", + "60px-%E7%94%A8-ancient.svg.png", + "60px-%E7%94%A8-seal.svg.png", + "60px-%E7%94%A8-bigseal.svg.png" + ], + "note": "Pictogram (象形): a water bucket. Compare 桶." + }, + { + "no": 102, + "radical": ["田"], + "strokeCount": 5, + "meaning": "field", + "pinyin": "tián", + "hanViet": "điền", + "frequency": 192, + "examples": ["由", "甲", "申"], + "order": "%E7%94%B0-order.gif", + "glyphOrigin": [ + "60px-%E7%94%B0-bronze-shang.svg.png", + "60px-%E7%94%B0-oracle.svg.png", + "60px-%E7%94%B0-bronze.svg.png", + "60px-%E7%94%B0-silk.svg.png", + "60px-%E7%94%B0-seal.svg.png", + "60px-%E7%94%B0-bigseal.svg.png" + ], + "note": "Pictogram (象形) – pictographic representation of a field." + }, + { + "no": 103, + "radical": ["疋", "⺪"], + "strokeCount": 5, + "meaning": "bolt of cloth", + "pinyin": "pǐ", + "hanViet": "thất/sơ", + "frequency": 15, + "examples": ["疌", "疏", "疎"], + "order": "%E7%96%8B-order.gif", + "glyphOrigin": [ + "60px-%E7%96%8B-seal.svg.png", + "60px-%E7%96%8B-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a foot 止 with a leg/thigh on top." + }, + { + "no": 104, + "radical": ["疒"], + "strokeCount": 5, + "meaning": "sickness", + "pinyin": "nè", + "hanViet": "nạch", + "frequency": 526, + "examples": ["疔", "疚", "疝"], + "order": "%E7%96%92-order.gif", + "glyphOrigin": [ + "60px-%E7%96%92-oracle.svg.png", + "60px-%E7%96%92-bronze.svg.png", + "60px-%E7%96%92-seal.svg.png" + ], + "note": "Pictogram (象形) – a bed or stretcher for the sick." + }, + { + "no": 105, + "radical": ["癶"], + "strokeCount": 5, + "meaning": "footsteps", + "pinyin": "bō", + "hanViet": "bát", + "frequency": 15, + "examples": ["癸", "癹", "発"], + "order": "%E7%99%B6-order.gif", + "glyphOrigin": ["60px-%E7%99%B6-seal.svg.png"], + "note": "A right and a left foot (止)" + }, + { + "no": 106, + "radical": ["白"], + "strokeCount": 5, + "meaning": "white", + "pinyin": "bái", + "hanViet": "bạch", + "frequency": 109, + "examples": ["百", "皀", "皁"], + "order": "%E7%99%BD-order.gif", + "glyphOrigin": [ + "60px-%E7%99%BD-oracle.svg.png", + "60px-%E7%99%BD-bronze.svg.png", + "60px-%E7%99%BD-seal.svg.png", + "60px-%E7%99%BD-bigseal.svg.png" + ], + "note": "Unclear; probably a pictogram (象形). Guo (1954) suggests that it represents a thumb and is original form of 拇 (OC *mɯʔ) or, more probably, 擘 (OC *preːɡ). Alternatively, Unger (apud Schuessler, 2007) suggests that it represents an acorn, noting its use in 樂 (“oak”) (= 櫟) and 皂 (“acorn”)." + }, + { + "no": 107, + "radical": ["皮"], + "strokeCount": 5, + "meaning": "skin", + "pinyin": "pí", + "hanViet": "bì", + "frequency": 94, + "examples": ["皯", "皰", "皴"], + "order": "%E7%9A%AE-order.gif", + "glyphOrigin": [ + "60px-%E7%9A%AE-bronze.svg.png", + "60px-%E7%9A%AE-seal.svg.png", + "60px-%E7%9A%AE-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a hand (又) stripping the fur from an animal pelt (similar to 革). The pelt moved to the top left and became abstracted." + }, + { + "no": 108, + "radical": ["皿"], + "strokeCount": 5, + "meaning": "dish", + "pinyin": "mǐn", + "hanViet": "mãnh", + "frequency": 129, + "examples": ["盂", "盃", "盅"], + "order": "%E7%9A%BF-order.gif", + "glyphOrigin": [ + "60px-%E7%9A%BF-oracle.svg.png", + "60px-%E7%9A%BF-bronze.svg.png", + "60px-%E7%9A%BF-seal.svg.png", + "60px-%E7%9A%BF-bigseal.svg.png" + ], + "note": "Pictogram (象形) A pictograph of an empty container, such as a chalice. The handles are conjoined in the modern form." + }, + { + "no": 109, + "radical": ["目", "⺫"], + "strokeCount": 5, + "meaning": "eye", + "pinyin": "mù", + "hanViet": "mục", + "frequency": 647, + "examples": ["盯", "盱", "盲"], + "order": "%E7%9B%AE-order.gif", + "glyphOrigin": [ + "60px-%E7%9B%AE-oracle.svg.png", + "60px-%E7%9B%AE-bronze.svg.png", + "60px-%E7%9B%AE-slip.svg.png", + "60px-%E7%9B%AE-ancient.svg.png", + "60px-%E7%9B%AE-seal.svg.png", + "60px-%E7%9B%AE-bigseal.svg.png" + ], + "note": "Pictogram (象形) – human eye, now rotated 90 degrees. Compare the Egyptian hieroglyph 𓁹." + }, + { + "no": 110, + "radical": ["矛"], + "strokeCount": 5, + "meaning": "spear", + "pinyin": "máo", + "hanViet": "mâu", + "frequency": 65, + "examples": ["矜", "矞", "矟"], + "order": "%E7%9F%9B-order.gif", + "glyphOrigin": [ + "60px-%E7%9F%9B-bronze.svg.png", + "60px-%E7%9F%9B-seal.svg.png", + "60px-%E7%9F%9B-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 111, + "radical": ["矢"], + "strokeCount": 5, + "meaning": "arrow", + "pinyin": "shǐ", + "hanViet": "thỉ", + "frequency": 64, + "examples": ["矣", "知", "矧"], + "order": "%E7%9F%A2-order.gif", + "glyphOrigin": [ + "60px-%E7%9F%A2-oracle.svg.png", + "60px-%E7%9F%A2-bronze.svg.png", + "60px-%E7%9F%A2-seal.svg.png", + "60px-%E7%9F%A2-bigseal.svg.png" + ], + "note": "Pictogram (象形) - pictographic representation of an arrow. More recognizable in older forms." + }, + { + "no": 112, + "radical": ["石"], + "strokeCount": 5, + "meaning": "stone", + "pinyin": "shí", + "hanViet": "thạch", + "frequency": 499, + "examples": ["矸", "矻", "矼"], + "order": "%E7%9F%B3-order.gif", + "glyphOrigin": [ + "60px-%E7%9F%B3-oracle.svg.png", + "60px-%E7%9F%B3-bronze.svg.png", + "60px-%E7%9F%B3-silk.svg.png", + "60px-%E7%9F%B3-seal.svg.png", + "60px-%E7%9F%B3-bigseal.svg.png" + ], + "note": "Pictogram (象形): a stone beneath a cliff (厂). The cliff was subsequently distorted into 丆. Alternatively, a cave set into the side of a cliff or mountain." + }, + { + "no": 113, + "radical": ["示", "礻"], + "strokeCount": 5, + "meaning": "spirit", + "pinyin": "shì", + "hanViet": "thị/kỳ", + "frequency": 213, + "examples": ["礼", "礽", "社"], + "order": "%E7%A4%BA-order.gif", + "glyphOrigin": [ + "60px-%E7%A4%BA-bronze-shang.svg.png", + "60px-%E7%A4%BA-oracle.svg.png", + "60px-%E7%A4%BA-silk.svg.png", + "60px-%E7%A4%BA-ancient.svg.png", + "60px-%E7%A4%BA-seal.svg.png", + "60px-%E7%A4%BA-bigseal.svg.png" + ], + "note": "Pictogram (象形) – an altar. The original form is similar to unrelated character 丅, and additional strokes are added to prevent confusion." + }, + { + "no": 114, + "radical": ["禸"], + "strokeCount": 5, + "meaning": "track", + "pinyin": "róu", + "hanViet": "nhựu", + "frequency": 12, + "examples": ["禹", "禺", "离"], + "order": "%E7%A6%B8-order.gif", + "glyphOrigin": ["60px-%E7%A6%B8-seal.svg.png"], + "note": "" + }, + { + "no": 115, + "radical": ["禾"], + "strokeCount": 5, + "meaning": "grain", + "pinyin": "hé", + "hanViet": "hòa", + "frequency": 431, + "examples": ["禿", "秀", "私"], + "order": "%E7%A6%BE-order.gif", + "glyphOrigin": [ + "60px-%E7%A6%BE-oracle.svg.png", + "60px-%E7%A6%BE-bronze.svg.png", + "60px-%E7%A6%BE-seal.svg.png", + "60px-%E7%A6%BE-bigseal.svg.png" + ], + "note": "Pictogram (象形) – picture of a plant stalk. The stalk is more recognizable in older form." + }, + { + "no": 116, + "radical": ["穴"], + "strokeCount": 5, + "meaning": "cave", + "pinyin": "xué", + "hanViet": "huyệt", + "frequency": 298, + "examples": ["究", "穸", "空"], + "order": "%E7%A9%B4-order.gif", + "glyphOrigin": [ + "60px-%E7%A9%B4-seal.svg.png", + "60px-%E7%A9%B4-bigseal.svg.png" + ], + "note": "Pictogram (象形)—possibly an entrance to a cave or a door flap." + }, + { + "no": 117, + "radical": ["立"], + "strokeCount": 5, + "meaning": "stand", + "pinyin": "lì", + "hanViet": "lập", + "frequency": 101, + "examples": ["竑", "竒", "竘"], + "order": "%E7%AB%8B-order.gif", + "glyphOrigin": [ + "60px-%E7%AB%8B-oracle.svg.png", + "60px-%E7%AB%8B-bronze.svg.png", + "60px-%E7%AB%8B-seal.svg.png" + ], + "note": "Pictogram (象形) – a person standing on the ground; compare 大." + }, + { + "no": 118, + "radical": ["竹", "⺮"], + "strokeCount": 6, + "meaning": "bamboo", + "pinyin": "zhú", + "hanViet": "trúc", + "frequency": 953, + "examples": ["竺", "竽", "竿"], + "order": "%E7%AB%B9-order.gif", + "glyphOrigin": [ + "60px-%E7%AB%B9-bronze-shang.svg.png", + "60px-%E7%AB%B9-oracle.svg.png", + "60px-%E7%AB%B9-bronze.svg.png", + "60px-%E7%AB%B9-bronze-warring.svg.png", + "60px-%E7%AB%B9-silk.svg.png", + "60px-%E7%AB%B9-slip.svg.png", + "60px-%E7%AB%B9-seal.svg.png", + "60px-%E7%AB%B9-bigseal.svg.png" + ], + "note": "Pictogram (象形) – two bamboo stalks, with leaves. Earlier forms resembled 个 + 个, current form resembles rather ケ + ケ." + }, + { + "no": 119, + "radical": ["米"], + "strokeCount": 6, + "meaning": "rice", + "pinyin": "mǐ", + "hanViet": "mễ", + "frequency": 318, + "examples": ["籸", "籹", "籽"], + "order": "%E7%B1%B3-order.gif", + "glyphOrigin": [ + "60px-%E7%B1%B3-oracle.svg.png", + "60px-%E7%B1%B3-bronze.svg.png", + "60px-%E7%B1%B3-silk.svg.png", + "60px-%E7%B1%B3-slip.svg.png", + "60px-%E7%B1%B3-seal.svg.png", + "60px-%E7%B1%B3-bigseal.svg.png" + ], + "note": "Pictogram (象形) – rice kernels." + }, + { + "no": 120, + "radical": ["糸", "糹"], + "strokeCount": 6, + "meaning": "silk", + "pinyin": "mì", + "hanViet": "mịch/ty", + "frequency": 823, + "simplified": "纟", + "examples": ["系", "糾", "紀"], + "order": "%E7%B3%B8-order.gif", + "glyphOrigin": [ + "60px-%E7%B3%B8-bronze-shang.svg.png", + "60px-%E7%B3%B8-oracle.svg.png", + "60px-%E7%B3%B8-bronze.svg.png", + "60px-%E7%B3%B8-ancient.svg.png", + "60px-%E7%B3%B8-seal.svg.png" + ], + "note": "Pictogram (象形): a skein of silk." + }, + { + "no": 121, + "radical": ["缶"], + "strokeCount": 6, + "meaning": "jar", + "pinyin": "fǒu", + "hanViet": "phẫu", + "frequency": 77, + "examples": ["缸", "缺", "缽"], + "order": "%E7%BC%B6-order.gif", + "glyphOrigin": [ + "60px-%E7%BC%B6-oracle.svg.png", + "60px-%E7%BC%B6-bronze-spring.svg.png", + "60px-%E7%BC%B6-seal.svg.png", + "60px-%E7%BC%B6-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a pot with a lid." + }, + { + "no": 122, + "radical": ["网", "⺲", "罓", "⺳"], + "strokeCount": 6, + "meaning": "net", + "pinyin": "wǎng", + "hanViet": "võng", + "frequency": 163, + "examples": ["罔", "罕", "罘"], + "order": "%E7%BD%91-order.gif", + "glyphOrigin": [ + "60px-%E5%86%88-bronze-shang.svg.png", + "60px-%E7%BD%91-oracle.svg.png", + "60px-%E5%86%88-bronze.svg.png", + "60px-%E5%86%88-bronze-spring.svg.png", + "60px-%E5%86%88-bronze-warring.svg.png", + "60px-%E7%BD%94-silk.svg.png", + "60px-%E7%BD%94-slip.svg.png", + "60px-%E7%BD%91-zhou.svg.png", + "60px-%E7%BD%94-ancient.svg.png", + "60px-%E7%BD%91-seal.svg.png" + ], + "note": "Pictogram (象形) – a net." + }, + { + "no": 123, + "radical": ["羊", "⺶", "⺷"], + "strokeCount": 6, + "meaning": "sheep", + "pinyin": "yáng", + "hanViet": "dương", + "frequency": 156, + "examples": ["羋", "羌", "美"], + "order": "%E7%BE%8A-order.gif", + "glyphOrigin": [ + "60px-%E7%BE%8A-oracle.svg.png", + "60px-%E7%BE%8A-bronze.svg.png", + "60px-%E7%BE%8A-seal.svg.png", + "60px-%E7%BE%8A-bigseal.svg.png" + ], + "note": "Pictogram (象形) – picture of a ram's head." + }, + { + "no": 124, + "radical": ["羽"], + "strokeCount": 6, + "meaning": "feather", + "pinyin": "yǔ", + "hanViet": "vũ", + "frequency": 220, + "examples": ["羿", "翀", "翁"], + "order": "%E7%BE%BD-order.gif", + "glyphOrigin": [ + "60px-%E7%BE%BD-oracle.svg.png", + "60px-%E7%BE%BD-bronze.svg.png", + "60px-%E7%BE%BD-seal.svg.png", + "60px-%E7%BE%BD-bigseal.svg.png" + ], + "note": "Pictogram (象形): wings or feathers." + }, + { + "no": 125, + "radical": ["老", "耂"], + "strokeCount": 6, + "meaning": "old", + "pinyin": "lǎo", + "hanViet": "lão", + "frequency": 22, + "examples": ["考", "者", "耆"], + "order": "%E8%80%81-order.gif", + "glyphOrigin": [ + "60px-%E8%80%81-oracle.svg.png", + "60px-%E8%80%81-bronze.svg.png", + "60px-%E8%80%81-silk.svg.png", + "60px-%E8%80%81-seal.svg.png", + "60px-%E8%80%81-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 人 (“man”) + 毛 (“hair”) + 匕 (“cane”) – a man with long hair (an old man), leaning on a cane. Compare top component to 孝 (OC *qʰruːs). Cognate to 考 (OC *kʰluːʔ); the most commonly cited example of 轉注 (“reciprocal meaning”)." + }, + { + "no": 126, + "radical": ["而"], + "strokeCount": 6, + "meaning": "and", + "pinyin": "ér", + "hanViet": "nhi", + "frequency": 22, + "examples": ["耍", "耎", "耏"], + "order": "%E8%80%8C-order.gif", + "glyphOrigin": [ + "60px-%E8%80%8C-oracle.svg.png", + "60px-%E8%80%8C-bronze.svg.png", + "60px-%E8%80%8C-seal.svg.png", + "60px-%E8%80%8C-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a beard. Original form of 耏 (OC *nɯːs, *njɯ) or 髵 (OC *njɯ)." + }, + { + "no": 127, + "radical": ["耒"], + "strokeCount": 6, + "meaning": "plow", + "pinyin": "lěi", + "hanViet": "lỗi", + "frequency": 84, + "examples": ["耔", "耕", "耖"], + "order": "%E8%80%92-order.gif", + "glyphOrigin": [ + "60px-%E8%80%92-seal.svg.png", + "60px-%E8%80%92-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a wooden (木) plow with originally three cross lines (彡) for the furrows of the plow, later simplified to two. 耒" + }, + { + "no": 128, + "radical": ["耳"], + "strokeCount": 6, + "meaning": "ear", + "pinyin": "ěr", + "hanViet": "nhĩ", + "frequency": 172, + "examples": ["耴", "耵", "耷"], + "order": "%E8%80%B3-order.gif", + "glyphOrigin": [ + "60px-%E8%80%B3-bronze-shang.svg.png", + "60px-%E8%80%B3-oracle.svg.png", + "60px-%E8%80%B3-bronze.svg.png", + "60px-%E8%80%B3-silk.svg.png", + "60px-%E8%80%B3-slip.svg.png", + "60px-%E8%80%B3-seal.svg.png", + "60px-%E8%80%B3-bigseal.svg.png" + ], + "note": "Pictogram (象形) – an ear." + }, + { + "no": 129, + "radical": ["聿", "⺺", "⺻"], + "strokeCount": 6, + "meaning": "brush", + "pinyin": "yù", + "hanViet": "duật", + "frequency": 19, + "examples": ["肄", "肆", "肅"], + "order": "%E8%81%BF-order.gif", + "glyphOrigin": [ + "60px-%E8%81%BF-oracle.svg.png", + "60px-%E8%81%BF-bronze.svg.png", + "60px-%E8%81%BF-seal.svg.png", + "60px-%E8%81%BF-bigseal.svg.png" + ], + "note": "Phono-semantic compound (形聲, OC *b·lud): semantic 𦘒 + phonetic 一 (OC *qliɡ)." + }, + { + "no": 130, + "radical": ["肉", "⺼"], + "strokeCount": 6, + "meaning": "meat", + "pinyin": "ròu", + "hanViet": "nhục", + "frequency": 674, + "simplified": "月", + "examples": ["肊", "肋", "然"], + "order": "%E8%82%89-order.gif", + "glyphOrigin": [ + "60px-%E8%82%89-oracle.svg.png", + "60px-%E8%82%89-bronze.svg.png", + "60px-%E8%82%89-silk.svg.png", + "60px-%E8%82%89-slip.svg.png", + "60px-%E8%82%89-seal.svg.png", + "60px-%E8%82%89-bigseal.svg.png", + "60px-%E8%82%89-clerical.svg.png" + ], + "note": "Pictogram (象形) – ribs of an animal’s torso or simply a physical representation of a slice of meat. For more images, please refer to this link: http://humanum.arts.cuhk.edu.hk/Lexis/lexi-mf/search.php?word=肉" + }, + { + "no": 131, + "radical": ["臣"], + "strokeCount": 6, + "meaning": "minister", + "pinyin": "chén", + "hanViet": "thần", + "frequency": 16, + "examples": ["臤", "臥", "臧"], + "order": "%E8%87%A3-order.gif", + "glyphOrigin": [ + "60px-%E8%87%A3-oracle.svg.png", + "60px-%E8%87%A3-bronze.svg.png", + "60px-%E8%87%A3-silk.svg.png", + "60px-%E8%87%A3-seal.svg.png" + ], + "note": "Pictogram (象形) – A vertical eye of a man looking downwards. As the individual character it is used as a metaphor meaning “to surrender”, while the meaning relating to eyes appears when used as a radical, such as in 臨 (“to look down at”)." + }, + { + "no": 132, + "radical": ["自"], + "strokeCount": 6, + "meaning": "self", + "pinyin": "zì", + "hanViet": "tự", + "frequency": 34, + "examples": ["臬", "臭", "臯"], + "order": "%E8%87%AA-order.gif", + "glyphOrigin": [ + "60px-%E8%87%AA-oracle.svg.png", + "60px-%E8%87%AA-bronze.svg.png", + "60px-%E8%87%AA-silk.svg.png", + "60px-%E8%87%AA-ancient.svg.png", + "60px-%E8%87%AA-seal.svg.png", + "60px-%E8%87%AA-bigseal.svg.png" + ], + "note": "Originally a pictogram (象形) of a nose; in China (and East Asia) one points at one’s nose to indicate oneself, hence an ideogram (指事) of “self”. The original meaning of “nose” has been replaced by 鼻." + }, + { + "no": 133, + "radical": ["至"], + "strokeCount": 6, + "meaning": "arrive", + "pinyin": "zhì", + "hanViet": "chí", + "frequency": 24, + "examples": ["致", "臷", "臺"], + "order": "%E8%87%B3-order.gif", + "glyphOrigin": [ + "60px-%E8%87%B3-oracle.svg.png", + "60px-%E8%87%B3-bronze.svg.png", + "60px-%E8%87%B3-seal.svg.png", + "60px-%E8%87%B3-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 134, + "radical": ["臼"], + "strokeCount": 6, + "meaning": "mortar", + "pinyin": "jiù", + "hanViet": "cữu", + "frequency": 71, + "examples": ["臾", "臿", "舁"], + "order": "%E8%87%BC-order.gif", + "glyphOrigin": ["60px-%E8%87%BC-seal.svg.png"], + "note": "Pictogram (象形): a mortar" + }, + { + "no": 135, + "radical": ["舌"], + "strokeCount": 6, + "meaning": "tongue", + "pinyin": "shé", + "hanViet": "thiệt", + "frequency": 31, + "examples": ["舍", "舐", "舑"], + "order": "%E8%88%8C-order.gif", + "glyphOrigin": [ + "60px-%E8%88%8C-oracle.svg.png", + "60px-%E8%88%8C-seal.svg.png", + "60px-%E8%88%8C-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a forked tongue emerging upwards from a mouth (口)." + }, + { + "no": 136, + "radical": ["舛"], + "strokeCount": 6, + "meaning": "oppose", + "pinyin": "chuǎn", + "hanViet": "suyễn", + "frequency": 10, + "examples": ["舜", "舝", "舞"], + "order": "%E8%88%9B-order.gif", + "glyphOrigin": [ + "60px-%E8%88%9B-seal.svg.png", + "60px-%E8%88%9B-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 夊 + 𡕒 (second character roughly ヰ) – two feet facing each other (toe-to-toe). Compare 夅, with feet pointing down. Compare also foot in 夂, 夊, 𡕒. Note that the left foot has changed shape rather more than the right foot, which still resembles the form in earlier script." + }, + { + "no": 137, + "radical": ["舟"], + "strokeCount": 6, + "meaning": "boat", + "pinyin": "zhōu", + "hanViet": "chu", + "frequency": 197, + "examples": ["舠", "舡", "舢"], + "order": "%E8%88%9F-order.gif", + "glyphOrigin": [ + "60px-%E8%88%9F-oracle.svg.png", + "60px-%E8%88%9F-bronze.svg.png", + "60px-%E8%88%9F-seal.svg.png", + "60px-%E8%88%9F-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a boat." + }, + { + "no": 138, + "radical": ["艮"], + "strokeCount": 6, + "meaning": "stopping", + "pinyin": "gèn", + "hanViet": "cấn", + "frequency": 5, + "examples": ["良", "艱"], + "order": "%E8%89%AE-order.gif", + "glyphOrigin": [ + "60px-%E8%89%AE-bronze.svg.png", + "60px-%F0%A5%83%A9-silk.svg.png", + "60px-%E8%89%AE-seal.svg.png", + "60px-%E8%89%AE-bigseal.svg.png" + ], + "note": "Phono-semantic compound (形聲, OC *kɯːns): 目 (“eye”) + 匕." + }, + { + "no": 139, + "radical": ["色"], + "strokeCount": 6, + "meaning": "color", + "pinyin": "sè", + "hanViet": "sắc", + "frequency": 21, + "examples": ["艳", "艴", "艵"], + "order": "%E8%89%B2-order.gif", + "glyphOrigin": [ + "60px-%E8%89%B2-bronze-spring.svg.png", + "60px-%E8%89%B2-silk.svg.png", + "60px-%E8%89%B2-slip.svg.png", + "60px-%E8%89%B2-ancient.svg.png", + "60px-%E8%89%B2-seal.svg.png", + "60px-%E8%89%B2-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 爪 (“claw; hand”) + 卩 (“kneeling person”) – complexion. Shuowen interprets this character as an ideogrammic compound (會意): 人 (“person; human”) + 卩 (“etiquette”) – complexion. Compare 印, 抑." + }, + { + "no": 140, + "radical": ["艸", "⺿"], + "strokeCount": 6, + "meaning": "grass", + "pinyin": "cǎo", + "hanViet": "thảo", + "frequency": 1902, + "simplified": "⺾", + "examples": ["艽", "艾", "芃"], + "order": "%E8%89%B8-order.gif", + "glyphOrigin": ["60px-%E8%89%B8-seal.svg.png"], + "note": "Pictogram (象形) – grass." + }, + { + "no": 141, + "radical": ["虍"], + "strokeCount": 6, + "meaning": "tiger", + "pinyin": "hū", + "hanViet": "hô", + "frequency": 114, + "examples": ["虎", "虐", "虒"], + "order": "%E8%99%8D-order.gif", + "glyphOrigin": [ + "60px-%E8%99%8D-oracle.svg.png", + "60px-%E8%99%8D-bronze.svg.png", + "60px-%E8%99%8D-seal.svg.png", + "60px-%E8%99%8D-bigseal.svg.png" + ], + "note": "Pictogram (象形) – tiger's head." + }, + { + "no": 142, + "radical": ["虫"], + "strokeCount": 6, + "meaning": "insect", + "pinyin": "chóng", + "hanViet": "trùng", + "frequency": 1067, + "simplified": "(pr. 蟲)", + "examples": ["虬", "虯", "虱"], + "order": "%E8%99%AB-order.gif", + "glyphOrigin": [ + "60px-%E8%99%AB-oracle.svg.png", + "60px-%E8%99%AB-bronze.svg.png", + "60px-%E8%99%AB-seal.svg.png" + ], + "note": "Pictogram (象形): a snake. The character originally represented a type of venomous snake, while the derivative 蟲 represented worms and insects (or insect-like things). 虫 was later borrowed for 蟲 (possibly via simplification), and the character 虺 was created to represent the original meaning." + }, + { + "no": 143, + "radical": ["血"], + "strokeCount": 6, + "meaning": "blood", + "pinyin": "xuè", + "hanViet": "huyết", + "frequency": 60, + "examples": ["衁", "衂", "衃"], + "order": "%E8%A1%80-order.gif", + "glyphOrigin": [ + "60px-%E8%A1%80-oracle.svg.png", + "60px-%E8%A1%80-silk.svg.png", + "60px-%E8%A1%80-slip.svg.png", + "60px-%E8%A1%80-seal.svg.png", + "60px-%E8%A1%80-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 一 (“drop of blood”) + 皿 (“container”) - a drop of blood inside a chalice for sacrificial uses." + }, + { + "no": 144, + "radical": ["行"], + "strokeCount": 6, + "meaning": "walk enclosure", + "pinyin": "xíng", + "hanViet": "hành", + "frequency": 53, + "examples": ["衍", "衎", "衒"], + "order": "%E8%A1%8C-order.gif", + "glyphOrigin": [ + "60px-%E8%A1%8C-oracle.svg.png", + "60px-%E8%A1%8C-bronze.svg.png", + "60px-%E8%A1%8C-bronze-spring.svg.png", + "60px-%E8%A1%8C-bronze-warring.svg.png", + "60px-%E8%A1%8C-silk.svg.png", + "60px-%E8%A1%8C-slip.svg.png", + "60px-%E8%A1%8C-seal.svg.png", + "60px-%E8%A1%8C-bigseal.svg.png", + "60px-%E8%A1%8C-clerical.svg.png" + ], + "note": "Pictogram (象形) – a street intersection. Originally symmetric, it has been simplified asymmetrically; the left half 彳 is widely used as a radical, while the right half 亍 finds occasional use, and the character can be broken up as 彳 + 亍, though originally it was not a compound." + }, + { + "no": 145, + "radical": ["衣", "⻂"], + "strokeCount": 6, + "meaning": "clothes", + "pinyin": "yī", + "hanViet": "y", + "frequency": 607, + "examples": ["初", "表", "衫"], + "order": "%E8%A1%A3-order.gif", + "glyphOrigin": [ + "60px-%E8%A1%A3-oracle.svg.png", + "60px-%E8%A1%A3-bronze.svg.png", + "60px-%E8%A1%A3-seal.svg.png", + "60px-%E8%A1%A3-bigseal.svg.png" + ], + "note": "Pictogram (象形) Outline of the chest, upper clothing. compare to 文 with limbs and a head." + }, + { + "no": 146, + "radical": ["襾", "西", "覀"], + "strokeCount": 6, + "meaning": "cover", + "pinyin": "yà", + "hanViet": "che", + "frequency": 29, + "examples": ["西", "要", "覂"], + "order": "%E8%A5%BE-order.gif", + "glyphOrigin": [ + "60px-%E8%A5%BE-seal.svg.png", + "60px-%E8%A5%BE-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 147, + "radical": ["見"], + "strokeCount": 7, + "meaning": "see", + "pinyin": "jiàn", + "hanViet": "kiến", + "frequency": 161, + "simplified": "见", + "examples": ["規", "覓", "視"], + "order": "%E8%A6%8B-order.gif", + "glyphOrigin": [ + "60px-%E8%A6%8B-oracle.svg.png", + "60px-%E8%A6%8B-bronze.svg.png", + "60px-%E8%A6%8B-silk.svg.png", + "60px-%E8%A6%8B-seal.svg.png", + "60px-%E8%A6%8B-bigseal.svg.png" + ], + "note": "目 (“eye”) + 儿 (“human”) – an eye on a pair of legs. Originally a human figure with a large eye for a head." + }, + { + "no": 148, + "radical": ["角", "⻇"], + "strokeCount": 7, + "meaning": "horn", + "pinyin": "jiǎo", + "hanViet": "giác", + "frequency": 158, + "simplified": "⻆", + "examples": ["觓", "觔", "觕"], + "order": "%E8%A7%92-order.gif", + "glyphOrigin": [ + "60px-%E8%A7%92-oracle.svg.png", + "60px-%E8%A7%92-bronze.svg.png", + "60px-%E8%A7%92-seal.svg.png", + "60px-%E8%A7%92-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a horn." + }, + { + "no": 149, + "radical": ["言", "訁"], + "strokeCount": 7, + "meaning": "speech", + "pinyin": "yán", + "hanViet": "ngôn", + "frequency": 861, + "simplified": "讠", + "examples": ["訂", "訃", "計"], + "order": "%E8%A8%80-order.gif", + "glyphOrigin": [ + "60px-%E8%A8%80-oracle.svg.png", + "60px-%E8%A8%80-bronze.svg.png", + "60px-%E8%A8%80-seal.svg.png", + "60px-%E8%A8%80-bigseal.svg.png" + ], + "note": "Ideogram (指事): 言 was created by adding a mark to 舌 to indicate movement of the tongue.[1] This indicates speech where 舌 is a mouth (口) with a tongue sticking out. Shuowen erroneously analyzes the glyph as a phono-semantic compound (形聲): phonetic 䇂 + semantic 口 (“mouth”)." + }, + { + "no": 150, + "radical": ["谷"], + "strokeCount": 7, + "meaning": "valley", + "pinyin": "gǔ", + "hanViet": "cốc", + "frequency": 54, + "examples": ["谹", "谽", "谿"], + "order": "%E8%B0%B7-order.gif", + "glyphOrigin": [ + "60px-%E8%B0%B7-oracle.svg.png", + "60px-%E8%B0%B7-bronze.svg.png", + "60px-%E8%B0%B7-seal.svg.png", + "60px-%E8%B0%B7-bigseal.svg.png" + ], + "note": "Pictogram (象形) — valley (口) in between two mountains." + }, + { + "no": 151, + "radical": ["豆"], + "strokeCount": 7, + "meaning": "bean", + "pinyin": "dòu", + "hanViet": "đậu", + "frequency": 68, + "examples": ["豇", "豈", "豉"], + "order": "%E8%B1%86-order.gif", + "glyphOrigin": [ + "60px-%E8%B1%86-oracle.svg.png", + "60px-%E8%B1%86-bronze.svg.png", + "60px-%E8%B1%86-seal.svg.png", + "60px-%E8%B1%86-bigseal.svg.png" + ], + "note": "Pictogram (象形) – some kind of container. Borrowed phonetically for the plant name. Displaced Old Chinese 菽 (shū)." + }, + { + "no": 152, + "radical": ["豕"], + "strokeCount": 7, + "meaning": "pig", + "pinyin": "shǐ", + "hanViet": "thỉ", + "frequency": 148, + "examples": ["豗", "豚", "豜"], + "order": "%E8%B1%95-order.gif", + "glyphOrigin": [ + "60px-%E8%B1%95-oracle.svg.png", + "60px-%E8%B1%95-bronze.svg.png", + "60px-%E8%B1%95-seal.svg.png", + "60px-%E8%B1%95-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a pig. Compare 亥." + }, + { + "no": 153, + "radical": ["豸"], + "strokeCount": 7, + "meaning": "badger", + "pinyin": "zhì", + "hanViet": "trãi", + "frequency": 140, + "examples": ["豺", "豻", "豹"], + "order": "%E8%B1%B8-order.gif", + "glyphOrigin": [ + "60px-%E8%B1%B8-oracle.svg.png", + "60px-%E8%B1%B8-bronze.svg.png", + "60px-%E8%B1%B8-slip.svg.png", + "60px-%E8%B1%B8-seal.svg.png", + "60px-%E8%B1%B8-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 154, + "radical": ["貝"], + "strokeCount": 7, + "meaning": "shell", + "pinyin": "bèi", + "hanViet": "bối", + "frequency": 277, + "simplified": "贝", + "examples": ["貞", "負", "財"], + "order": "%E8%B2%9D-order.gif", + "glyphOrigin": [ + "60px-%E8%B2%9D-oracle.svg.png", + "60px-%E8%B2%9D-bronze.svg.png", + "60px-%E8%B2%9D-silk.svg.png", + "60px-%E8%B2%9D-seal.svg.png", + "60px-%E8%B2%9D-bigseal.svg.png" + ], + "note": "Pictogram (象形) – cowry." + }, + { + "no": 155, + "radical": ["赤"], + "strokeCount": 7, + "meaning": "red", + "pinyin": "chì", + "hanViet": "xích", + "frequency": 31, + "examples": ["赦", "赧", "赨"], + "order": "%E8%B5%A4-order.gif", + "glyphOrigin": [ + "60px-%E8%B5%A4-oracle.svg.png", + "60px-%E8%B5%A4-bronze.svg.png", + "60px-%E8%B5%A4-bronze-spring.svg.png", + "60px-%E8%B5%A4-silk.svg.png", + "60px-%E8%B5%A4-slip.svg.png", + "60px-%E8%B5%A4-ancient.svg.png", + "60px-%E8%B5%A4-seal.svg.png", + "60px-%E8%B5%A4-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 大 (“person, big”) + 火 (“fire”) – the color of fire (a person by a fire)." + }, + { + "no": 156, + "radical": ["走"], + "strokeCount": 7, + "meaning": "run", + "pinyin": "zǒu", + "hanViet": "tẩu", + "frequency": 285, + "examples": ["赳", "赴", "赶"], + "order": "%E8%B5%B0-order.gif", + "glyphOrigin": [ + "60px-%E8%B5%B0-oracle.svg.png", + "60px-%E8%B5%B0-bronze.svg.png", + "60px-%E8%B5%B0-bronze-spring.svg.png", + "60px-%E8%B5%B0-bronze-warring.svg.png", + "60px-%E8%B5%B0-silk.svg.png", + "60px-%E8%B5%B0-slip.svg.png", + "60px-%E8%B5%B0-seal.svg.png", + "60px-%E8%B5%B0-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 夭 (“young, running man”) + 止 (“foot”) – a running man. The top component (夭) simplified to the unrelated 土. As with 圭, there are two separate vertical strokes, not a single one." + }, + { + "no": 157, + "radical": ["足", "⻊"], + "strokeCount": 7, + "meaning": "foot", + "pinyin": "zú", + "hanViet": "túc", + "frequency": 580, + "examples": ["趴", "趵", "趷"], + "order": "%E8%B6%B3-order.gif", + "glyphOrigin": ["60px-%E8%B6%B3-seal.svg.png"], + "note": "" + }, + { + "no": 158, + "radical": ["身"], + "strokeCount": 7, + "meaning": "body", + "pinyin": "shēn", + "hanViet": "thân", + "frequency": 97, + "examples": ["躬", "躭", "躰"], + "order": "%E8%BA%AB-order.gif", + "glyphOrigin": [ + "60px-%E8%BA%AB-bronze.svg.png", + "60px-%E8%BA%AB-seal.svg.png", + "60px-%E8%BA%AB-bigseal.svg.png" + ], + "note": "Pictogram (象形): from a pictograph of a pregnant woman." + }, + { + "no": 159, + "radical": ["車"], + "strokeCount": 7, + "meaning": "cart", + "pinyin": "chē", + "hanViet": "xa", + "frequency": 361, + "simplified": "车", + "examples": ["軋", "軌", "軍"], + "order": "%E8%BB%8A-order.gif", + "glyphOrigin": [ + "60px-%E8%BB%8A-bronze-shang.svg.png", + "60px-%E8%BB%8A-oracle.svg.png", + "60px-%E8%BB%8A-bronze.svg.png", + "60px-%E8%BB%8A-bronze-spring.svg.png", + "60px-%E8%BB%8A-bronze-warring.svg.png", + "60px-%E8%BB%8A-silk.svg.png", + "60px-%E8%BB%8A-slip.svg.png", + "60px-%E8%BB%8A-zhou.svg.png", + "60px-%E8%BB%8A-seal.svg.png", + "60px-%E8%BB%8A-bigseal.svg.png" + ], + "note": "Ideogram (指事): It is derived from a pictogram of a carriage seen from above. In the oracle bone script, there were large wheels on both sides and a sun shade on the top. Later, when Chinese characters were written vertically, the wheels on both sides were simply drawn in strokes and the loading area was marked with a 田 (OC *l'iːŋ). Therefore, it is important to understand that the current character, 車 (OC *kʰlja, *kla) is a vertical depiction of a carriage. Note that 倝 (OC *kaːns) (as in left part of 朝 (OC *ʔr'ew, *r'ew)) is not derived from 車 (OC *kʰlja, *kla)." + }, + { + "no": 160, + "radical": ["辛"], + "strokeCount": 7, + "meaning": "bitter", + "pinyin": "xīn", + "hanViet": "tân", + "frequency": 36, + "examples": ["辜", "辝", "辟"], + "order": "%E8%BE%9B-order.gif", + "glyphOrigin": ["60px-%E8%BE%9B-seal.svg.png"], + "note": "Pictogram (象形) – Picture of a tool - a carving knife or a chisel - used to mark slaves and criminals." + }, + { + "no": 161, + "radical": ["辰"], + "strokeCount": 7, + "meaning": "morning", + "pinyin": "chén", + "hanViet": "thần/thìn", + "frequency": 15, + "examples": ["辱", "農", "辴"], + "order": "%E8%BE%B0-order.gif", + "glyphOrigin": [ + "60px-%E8%BE%B0-oracle.svg.png", + "60px-%E8%BE%B0-bronze.svg.png", + "60px-%E8%BE%B0-seal.svg.png", + "60px-%E8%BE%B0-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a kind of agricultural tool used for tilling the fields and removing weeds (Guo, 1931; Qiu, 1992), possibly made of a kind of large clam 蜃 (OC *djɯns, *djɯnʔ, *djins) (Guo, 1931). Alternatively, it could be a pictogram (象形) of a person holding onto a cliff – original character of 振 (OC *tjɯn, *tjɯns, “to hold up”) (Shang, 1983)." + }, + { + "no": 162, + "radical": ["辵", "⻌", "⻍", "⻎"], + "strokeCount": 7, + "meaning": "walk", + "pinyin": "chuò", + "hanViet": "sước", + "frequency": 381, + "examples": ["边", "巡", "迂"], + "order": "%E8%BE%B5-order.gif", + "glyphOrigin": ["60px-%E8%BE%B5-seal.svg.png"], + "note": "Ideogrammic compound (會意): 彳 (“walk”) + 止 (“\"foot\" or \"to stop\"”)." + }, + { + "no": 163, + "radical": ["邑", "⻏"], + "strokeCount": 7, + "meaning": "city", + "pinyin": "yì", + "hanViet": "ấp", + "frequency": 350, + "examples": ["邕", "邗", "邘"], + "order": "%E9%82%91-order.gif", + "glyphOrigin": [ + "60px-%E9%82%91-oracle.svg.png", + "60px-%E9%82%91-bronze.svg.png", + "60px-%E9%82%91-seal.svg.png", + "60px-%E9%82%91-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 囗 + 卪." + }, + { + "no": 164, + "radical": ["酉"], + "strokeCount": 7, + "meaning": "wine", + "pinyin": "yǒu", + "hanViet": "dậu", + "frequency": 290, + "examples": ["酊", "酋", "酌"], + "order": "%E9%85%89-order.gif", + "glyphOrigin": [ + "60px-%E9%85%89-bronze-shang.svg.png", + "60px-%E9%85%89-oracle.svg.png", + "60px-%E9%85%89-bronze.svg.png", + "60px-%E9%85%89-bronze-spring.svg.png", + "60px-%E9%85%89-bronze-warring.svg.png", + "60px-%E9%85%89-silk.svg.png", + "60px-%E9%85%89-slip.svg.png", + "60px-%E9%85%89-ancient.svg.png", + "60px-%E9%85%89-seal.svg.png", + "60px-%E9%85%89-bigseal.svg.png" + ], + "note": "Pictogram (象形) — an ancient vase used in making and storing fermented millet alcoholic drink. See 酒." + }, + { + "no": 165, + "radical": ["釆"], + "strokeCount": 7, + "meaning": "distinguish", + "pinyin": "biàn", + "hanViet": "biện", + "frequency": 14, + "examples": ["采", "釉", "釋"], + "order": "%E9%87%86-order.gif", + "glyphOrigin": [ + "60px-%E9%87%86-oracle.svg.png", + "60px-%E9%87%86-bronze.svg.png", + "60px-%E9%87%86-seal.svg.png", + "60px-%E9%87%86-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 166, + "radical": ["里"], + "strokeCount": 7, + "meaning": "village", + "pinyin": "lǐ", + "hanViet": "lý", + "frequency": 14, + "examples": ["重", "野", "量"], + "order": "%E9%87%8C-order.gif", + "glyphOrigin": ["60px-%E9%87%8C-seal.svg.png"], + "note": "Ideogrammic compound (會意): 田 (“field”) + 土 (“soil; earth”) – a measure of land and fields; mile; place." + }, + { + "no": 167, + "radical": ["金", "釒"], + "strokeCount": 8, + "meaning": "gold", + "pinyin": "jīn", + "hanViet": "kim", + "frequency": 806, + "simplified": "钅", + "examples": ["釓", "釔", "釕"], + "order": "%E9%87%91-order.gif", + "glyphOrigin": [ + "60px-%E9%87%91-bronze.svg.png", + "60px-%E9%87%91-seal.svg.png", + "60px-%E9%87%91-bigseal.svg.png" + ], + "note": "Originally referred to copper. Later, the meaning was extended to metal as a whole, and then to gold. Phono-semantic compound (形聲, OC *krɯm): semantic 王 (“upside-down axe”) + semantic 呂 (“two blocks of metal”) + phonetic 亼. 亼 is the ancient form for 今 (OC *krɯm)." + }, + { + "no": 168, + "radical": ["長", "镸"], + "strokeCount": 8, + "meaning": "long", + "pinyin": "cháng", + "hanViet": "trường", + "frequency": 55, + "simplified": "长", + "examples": ["镺", "镻", "镼"], + "order": "%E9%95%B7-order.gif", + "glyphOrigin": ["60px-%E9%95%B7-seal.svg.png"], + "note": "Pictogram (象形) – originally long hair; compare 彡." + }, + { + "no": 169, + "radical": ["門"], + "strokeCount": 8, + "meaning": "gate", + "pinyin": "mén", + "hanViet": "môn", + "frequency": 246, + "simplified": "门", + "examples": ["閂", "閃", "閆"], + "order": "%E9%96%80-order.gif", + "glyphOrigin": [ + "60px-%E9%96%80-bronze-shang.svg.png", + "60px-%E9%96%80-oracle.svg.png", + "60px-%E9%96%80-bronze.svg.png", + "60px-%E9%96%80-silk.svg.png", + "60px-%E9%96%80-slip.svg.png", + "60px-%E9%96%80-seal.svg.png", + "60px-%E9%96%80-bigseal.svg.png" + ], + "note": "Pictogram (象形): a gate. Compare 戶 (OC *ɡʷaːʔ, “(one) door”), which is half of this character." + }, + { + "no": 170, + "radical": ["阜", "⻖"], + "strokeCount": 8, + "meaning": "mound", + "pinyin": "fù", + "hanViet": "phụ", + "frequency": 348, + "examples": ["阞", "阡", "阢"], + "order": "%E9%98%9C-order.gif", + "glyphOrigin": [ + "60px-%E9%98%9C-oracle.svg.png", + "60px-%E9%98%9C-seal.svg.png", + "60px-%E9%98%9C-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 171, + "radical": ["隶"], + "strokeCount": 8, + "meaning": "slave", + "pinyin": "lì", + "hanViet": "lệ", + "frequency": 12, + "examples": ["𨽻", "隷", "隸"], + "order": "%E9%9A%B6-order.gif", + "glyphOrigin": ["60px-%E9%9A%B6-seal.svg.png"], + "note": "Pictogram (象形): 又 + abbreviated 尾." + }, + { + "no": 172, + "radical": ["隹"], + "strokeCount": 8, + "meaning": "short-tailed bird", + "pinyin": "zhuī", + "hanViet": "chuy", + "frequency": 233, + "examples": ["隻", "隼", "隽"], + "order": "%E9%9A%B9-order.gif", + "glyphOrigin": [ + "60px-%E9%9A%B9-oracle.svg.png", + "60px-%E9%9A%B9-bronze.svg.png", + "60px-%E9%9A%B9-seal.svg.png", + "60px-%E9%9A%B9-bigseal.svg.png" + ], + "note": "Pictogram (象形): a short‐tailed bird (e.g. a sparrow). Compare 鳥." + }, + { + "no": 173, + "radical": ["雨"], + "strokeCount": 8, + "meaning": "rain", + "pinyin": "yǔ", + "hanViet": "vũ", + "frequency": 298, + "examples": ["雩", "雪", "雯"], + "order": "%E9%9B%A8-order.gif", + "glyphOrigin": [ + "60px-%E9%9B%A8-oracle.svg.png", + "60px-%E9%9B%A8-bronze.svg.png", + "60px-%E9%9B%A8-silk.svg.png", + "60px-%E9%9B%A8-slip.svg.png", + "60px-%E9%9B%A8-ancient.svg.png", + "60px-%E9%9B%A8-seal.svg.png", + "60px-%E9%9B%A8-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a cloud with drops of rain falling from it." + }, + { + "no": 174, + "radical": ["靑", "青"], + "strokeCount": 8, + "meaning": "blue", + "pinyin": "qīng", + "hanViet": "thanh", + "frequency": 17, + "examples": ["靖", "静", "靚"], + "order": "%E9%9D%91-order.gif", + "glyphOrigin": [], + "note": "" + }, + { + "no": 175, + "radical": ["非"], + "strokeCount": 8, + "meaning": "wrong", + "pinyin": "fēi", + "hanViet": "phi", + "frequency": 25, + "examples": ["靟", "靠", "靡"], + "order": "%E9%9D%9E-order.gif", + "glyphOrigin": ["60px-%E9%9D%9E-seal.svg.png"], + "note": "" + }, + { + "no": 176, + "radical": ["面", "靣"], + "strokeCount": 9, + "meaning": "face", + "pinyin": "miàn", + "hanViet": "diện", + "frequency": 66, + "examples": ["靤", "靦", "靧"], + "order": "%E9%9D%A2-order.gif", + "glyphOrigin": [ + "60px-%E9%9D%A2-oracle.svg.png", + "60px-%E9%9D%A2-seal.svg.png" + ], + "note": "Pictogram (象形), A mans face, with an eye exaggerated, derived from 𦣻." + }, + { + "no": 177, + "radical": ["革"], + "strokeCount": 9, + "meaning": "leather", + "pinyin": "gé", + "hanViet": "cách", + "frequency": 305, + "examples": ["靭", "靮", "靳"], + "order": "%E9%9D%A9-order.gif", + "glyphOrigin": ["60px-%E9%9D%A9-seal.svg.png"], + "note": "Pictogram (象形) – a stretched animal hide: the upper is head, the bottom is the tail and legs. Compare 皮, which also features a hide." + }, + { + "no": 178, + "radical": ["韋"], + "strokeCount": 9, + "meaning": "tanned leather", + "pinyin": "wéi", + "hanViet": "vi", + "frequency": 100, + "simplified": "韦", + "examples": ["韌", "韍", "韎"], + "order": "%E9%9F%8B-order.gif", + "glyphOrigin": [ + "60px-%E9%9F%8B-bronze-shang.svg.png", + "60px-%E9%9F%8B-oracle.svg.png", + "60px-%E9%9F%8B-bronze.svg.png", + "60px-%E9%9F%8B-bronze-spring.svg.png", + "60px-%E9%9F%8B-silk.svg.png", + "60px-%E9%9F%8B-slip.svg.png", + "60px-%E9%9F%8B-seal.svg.png", + "60px-%E9%9F%8B-bigseal.svg.png" + ], + "note": "Phono-semantic compound (形聲, OC *ɢʷɯl): 舛 + 囗 – footsteps around an enclosure. Possibly the original character for 衛 'guard; protect'." + }, + { + "no": 179, + "radical": ["韭"], + "strokeCount": 9, + "meaning": "leek", + "pinyin": "jiǔ", + "hanViet": "cửu", + "frequency": 20, + "examples": ["韰", "韲", "䪢"], + "order": "%E9%9F%AD-order.gif", + "glyphOrigin": ["60px-%E9%9F%AD-seal.svg.png"], + "note": "Pictogram (象形) – leek in the ground (一)." + }, + { + "no": 180, + "radical": ["音"], + "strokeCount": 9, + "meaning": "sound", + "pinyin": "yīn", + "hanViet": "âm", + "frequency": 43, + "examples": ["竟", "章", "韵"], + "order": "%E9%9F%B3-order.gif", + "glyphOrigin": [ + "60px-%E9%9F%B3-bronze.svg.png", + "60px-%E9%9F%B3-silk.svg.png", + "60px-%E9%9F%B3-seal.svg.png", + "60px-%E9%9F%B3-bigseal.svg.png" + ], + "note": "Ideogram (指事): 言 (“word”) with something in 口 (“mouth”) – sound comes from the mouth." + }, + { + "no": 181, + "radical": ["頁"], + "strokeCount": 9, + "meaning": "leaf", + "pinyin": "yè", + "hanViet": "hiệt", + "frequency": 372, + "simplified": "页", + "examples": ["頂", "頃", "頄"], + "order": "%E9%A0%81-order.gif", + "glyphOrigin": [ + "60px-%E9%A0%81-oracle.svg.png", + "60px-%E9%A0%81-bronze.svg.png", + "60px-%E9%A0%81-silk.svg.png", + "60px-%E9%A0%81-seal.svg.png", + "60px-%E9%A0%81-bigseal.svg.png" + ], + "note": "Pictogram (象形): 首 + 卩 – head of a kneeling person, emphasising “head”. 頁 and 首 (OC *hljuʔ, *hljus) were originally the same pictographic character with the same meaning of “head”, and the graphical difference was that 頁 also included the body in addition to the head of the person. 頁 was later used as an alternative popular form of 葉 (“leaf; page”) to mean “sheet; page (of paper)”, which is its main meaning today. The original sense of “head” is preserved in the radical 頁, which is used in characters such as 頭 (“head”) and 頸 (“neck”)." + }, + { + "no": 182, + "radical": ["風"], + "strokeCount": 9, + "meaning": "wind", + "pinyin": "fēng", + "hanViet": "phong", + "frequency": 182, + "simplified": "风", + "examples": ["颩", "颭", "颮"], + "order": "%E9%A2%A8-order.gif", + "glyphOrigin": [ + "60px-%E9%B3%B3-oracle.svg.png", + "60px-%E9%B3%B3-bronze.svg.png", + "60px-%E9%A2%A8-silk.svg.png", + "60px-%E9%A2%A8-slip.svg.png", + "60px-%E9%A2%A8-ancient.svg.png", + "60px-%E9%A2%A8-seal.svg.png", + "60px-%E9%A2%A8-bigseal.svg.png" + ], + "note": "Phono-semantic compound (形聲, OC *plum, *plums): phonetic 凡 (OC *bom) + semantic 虫 (“insects”). Ancient Chinese thought insects appear with wind. (Insects refer to any kind of animal, such as tigers (大蟲)). In the oracle bone script, the character 鳳 (OC *bums, “male fenghuang”) was phonetically borrowed to represent 風 (OC *plum, *plums). The right part of the bronze inscription of the character consists of phonetic 凡 (OC *bom) at the top, and three parts depicting the fur on the tail of the male fenghuang at the bottom. Subsequent forms of 風 are based on the right part of its bronze inscription, with two of the three threads of \"fur\" removed for simplification. The 虫 in the Chu script and Qin script of 風 was likely a result of further simplification of the \"fur\". Shuowen misinterpreted the character 風 by associating it with insects. (Li, 2012)" + }, + { + "no": 183, + "radical": ["飛"], + "strokeCount": 9, + "meaning": "fly", + "pinyin": "fēi", + "hanViet": "phi", + "frequency": 92, + "simplified": "飞", + "examples": ["䬡", "飜", "飝"], + "order": "%E9%A3%9B-order.gif", + "glyphOrigin": [ + "60px-%E9%A3%9B-oracle.svg.png", + "60px-%E9%A3%9B-silk.svg.png", + "60px-%E9%A3%9B-seal.svg.png", + "60px-%E9%A3%9B-bigseal.svg.png" + ], + "note": "Pictogram (象形): looks like a bird flying upwards. In modern form, resembles a tasseled 升 (shēng)." + }, + { + "no": 184, + "radical": ["食", "飠"], + "strokeCount": 9, + "meaning": "eat", + "pinyin": "shí", + "hanViet": "thực", + "frequency": 403, + "simplified": "饣", + "examples": ["飡", "飢", "飣"], + "order": "%E9%A3%9F-order.gif", + "glyphOrigin": [ + "60px-%E9%A3%9F-oracle.svg.png", + "60px-%E9%A3%9F-bronze.svg.png", + "60px-%E9%A3%9F-bronze-spring.svg.png", + "60px-%E9%A3%9F-bronze-warring.svg.png", + "60px-%E9%A3%9F-silk.svg.png", + "60px-%E9%A3%9F-slip.svg.png", + "60px-%E9%A3%9F-seal.svg.png", + "60px-%E9%A3%9F-bigseal.svg.png" + ], + "note": "Pictogram (象形): a mouth over a bowl of rice on a stand. While the current form is 人+良, the lower part (bowl of rice on a stand) is cognate to 皀, not to 良 or 艮. This is more visible in the form 𠊊. Shuowen: Phono-semantic compound (形聲, OC *lɯɡs, *ɦljɯɡ): phonetic 亼 (OC *zub) + semantic 皀; see 𠊊." + }, + { + "no": 185, + "radical": ["首"], + "strokeCount": 9, + "meaning": "head", + "pinyin": "shǒu", + "hanViet": "thủ", + "frequency": 20, + "examples": ["馗", "䭫", "馘"], + "order": "%E9%A6%96-order.gif", + "glyphOrigin": [ + "60px-%E9%A6%96-oracle.svg.png", + "60px-%E9%A6%96-bronze.svg.png", + "60px-%E9%A6%96-seal.svg.png", + "60px-%E9%A6%96-bigseal.svg.png" + ], + "note": "Simplified from 𩠐 (巛 → 丷). Originally pictographic (象形) of an animal with a long mouth and horns. In the oracle bone script, it appeared with or without hair (巛), but 𩠐, the form with hair, was the form that was perpetuated." + }, + { + "no": 186, + "radical": ["香"], + "strokeCount": 9, + "meaning": "fragrant", + "pinyin": "xiāng", + "hanViet": "hương", + "frequency": 37, + "examples": ["馝", "馞", "馡"], + "order": "%E9%A6%99-order.gif", + "glyphOrigin": [ + "60px-%E9%A6%99-oracle.svg.png", + "60px-%E9%A6%99-bronze.svg.png", + "60px-%E9%A6%99-seal.svg.png", + "60px-%E9%A6%99-bigseal.svg.png" + ], + "note": "In the oracle bone script, it was ideogrammic compound (會意): 黍 (“glutinous millet”) + 口 (“mouth”). In the seal script, the 口 was replaced with the related 甘 (“sweet”). Currently, the 黍 has simplified into 禾, and the form of the bottom component 甘 has become akin to the unrelated 曰 or 日." + }, + { + "no": 187, + "radical": ["馬"], + "strokeCount": 10, + "meaning": "horse", + "pinyin": "mǎ", + "hanViet": "mã", + "frequency": 472, + "simplified": "马", + "examples": ["馭", "馮", "馯"], + "order": "%E9%A6%AC-order.gif", + "glyphOrigin": [ + "60px-%E9%A6%AC-bronze-shang.svg.png", + "60px-%E9%A6%AC-oracle.svg.png", + "60px-%E9%A6%AC-bronze.svg.png", + "60px-%E9%A6%AC-bronze-spring.svg.png", + "60px-%E9%A6%AC-bronze-warring.svg.png", + "60px-%E9%A6%AC-silk.svg.png", + "60px-%E9%A6%AC-slip.svg.png", + "60px-%E9%A6%AC-zhou.svg.png", + "60px-%E9%A6%AC-ancient.svg.png", + "60px-%E9%A6%AC-seal.svg.png", + "60px-%E9%A6%AC-bigseal.svg.png", + "60px-%E9%A6%AC-clerical.svg.png" + ], + "note": "Pictogram (象形) – a horse with its head facing the left, showing a flowing mane in the wind. In the bronze inscriptions, the head was often simplified into an eye (目). The legs eventually evolved into four dots (灬, unrelated to 火). Contrast with 鹿 (“deer”), which saw a very different development, and 𢊁 (as in 薦), which is a hybrid: it has the legs of 馬 (灬) but the head of 鹿." + }, + { + "no": 188, + "radical": ["骨"], + "strokeCount": 10, + "meaning": "bone", + "pinyin": "gǔ", + "hanViet": "cốt", + "frequency": 185, + "simplified": "⻣", + "examples": ["骫", "骭", "骯"], + "order": "%E9%AA%A8-order.gif", + "glyphOrigin": [ + "60px-%E5%86%8E-bronze-shang.svg.png", + "60px-%E5%86%8E-oracle.svg.png", + "60px-%E9%AA%A8-silk.svg.png", + "60px-%E9%AA%A8-slip.svg.png", + "60px-%E9%AA%A8-seal.svg.png", + "60px-%E9%AA%A8-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 冎 (“skull”) + ⺼ (“body”)." + }, + { + "no": 189, + "radical": ["高", "髙"], + "strokeCount": 10, + "meaning": "tall", + "pinyin": "gāo", + "hanViet": "cao", + "frequency": 34, + "examples": ["髚", "髛", "𩫛"], + "order": "%E9%AB%98-order.gif", + "glyphOrigin": [ + "60px-%E9%AB%98-bronze-shang.svg.png", + "60px-%E9%AB%98-oracle.svg.png", + "60px-%E9%AB%98-bronze.svg.png", + "60px-%E9%AB%98-bronze-spring.svg.png", + "60px-%E9%AB%98-bronze-warring.svg.png", + "60px-%E9%AB%98-silk.svg.png", + "60px-%E9%AB%98-slip.svg.png", + "60px-%E9%AB%98-seal.svg.png", + "60px-%E9%AB%98-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a picture of a building. compare to 京." + }, + { + "no": 190, + "radical": ["髟"], + "strokeCount": 10, + "meaning": "hair", + "pinyin": "biāo", + "hanViet": "bưu/tiêu", + "frequency": 243, + "examples": ["髠", "髡", "髢"], + "order": "%E9%AB%9F-order.gif", + "glyphOrigin": [ + "60px-%E9%AB%9F-bronze-shang.svg.png", + "60px-%E9%AB%9F-silk.svg.png", + "60px-%E9%AB%9F-seal.svg.png" + ], + "note": "Ideogrammic compound (會意): 镸 (“long”) + 彡 (“hair”)." + }, + { + "no": 191, + "radical": ["鬥"], + "strokeCount": 10, + "meaning": "fight", + "pinyin": "dòu", + "hanViet": "đấu", + "frequency": 23, + "simplified": "门", + "examples": ["鬦", "鬧", "鬨"], + "order": "%E2%BE%BE-order.gif", + "glyphOrigin": [ + "60px-%E9%AC%A5-oracle.svg.png", + "60px-%E9%AC%A5-seal.svg.png", + "60px-%E9%AC%A5-bigseal.svg.png" + ], + "note": "Pictogram (象形) — two figures face-to-face, fighting with bare hands. Some oracle script characters of 鬥 show that both of their hair are bristled. The character shape resembles 𠨭 and 丮 opposite each other. 鬥 and 鬭 are original characters of this form; forms with the similar-looking radical 門 (\"door\") were non-standard variants. Simplified form 斗 was derived via the variant form 鬦." + }, + { + "no": 192, + "radical": ["鬯"], + "strokeCount": 10, + "meaning": "sacrificial wine", + "pinyin": "chàng", + "hanViet": "sưởng", + "frequency": 8, + "examples": ["鬰", "鬱"], + "order": "%E9%AC%AF-order.gif", + "glyphOrigin": [ + "60px-%E9%AC%AF-oracle.svg.png", + "60px-%E9%AC%AF-bronze.svg.png", + "60px-%E9%AC%AF-seal.svg.png", + "60px-%E9%AC%AF-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 193, + "radical": ["鬲"], + "strokeCount": 10, + "meaning": "cauldron", + "pinyin": "lì", + "hanViet": "cách", + "frequency": 73, + "examples": ["鬳", "鬴", "鬵"], + "order": "%E9%AC%B2-order.gif", + "glyphOrigin": [ + "60px-%E9%AC%B2-oracle.svg.png", + "60px-%E9%AC%B2-bronze.svg.png", + "60px-%E9%AC%B2-seal.svg.png", + "60px-%E9%AC%B2-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 194, + "radical": ["鬼"], + "strokeCount": 10, + "meaning": "ghost", + "pinyin": "guǐ", + "hanViet": "quỷ", + "frequency": 141, + "examples": ["鬾", "魁", "魂"], + "order": "%E9%AC%BC-order.gif", + "glyphOrigin": [ + "60px-%E9%AC%BC-oracle.svg.png", + "60px-%E9%AC%BC-bronze.svg.png", + "60px-%E9%AC%BC-seal.svg.png", + "60px-%E9%AC%BC-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a man or figure with an ugly face and tail. Compare 異 (“different, strange”), where the 田 also derives from a face. It may not be clear from the character, but the lower right “dot” is a small 厶; it is a residual tail – compare 离." + }, + { + "no": 195, + "radical": ["魚"], + "strokeCount": 11, + "meaning": "fish", + "pinyin": "yú", + "hanViet": "ngư", + "frequency": 571, + "simplified": "鱼", + "examples": ["魟", "魠", "魦"], + "order": "%E9%AD%9A-order.gif", + "glyphOrigin": [ + "60px-%E9%AD%9A-oracle.svg.png", + "60px-%E9%AD%9A-bronze.svg.png", + "60px-%E9%AD%9A-seal.svg.png", + "60px-%E9%AD%9A-bigseal.svg.png" + ], + "note": "Pictogram (象形) – pictographic representation of a fish." + }, + { + "no": 196, + "radical": ["鳥"], + "strokeCount": 11, + "meaning": "bird", + "pinyin": "niǎo", + "hanViet": "điểu", + "frequency": 750, + "simplified": "鸟", + "examples": ["鳦", "鳧", "鳩"], + "order": "%E9%B3%A5-order.gif", + "glyphOrigin": [ + "60px-%E9%B3%A5-oracle.svg.png", + "60px-%E9%B3%A5-bronze.svg.png", + "60px-%E9%B3%A5-seal.svg.png" + ], + "note": "Pictogram (象形): a bird with a dangling tail. Compare 烏, which is very similar, of similar origin, and 隹, which originated from a similar image of a bird, but is today rather more abstract and less recognizable." + }, + { + "no": 197, + "radical": ["鹵"], + "strokeCount": 11, + "meaning": "salt", + "pinyin": "lǔ", + "hanViet": "lỗ", + "frequency": 44, + "simplified": "卤", + "examples": ["鹹", "鹺", "鹼"], + "order": "%E9%B9%B5-order.gif", + "glyphOrigin": [ + "60px-%E9%B9%B5-oracle.svg.png", + "60px-%E9%B9%B5-bronze.svg.png", + "60px-%E9%B9%B5-seal.svg.png", + "60px-%E9%B9%B5-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a bag of salt. Compare 西." + }, + { + "no": 198, + "radical": ["鹿"], + "strokeCount": 11, + "meaning": "deer", + "pinyin": "lù", + "hanViet": "lộc", + "frequency": 104, + "examples": ["麀", "麁", "麂"], + "order": "%E9%B9%BF-order.gif", + "glyphOrigin": [ + "60px-%E9%B9%BF-oracle.svg.png", + "60px-%E9%B9%BF-bronze.svg.png", + "60px-%E9%B9%BF-seal.svg.png", + "60px-%E9%B9%BF-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a deer. Current form is highly abstracted – legs have transformed to 比 – note grouping of front and rear legs, which are bent – head has transformed to middle component (similar to 凸/曲), while antlers on top and extended lip/mouth on left transformed into 广. This transformation occurred during seal characters. Contrast the very different development of 馬 (“horse”), and the transformation in 𢊁 (as in 薦), which has the head of 鹿 but the legs of 馬 (灬)." + }, + { + "no": 199, + "radical": ["麥"], + "strokeCount": 11, + "meaning": "wheat", + "pinyin": "mài", + "hanViet": "mạch", + "frequency": 131, + "simplified": "麦", + "examples": ["麨", "麩", "麪"], + "order": "%E9%BA%A5-order.gif", + "glyphOrigin": [ + "60px-%E9%BA%A5-oracle.svg.png", + "60px-%E9%BA%A5-bronze.svg.png", + "60px-%E9%BA%A5-seal.svg.png", + "60px-%E9%BA%A5-bigseal.svg.png" + ], + "note": "Phono-semantic compound (形聲, OC *mrɯːɡ): phonetic 來 (OC *m·rɯːɡ) + semantic 夊 (“foot; to walk slowly”). 來 was the original character for “wheat”. Several possible interpretations:" + }, + { + "no": 200, + "radical": ["麻"], + "strokeCount": 11, + "meaning": "hemp", + "pinyin": "má", + "hanViet": "ma", + "frequency": 34, + "examples": ["麼", "麾", "黁"], + "order": "%E9%BA%BB-order.gif", + "glyphOrigin": [ + "60px-%E9%BA%BB-bronze.svg.png", + "60px-%E9%BA%BB-seal.svg.png", + "60px-%E9%BA%BB-bigseal.svg.png" + ], + "note": "Ideogrammic compound (會意): 厂 + 𣏟: a representation of hemp leaves." + }, + { + "no": 201, + "radical": ["黃"], + "strokeCount": 12, + "meaning": "yellow", + "pinyin": "huáng", + "hanViet": "hoàng", + "frequency": 42, + "simplified": "黄", + "examples": ["黈", "䵍", "黌"], + "order": "%E9%BB%83-order.gif", + "glyphOrigin": [ + "60px-%E9%BB%83-oracle.svg.png", + "60px-%E9%BB%83-bronze.svg.png", + "60px-%E9%BB%83-seal.svg.png", + "60px-%E9%BB%83-bigseal.svg.png" + ], + "note": "According to Shuowen, it is both a phono-semantic compound (形聲, OC *ɡʷaːŋ) and ideogrammic compound (會意): phonetic 炗 (“light”) + semantic 田 (“field”) – the color of earth, with 炗 being the ancient form of 光 (OC *kʷaːŋ, *kʷaːŋs, “light”). However, this interpretation is likely erroneous as 廿 at the top was formed as a result of corruption of 口 in the bronze inscription. Chi (2010) proposes that 黃 was originally a pictogram (象形) and the original character of 尪 (OC *qʷaːŋ, “a disabled person with a protruding chest or abdomen”). It has been phonetically borrowed for \"yellow\" since the era of the oracle bone script. He (1998) noted the possible ritual of burning disabled people with a protruding chest or abdomen to pray for rain as mentioned in Zuozhuan. The 口 in the upper part of the bronze inscription of 黃 might be depicting the disabled person's face facing upwards. Li (2012), on the other hand, proposes that 黃 was originally a pictogram (象形) and the original character of 璜 (OC *ɡʷaːŋ, “semicircular jade”) as the 口 in the oracle bone script resembles a ring of jade, so the character would carry the meaning of \"a man wearing a ring of jade on his chest\". The meaning \"yellow\" is the result of rebus." + }, + { + "no": 202, + "radical": ["黍"], + "strokeCount": 12, + "meaning": "millet", + "pinyin": "shǔ", + "hanViet": "thử", + "frequency": 46, + "examples": ["黎", "黏", "黐"], + "order": "%E9%BB%8D-order.gif", + "glyphOrigin": [ + "60px-%E9%BB%8D-oracle.svg.png", + "60px-%E9%BB%8D-bronze.svg.png", + "60px-%E9%BB%8D-seal.svg.png", + "60px-%E9%BB%8D-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 203, + "radical": ["黑"], + "strokeCount": 12, + "meaning": "black", + "pinyin": "hēi", + "hanViet": "hắc", + "frequency": 172, + "examples": ["墨", "黓", "黔"], + "order": "%E9%BB%91-order.gif", + "glyphOrigin": [ + "60px-%E9%BB%91-oracle.svg.png", + "60px-%E9%BB%91-bronze.svg.png", + "60px-%E9%BB%91-bronze-spring.svg.png", + "60px-%E9%BB%92-silk.svg.png", + "60px-%E9%BB%91-slip.svg.png", + "60px-%E9%BB%91-seal.svg.png", + "60px-%E9%BB%92-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a person (大) with a tattooed face, depicting penal tattooing (墨), one of the five punishments of ancient China. In the bronze inscriptions from the Spring and Autumn and Warring States periods, dots were sometimes added around 大, leading Shuowen to erroneously interpret the character as an ideogrammic compound (會意): 𡆧 (“chimney”) + 炎 (“fire; flame”) — fire burning under a chimney, causing it to become black from the smoke." + }, + { + "no": 204, + "radical": ["黹"], + "strokeCount": 12, + "meaning": "embroidery", + "pinyin": "zhǐ", + "hanViet": "chỉ", + "frequency": 8, + "examples": ["黺", "黻", "黼"], + "order": "%E9%BB%B9-order.gif", + "glyphOrigin": [ + "60px-%E9%BB%B9-oracle.svg.png", + "60px-%E9%BB%B9-bronze.svg.png", + "60px-%E9%BB%B9-seal.svg.png", + "60px-%E9%BB%B9-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 205, + "radical": ["黽"], + "strokeCount": 13, + "meaning": "frog", + "pinyin": "mǐn", + "hanViet": "mãnh", + "frequency": 40, + "simplified": "黾", + "examples": ["黿", "鼀", "鼁"], + "order": "%E9%BB%BD-order.gif", + "glyphOrigin": ["60px-%E9%BB%BD-seal.svg.png"], + "note": "Pictogram (象形)." + }, + { + "no": 206, + "radical": ["鼎"], + "strokeCount": 13, + "meaning": "tripod", + "pinyin": "dǐng", + "hanViet": "đỉnh", + "frequency": 14, + "examples": ["鼏", "鼐", "鼒"], + "order": "%E9%BC%8E-order.gif", + "glyphOrigin": [ + "60px-%E9%BC%8E-oracle.svg.png", + "60px-%E9%BC%8E-bronze.svg.png", + "60px-%E9%BC%8E-seal.svg.png", + "60px-%E9%BC%8E-bigseal.svg.png" + ], + "note": "Pictogram (象形)." + }, + { + "no": 207, + "radical": ["鼓"], + "strokeCount": 13, + "meaning": "drum", + "pinyin": "gǔ", + "hanViet": "cổ", + "frequency": 46, + "examples": ["鼕", "鼖", "鼗"], + "order": "%E9%BC%93-order.gif", + "glyphOrigin": [ + "60px-%E9%BC%93-oracle.svg.png", + "60px-%E9%BC%93-bronze.svg.png", + "60px-%E9%BC%93-seal.svg.png", + "60px-%E9%BC%93-bigseal.svg.png" + ], + "note": "" + }, + { + "no": 208, + "radical": ["鼠"], + "strokeCount": 13, + "meaning": "rat", + "pinyin": "shǔ", + "hanViet": "thử", + "frequency": 92, + "examples": ["鼢", "鼥", "鼩"], + "order": "%E9%BC%A0-order.gif", + "glyphOrigin": [ + "60px-%E9%BC%A0-oracle.svg.png", + "60px-%E9%BC%A0-seal.svg.png", + "60px-%E9%BC%A0-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a mouse or rat. In the seal script form, which is inherited in the regular script, the upper component resembling 臼 represents the open mouth of a rat with teeth displayed, and the lower component represents the two feet of a rat on the left and a tail on the right." + }, + { + "no": 209, + "radical": ["鼻"], + "strokeCount": 14, + "meaning": "nose", + "pinyin": "bí", + "hanViet": "tị", + "frequency": 49, + "examples": ["鼽", "鼾", "齁"], + "order": "%E9%BC%BB-order.gif", + "glyphOrigin": ["60px-%E9%BC%BB-seal.svg.png"], + "note": "Phono-semantic compound (形聲, OC *blids): semantic 自 (“nose”) + phonetic 畀 (OC *pids). 自 (OC *ɦljids) originally meant 'nose', but replaced by 鼻 (OC *blids) to represent the sense of “self”. Some scholars interpret 鼻 (OC *blids) as a combination of a nose (自 (OC *ɦljids)) and two lungs (畀 (OC *pids))." + }, + { + "no": 210, + "radical": ["齊", "斉"], + "strokeCount": 14, + "meaning": "even", + "pinyin": "qí", + "hanViet": "tề", + "frequency": 18, + "simplified": "齐", + "examples": ["齋", "齌", "齍"], + "order": "%E9%BD%8A-order.gif", + "glyphOrigin": ["60px-%E9%BD%8A-seal.svg.png"], + "note": "Ideogram (指事): a field of grain, hence of uniform height." + }, + { + "no": 211, + "radical": ["齒"], + "strokeCount": 15, + "meaning": "tooth", + "pinyin": "chǐ", + "hanViet": "xỉ/sỉ", + "frequency": 162, + "simplified": "齿", + "examples": ["齔", "齕", "齖"], + "order": "%E9%BD%92-order.gif", + "glyphOrigin": [ + "60px-%E9%BD%92-oracle.svg.png", + "60px-%E9%BD%92-bronze.svg.png", + "60px-Shuowen_Seal_Radical_038.svg.png", + "60px-%E9%BD%92-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a mouth full of teeth. 之 (zhī) or 止 (zhǐ) was later added on top as a phonetic component." + }, + { + "no": 212, + "radical": ["龍"], + "strokeCount": 16, + "meaning": "dragon", + "pinyin": "lóng", + "hanViet": "long", + "frequency": 14, + "simplified": "龙", + "examples": ["龏", "龑", "龔"], + "order": "%E9%BE%8D-order.gif", + "glyphOrigin": [ + "60px-%E9%BE%8D-bronze-shang.svg.png", + "60px-%E9%BE%8D-oracle.svg.png", + "60px-%E9%BE%8D-bronze.svg.png", + "60px-%E9%BE%8D-bronze-spring.svg.png", + "60px-%E9%BE%8D-silk.svg.png", + "60px-%E9%BE%8D-slip.svg.png", + "60px-%E9%BE%8D-seal.svg.png", + "60px-%E9%BE%8D-bigseal.svg.png" + ], + "note": "Pictogram (象形) – originally a serpent with prominent whiskered mouth and eyes. Current form developed in large seal script, with serpent’s body on right (tail at upper right, legs on right), whiskered/fanged mouth at lower left, and eyes/crown at upper left. Left side was subsequently simplified and abstracted, with some influence of 立 and ⺼/月. Note that 竜 existed as a traditional variant dating back to large seal script, and figures a dragon seen face-on, rather than curled around." + }, + { + "no": 213, + "radical": ["龜"], + "strokeCount": 16, + "meaning": "turtle", + "pinyin": "guī", + "hanViet": "quy", + "frequency": 24, + "simplified": "龟", + "examples": ["䶰", "龝", "龞"], + "order": "%E9%BE%9C-order.gif", + "glyphOrigin": [ + "60px-%E9%BE%9C-oracle.svg.png", + "60px-%E9%BE%9C-bronze.svg.png", + "60px-%E9%BE%9C-seal.svg.png", + "60px-%E9%BE%9C-bigseal.svg.png" + ], + "note": "Pictogram (象形): A drawing of a turtle seen from the side and from above (Bronze inscriptions)." + }, + { + "no": 214, + "radical": ["龠"], + "strokeCount": 17, + "meaning": "flute", + "pinyin": "yuè", + "hanViet": "dược", + "frequency": 19, + "examples": ["龡", "龢", "龤"], + "order": "%E9%BE%A0-order.gif", + "glyphOrigin": [ + "60px-%E9%BE%A0-oracle.svg.png", + "60px-%E9%BE%A0-bronze.svg.png", + "60px-%E9%BE%A0-seal.svg.png", + "60px-%E9%BE%A0-bigseal.svg.png" + ], + "note": "Pictogram (象形) – a woodwind instrument. In the bronze inscriptions, 亼 (a flipped 口) was added to show a mouth playing the instrument. Shuowen interprets it as an ideogrammic compound (會意): 品 + 侖." + } +] diff --git a/server/routers/bushou/tokenize/success.json b/server/routers/bushou/tokenize/success.json new file mode 100644 index 0000000..a536fa7 --- /dev/null +++ b/server/routers/bushou/tokenize/success.json @@ -0,0 +1 @@ +[{"term":"中国","dict":[{"traditional":"中國","simplified":"中国","pinyin":"zhong1 guo2","meaning":["China"]}]},{"term":"-"},{"term":"世卫","dict":[{"traditional":"世衛","simplified":"世卫","pinyin":"shi4 wei4","meaning":["World Health Organization (WHO)","abbr. for 世界衛生組織|世界卫生组织[Shi4 jie4 Wei4 sheng1 Zu3 zhi1]"]}]},{"term":"组织","dict":[{"traditional":"組織","simplified":"组织","pinyin":"zu3 zhi1","meaning":["to organize","organization","(biology) tissue","(textiles) weave","CL:個|个[ge4]"]}]},{"term":"新冠","dict":[{"traditional":"新冠","simplified":"新冠","pinyin":"xin1 guan1","meaning":["novel coronavirus (abbr. for 新型冠狀病毒|新型冠状病毒[xin1 xing2 guan1 zhuang4 bing4 du2]) (esp. SARS-CoV-2, the virus causing COVID-19)"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"溯源","dict":[{"traditional":"溯源","simplified":"溯源","pinyin":"su4 yuan2","meaning":["to investigate the origin of sth","to trace a river upstream back to its source"]}]},{"term":"联合","dict":[{"traditional":"聯合","simplified":"联合","pinyin":"lian2 he2","meaning":["to combine","to join","unite","alliance"]}]},{"term":"研究","dict":[{"traditional":"研究","simplified":"研究","pinyin":"yan2 jiu1","meaning":["research","a study","CL:項|项[xiang4]","to research","to look into"]}]},{"term":"报告","dict":[{"traditional":"報告","simplified":"报告","pinyin":"bao4 gao4","meaning":["to inform","to report","to make known","report","speech","talk","lecture","CL:篇[pian1],份[fen4],個|个[ge4],通[tong4]"]}]},{"term":"正式","dict":[{"traditional":"正式","simplified":"正式","pinyin":"zheng4 shi4","meaning":["formal","official"]}]},{"term":"发布","dict":[{"traditional":"發佈","simplified":"发布","pinyin":"fa1 bu4","meaning":["to release","to issue","to announce","to distribute","also written 發布|发布[fa1 bu4]"]},{"traditional":"發布","simplified":"发布","pinyin":"fa1 bu4","meaning":["to release","to issue","to announce","to distribute"]}]},{"term":"\n"},{"term":"世界","dict":[{"traditional":"世界","simplified":"世界","pinyin":"shi4 jie4","meaning":["world","CL:個|个[ge4]"]}]},{"term":"卫生","dict":[{"traditional":"衛生","simplified":"卫生","pinyin":"wei4 sheng1","meaning":["health","hygiene","sanitation"]}]},{"term":"组织","dict":[{"traditional":"組織","simplified":"组织","pinyin":"zu3 zhi1","meaning":["to organize","organization","(biology) tissue","(textiles) weave","CL:個|个[ge4]"]}]},{"term":"3"},{"term":"0"},{"term":"日","dict":[{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["abbr. for 日本[Ri4 ben3], Japan"]},{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["sun","day","date, day of the month"]}]},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"日内瓦","dict":[{"traditional":"日內瓦","simplified":"日内瓦","pinyin":"ri4 nei4 wa3","meaning":["Geneva, Switzerland"]}]},{"term":"正式","dict":[{"traditional":"正式","simplified":"正式","pinyin":"zheng4 shi4","meaning":["formal","official"]}]},{"term":"发布","dict":[{"traditional":"發佈","simplified":"发布","pinyin":"fa1 bu4","meaning":["to release","to issue","to announce","to distribute","also written 發布|发布[fa1 bu4]"]},{"traditional":"發布","simplified":"发布","pinyin":"fa1 bu4","meaning":["to release","to issue","to announce","to distribute"]}]},{"term":"中国","dict":[{"traditional":"中國","simplified":"中国","pinyin":"zhong1 guo2","meaning":["China"]}]},{"term":"-"},{"term":"世卫","dict":[{"traditional":"世衛","simplified":"世卫","pinyin":"shi4 wei4","meaning":["World Health Organization (WHO)","abbr. for 世界衛生組織|世界卫生组织[Shi4 jie4 Wei4 sheng1 Zu3 zhi1]"]}]},{"term":"组织","dict":[{"traditional":"組織","simplified":"组织","pinyin":"zu3 zhi1","meaning":["to organize","organization","(biology) tissue","(textiles) weave","CL:個|个[ge4]"]}]},{"term":"新冠","dict":[{"traditional":"新冠","simplified":"新冠","pinyin":"xin1 guan1","meaning":["novel coronavirus (abbr. for 新型冠狀病毒|新型冠状病毒[xin1 xing2 guan1 zhuang4 bing4 du2]) (esp. SARS-CoV-2, the virus causing COVID-19)"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"溯源","dict":[{"traditional":"溯源","simplified":"溯源","pinyin":"su4 yuan2","meaning":["to investigate the origin of sth","to trace a river upstream back to its source"]}]},{"term":"联合","dict":[{"traditional":"聯合","simplified":"联合","pinyin":"lian2 he2","meaning":["to combine","to join","unite","alliance"]}]},{"term":"研究","dict":[{"traditional":"研究","simplified":"研究","pinyin":"yan2 jiu1","meaning":["research","a study","CL:項|项[xiang4]","to research","to look into"]}]},{"term":"报告","dict":[{"traditional":"報告","simplified":"报告","pinyin":"bao4 gao4","meaning":["to inform","to report","to make known","report","speech","talk","lecture","CL:篇[pian1],份[fen4],個|个[ge4],通[tong4]"]}]},{"term":"。"},{"term":"报告","dict":[{"traditional":"報告","simplified":"报告","pinyin":"bao4 gao4","meaning":["to inform","to report","to make known","report","speech","talk","lecture","CL:篇[pian1],份[fen4],個|个[ge4],通[tong4]"]}]},{"term":"认为","dict":[{"traditional":"認為","simplified":"认为","pinyin":"ren4 wei2","meaning":["to believe","to think","to consider","to feel"]}]},{"term":","},{"term":"新冠","dict":[{"traditional":"新冠","simplified":"新冠","pinyin":"xin1 guan1","meaning":["novel coronavirus (abbr. for 新型冠狀病毒|新型冠状病毒[xin1 xing2 guan1 zhuang4 bing4 du2]) (esp. SARS-CoV-2, the virus causing COVID-19)"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"“"},{"term":"极","dict":[{"traditional":"極","simplified":"极","pinyin":"ji2","meaning":["extremely","pole (geography, physics)","utmost","top"]}]},{"term":"不可能","dict":[{"traditional":"不可能","simplified":"不可能","pinyin":"bu4 ke3 neng2","meaning":["impossible","cannot","not able"]}]},{"term":"”"},{"term":"通过","dict":[{"traditional":"通過","simplified":"通过","pinyin":"tong1 guo4","meaning":["by means of","through","via","to pass through","to get through","to adopt","to pass (a bill or inspection etc)","to switch over"]}]},{"term":"实验室","dict":[{"traditional":"實驗室","simplified":"实验室","pinyin":"shi2 yan4 shi4","meaning":["laboratory","CL:間|间[jian1]"]}]},{"term":"传人","dict":[{"traditional":"傳人","simplified":"传人","pinyin":"chuan2 ren2","meaning":["to teach","to impart","a disciple","descendant"]}]},{"term":"。"},{"term":"今年","dict":[{"traditional":"今年","simplified":"今年","pinyin":"jin1 nian2","meaning":["this year"]}]},{"term":"1"},{"term":"月","dict":[{"traditional":"月","simplified":"月","pinyin":"yue4","meaning":["moon","month","monthly","CL:個|个[ge4],輪|轮[lun2]"]}]},{"term":"1"},{"term":"4"},{"term":"日至","dict":[{"traditional":"日至","simplified":"日至","pinyin":"ri4 zhi4","meaning":["solstice","the winter solstice 冬至 and summer solstice 夏至"]}]},{"term":"2"},{"term":"月","dict":[{"traditional":"月","simplified":"月","pinyin":"yue4","meaning":["moon","month","monthly","CL:個|个[ge4],輪|轮[lun2]"]}]},{"term":"1"},{"term":"0"},{"term":"日","dict":[{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["abbr. for 日本[Ri4 ben3], Japan"]},{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["sun","day","date, day of the month"]}]},{"term":","},{"term":"1"},{"term":"7"},{"term":"名","dict":[{"traditional":"名","simplified":"名","pinyin":"ming2","meaning":["name","noun (part of speech)","place (e.g. among winners)","famous","classifier for people"]}]},{"term":"中方","dict":[{"traditional":"中方","simplified":"中方","pinyin":"zhong1 fang1","meaning":["the Chinese side (in an international venture)"]}]},{"term":"专家","dict":[{"traditional":"專家","simplified":"专家","pinyin":"zhuan1 jia1","meaning":["expert","specialist","CL:個|个[ge4]"]}]},{"term":"和","dict":[{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["surname He","Japanese (food, clothes etc)"]},{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["and","together with","with","sum","union","peace","harmony","Taiwan pr. [han4] when it means \"and\" or \"with\""]},{"traditional":"和","simplified":"和","pinyin":"he4","meaning":["to compose a poem in reply (to sb's poem) using the same rhyme sequence","to join in the singing","to chime in with others"]},{"traditional":"和","simplified":"和","pinyin":"hu2","meaning":["to complete a set in mahjong or playing cards"]},{"traditional":"和","simplified":"和","pinyin":"huo2","meaning":["to combine a powdery substance (flour, plaster etc) with water","Taiwan pr. [huo4]"]},{"traditional":"和","simplified":"和","pinyin":"huo4","meaning":["to mix (ingredients) together","to blend","classifier for rinses of clothes","classifier for boilings of medicinal herbs"]}]},{"term":"1"},{"term":"7"},{"term":"名","dict":[{"traditional":"名","simplified":"名","pinyin":"ming2","meaning":["name","noun (part of speech)","place (e.g. among winners)","famous","classifier for people"]}]},{"term":"外","dict":[{"traditional":"外","simplified":"外","pinyin":"wai4","meaning":["outside","in addition","foreign","external"]}]},{"term":"方","dict":[{"traditional":"方","simplified":"方","pinyin":"fang1","meaning":["surname Fang"]},{"traditional":"方","simplified":"方","pinyin":"fang1","meaning":["square","power or involution (math.)","upright","honest","fair and square","direction","side","party (to a contract, dispute etc)","place","method","prescription (medicine)","just when","only or just","classifier for square things","abbr. for square or cubic meter"]}]},{"term":"专家","dict":[{"traditional":"專家","simplified":"专家","pinyin":"zhuan1 jia1","meaning":["expert","specialist","CL:個|个[ge4]"]}]},{"term":"组成","dict":[{"traditional":"組成","simplified":"组成","pinyin":"zu3 cheng2","meaning":["to form","to make up","to constitute"]}]},{"term":"联合","dict":[{"traditional":"聯合","simplified":"联合","pinyin":"lian2 he2","meaning":["to combine","to join","unite","alliance"]}]},{"term":"专家","dict":[{"traditional":"專家","simplified":"专家","pinyin":"zhuan1 jia1","meaning":["expert","specialist","CL:個|个[ge4]"]}]},{"term":"组","dict":[{"traditional":"組","simplified":"组","pinyin":"zu3","meaning":["surname Zu"]},{"traditional":"組","simplified":"组","pinyin":"zu3","meaning":["to form","to organize","group","team","classifier for sets, series, groups of people, batteries"]}]},{"term":","},{"term":"分为","dict":[{"traditional":"分為","simplified":"分为","pinyin":"fen1 wei2","meaning":["to divide sth into (parts)","to subdivide"]}]},{"term":"流行病学","dict":[{"traditional":"流行病學","simplified":"流行病学","pinyin":"liu2 xing2 bing4 xue2","meaning":["epidemiology"]}]},{"term":"、"},{"term":"分子","dict":[{"traditional":"分子","simplified":"分子","pinyin":"fen1 zi3","meaning":["molecule","(math) numerator of a fraction"]},{"traditional":"分子","simplified":"分子","pinyin":"fen4 zi3","meaning":["members of a class or group","political elements (such as intellectuals or extremists)","part"]}]},{"term":"溯源","dict":[{"traditional":"溯源","simplified":"溯源","pinyin":"su4 yuan2","meaning":["to investigate the origin of sth","to trace a river upstream back to its source"]}]},{"term":"、"},{"term":"动物","dict":[{"traditional":"動物","simplified":"动物","pinyin":"dong4 wu4","meaning":["animal","CL:隻|只[zhi1],群[qun2],個|个[ge4]"]}]},{"term":"与","dict":[{"traditional":"與","simplified":"与","pinyin":"yu2","meaning":["variant of 歟|欤[yu2]"]},{"traditional":"與","simplified":"与","pinyin":"yu3","meaning":["and","to give","together with"]},{"traditional":"與","simplified":"与","pinyin":"yu4","meaning":["to take part in"]}]},{"term":"环境","dict":[{"traditional":"環境","simplified":"环境","pinyin":"huan2 jing4","meaning":["environment","circumstances","surroundings","CL:個|个[ge4]","ambient"]}]},{"term":"3"},{"term":"个","dict":[{"traditional":"個","simplified":"个","pinyin":"ge4","meaning":["individual","this","that","size","classifier for people or objects in general"]},{"traditional":"箇","simplified":"个","pinyin":"ge4","meaning":["variant of 個|个[ge4]"]}]},{"term":"小组","dict":[{"traditional":"小組","simplified":"小组","pinyin":"xiao3 zu3","meaning":["group"]}]},{"term":","},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"武汉","dict":[{"traditional":"武漢","simplified":"武汉","pinyin":"wu3 han4","meaning":["Wuhan city on Changjiang, subprovincial city and capital of Hubei province"]}]},{"term":"开展","dict":[{"traditional":"開展","simplified":"开展","pinyin":"kai1 zhan3","meaning":["to launch","to develop","to unfold","(of an exhibition etc) to open"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"为期","dict":[{"traditional":"為期","simplified":"为期","pinyin":"wei2 qi1","meaning":["(to be done) by (a certain date)","lasting (a certain time)"]}]},{"term":"2"},{"term":"8"},{"term":"天","dict":[{"traditional":"天","simplified":"天","pinyin":"tian1","meaning":["day","sky","heaven"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"全球","dict":[{"traditional":"全球","simplified":"全球","pinyin":"quan2 qiu2","meaning":["entire","total","global","the (whole) world","worldwide"]}]},{"term":"溯源","dict":[{"traditional":"溯源","simplified":"溯源","pinyin":"su4 yuan2","meaning":["to investigate the origin of sth","to trace a river upstream back to its source"]}]},{"term":"研究","dict":[{"traditional":"研究","simplified":"研究","pinyin":"yan2 jiu1","meaning":["research","a study","CL:項|项[xiang4]","to research","to look into"]}]},{"term":"中国","dict":[{"traditional":"中國","simplified":"中国","pinyin":"zhong1 guo2","meaning":["China"]}]},{"term":"部分","dict":[{"traditional":"部分","simplified":"部分","pinyin":"bu4 fen5","meaning":["part","share","section","piece","CL:個|个[ge4]"]}]},{"term":"工作","dict":[{"traditional":"工作","simplified":"工作","pinyin":"gong1 zuo4","meaning":["to work","(of a machine) to operate","job","work","task","CL:個|个[ge4],份[fen4],項|项[xiang4]"]}]},{"term":","},{"term":"在此","dict":[{"traditional":"在此","simplified":"在此","pinyin":"zai4 ci3","meaning":["hereto","here"]}]},{"term":"基础","dict":[{"traditional":"基礎","simplified":"基础","pinyin":"ji1 chu3","meaning":["base","foundation","basis","underlying","CL:個|个[ge4]"]}]},{"term":"上","dict":[{"traditional":"上","simplified":"上","pinyin":"shang3","meaning":["see 上聲|上声[shang3 sheng1]"]},{"traditional":"上","simplified":"上","pinyin":"shang4","meaning":["on top","upon","above","upper","previous","first (of multiple parts)","to climb","to get onto","to go up","to attend (class or university)"]}]},{"term":"撰写","dict":[{"traditional":"撰寫","simplified":"撰写","pinyin":"zhuan4 xie3","meaning":["to write","to compose"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"研究","dict":[{"traditional":"研究","simplified":"研究","pinyin":"yan2 jiu1","meaning":["research","a study","CL:項|项[xiang4]","to research","to look into"]}]},{"term":"报告","dict":[{"traditional":"報告","simplified":"报告","pinyin":"bao4 gao4","meaning":["to inform","to report","to make known","report","speech","talk","lecture","CL:篇[pian1],份[fen4],個|个[ge4],通[tong4]"]}]},{"term":"。"},{"term":"联合","dict":[{"traditional":"聯合","simplified":"联合","pinyin":"lian2 he2","meaning":["to combine","to join","unite","alliance"]}]},{"term":"专家","dict":[{"traditional":"專家","simplified":"专家","pinyin":"zhuan1 jia1","meaning":["expert","specialist","CL:個|个[ge4]"]}]},{"term":"组","dict":[{"traditional":"組","simplified":"组","pinyin":"zu3","meaning":["surname Zu"]},{"traditional":"組","simplified":"组","pinyin":"zu3","meaning":["to form","to organize","group","team","classifier for sets, series, groups of people, batteries"]}]},{"term":"评估","dict":[{"traditional":"評估","simplified":"评估","pinyin":"ping2 gu1","meaning":["to evaluate","to assess","assessment","evaluation"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"关于","dict":[{"traditional":"關於","simplified":"关于","pinyin":"guan1 yu2","meaning":["pertaining to","concerning","with regard to","about","a matter of"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"引入","dict":[{"traditional":"引入","simplified":"引入","pinyin":"yin3 ru4","meaning":["to draw into","to pull into","to introduce"]}]},{"term":"人类","dict":[{"traditional":"人類","simplified":"人类","pinyin":"ren2 lei4","meaning":["humanity","human race","mankind"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"4"},{"term":"个","dict":[{"traditional":"個","simplified":"个","pinyin":"ge4","meaning":["individual","this","that","size","classifier for people or objects in general"]},{"traditional":"箇","simplified":"个","pinyin":"ge4","meaning":["variant of 個|个[ge4]"]}]},{"term":"路径","dict":[{"traditional":"路徑","simplified":"路径","pinyin":"lu4 jing4","meaning":["path","route","method","ways and means"]}]},{"term":","},{"term":"认为","dict":[{"traditional":"認為","simplified":"认为","pinyin":"ren4 wei2","meaning":["to believe","to think","to consider","to feel"]}]},{"term":"新冠","dict":[{"traditional":"新冠","simplified":"新冠","pinyin":"xin1 guan1","meaning":["novel coronavirus (abbr. for 新型冠狀病毒|新型冠状病毒[xin1 xing2 guan1 zhuang4 bing4 du2]) (esp. SARS-CoV-2, the virus causing COVID-19)"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"“"},{"term":"比较","dict":[{"traditional":"比較","simplified":"比较","pinyin":"bi3 jiao4","meaning":["to compare","to contrast","comparatively","relatively","quite","comparison"]}]},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"至","dict":[{"traditional":"至","simplified":"至","pinyin":"zhi4","meaning":["to arrive","most","to","until"]}]},{"term":"非常","dict":[{"traditional":"非常","simplified":"非常","pinyin":"fei1 chang2","meaning":["very","very much","unusual","extraordinary"]}]},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"”"},{"term":"经","dict":[{"traditional":"經","simplified":"经","pinyin":"jing1","meaning":["surname Jing"]},{"traditional":"經","simplified":"经","pinyin":"jing1","meaning":["classics","sacred book","scripture","to pass through","to undergo","to bear","to endure","warp (textile)","longitude","menstruation","channel (TCM)","abbr. for economics 經濟|经济[jing1 ji4]"]}]},{"term":"中间","dict":[{"traditional":"中間","simplified":"中间","pinyin":"zhong1 jian1","meaning":["between","intermediate","mid","middle"]}]},{"term":"宿主","dict":[{"traditional":"宿主","simplified":"宿主","pinyin":"su4 zhu3","meaning":["host"]}]},{"term":"传人","dict":[{"traditional":"傳人","simplified":"传人","pinyin":"chuan2 ren2","meaning":["to teach","to impart","a disciple","descendant"]}]},{"term":","},{"term":"“"},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"至","dict":[{"traditional":"至","simplified":"至","pinyin":"zhi4","meaning":["to arrive","most","to","until"]}]},{"term":"比较","dict":[{"traditional":"比較","simplified":"比较","pinyin":"bi3 jiao4","meaning":["to compare","to contrast","comparatively","relatively","quite","comparison"]}]},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"”"},{"term":"直接","dict":[{"traditional":"直接","simplified":"直接","pinyin":"zhi2 jie1","meaning":["direct (opposite: indirect 間接|间接[jian4 jie1])","immediate","straightforward"]}]},{"term":"传人","dict":[{"traditional":"傳人","simplified":"传人","pinyin":"chuan2 ren2","meaning":["to teach","to impart","a disciple","descendant"]}]},{"term":","},{"term":"“"},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"”"},{"term":"通过","dict":[{"traditional":"通過","simplified":"通过","pinyin":"tong1 guo4","meaning":["by means of","through","via","to pass through","to get through","to adopt","to pass (a bill or inspection etc)","to switch over"]}]},{"term":"冷","dict":[{"traditional":"冷","simplified":"冷","pinyin":"leng3","meaning":["surname Leng"]},{"traditional":"冷","simplified":"冷","pinyin":"leng3","meaning":["cold"]}]},{"term":"链","dict":[{"traditional":"鏈","simplified":"链","pinyin":"lian4","meaning":["chain","cable (unit of length: 100 fathoms, about 185 m)","chain (unit of length: 66 feet, about 20 m)","to chain","to enchain"]}]},{"term":"食品","dict":[{"traditional":"食品","simplified":"食品","pinyin":"shi2 pin3","meaning":["foodstuff","food","provisions","CL:種|种[zhong3]"]}]},{"term":"传人","dict":[{"traditional":"傳人","simplified":"传人","pinyin":"chuan2 ren2","meaning":["to teach","to impart","a disciple","descendant"]}]},{"term":","},{"term":"“"},{"term":"极","dict":[{"traditional":"極","simplified":"极","pinyin":"ji2","meaning":["extremely","pole (geography, physics)","utmost","top"]}]},{"term":"不可能","dict":[{"traditional":"不可能","simplified":"不可能","pinyin":"bu4 ke3 neng2","meaning":["impossible","cannot","not able"]}]},{"term":"”"},{"term":"通过","dict":[{"traditional":"通過","simplified":"通过","pinyin":"tong1 guo4","meaning":["by means of","through","via","to pass through","to get through","to adopt","to pass (a bill or inspection etc)","to switch over"]}]},{"term":"实验室","dict":[{"traditional":"實驗室","simplified":"实验室","pinyin":"shi2 yan4 shi4","meaning":["laboratory","CL:間|间[jian1]"]}]},{"term":"传人","dict":[{"traditional":"傳人","simplified":"传人","pinyin":"chuan2 ren2","meaning":["to teach","to impart","a disciple","descendant"]}]},{"term":"。"},{"term":"报告","dict":[{"traditional":"報告","simplified":"报告","pinyin":"bao4 gao4","meaning":["to inform","to report","to make known","report","speech","talk","lecture","CL:篇[pian1],份[fen4],個|个[ge4],通[tong4]"]}]},{"term":"提出","dict":[{"traditional":"提出","simplified":"提出","pinyin":"ti2 chu1","meaning":["to raise (an issue)","to propose","to put forward","to suggest","to post (on a website)","to withdraw (cash)"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"联合","dict":[{"traditional":"聯合","simplified":"联合","pinyin":"lian2 he2","meaning":["to combine","to join","unite","alliance"]}]},{"term":"专家","dict":[{"traditional":"專家","simplified":"专家","pinyin":"zhuan1 jia1","meaning":["expert","specialist","CL:個|个[ge4]"]}]},{"term":"组","dict":[{"traditional":"組","simplified":"组","pinyin":"zu3","meaning":["surname Zu"]},{"traditional":"組","simplified":"组","pinyin":"zu3","meaning":["to form","to organize","group","team","classifier for sets, series, groups of people, batteries"]}]},{"term":"下","dict":[{"traditional":"下","simplified":"下","pinyin":"xia4","meaning":["down","downwards","below","lower","later","next (week etc)","second (of two parts)","to decline","to go down","to arrive at (a decision, conclusion etc)","measure word to show the frequency of an action"]}]},{"term":"步","dict":[{"traditional":"步","simplified":"步","pinyin":"bu4","meaning":["surname Bu"]},{"traditional":"步","simplified":"步","pinyin":"bu4","meaning":["a step","a pace","walk","march","stages in a process","situation"]}]},{"term":"研究","dict":[{"traditional":"研究","simplified":"研究","pinyin":"yan2 jiu1","meaning":["research","a study","CL:項|项[xiang4]","to research","to look into"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"建议","dict":[{"traditional":"建議","simplified":"建议","pinyin":"jian4 yi4","meaning":["to propose","to suggest","to recommend","proposal","suggestion","recommendation","CL:個|个[ge4],點|点[dian3]"]}]},{"term":","},{"term":"包括","dict":[{"traditional":"包括","simplified":"包括","pinyin":"bao1 kuo4","meaning":["to comprise","to include","to involve","to incorporate","to consist of"]}]},{"term":"建立","dict":[{"traditional":"建立","simplified":"建立","pinyin":"jian4 li4","meaning":["to establish","to set up","to found"]}]},{"term":"全球","dict":[{"traditional":"全球","simplified":"全球","pinyin":"quan2 qiu2","meaning":["entire","total","global","the (whole) world","worldwide"]}]},{"term":"统一","dict":[{"traditional":"統一","simplified":"统一","pinyin":"tong3 yi1","meaning":["to unify","to unite","to integrate"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"数据库","dict":[{"traditional":"數據庫","simplified":"数据库","pinyin":"shu4 ju4 ku4","meaning":["database"]}]},{"term":","},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"全球","dict":[{"traditional":"全球","simplified":"全球","pinyin":"quan2 qiu2","meaning":["entire","total","global","the (whole) world","worldwide"]}]},{"term":"更","dict":[{"traditional":"更","simplified":"更","pinyin":"geng1","meaning":["to change or replace","to experience","one of the five two-hour periods into which the night was formerly divided","watch (e.g. of a sentry or guard)"]},{"traditional":"更","simplified":"更","pinyin":"geng4","meaning":["more","even more","further","still","still more"]}]},{"term":"广","dict":[{"traditional":"广","simplified":"广","pinyin":"yan3","meaning":["\"house on a cliff\" radical in Chinese characters (Kangxi radical 53), occurring in 店, 序, 底 etc"]}]},{"term":"范围","dict":[{"traditional":"範圍","simplified":"范围","pinyin":"fan4 wei2","meaning":["range","scope","limit","extent","CL:個|个[ge4]"]}]},{"term":"内","dict":[{"traditional":"內","simplified":"内","pinyin":"nei4","meaning":["inside","inner","internal","within","interior"]}]},{"term":"继续","dict":[{"traditional":"繼續","simplified":"继续","pinyin":"ji4 xu4","meaning":["to continue","to proceed with","to go on with"]}]},{"term":"寻找","dict":[{"traditional":"尋找","simplified":"寻找","pinyin":"xun2 zhao3","meaning":["to seek","to look for"]}]},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"早期","dict":[{"traditional":"早期","simplified":"早期","pinyin":"zao3 qi1","meaning":["early period","early phase","early stage"]}]},{"term":"病例","dict":[{"traditional":"病例","simplified":"病例","pinyin":"bing4 li4","meaning":["(medical) case","occurrence of illness"]}]},{"term":","},{"term":"由","dict":[{"traditional":"由","simplified":"由","pinyin":"you2","meaning":["to follow","from","because of","due to","by","via","through","(before a noun and a verb) it is for ... to ..."]}]},{"term":"全球","dict":[{"traditional":"全球","simplified":"全球","pinyin":"quan2 qiu2","meaning":["entire","total","global","the (whole) world","worldwide"]}]},{"term":"科学家","dict":[{"traditional":"科學家","simplified":"科学家","pinyin":"ke1 xue2 jia1","meaning":["scientist","CL:個|个[ge4]"]}]},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"多国","dict":[{"traditional":"多國","simplified":"多国","pinyin":"duo1 guo2","meaning":["multinational"]}]},{"term":"多","dict":[{"traditional":"多","simplified":"多","pinyin":"duo1","meaning":["many","much","often","a lot of","numerous","more","in excess","how (to what extent)","multi-","Taiwan pr. [duo2] when it means \"how\""]}]},{"term":"地","dict":[{"traditional":"地","simplified":"地","pinyin":"de5","meaning":["-ly","structural particle: used before a verb or adjective, linking it to preceding modifying adverbial adjunct"]},{"traditional":"地","simplified":"地","pinyin":"di4","meaning":["earth","ground","field","place","land","CL:片[pian4]"]}]},{"term":"寻找","dict":[{"traditional":"尋找","simplified":"寻找","pinyin":"xun2 zhao3","meaning":["to seek","to look for"]}]},{"term":"可能","dict":[{"traditional":"可能","simplified":"可能","pinyin":"ke3 neng2","meaning":["might (happen)","possible","probable","possibility","probability","maybe","perhaps","CL:個|个[ge4]"]}]},{"term":"成为","dict":[{"traditional":"成為","simplified":"成为","pinyin":"cheng2 wei2","meaning":["to become","to turn into"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"宿主","dict":[{"traditional":"宿主","simplified":"宿主","pinyin":"su4 zhu3","meaning":["host"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"动物","dict":[{"traditional":"動物","simplified":"动物","pinyin":"dong4 wu4","meaning":["animal","CL:隻|只[zhi1],群[qun2],個|个[ge4]"]}]},{"term":"物种","dict":[{"traditional":"物種","simplified":"物种","pinyin":"wu4 zhong3","meaning":["species"]}]},{"term":","},{"term":"进","dict":[{"traditional":"進","simplified":"进","pinyin":"jin4","meaning":["to go forward","to advance","to go in","to enter","to put in","to submit","to take in","to admit","(math.) base of a number system","classifier for sections in a building or residential compound"]}]},{"term":"一","dict":[{"traditional":"一","simplified":"一","pinyin":"yi1","meaning":["one","1","single","a (article)","as soon as","entire","whole","all","throughout","\"one\" radical in Chinese characters (Kangxi radical 1)","also pr. [yao1] for greater clarity when spelling out numbers digit by digit"]}]},{"term":"步","dict":[{"traditional":"步","simplified":"步","pinyin":"bu4","meaning":["surname Bu"]},{"traditional":"步","simplified":"步","pinyin":"bu4","meaning":["a step","a pace","walk","march","stages in a process","situation"]}]},{"term":"了解","dict":[{"traditional":"了解","simplified":"了解","pinyin":"liao3 jie3","meaning":["to understand","to realize","to find out"]}]},{"term":"冷","dict":[{"traditional":"冷","simplified":"冷","pinyin":"leng3","meaning":["surname Leng"]},{"traditional":"冷","simplified":"冷","pinyin":"leng3","meaning":["cold"]}]},{"term":"链","dict":[{"traditional":"鏈","simplified":"链","pinyin":"lian4","meaning":["chain","cable (unit of length: 100 fathoms, about 185 m)","chain (unit of length: 66 feet, about 20 m)","to chain","to enchain"]}]},{"term":"和","dict":[{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["surname He","Japanese (food, clothes etc)"]},{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["and","together with","with","sum","union","peace","harmony","Taiwan pr. [han4] when it means \"and\" or \"with\""]},{"traditional":"和","simplified":"和","pinyin":"he4","meaning":["to compose a poem in reply (to sb's poem) using the same rhyme sequence","to join in the singing","to chime in with others"]},{"traditional":"和","simplified":"和","pinyin":"hu2","meaning":["to complete a set in mahjong or playing cards"]},{"traditional":"和","simplified":"和","pinyin":"huo2","meaning":["to combine a powdery substance (flour, plaster etc) with water","Taiwan pr. [huo4]"]},{"traditional":"和","simplified":"和","pinyin":"huo4","meaning":["to mix (ingredients) together","to blend","classifier for rinses of clothes","classifier for boilings of medicinal herbs"]}]},{"term":"冷冻","dict":[{"traditional":"冷凍","simplified":"冷冻","pinyin":"leng3 dong4","meaning":["to freeze","to deep-freeze"]}]},{"term":"食品","dict":[{"traditional":"食品","simplified":"食品","pinyin":"shi2 pin3","meaning":["foodstuff","food","provisions","CL:種|种[zhong3]"]}]},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"病毒","dict":[{"traditional":"病毒","simplified":"病毒","pinyin":"bing4 du2","meaning":["virus"]}]},{"term":"传播","dict":[{"traditional":"傳播","simplified":"传播","pinyin":"chuan2 bo1","meaning":["to disseminate","to propagate","to spread"]}]},{"term":"过程","dict":[{"traditional":"過程","simplified":"过程","pinyin":"guo4 cheng2","meaning":["course of events","process","CL:個|个[ge4]"]}]},{"term":"中的","dict":[{"traditional":"中的","simplified":"中的","pinyin":"zhong4 di4","meaning":["to hit the target","to hit the nail on the head"]}]},{"term":"作用","dict":[{"traditional":"作用","simplified":"作用","pinyin":"zuo4 yong4","meaning":["to act on","to affect","action","function","activity","impact","result","effect","purpose","intent","to play a role","corresponds to English -ity, -ism, -ization","CL:個|个[ge4]"]}]},{"term":"等","dict":[{"traditional":"等","simplified":"等","pinyin":"deng3","meaning":["class","rank","grade","equal to","same as","to wait for","to await","et cetera","and so on","et al. (and other authors)","after","as soon as","once"]}]},{"term":"。"},{"term":"\n"},{"term":"\n"},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"搁浅","dict":[{"traditional":"擱淺","simplified":"搁浅","pinyin":"ge1 qian3","meaning":["to be stranded (of ship)","to run aground","fig. to run into difficulties and stop"]}]},{"term":"6"},{"term":"天","dict":[{"traditional":"天","simplified":"天","pinyin":"tian1","meaning":["day","sky","heaven"]}]},{"term":"终于","dict":[{"traditional":"終於","simplified":"终于","pinyin":"zhong1 yu2","meaning":["at last","in the end","finally","eventually"]}]},{"term":"脱","dict":[{"traditional":"脫","simplified":"脱","pinyin":"tuo1","meaning":["to shed","to take off","to escape","to get away from"]}]},{"term":"困","dict":[{"traditional":"困","simplified":"困","pinyin":"kun4","meaning":["to trap","to surround","hard-pressed","stranded","destitute"]}]},{"term":" "},{"term":"苏","dict":[{"traditional":"囌","simplified":"苏","pinyin":"su1","meaning":["see 囉囌|啰苏[luo1 su1]"]},{"traditional":"甦","simplified":"苏","pinyin":"su1","meaning":["variant of 蘇|苏[su1]","to revive"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["surname Su","abbr. for Soviet Union 蘇維埃|苏维埃 or 蘇聯|苏联","abbr. for Jiangsu province 江蘇|江苏","abbr. for Suzhou city 蘇州|苏州"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["Perilla frutescens (Chinese basil or wild red basil)","place name","to revive","used as phonetic in transliteration"]},{"traditional":"蘓","simplified":"苏","pinyin":"su1","meaning":["old variant of 蘇|苏[su1]"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"士","dict":[{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["surname Shi"]},{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["member of the senior ministerial class (old)","scholar (old)","bachelor","honorific","soldier","noncommissioned officer","specialist worker"]}]},{"term":"运河","dict":[{"traditional":"運河","simplified":"运河","pinyin":"yun4 he2","meaning":["canal"]}]},{"term":"恢复","dict":[{"traditional":"恢復","simplified":"恢复","pinyin":"hui1 fu4","meaning":["to reinstate","to resume","to restore","to recover","to regain","to rehabilitate"]}]},{"term":"通航","dict":[{"traditional":"通航","simplified":"通航","pinyin":"tong1 hang2","meaning":["connected by air, sea traffic or service"]}]},{"term":"\n"},{"term":"苏","dict":[{"traditional":"囌","simplified":"苏","pinyin":"su1","meaning":["see 囉囌|啰苏[luo1 su1]"]},{"traditional":"甦","simplified":"苏","pinyin":"su1","meaning":["variant of 蘇|苏[su1]","to revive"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["surname Su","abbr. for Soviet Union 蘇維埃|苏维埃 or 蘇聯|苏联","abbr. for Jiangsu province 江蘇|江苏","abbr. for Suzhou city 蘇州|苏州"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["Perilla frutescens (Chinese basil or wild red basil)","place name","to revive","used as phonetic in transliteration"]},{"traditional":"蘓","simplified":"苏","pinyin":"su1","meaning":["old variant of 蘇|苏[su1]"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"士","dict":[{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["surname Shi"]},{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["member of the senior ministerial class (old)","scholar (old)","bachelor","honorific","soldier","noncommissioned officer","specialist worker"]}]},{"term":"运河","dict":[{"traditional":"運河","simplified":"运河","pinyin":"yun4 he2","meaning":["canal"]}]},{"term":"因","dict":[{"traditional":"因","simplified":"因","pinyin":"yin1","meaning":["cause","reason","because"]}]},{"term":"“"},{"term":"长","dict":[{"traditional":"長","simplified":"长","pinyin":"chang2","meaning":["length","long","forever","always","constantly"]},{"traditional":"長","simplified":"长","pinyin":"zhang3","meaning":["chief","head","elder","to grow","to develop","to increase","to enhance"]}]},{"term":"赐","dict":[{"traditional":"賜","simplified":"赐","pinyin":"ci4","meaning":["to confer","to bestow","to grant"]}]},{"term":"”"},{"term":"号","dict":[{"traditional":"號","simplified":"号","pinyin":"hao2","meaning":["roar","cry","CL:個|个[ge4]"]},{"traditional":"號","simplified":"号","pinyin":"hao4","meaning":["ordinal number","day of a month","mark","sign","business establishment","size","ship suffix","horn (wind instrument)","bugle call","assumed name","to take a pulse","classifier used to indicate number of people"]}]},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"搁浅","dict":[{"traditional":"擱淺","simplified":"搁浅","pinyin":"ge1 qian3","meaning":["to be stranded (of ship)","to run aground","fig. to run into difficulties and stop"]}]},{"term":"被","dict":[{"traditional":"被","simplified":"被","pinyin":"bei4","meaning":["quilt","by","(indicates passive-voice clauses)","(literary) to cover","to meet with","(coll.) (since c. 2009) used before a verb that does not accurately represent what actually happened, to describe with black humor how sb or sth was dealt with by the authorities (as in 被自殺|被自杀[bei4 zi4 sha1])"]}]},{"term":"堵","dict":[{"traditional":"堵","simplified":"堵","pinyin":"du3","meaning":["to block up (a road, pipe etc)","to stop up (a hole)","(fig.) (of a person) choked up with anxiety or stress","wall (literary)","(classifier for walls)"]}]},{"term":"多","dict":[{"traditional":"多","simplified":"多","pinyin":"duo1","meaning":["many","much","often","a lot of","numerous","more","in excess","how (to what extent)","multi-","Taiwan pr. [duo2] when it means \"how\""]}]},{"term":"日","dict":[{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["abbr. for 日本[Ri4 ben3], Japan"]},{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["sun","day","date, day of the month"]}]},{"term":","},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"解","dict":[{"traditional":"解","simplified":"解","pinyin":"xie4","meaning":["surname Xie"]},{"traditional":"解","simplified":"解","pinyin":"jie3","meaning":["to divide","to break up","to split","to separate","to dissolve","to solve","to melt","to remove","to untie","to loosen","to open","to emancipate","to explain","to understand","to know","a solution","a dissection"]},{"traditional":"解","simplified":"解","pinyin":"jie4","meaning":["to transport under guard"]},{"traditional":"解","simplified":"解","pinyin":"xie4","meaning":["acrobatic display (esp. on horseback) (old)","variant of 懈[xie4] and 邂[xie4] (old)"]}]},{"term":"困","dict":[{"traditional":"困","simplified":"困","pinyin":"kun4","meaning":["to trap","to surround","hard-pressed","stranded","destitute"]}]},{"term":"进展","dict":[{"traditional":"進展","simplified":"进展","pinyin":"jin4 zhan3","meaning":["to make headway","to make progress"]}]},{"term":"牵动","dict":[{"traditional":"牽動","simplified":"牵动","pinyin":"qian1 dong4","meaning":["to affect","to produce a change in sth"]}]},{"term":"全球","dict":[{"traditional":"全球","simplified":"全球","pinyin":"quan2 qiu2","meaning":["entire","total","global","the (whole) world","worldwide"]}]},{"term":"目光","dict":[{"traditional":"目光","simplified":"目光","pinyin":"mu4 guang1","meaning":["sight","vision","view","gaze","look"]}]},{"term":"。"},{"term":"经过","dict":[{"traditional":"經過","simplified":"经过","pinyin":"jing1 guo4","meaning":["to pass","to go through","process","course","CL:個|个[ge4]"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"长达","dict":[{"traditional":"長達","simplified":"长达","pinyin":"chang2 da2","meaning":["to extend as long as","to lengthen out to"]}]},{"term":"一周","dict":[{"traditional":"一周","simplified":"一周","pinyin":"yi1 zhou1","meaning":["one week","all the way around","a whole cycle"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"救援","dict":[{"traditional":"救援","simplified":"救援","pinyin":"jiu4 yuan2","meaning":["to save","to support","to help","to assist"]}]},{"term":","},{"term":"当地","dict":[{"traditional":"當地","simplified":"当地","pinyin":"dang1 di4","meaning":["local"]}]},{"term":"时间","dict":[{"traditional":"時間","simplified":"时间","pinyin":"shi2 jian1","meaning":["time","period","CL:段[duan4]"]}]},{"term":"3"},{"term":"月","dict":[{"traditional":"月","simplified":"月","pinyin":"yue4","meaning":["moon","month","monthly","CL:個|个[ge4],輪|轮[lun2]"]}]},{"term":"2"},{"term":"9"},{"term":"日","dict":[{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["abbr. for 日本[Ri4 ben3], Japan"]},{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["sun","day","date, day of the month"]}]},{"term":"搁浅","dict":[{"traditional":"擱淺","simplified":"搁浅","pinyin":"ge1 qian3","meaning":["to be stranded (of ship)","to run aground","fig. to run into difficulties and stop"]}]},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"已经","dict":[{"traditional":"已經","simplified":"已经","pinyin":"yi3 jing1","meaning":["already"]}]},{"term":"完全","dict":[{"traditional":"完全","simplified":"完全","pinyin":"wan2 quan2","meaning":["complete","whole","totally","entirely"]}]},{"term":"脱","dict":[{"traditional":"脫","simplified":"脱","pinyin":"tuo1","meaning":["to shed","to take off","to escape","to get away from"]}]},{"term":"困","dict":[{"traditional":"困","simplified":"困","pinyin":"kun4","meaning":["to trap","to surround","hard-pressed","stranded","destitute"]}]},{"term":","},{"term":"苏","dict":[{"traditional":"囌","simplified":"苏","pinyin":"su1","meaning":["see 囉囌|啰苏[luo1 su1]"]},{"traditional":"甦","simplified":"苏","pinyin":"su1","meaning":["variant of 蘇|苏[su1]","to revive"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["surname Su","abbr. for Soviet Union 蘇維埃|苏维埃 or 蘇聯|苏联","abbr. for Jiangsu province 江蘇|江苏","abbr. for Suzhou city 蘇州|苏州"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["Perilla frutescens (Chinese basil or wild red basil)","place name","to revive","used as phonetic in transliteration"]},{"traditional":"蘓","simplified":"苏","pinyin":"su1","meaning":["old variant of 蘇|苏[su1]"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"士","dict":[{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["surname Shi"]},{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["member of the senior ministerial class (old)","scholar (old)","bachelor","honorific","soldier","noncommissioned officer","specialist worker"]}]},{"term":"运河","dict":[{"traditional":"運河","simplified":"运河","pinyin":"yun4 he2","meaning":["canal"]}]},{"term":"恢复","dict":[{"traditional":"恢復","simplified":"恢复","pinyin":"hui1 fu4","meaning":["to reinstate","to resume","to restore","to recover","to regain","to rehabilitate"]}]},{"term":"通航","dict":[{"traditional":"通航","simplified":"通航","pinyin":"tong1 hang2","meaning":["connected by air, sea traffic or service"]}]},{"term":"。"},{"term":"当地","dict":[{"traditional":"當地","simplified":"当地","pinyin":"dang1 di4","meaning":["local"]}]},{"term":"时间","dict":[{"traditional":"時間","simplified":"时间","pinyin":"shi2 jian1","meaning":["time","period","CL:段[duan4]"]}]},{"term":"3"},{"term":"月","dict":[{"traditional":"月","simplified":"月","pinyin":"yue4","meaning":["moon","month","monthly","CL:個|个[ge4],輪|轮[lun2]"]}]},{"term":"2"},{"term":"9"},{"term":"日","dict":[{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["abbr. for 日本[Ri4 ben3], Japan"]},{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["sun","day","date, day of the month"]}]},{"term":","},{"term":"救援队","dict":[{"traditional":"救援隊","simplified":"救援队","pinyin":"jiu4 yuan2 dui4","meaning":["rescue team"]}]},{"term":"成功","dict":[{"traditional":"成功","simplified":"成功","pinyin":"cheng2 gong1","meaning":["Chenggong or Chengkung town in Taitung County 臺東縣|台东县[Tai2 dong1 Xian4], southeast Taiwan"]},{"traditional":"成功","simplified":"成功","pinyin":"cheng2 gong1","meaning":["success","to succeed","CL:次[ci4],個|个[ge4]"]}]},{"term":"让","dict":[{"traditional":"讓","simplified":"让","pinyin":"rang4","meaning":["to yield","to permit","to let sb do sth","to have sb do sth","to make sb (feel sad etc)","by (indicates the agent in a passive clause, like 被[bei4])"]}]},{"term":"搁浅","dict":[{"traditional":"擱淺","simplified":"搁浅","pinyin":"ge1 qian3","meaning":["to be stranded (of ship)","to run aground","fig. to run into difficulties and stop"]}]},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"苏","dict":[{"traditional":"囌","simplified":"苏","pinyin":"su1","meaning":["see 囉囌|啰苏[luo1 su1]"]},{"traditional":"甦","simplified":"苏","pinyin":"su1","meaning":["variant of 蘇|苏[su1]","to revive"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["surname Su","abbr. for Soviet Union 蘇維埃|苏维埃 or 蘇聯|苏联","abbr. for Jiangsu province 江蘇|江苏","abbr. for Suzhou city 蘇州|苏州"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["Perilla frutescens (Chinese basil or wild red basil)","place name","to revive","used as phonetic in transliteration"]},{"traditional":"蘓","simplified":"苏","pinyin":"su1","meaning":["old variant of 蘇|苏[su1]"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"士","dict":[{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["surname Shi"]},{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["member of the senior ministerial class (old)","scholar (old)","bachelor","honorific","soldier","noncommissioned officer","specialist worker"]}]},{"term":"运河","dict":[{"traditional":"運河","simplified":"运河","pinyin":"yun4 he2","meaning":["canal"]}]},{"term":"长达","dict":[{"traditional":"長達","simplified":"长达","pinyin":"chang2 da2","meaning":["to extend as long as","to lengthen out to"]}]},{"term":"一周","dict":[{"traditional":"一周","simplified":"一周","pinyin":"yi1 zhou1","meaning":["one week","all the way around","a whole cycle"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"巨型","dict":[{"traditional":"巨型","simplified":"巨型","pinyin":"ju4 xing2","meaning":["giant","enormous"]}]},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"脱","dict":[{"traditional":"脫","simplified":"脱","pinyin":"tuo1","meaning":["to shed","to take off","to escape","to get away from"]}]},{"term":"困","dict":[{"traditional":"困","simplified":"困","pinyin":"kun4","meaning":["to trap","to surround","hard-pressed","stranded","destitute"]}]},{"term":"。"},{"term":"过去","dict":[{"traditional":"過去","simplified":"过去","pinyin":"guo4 qu4","meaning":["(in the) past","former","previous","to go over","to pass by"]},{"traditional":"過去","simplified":"过去","pinyin":"guo4 qu5","meaning":["(verb suffix)"]}]},{"term":"7"},{"term":"天","dict":[{"traditional":"天","simplified":"天","pinyin":"tian1","meaning":["day","sky","heaven"]}]},{"term":"这","dict":[{"traditional":"這","simplified":"这","pinyin":"zhe4","meaning":["this","these","(commonly pr. [zhei4] before a classifier, esp. in Beijing)"]}]},{"term":"艘","dict":[{"traditional":"艘","simplified":"艘","pinyin":"sou1","meaning":["classifier for ships","Taiwan pr. [sao1]"]}]},{"term":"搁浅","dict":[{"traditional":"擱淺","simplified":"搁浅","pinyin":"ge1 qian3","meaning":["to be stranded (of ship)","to run aground","fig. to run into difficulties and stop"]}]},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"阻止","dict":[{"traditional":"阻止","simplified":"阻止","pinyin":"zu3 zhi3","meaning":["to prevent","to block"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"价值","dict":[{"traditional":"價值","simplified":"价值","pinyin":"jia4 zhi2","meaning":["value","worth","fig. values (ethical, cultural etc)","CL:個|个[ge4]"]}]},{"term":"数","dict":[{"traditional":"數","simplified":"数","pinyin":"shu3","meaning":["to count","to count as","to regard as","to enumerate (sb's shortcomings)"]},{"traditional":"數","simplified":"数","pinyin":"shu4","meaning":["number","figure","several","CL:個|个[ge4]"]},{"traditional":"數","simplified":"数","pinyin":"shuo4","meaning":["frequently","repeatedly"]}]},{"term":"十亿","dict":[{"traditional":"十億","simplified":"十亿","pinyin":"shi2 yi4","meaning":["one billion","giga-"]}]},{"term":"美元","dict":[{"traditional":"美元","simplified":"美元","pinyin":"mei3 yuan2","meaning":["American dollar","US dollar"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"货物","dict":[{"traditional":"貨物","simplified":"货物","pinyin":"huo4 wu4","meaning":["goods","commodity","merchandise","CL:宗[zong1]"]}]},{"term":"通过","dict":[{"traditional":"通過","simplified":"通过","pinyin":"tong1 guo4","meaning":["by means of","through","via","to pass through","to get through","to adopt","to pass (a bill or inspection etc)","to switch over"]}]},{"term":"苏","dict":[{"traditional":"囌","simplified":"苏","pinyin":"su1","meaning":["see 囉囌|啰苏[luo1 su1]"]},{"traditional":"甦","simplified":"苏","pinyin":"su1","meaning":["variant of 蘇|苏[su1]","to revive"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["surname Su","abbr. for Soviet Union 蘇維埃|苏维埃 or 蘇聯|苏联","abbr. for Jiangsu province 江蘇|江苏","abbr. for Suzhou city 蘇州|苏州"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["Perilla frutescens (Chinese basil or wild red basil)","place name","to revive","used as phonetic in transliteration"]},{"traditional":"蘓","simplified":"苏","pinyin":"su1","meaning":["old variant of 蘇|苏[su1]"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"士","dict":[{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["surname Shi"]},{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["member of the senior ministerial class (old)","scholar (old)","bachelor","honorific","soldier","noncommissioned officer","specialist worker"]}]},{"term":"运河","dict":[{"traditional":"運河","simplified":"运河","pinyin":"yun4 he2","meaning":["canal"]}]},{"term":"。"},{"term":"苏","dict":[{"traditional":"囌","simplified":"苏","pinyin":"su1","meaning":["see 囉囌|啰苏[luo1 su1]"]},{"traditional":"甦","simplified":"苏","pinyin":"su1","meaning":["variant of 蘇|苏[su1]","to revive"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["surname Su","abbr. for Soviet Union 蘇維埃|苏维埃 or 蘇聯|苏联","abbr. for Jiangsu province 江蘇|江苏","abbr. for Suzhou city 蘇州|苏州"]},{"traditional":"蘇","simplified":"苏","pinyin":"su1","meaning":["Perilla frutescens (Chinese basil or wild red basil)","place name","to revive","used as phonetic in transliteration"]},{"traditional":"蘓","simplified":"苏","pinyin":"su1","meaning":["old variant of 蘇|苏[su1]"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"士","dict":[{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["surname Shi"]},{"traditional":"士","simplified":"士","pinyin":"shi4","meaning":["member of the senior ministerial class (old)","scholar (old)","bachelor","honorific","soldier","noncommissioned officer","specialist worker"]}]},{"term":"运河","dict":[{"traditional":"運河","simplified":"运河","pinyin":"yun4 he2","meaning":["canal"]}]},{"term":"是","dict":[{"traditional":"是","simplified":"是","pinyin":"shi4","meaning":["is","are","am","yes","to be"]}]},{"term":"世界","dict":[{"traditional":"世界","simplified":"世界","pinyin":"shi4 jie4","meaning":["world","CL:個|个[ge4]"]}]},{"term":"上","dict":[{"traditional":"上","simplified":"上","pinyin":"shang3","meaning":["see 上聲|上声[shang3 sheng1]"]},{"traditional":"上","simplified":"上","pinyin":"shang4","meaning":["on top","upon","above","upper","previous","first (of multiple parts)","to climb","to get onto","to go up","to attend (class or university)"]}]},{"term":"最","dict":[{"traditional":"最","simplified":"最","pinyin":"zui4","meaning":["most","the most","-est (superlative suffix)"]}]},{"term":"繁忙","dict":[{"traditional":"繁忙","simplified":"繁忙","pinyin":"fan2 mang2","meaning":["busy","bustling"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"海运","dict":[{"traditional":"海運","simplified":"海运","pinyin":"hai3 yun4","meaning":["shipping by sea"]}]},{"term":"通道","dict":[{"traditional":"通道","simplified":"通道","pinyin":"tong1 dao4","meaning":["Tongdao Dong autonomous county in Huaihua 懷化|怀化[Huai2 hua4], Hunan"]},{"traditional":"通道","simplified":"通道","pinyin":"tong1 dao4","meaning":["(communications) channel","thoroughfare","passage"]}]},{"term":"之一","dict":[{"traditional":"之一","simplified":"之一","pinyin":"zhi1 yi1","meaning":["one of (sth)","one out of a multitude","one (third, quarter, percent etc)"]}]},{"term":"。"},{"term":"受雇","dict":[{"traditional":"受僱","simplified":"受雇","pinyin":"shou4 gu4","meaning":["to be employed","to be hired","hired","paid"]}]},{"term":"参与","dict":[{"traditional":"參與","simplified":"参与","pinyin":"can1 yu4","meaning":["to participate (in sth)"]}]},{"term":"救援","dict":[{"traditional":"救援","simplified":"救援","pinyin":"jiu4 yuan2","meaning":["to save","to support","to help","to assist"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"荷兰","dict":[{"traditional":"荷蘭","simplified":"荷兰","pinyin":"he2 lan2","meaning":["Holland","the Netherlands"]}]},{"term":"宝","dict":[{"traditional":"寳","simplified":"宝","pinyin":"bao3","meaning":["variant of 寶|宝[bao3]"]},{"traditional":"寶","simplified":"宝","pinyin":"bao3","meaning":["jewel","gem","treasure","precious"]}]},{"term":"斯","dict":[{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["Slovakia","Slovak","abbr. for 斯洛伐克[Si1 luo4 fa2 ke4]"]},{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["(phonetic)","this"]}]},{"term":"卡","dict":[{"traditional":"卡","simplified":"卡","pinyin":"ka3","meaning":["to stop","to block","(computing) (coll.) slow","(loanword) card","CL:張|张[zhang1],片[pian4]","truck (from \"car\")","calorie (abbr. for 卡路里[ka3 lu4 li3])","cassette"]},{"traditional":"卡","simplified":"卡","pinyin":"qia3","meaning":["to block","to be stuck","to be wedged","customs station","a clip","a fastener","a checkpost","Taiwan pr. [ka3]"]}]},{"term":"利","dict":[{"traditional":"利","simplified":"利","pinyin":"li4","meaning":["surname Li"]},{"traditional":"利","simplified":"利","pinyin":"li4","meaning":["sharp","favorable","advantage","benefit","profit","interest","to do good to","to benefit"]}]},{"term":"斯","dict":[{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["Slovakia","Slovak","abbr. for 斯洛伐克[Si1 luo4 fa2 ke4]"]},{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["(phonetic)","this"]}]},{"term":"公司","dict":[{"traditional":"公司","simplified":"公司","pinyin":"gong1 si1","meaning":["(business) company","company","firm","corporation","incorporated","CL:家[jia1]"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"总监","dict":[{"traditional":"總監","simplified":"总监","pinyin":"zong3 jian1","meaning":["head","director (of an organizational unit)","(police) commissioner","inspector-general","rank of local governor in Tang dynasty administration"]}]},{"term":"皮","dict":[{"traditional":"皮","simplified":"皮","pinyin":"pi2","meaning":["surname Pi"]},{"traditional":"皮","simplified":"皮","pinyin":"pi2","meaning":["leather","skin","fur","CL:張|张[zhang1]","pico- (one trillionth)","naughty"]}]},{"term":"特","dict":[{"traditional":"特","simplified":"特","pinyin":"te4","meaning":["special","unique","distinguished","especially","unusual","very","abbr. for 特克斯[te4 ke4 si1], tex"]}]},{"term":"•"},{"term":"伯","dict":[{"traditional":"伯","simplified":"伯","pinyin":"ba4","meaning":["variant of 霸[ba4]"]},{"traditional":"伯","simplified":"伯","pinyin":"bai3","meaning":["one hundred (old)"]},{"traditional":"伯","simplified":"伯","pinyin":"bo2","meaning":["father's elder brother","senior","paternal elder uncle","eldest of brothers","respectful form of address","Count, third of five orders of nobility 五等爵位[wu3 deng3 jue2 wei4]"]}]},{"term":"尔","dict":[{"traditional":"尒","simplified":"尔","pinyin":"er3","meaning":["variant of 爾|尔[er3]"]},{"traditional":"爾","simplified":"尔","pinyin":"er3","meaning":["thus","so","like that","you","thou"]}]},{"term":"道","dict":[{"traditional":"道","simplified":"道","pinyin":"dao4","meaning":["road","path","CL:條|条[tiao2],股[gu3]","principle","truth","morality","reason","skill","method","Dao (of Daoism)","to say","to speak","to talk","classifier for long thin things (rivers, cracks etc), barriers (walls, doors etc), questions (in an exam etc), commands, courses in a meal, steps in a process","(old) circuit (administrative division)"]}]},{"term":"斯","dict":[{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["Slovakia","Slovak","abbr. for 斯洛伐克[Si1 luo4 fa2 ke4]"]},{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["(phonetic)","this"]}]},{"term":"基","dict":[{"traditional":"基","simplified":"基","pinyin":"ji1","meaning":["base","foundation","basic","radical (chemistry)","(slang) gay"]}]},{"term":"表示","dict":[{"traditional":"表示","simplified":"表示","pinyin":"biao3 shi4","meaning":["to express","to show","to say","to state","to indicate","to mean"]}]},{"term":","},{"term":"为了","dict":[{"traditional":"為了","simplified":"为了","pinyin":"wei4 le5","meaning":["in order to","for the purpose of","so as to"]}]},{"term":"让","dict":[{"traditional":"讓","simplified":"让","pinyin":"rang4","meaning":["to yield","to permit","to let sb do sth","to have sb do sth","to make sb (feel sad etc)","by (indicates the agent in a passive clause, like 被[bei4])"]}]},{"term":"货轮","dict":[{"traditional":"貨輪","simplified":"货轮","pinyin":"huo4 lun2","meaning":["freighter","cargo ship","CL:艘[sou1]"]}]},{"term":"脱","dict":[{"traditional":"脫","simplified":"脱","pinyin":"tuo1","meaning":["to shed","to take off","to escape","to get away from"]}]},{"term":"困","dict":[{"traditional":"困","simplified":"困","pinyin":"kun4","meaning":["to trap","to surround","hard-pressed","stranded","destitute"]}]},{"term":","},{"term":"挖掘机","dict":[{"traditional":"挖掘機","simplified":"挖掘机","pinyin":"wa1 jue2 ji1","meaning":["excavator"]}]},{"term":"挖","dict":[{"traditional":"挖","simplified":"挖","pinyin":"wa1","meaning":["to dig","to excavate","to scoop out"]}]},{"term":"走","dict":[{"traditional":"走","simplified":"走","pinyin":"zou3","meaning":["to walk","to go","to run","to move (of vehicle)","to visit","to leave","to go away","to die (euph.)","from","through","away (in compound verbs, such as 撤走[che4 zou3])","to change (shape, form, meaning)"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"3"},{"term":"万","dict":[{"traditional":"万","simplified":"万","pinyin":"mo4","meaning":["see 万俟[Mo4 qi2]"]}]},{"term":"立方米","dict":[{"traditional":"立方米","simplified":"立方米","pinyin":"li4 fang1 mi3","meaning":["cubic meter (unit of volume)"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"泥沙","dict":[{"traditional":"泥沙","simplified":"泥沙","pinyin":"ni2 sha1","meaning":["silt"]}]},{"term":","},{"term":"并","dict":[{"traditional":"並","simplified":"并","pinyin":"bing4","meaning":["and","furthermore","also","together with","(not) at all","simultaneously","to combine","to join","to merge"]},{"traditional":"併","simplified":"并","pinyin":"bing4","meaning":["to combine","to amalgamate"]},{"traditional":"竝","simplified":"并","pinyin":"bing4","meaning":["variant of 並|并[bing4]"]}]},{"term":"动用","dict":[{"traditional":"動用","simplified":"动用","pinyin":"dong4 yong4","meaning":["to utilize","to put sth to use"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"1"},{"term":"3"},{"term":"艘","dict":[{"traditional":"艘","simplified":"艘","pinyin":"sou1","meaning":["classifier for ships","Taiwan pr. [sao1]"]}]},{"term":"拖船","dict":[{"traditional":"拖船","simplified":"拖船","pinyin":"tuo1 chuan2","meaning":["tugboat","boat towed by a tugboat","to tow a boat"]}]},{"term":"。"},{"term":"\n"},{"term":"\n"},{"term":"威廉","dict":[{"traditional":"威廉","simplified":"威廉","pinyin":"wei1 lian2","meaning":["William or Wilhelm (name)"]}]},{"term":"王子","dict":[{"traditional":"王子","simplified":"王子","pinyin":"wang2 zi3","meaning":["prince","son of a king"]}]},{"term":"获","dict":[{"traditional":"獲","simplified":"获","pinyin":"huo4","meaning":["to catch","to obtain","to capture"]},{"traditional":"穫","simplified":"获","pinyin":"huo4","meaning":["to reap","to harvest"]}]},{"term":"评","dict":[{"traditional":"評","simplified":"评","pinyin":"ping2","meaning":["to discuss","to comment","to criticize","to judge","to choose (by public appraisal)"]}]},{"term":"“"},{"term":"世界","dict":[{"traditional":"世界","simplified":"世界","pinyin":"shi4 jie4","meaning":["world","CL:個|个[ge4]"]}]},{"term":"最","dict":[{"traditional":"最","simplified":"最","pinyin":"zui4","meaning":["most","the most","-est (superlative suffix)"]}]},{"term":"性感","dict":[{"traditional":"性感","simplified":"性感","pinyin":"xing4 gan3","meaning":["sex appeal","eroticism","sexuality","sexy"]}]},{"term":"光头","dict":[{"traditional":"光頭","simplified":"光头","pinyin":"guang1 tou2","meaning":["shaven head","bald head","to go bareheaded","hatless"]}]},{"term":"男人","dict":[{"traditional":"男人","simplified":"男人","pinyin":"nan2 ren2","meaning":["a man","a male","men","CL:個|个[ge4]"]}]},{"term":"”"},{"term":"\n"},{"term":"上周","dict":[{"traditional":"上周","simplified":"上周","pinyin":"shang4 zhou1","meaning":["last week"]}]},{"term":"六","dict":[{"traditional":"六","simplified":"六","pinyin":"liu4","meaning":["six","6"]}]},{"term":"("},{"term":"3"},{"term":"月","dict":[{"traditional":"月","simplified":"月","pinyin":"yue4","meaning":["moon","month","monthly","CL:個|个[ge4],輪|轮[lun2]"]}]},{"term":"2"},{"term":"7"},{"term":"日","dict":[{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["abbr. for 日本[Ri4 ben3], Japan"]},{"traditional":"日","simplified":"日","pinyin":"ri4","meaning":["sun","day","date, day of the month"]}]},{"term":")"},{"term":","},{"term":"英国","dict":[{"traditional":"英國","simplified":"英国","pinyin":"ying1 guo2","meaning":["United Kingdom 聯合王國|联合王国[Lian2 he2 wang2 guo2]","United Kingdom of Great Britain and Northern Ireland","abbr. for England 英格蘭|英格兰[Ying1 ge2 lan2]"]}]},{"term":"《"},{"term":"太阳报","dict":[{"traditional":"太陽報","simplified":"太阳报","pinyin":"tai4 yang2 bao4","meaning":["The Sun (the name of various newspapers, notably in the UK and in Hong Kong)"]}]},{"term":"》"},{"term":"发布","dict":[{"traditional":"發佈","simplified":"发布","pinyin":"fa1 bu4","meaning":["to release","to issue","to announce","to distribute","also written 發布|发布[fa1 bu4]"]},{"traditional":"發布","simplified":"发布","pinyin":"fa1 bu4","meaning":["to release","to issue","to announce","to distribute"]}]},{"term":"报道","dict":[{"traditional":"報道","simplified":"报道","pinyin":"bao4 dao4","meaning":["to report (news)","report","CL:篇[pian1],份[fen4]"]}]},{"term":"称","dict":[{"traditional":"稱","simplified":"称","pinyin":"chen4","meaning":["to fit","balanced","suitable"]},{"traditional":"稱","simplified":"称","pinyin":"cheng1","meaning":["to weigh","to state","to name","name","appellation","to praise"]},{"traditional":"稱","simplified":"称","pinyin":"cheng4","meaning":["variant of 秤[cheng4]","steelyard"]}]},{"term":"威廉","dict":[{"traditional":"威廉","simplified":"威廉","pinyin":"wei1 lian2","meaning":["William or Wilhelm (name)"]}]},{"term":"王子","dict":[{"traditional":"王子","simplified":"王子","pinyin":"wang2 zi3","meaning":["prince","son of a king"]}]},{"term":"是","dict":[{"traditional":"是","simplified":"是","pinyin":"shi4","meaning":["is","are","am","yes","to be"]}]},{"term":"“"},{"term":"世界","dict":[{"traditional":"世界","simplified":"世界","pinyin":"shi4 jie4","meaning":["world","CL:個|个[ge4]"]}]},{"term":"最","dict":[{"traditional":"最","simplified":"最","pinyin":"zui4","meaning":["most","the most","-est (superlative suffix)"]}]},{"term":"性感","dict":[{"traditional":"性感","simplified":"性感","pinyin":"xing4 gan3","meaning":["sex appeal","eroticism","sexuality","sexy"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"秃顶","dict":[{"traditional":"禿頂","simplified":"秃顶","pinyin":"tu1 ding3","meaning":["bald head"]}]},{"term":"男人","dict":[{"traditional":"男人","simplified":"男人","pinyin":"nan2 ren2","meaning":["a man","a male","men","CL:個|个[ge4]"]}]},{"term":"”"},{"term":","},{"term":"该","dict":[{"traditional":"該","simplified":"该","pinyin":"gai1","meaning":["should","ought to","probably","must be","to deserve","to owe","to be sb's turn to do sth","that","the above-mentioned"]}]},{"term":"报道","dict":[{"traditional":"報道","simplified":"报道","pinyin":"bao4 dao4","meaning":["to report (news)","report","CL:篇[pian1],份[fen4]"]}]},{"term":"基于","dict":[{"traditional":"基於","simplified":"基于","pinyin":"ji1 yu2","meaning":["because of","on the basis of","in view of","on account of"]}]},{"term":"提供","dict":[{"traditional":"提供","simplified":"提供","pinyin":"ti2 gong1","meaning":["to offer","to supply","to provide","to furnish"]}]},{"term":"植","dict":[{"traditional":"植","simplified":"植","pinyin":"zhi2","meaning":["to plant"]}]},{"term":"发","dict":[{"traditional":"發","simplified":"发","pinyin":"fa1","meaning":["to send out","to show (one's feeling)","to issue","to develop","to make a bundle of money","classifier for gunshots (rounds)"]},{"traditional":"髮","simplified":"发","pinyin":"fa4","meaning":["hair","Taiwan pr. [fa3]"]}]},{"term":"服务","dict":[{"traditional":"服務","simplified":"服务","pinyin":"fu2 wu4","meaning":["to serve","service","CL:項|项[xiang4]"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"整容","dict":[{"traditional":"整容","simplified":"整容","pinyin":"zheng3 rong2","meaning":["plastic surgery"]}]},{"term":"公司","dict":[{"traditional":"公司","simplified":"公司","pinyin":"gong1 si1","meaning":["(business) company","company","firm","corporation","incorporated","CL:家[jia1]"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"一","dict":[{"traditional":"一","simplified":"一","pinyin":"yi1","meaning":["one","1","single","a (article)","as soon as","entire","whole","all","throughout","\"one\" radical in Chinese characters (Kangxi radical 1)","also pr. [yao1] for greater clarity when spelling out numbers digit by digit"]}]},{"term":"项","dict":[{"traditional":"項","simplified":"项","pinyin":"xiang4","meaning":["surname Xiang"]},{"traditional":"項","simplified":"项","pinyin":"xiang4","meaning":["back of neck","item","thing","term (in a mathematical formula)","sum (of money)","classifier for principles, items, clauses, tasks, research projects etc"]}]},{"term":"调查","dict":[{"traditional":"調查","simplified":"调查","pinyin":"diao4 cha2","meaning":["investigation","inquiry","to investigate","to survey","survey","(opinion) poll","CL:項|项[xiang4],個|个[ge4]"]}]},{"term":"。"},{"term":"据","dict":[{"traditional":"据","simplified":"据","pinyin":"ju1","meaning":["see 拮据[jie2 ju1]"]},{"traditional":"据","simplified":"据","pinyin":"ju4","meaning":["variant of 據|据[ju4]"]}]},{"term":"《"},{"term":"太阳报","dict":[{"traditional":"太陽報","simplified":"太阳报","pinyin":"tai4 yang2 bao4","meaning":["The Sun (the name of various newspapers, notably in the UK and in Hong Kong)"]}]},{"term":"》"},{"term":"报道","dict":[{"traditional":"報道","simplified":"报道","pinyin":"bao4 dao4","meaning":["to report (news)","report","CL:篇[pian1],份[fen4]"]}]},{"term":","},{"term":"该","dict":[{"traditional":"該","simplified":"该","pinyin":"gai1","meaning":["should","ought to","probably","must be","to deserve","to owe","to be sb's turn to do sth","that","the above-mentioned"]}]},{"term":"调查","dict":[{"traditional":"調查","simplified":"调查","pinyin":"diao4 cha2","meaning":["investigation","inquiry","to investigate","to survey","survey","(opinion) poll","CL:項|项[xiang4],個|个[ge4]"]}]},{"term":"是","dict":[{"traditional":"是","simplified":"是","pinyin":"shi4","meaning":["is","are","am","yes","to be"]}]},{"term":"通过","dict":[{"traditional":"通過","simplified":"通过","pinyin":"tong1 guo4","meaning":["by means of","through","via","to pass through","to get through","to adopt","to pass (a bill or inspection etc)","to switch over"]}]},{"term":"分析","dict":[{"traditional":"分析","simplified":"分析","pinyin":"fen1 xi1","meaning":["to analyze","analysis","CL:個|个[ge4]"]}]},{"term":"“"},{"term":"博客","dict":[{"traditional":"博客","simplified":"博客","pinyin":"bo2 ke4","meaning":["blog (loanword)","weblog","blogger"]}]},{"term":"、"},{"term":"报道","dict":[{"traditional":"報道","simplified":"报道","pinyin":"bao4 dao4","meaning":["to report (news)","report","CL:篇[pian1],份[fen4]"]}]},{"term":"和","dict":[{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["surname He","Japanese (food, clothes etc)"]},{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["and","together with","with","sum","union","peace","harmony","Taiwan pr. [han4] when it means \"and\" or \"with\""]},{"traditional":"和","simplified":"和","pinyin":"he4","meaning":["to compose a poem in reply (to sb's poem) using the same rhyme sequence","to join in the singing","to chime in with others"]},{"traditional":"和","simplified":"和","pinyin":"hu2","meaning":["to complete a set in mahjong or playing cards"]},{"traditional":"和","simplified":"和","pinyin":"huo2","meaning":["to combine a powdery substance (flour, plaster etc) with water","Taiwan pr. [huo4]"]},{"traditional":"和","simplified":"和","pinyin":"huo4","meaning":["to mix (ingredients) together","to blend","classifier for rinses of clothes","classifier for boilings of medicinal herbs"]}]},{"term":"谷歌","dict":[{"traditional":"谷歌","simplified":"谷歌","pinyin":"gu3 ge1","meaning":["Google, Internet company and search engine"]}]},{"term":"搜索","dict":[{"traditional":"搜索","simplified":"搜索","pinyin":"sou1 suo3","meaning":["to search (a place)","to search (a database)","to search for (sth)"]}]},{"term":"页面","dict":[{"traditional":"頁面","simplified":"页面","pinyin":"ye4 mian4","meaning":["page","web page"]}]},{"term":"”"},{"term":"中","dict":[{"traditional":"中","simplified":"中","pinyin":"zhong1","meaning":["China","Chinese","surname Zhong"]},{"traditional":"中","simplified":"中","pinyin":"zhong1","meaning":["within","among","in","middle","center","while (doing sth)","during","(dialect) OK","all right"]},{"traditional":"中","simplified":"中","pinyin":"zhong4","meaning":["to hit (the mark)","to be hit by","to suffer","to win (a prize, a lottery)"]}]},{"term":"“"},{"term":"性感","dict":[{"traditional":"性感","simplified":"性感","pinyin":"xing4 gan3","meaning":["sex appeal","eroticism","sexuality","sexy"]}]},{"term":"”"},{"term":"一","dict":[{"traditional":"一","simplified":"一","pinyin":"yi1","meaning":["one","1","single","a (article)","as soon as","entire","whole","all","throughout","\"one\" radical in Chinese characters (Kangxi radical 1)","also pr. [yao1] for greater clarity when spelling out numbers digit by digit"]}]},{"term":"词","dict":[{"traditional":"䛐","simplified":"词","pinyin":"ci2","meaning":["old variant of 詞|词[ci2]"]},{"traditional":"詞","simplified":"词","pinyin":"ci2","meaning":["word","statement","speech","lyrics","CL:組|组[zu3],個|个[ge4]","a form of lyric poetry, flourishing in the Song dynasty 宋朝|宋朝[Song4 chao2]","CL:首[shou3]"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"出现","dict":[{"traditional":"出現","simplified":"出现","pinyin":"chu1 xian4","meaning":["to appear","to arise","to emerge","to show up"]}]},{"term":"频率","dict":[{"traditional":"頻率","simplified":"频率","pinyin":"pin2 lu:4","meaning":["frequency"]}]},{"term":"来得","dict":[{"traditional":"來得","simplified":"来得","pinyin":"lai2 de5","meaning":["to emerge (from a comparison)","to come out as","to be competent or equal to"]}]},{"term":"出","dict":[{"traditional":"出","simplified":"出","pinyin":"chu1","meaning":["to go out","to come out","to occur","to produce","to go beyond","to rise","to put forth","to happen","(used after a verb to indicate an outward direction or a positive result)","classifier for dramas, plays, operas etc"]}]},{"term":"结果","dict":[{"traditional":"結果","simplified":"结果","pinyin":"jie1 guo3","meaning":["to bear fruit","CL:個|个[ge4]"]},{"traditional":"結果","simplified":"结果","pinyin":"jie2 guo3","meaning":["outcome","result","conclusion","in the end","as a result","to kill","to dispatch"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"。"},{"term":"《"},{"term":"太阳报","dict":[{"traditional":"太陽報","simplified":"太阳报","pinyin":"tai4 yang2 bao4","meaning":["The Sun (the name of various newspapers, notably in the UK and in Hong Kong)"]}]},{"term":"》"},{"term":"写","dict":[{"traditional":"寫","simplified":"写","pinyin":"xie3","meaning":["to write"]}]},{"term":"道","dict":[{"traditional":"道","simplified":"道","pinyin":"dao4","meaning":["road","path","CL:條|条[tiao2],股[gu3]","principle","truth","morality","reason","skill","method","Dao (of Daoism)","to say","to speak","to talk","classifier for long thin things (rivers, cracks etc), barriers (walls, doors etc), questions (in an exam etc), commands, courses in a meal, steps in a process","(old) circuit (administrative division)"]}]},{"term":","},{"term":"调查","dict":[{"traditional":"調查","simplified":"调查","pinyin":"diao4 cha2","meaning":["investigation","inquiry","to investigate","to survey","survey","(opinion) poll","CL:項|项[xiang4],個|个[ge4]"]}]},{"term":"发现","dict":[{"traditional":"發現","simplified":"发现","pinyin":"fa1 xian4","meaning":["to find","to discover"]}]},{"term":","},{"term":"威廉","dict":[{"traditional":"威廉","simplified":"威廉","pinyin":"wei1 lian2","meaning":["William or Wilhelm (name)"]}]},{"term":"王子","dict":[{"traditional":"王子","simplified":"王子","pinyin":"wang2 zi3","meaning":["prince","son of a king"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"名字","dict":[{"traditional":"名字","simplified":"名字","pinyin":"ming2 zi5","meaning":["name (of a person or thing)","CL:個|个[ge4]"]}]},{"term":"被","dict":[{"traditional":"被","simplified":"被","pinyin":"bei4","meaning":["quilt","by","(indicates passive-voice clauses)","(literary) to cover","to meet with","(coll.) (since c. 2009) used before a verb that does not accurately represent what actually happened, to describe with black humor how sb or sth was dealt with by the authorities (as in 被自殺|被自杀[bei4 zi4 sha1])"]}]},{"term":"提及","dict":[{"traditional":"提及","simplified":"提及","pinyin":"ti2 ji2","meaning":["to mention","to raise (a subject)","to bring to sb's attention"]}]},{"term":"1"},{"term":"7"},{"term":"6"},{"term":"0"},{"term":"万","dict":[{"traditional":"万","simplified":"万","pinyin":"mo4","meaning":["see 万俟[Mo4 qi2]"]}]},{"term":"次","dict":[{"traditional":"次","simplified":"次","pinyin":"ci4","meaning":["next in sequence","second","the second (day, time etc)","secondary","vice-","sub-","infra-","inferior quality","substandard","order","sequence","hypo- (chemistry)","classifier for enumerated events: time"]}]},{"term":"。"},{"term":"这","dict":[{"traditional":"這","simplified":"这","pinyin":"zhe4","meaning":["this","these","(commonly pr. [zhei4] before a classifier, esp. in Beijing)"]}]},{"term":"篇","dict":[{"traditional":"篇","simplified":"篇","pinyin":"pian1","meaning":["sheet","piece of writing","bound set of bamboo slips used for record keeping (old)","classifier for written items: chapter, article"]}]},{"term":"文章","dict":[{"traditional":"文章","simplified":"文章","pinyin":"wen2 zhang1","meaning":["article","essay","literary works","writings","hidden meaning","CL:篇[pian1],段[duan4],頁|页[ye4]"]}]},{"term":"还","dict":[{"traditional":"還","simplified":"还","pinyin":"huan2","meaning":["surname Huan"]},{"traditional":"還","simplified":"还","pinyin":"hai2","meaning":["still","still in progress","still more","yet","even more","in addition","fairly","passably (good)","as early as","even","also","else"]},{"traditional":"還","simplified":"还","pinyin":"huan2","meaning":["to pay back","to return"]}]},{"term":"提到","dict":[{"traditional":"提到","simplified":"提到","pinyin":"ti2 dao4","meaning":["to mention","to raise (a subject)","to refer to"]}]},{"term":"了","dict":[{"traditional":"了","simplified":"了","pinyin":"le5","meaning":["(completed action marker)","(modal particle indicating change of state, situation now)","(modal particle intensifying preceding clause)"]},{"traditional":"了","simplified":"了","pinyin":"liao3","meaning":["to finish","to achieve","variant of 瞭|了[liao3]","to understand clearly"]}]},{"term":"调查","dict":[{"traditional":"調查","simplified":"调查","pinyin":"diao4 cha2","meaning":["investigation","inquiry","to investigate","to survey","survey","(opinion) poll","CL:項|项[xiang4],個|个[ge4]"]}]},{"term":"结果","dict":[{"traditional":"結果","simplified":"结果","pinyin":"jie1 guo3","meaning":["to bear fruit","CL:個|个[ge4]"]},{"traditional":"結果","simplified":"结果","pinyin":"jie2 guo3","meaning":["outcome","result","conclusion","in the end","as a result","to kill","to dispatch"]}]},{"term":"中","dict":[{"traditional":"中","simplified":"中","pinyin":"zhong1","meaning":["China","Chinese","surname Zhong"]},{"traditional":"中","simplified":"中","pinyin":"zhong1","meaning":["within","among","in","middle","center","while (doing sth)","during","(dialect) OK","all right"]},{"traditional":"中","simplified":"中","pinyin":"zhong4","meaning":["to hit (the mark)","to be hit by","to suffer","to win (a prize, a lottery)"]}]},{"term":"入选","dict":[{"traditional":"入選","simplified":"入选","pinyin":"ru4 xuan3","meaning":["to be chosen","to be elected as"]}]},{"term":"前","dict":[{"traditional":"前","simplified":"前","pinyin":"qian2","meaning":["front","forward","ahead","first","top (followed by a number)","future","ago","before","BC (e.g. 前293年)","former","formerly"]}]},{"term":"十位","dict":[{"traditional":"十位","simplified":"十位","pinyin":"shi2 wei4","meaning":["the tens place (or column) in the decimal system"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"其他","dict":[{"traditional":"其他","simplified":"其他","pinyin":"qi2 ta1","meaning":["other","(sth or sb) else","the rest"]}]},{"term":"名人","dict":[{"traditional":"名人","simplified":"名人","pinyin":"ming2 ren2","meaning":["personage","celebrity"]}]},{"term":"。"},{"term":"迈","dict":[{"traditional":"邁","simplified":"迈","pinyin":"mai4","meaning":["to take a step","to stride"]}]},{"term":"克","dict":[{"traditional":"克","simplified":"克","pinyin":"ke4","meaning":["abbr. for 克羅地亞|克罗地亚[Ke4 luo2 di4 ya4], Croatia","(Tw) abbr. for 克羅埃西亞|克罗埃西亚[Ke4 luo2 ai1 xi1 ya4], Croatia"]},{"traditional":"克","simplified":"克","pinyin":"ke4","meaning":["to be able to","to subdue","to restrain","to overcome","gram","Tibetan unit of land area, about 6 ares"]}]},{"term":"•"},{"term":"泰","dict":[{"traditional":"泰","simplified":"泰","pinyin":"tai4","meaning":["Mt Tai 泰山[Tai4 Shan1] in Shandong","abbr. for Thailand"]},{"traditional":"泰","simplified":"泰","pinyin":"tai4","meaning":["safe","peaceful","most","grand"]}]},{"term":"森","dict":[{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["Mori (Japanese surname)"]},{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["forest"]}]},{"term":"仅","dict":[{"traditional":"僅","simplified":"仅","pinyin":"jin3","meaning":["barely","only","merely"]}]},{"term":"次于","dict":[{"traditional":"次於","simplified":"次于","pinyin":"ci4 yu2","meaning":["second after","second only to"]}]},{"term":"威廉","dict":[{"traditional":"威廉","simplified":"威廉","pinyin":"wei1 lian2","meaning":["William or Wilhelm (name)"]}]},{"term":"王子","dict":[{"traditional":"王子","simplified":"王子","pinyin":"wang2 zi3","meaning":["prince","son of a king"]}]},{"term":","},{"term":"排","dict":[{"traditional":"排","simplified":"排","pinyin":"pai2","meaning":["a row","a line","to set in order","to arrange","to line up","to eliminate","to drain","to push open","platoon","raft","classifier for lines, rows etc"]}]},{"term":"在","dict":[{"traditional":"在","simplified":"在","pinyin":"zai4","meaning":["(located) at","(to be) in","to exist","in the middle of doing sth","(indicating an action in progress)"]}]},{"term":"第二位","dict":[{"traditional":"第二位","simplified":"第二位","pinyin":"di4 er4 wei4","meaning":["second place"]}]},{"term":","},{"term":"紧","dict":[{"traditional":"緊","simplified":"紧","pinyin":"jin3","meaning":["tight","strict","close at hand","near","urgent","tense","hard up","short of money","to tighten"]}]},{"term":"随","dict":[{"traditional":"隨","simplified":"随","pinyin":"sui2","meaning":["surname Sui"]},{"traditional":"隨","simplified":"随","pinyin":"sui2","meaning":["to follow","to comply with","varying according to...","to allow","subsequently"]}]},{"term":"其后","dict":[{"traditional":"其後","simplified":"其后","pinyin":"qi2 hou4","meaning":["next","later","after that"]}]},{"term":"的","dict":[{"traditional":"的","simplified":"的","pinyin":"de5","meaning":["of","~'s (possessive particle)","(used after an attribute)","(used to form a nominal expression)","(used at the end of a declarative sentence for emphasis)","also pr. [di4] or [di5] in poetry and songs"]},{"traditional":"的","simplified":"的","pinyin":"di1","meaning":["see 的士[di1 shi4]"]},{"traditional":"的","simplified":"的","pinyin":"di2","meaning":["really and truly"]},{"traditional":"的","simplified":"的","pinyin":"di4","meaning":["aim","clear"]}]},{"term":"是","dict":[{"traditional":"是","simplified":"是","pinyin":"shi4","meaning":["is","are","am","yes","to be"]}]},{"term":"《"},{"term":"速度","dict":[{"traditional":"速度","simplified":"速度","pinyin":"su4 du4","meaning":["speed","rate","velocity","(music) tempo","CL:個|个[ge4]"]}]},{"term":"与","dict":[{"traditional":"與","simplified":"与","pinyin":"yu2","meaning":["variant of 歟|欤[yu2]"]},{"traditional":"與","simplified":"与","pinyin":"yu3","meaning":["and","to give","together with"]},{"traditional":"與","simplified":"与","pinyin":"yu4","meaning":["to take part in"]}]},{"term":"激情","dict":[{"traditional":"激情","simplified":"激情","pinyin":"ji1 qing2","meaning":["passion","fervor","enthusiasm","strong emotion"]}]},{"term":"》"},{"term":"主演","dict":[{"traditional":"主演","simplified":"主演","pinyin":"zhu3 yan3","meaning":["to act the leading role (in a movie or a play)","to star","lead actor"]}]},{"term":"杰","dict":[{"traditional":"杰","simplified":"杰","pinyin":"jie2","meaning":["variant of 傑|杰[jie2]"]}]},{"term":"森","dict":[{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["Mori (Japanese surname)"]},{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["forest"]}]},{"term":"•"},{"term":"斯","dict":[{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["Slovakia","Slovak","abbr. for 斯洛伐克[Si1 luo4 fa2 ke4]"]},{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["(phonetic)","this"]}]},{"term":"坦","dict":[{"traditional":"坦","simplified":"坦","pinyin":"tan3","meaning":["flat","open-hearted","level","smooth"]}]},{"term":"森","dict":[{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["Mori (Japanese surname)"]},{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["forest"]}]},{"term":"、"},{"term":"说唱","dict":[{"traditional":"說唱","simplified":"说唱","pinyin":"shuo1 chang4","meaning":["speaking and singing, as in various forms of storytelling such as 彈詞|弹词[tan2 ci2] and 相聲|相声[xiang4 sheng5]","(music) rapping"]}]},{"term":"歌手","dict":[{"traditional":"歌手","simplified":"歌手","pinyin":"ge1 shou3","meaning":["singer"]}]},{"term":"皮","dict":[{"traditional":"皮","simplified":"皮","pinyin":"pi2","meaning":["surname Pi"]},{"traditional":"皮","simplified":"皮","pinyin":"pi2","meaning":["leather","skin","fur","CL:張|张[zhang1]","pico- (one trillionth)","naughty"]}]},{"term":"普","dict":[{"traditional":"普","simplified":"普","pinyin":"pu3","meaning":["general","popular","everywhere","universal"]}]},{"term":"保罗","dict":[{"traditional":"保羅","simplified":"保罗","pinyin":"bao3 luo2","meaning":["Paul"]}]},{"term":"、"},{"term":"迈","dict":[{"traditional":"邁","simplified":"迈","pinyin":"mai4","meaning":["to take a step","to stride"]}]},{"term":"克","dict":[{"traditional":"克","simplified":"克","pinyin":"ke4","meaning":["abbr. for 克羅地亞|克罗地亚[Ke4 luo2 di4 ya4], Croatia","(Tw) abbr. for 克羅埃西亞|克罗埃西亚[Ke4 luo2 ai1 xi1 ya4], Croatia"]},{"traditional":"克","simplified":"克","pinyin":"ke4","meaning":["to be able to","to subdue","to restrain","to overcome","gram","Tibetan unit of land area, about 6 ares"]}]},{"term":"尔","dict":[{"traditional":"尒","simplified":"尔","pinyin":"er3","meaning":["variant of 爾|尔[er3]"]},{"traditional":"爾","simplified":"尔","pinyin":"er3","meaning":["thus","so","like that","you","thou"]}]},{"term":"•"},{"term":"乔丹","dict":[{"traditional":"喬丹","simplified":"乔丹","pinyin":"qiao2 dan1","meaning":["Jordan (name)"]}]},{"term":"、"},{"term":"拳击手","dict":[{"traditional":"拳擊手","simplified":"拳击手","pinyin":"quan2 ji1 shou3","meaning":["boxer"]}]},{"term":"弗","dict":[{"traditional":"弗","simplified":"弗","pinyin":"fu2","meaning":["not"]}]},{"term":"洛","dict":[{"traditional":"洛","simplified":"洛","pinyin":"luo4","meaning":["surname Luo","old name of several rivers (in Henan, Shaanxi, Sichuan and Anhui)"]},{"traditional":"洛","simplified":"洛","pinyin":"luo4","meaning":["used in transliteration"]}]},{"term":"伊","dict":[{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["surname Yi","abbr. for 伊拉克[Yi1 la1 ke4], Iraq","abbr. for 伊朗[Yi1 lang3], Iran"]},{"traditional":"伊","simplified":"伊","pinyin":"yi1","meaning":["(old) third person singular pronoun (\"he\" or \"she\")","second person singular pronoun (\"you\")","(May 4th period) third person singular feminine pronoun (\"she\")","(Classical Chinese) introductory particle with no specific meaning","that (preceding a noun)"]}]},{"term":"德","dict":[{"traditional":"德","simplified":"德","pinyin":"de2","meaning":["Germany","German","abbr. for 德國|德国[De2 guo2]"]},{"traditional":"德","simplified":"德","pinyin":"de2","meaning":["virtue","goodness","morality","ethics","kindness","favor","character","kind"]}]},{"term":"•"},{"term":"梅","dict":[{"traditional":"梅","simplified":"梅","pinyin":"mei2","meaning":["surname Mei"]},{"traditional":"梅","simplified":"梅","pinyin":"mei2","meaning":["plum","plum flower","Japanese apricot (Prunus mume)"]}]},{"term":"威","dict":[{"traditional":"威","simplified":"威","pinyin":"wei1","meaning":["power","might","prestige"]}]},{"term":"瑟","dict":[{"traditional":"瑟","simplified":"瑟","pinyin":"se4","meaning":["a type of standing harp, smaller than konghou 箜篌, with 5-25 strings"]}]},{"term":"、"},{"term":"约翰","dict":[{"traditional":"約翰","simplified":"约翰","pinyin":"yue1 han4","meaning":["John (name)","Johan (name)","Johann (name)"]}]},{"term":"•"},{"term":"特","dict":[{"traditional":"特","simplified":"特","pinyin":"te4","meaning":["special","unique","distinguished","especially","unusual","very","abbr. for 特克斯[te4 ke4 si1], tex"]}]},{"term":"拉","dict":[{"traditional":"拉","simplified":"拉","pinyin":"la1","meaning":["to pull","to play (a bowed instrument)","to drag","to draw","to chat","(coll.) to empty one's bowels"]}]},{"term":"沃","dict":[{"traditional":"沃","simplified":"沃","pinyin":"wo4","meaning":["fertile","rich","to irrigate","to wash (of river)"]}]},{"term":"尔","dict":[{"traditional":"尒","simplified":"尔","pinyin":"er3","meaning":["variant of 爾|尔[er3]"]},{"traditional":"爾","simplified":"尔","pinyin":"er3","meaning":["thus","so","like that","you","thou"]}]},{"term":"塔","dict":[{"traditional":"塔","simplified":"塔","pinyin":"ta3","meaning":["pagoda","tower","minaret","stupa (abbr. loanword from Sanskrit tapo)","CL:座[zuo4]"]}]},{"term":"、"},{"term":"布","dict":[{"traditional":"布","simplified":"布","pinyin":"bu4","meaning":["cloth","to declare","to announce","to spread","to make known"]}]},{"term":"鲁","dict":[{"traditional":"魯","simplified":"鲁","pinyin":"lu3","meaning":["surname Lu","Lu, ancient state of China 魯國|鲁国[Lu3 guo2]","Lu, short name for Shandong 山東|山东[Shan1 dong1]"]},{"traditional":"魯","simplified":"鲁","pinyin":"lu3","meaning":["(bound form) crass","stupid","rude","(used to represent the sounds of \"ru\", \"lu\" etc in loanwords)"]}]},{"term":"斯","dict":[{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["Slovakia","Slovak","abbr. for 斯洛伐克[Si1 luo4 fa2 ke4]"]},{"traditional":"斯","simplified":"斯","pinyin":"si1","meaning":["(phonetic)","this"]}]},{"term":"•"},{"term":"威利斯","dict":[{"traditional":"威利斯","simplified":"威利斯","pinyin":"wei1 li4 si1","meaning":["Willis (name)"]}]},{"term":"、"},{"term":"“"},{"term":"巨石","dict":[{"traditional":"巨石","simplified":"巨石","pinyin":"ju4 shi2","meaning":["huge rock","boulder","monolith"]}]},{"term":"”"},{"term":"强","dict":[{"traditional":"強","simplified":"强","pinyin":"qiang2","meaning":["surname Qiang"]},{"traditional":"強","simplified":"强","pinyin":"jiang4","meaning":["stubborn","unyielding"]},{"traditional":"強","simplified":"强","pinyin":"qiang2","meaning":["strong","powerful","better","slightly more than","vigorous","violent","best in their category, e.g. see 百強|百强[bai3 qiang2]"]},{"traditional":"強","simplified":"强","pinyin":"qiang3","meaning":["to force","to compel","to strive","to make an effort"]},{"traditional":"彊","simplified":"强","pinyin":"jiang4","meaning":["variant of 強|强[jiang4]"]},{"traditional":"彊","simplified":"强","pinyin":"qiang2","meaning":["variant of 強|强[qiang2]"]},{"traditional":"彊","simplified":"强","pinyin":"qiang3","meaning":["variant of 強|强[qiang3]"]}]},{"term":"森","dict":[{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["Mori (Japanese surname)"]},{"traditional":"森","simplified":"森","pinyin":"sen1","meaning":["forest"]}]},{"term":"和","dict":[{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["surname He","Japanese (food, clothes etc)"]},{"traditional":"和","simplified":"和","pinyin":"he2","meaning":["and","together with","with","sum","union","peace","harmony","Taiwan pr. [han4] when it means \"and\" or \"with\""]},{"traditional":"和","simplified":"和","pinyin":"he4","meaning":["to compose a poem in reply (to sb's poem) using the same rhyme sequence","to join in the singing","to chime in with others"]},{"traditional":"和","simplified":"和","pinyin":"hu2","meaning":["to complete a set in mahjong or playing cards"]},{"traditional":"和","simplified":"和","pinyin":"huo2","meaning":["to combine a powdery substance (flour, plaster etc) with water","Taiwan pr. [huo4]"]},{"traditional":"和","simplified":"和","pinyin":"huo4","meaning":["to mix (ingredients) together","to blend","classifier for rinses of clothes","classifier for boilings of medicinal herbs"]}]},{"term":"范","dict":[{"traditional":"范","simplified":"范","pinyin":"fan4","meaning":["surname Fan"]}]},{"term":"•"},{"term":"迪","dict":[{"traditional":"迪","simplified":"迪","pinyin":"di2","meaning":["to enlighten"]}]},{"term":"塞","dict":[{"traditional":"塞","simplified":"塞","pinyin":"sai1","meaning":["Serbia","Serbian","abbr. for 塞爾維亞|塞尔维亚[Sai1 er3 wei2 ya4]"]},{"traditional":"塞","simplified":"塞","pinyin":"sai1","meaning":["to stop up","to squeeze in","to stuff","cork","stopper"]},{"traditional":"塞","simplified":"塞","pinyin":"sai4","meaning":["strategic pass","tactical border position"]},{"traditional":"塞","simplified":"塞","pinyin":"se4","meaning":["to stop up","to stuff","to cope with"]}]},{"term":"尔","dict":[{"traditional":"尒","simplified":"尔","pinyin":"er3","meaning":["variant of 爾|尔[er3]"]},{"traditional":"爾","simplified":"尔","pinyin":"er3","meaning":["thus","so","like that","you","thou"]}]},{"term":"。"}] \ No newline at end of file diff --git a/server/routers/car-wash/auth/index.js b/server/routers/car-wash/auth/index.js new file mode 100644 index 0000000..efc6047 --- /dev/null +++ b/server/routers/car-wash/auth/index.js @@ -0,0 +1,9 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.use(require('./login')) +router.use(require('./registration')) +router.use(require('./logrec')) +router.use(require('./passrec')) + +module.exports = router diff --git a/server/routers/car-wash/auth/login/error.json b/server/routers/car-wash/auth/login/error.json new file mode 100644 index 0000000..3b51be5 --- /dev/null +++ b/server/routers/car-wash/auth/login/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/login/index.js b/server/routers/car-wash/auth/login/index.js new file mode 100644 index 0000000..07ce17b --- /dev/null +++ b/server/routers/car-wash/auth/login/index.js @@ -0,0 +1,16 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.post('/postAuthorization', (req, res) => { + if (req?.session?.[req.body.login]?.login) { + const { login } = req.session[req.body.login] + const { pass } = req.session[req.body.login] + if (login === req.body.login && pass === req.body.pass) { + return res.send(req.session[req.body.login]) + } + } + + res.send(require('./error.json')) +}) + +module.exports = router diff --git a/server/routers/car-wash/auth/login/success.json b/server/routers/car-wash/auth/login/success.json new file mode 100644 index 0000000..0460d16 --- /dev/null +++ b/server/routers/car-wash/auth/login/success.json @@ -0,0 +1,3 @@ +{ + "status": "success" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/logrec/error.json b/server/routers/car-wash/auth/logrec/error.json new file mode 100644 index 0000000..3b51be5 --- /dev/null +++ b/server/routers/car-wash/auth/logrec/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/logrec/index.js b/server/routers/car-wash/auth/logrec/index.js new file mode 100644 index 0000000..9466a7f --- /dev/null +++ b/server/routers/car-wash/auth/logrec/index.js @@ -0,0 +1,40 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.post('/postLoginRec', (req, res) => { + if (Object.getOwnPropertyNames(req.session).some((item) => item === req.body.phone)) { + const loginRec = req.session[req.body.phone].login + if (req.body.phoneRecForm === 0) { + if (req.session[loginRec].phone === req.body.phone) { + const code = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000 + const ret1 = { + status: 'success', + phonecode: code, + } + req.session[loginRec].phonecode = ret1.phonecode + return res.send(ret1) + } + res.send(require('./error.json')) + } + + if (req.body.phoneRecForm === 1) { + if (req.session[loginRec].phonecode === req.body.phonecode) { + const ret = { + login: req.session[loginRec].login, + phone: req.session[loginRec].phone, + status: 'success', + } + req.session[loginRec].phonecode = undefined + return res.send(ret) + } + const ret = { + phonecode: req.session[loginRec].phonecode, + status: 'error', + } + return res.send(ret) + } + } + res.send(require('./error.json')) +}) + +module.exports = router diff --git a/server/routers/car-wash/auth/logrec/success.json b/server/routers/car-wash/auth/logrec/success.json new file mode 100644 index 0000000..0460d16 --- /dev/null +++ b/server/routers/car-wash/auth/logrec/success.json @@ -0,0 +1,3 @@ +{ + "status": "success" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/passrec/error.json b/server/routers/car-wash/auth/passrec/error.json new file mode 100644 index 0000000..3b51be5 --- /dev/null +++ b/server/routers/car-wash/auth/passrec/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/passrec/index.js b/server/routers/car-wash/auth/passrec/index.js new file mode 100644 index 0000000..6c19726 --- /dev/null +++ b/server/routers/car-wash/auth/passrec/index.js @@ -0,0 +1,44 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.post('/postPassRec', (req, res) => { + if (req.body.login in req.session) { + if (req.body.phoneRecForm === 0) { + const code = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000 + + const ret1 = { + status: 'success', + phonecode: code, + } + req.session[req.body.login].phonecode = ret1.phonecode + return res.send(ret1) + } + if (req.body.phoneRecForm === 1) { + if (req.session[req.body.login].phonecode === req.body.phonecode) { + const ret = { + login: req.session[req.body.login].login, + phone: req.session[req.body.login].phone, + phonecode: req.session[req.body.login].phonecode, + status: 'success', + } + return res.send(ret) + } + const ret = { + phonecode: req.session[req.body.login].phonecode, + status: 'err', + } + return res.send(ret) + } + if (req.body.phoneRecForm === 2) { + const ret = { + status: 'success', + } + req.session[req.body.login].phonecode = undefined + req.session[req.body.login].pass = req.body.phonenewpass + return res.send(ret) + } + } + res.send(require('./error.json')) +}) + +module.exports = router diff --git a/server/routers/car-wash/auth/passrec/success.json b/server/routers/car-wash/auth/passrec/success.json new file mode 100644 index 0000000..0460d16 --- /dev/null +++ b/server/routers/car-wash/auth/passrec/success.json @@ -0,0 +1,3 @@ +{ + "status": "success" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/registration/dooble.json b/server/routers/car-wash/auth/registration/dooble.json new file mode 100644 index 0000000..e6682b8 --- /dev/null +++ b/server/routers/car-wash/auth/registration/dooble.json @@ -0,0 +1,3 @@ +{ + "status": "dooble" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/registration/dooblephone.json b/server/routers/car-wash/auth/registration/dooblephone.json new file mode 100644 index 0000000..6c6d81b --- /dev/null +++ b/server/routers/car-wash/auth/registration/dooblephone.json @@ -0,0 +1,3 @@ +{ + "status": "dooblePhone" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/registration/error.json b/server/routers/car-wash/auth/registration/error.json new file mode 100644 index 0000000..3b51be5 --- /dev/null +++ b/server/routers/car-wash/auth/registration/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} \ No newline at end of file diff --git a/server/routers/car-wash/auth/registration/index.js b/server/routers/car-wash/auth/registration/index.js new file mode 100644 index 0000000..209c1f0 --- /dev/null +++ b/server/routers/car-wash/auth/registration/index.js @@ -0,0 +1,26 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.post('/postRegistration', (req, res) => { + if (req.body.phone && req.body.login && req.body.pass) { + if (!req.session[req.body.login]) { + const ret = { + login: req.body.login, + pass: req.body.pass, + phone: req.body.phone, + status: 'success', + } + req.session[req.body.login] = ret + req.session[req.body.phone] = ret + } else if (req.session[req.body.login]) { + return res.send(require('./dooble.json')) + } else if (req.session[req.body.phone]) { + return res.send(require('./dooblephone.json')) + } + return res.send(require('./success.json')) + // return res.send(req.session); + } + res.send(require('./error.json')) +}) + +module.exports = router diff --git a/server/routers/car-wash/auth/registration/success.json b/server/routers/car-wash/auth/registration/success.json new file mode 100644 index 0000000..0460d16 --- /dev/null +++ b/server/routers/car-wash/auth/registration/success.json @@ -0,0 +1,3 @@ +{ + "status": "success" +} \ No newline at end of file diff --git a/server/routers/car-wash/carousel/carousel-en.json b/server/routers/car-wash/carousel/carousel-en.json new file mode 100644 index 0000000..227a10a --- /dev/null +++ b/server/routers/car-wash/carousel/carousel-en.json @@ -0,0 +1,40 @@ +{ + "status": { + "code": 0 + }, + + "banners": [ + { + "img": "first-slide.gif", + "title": "Fast and quality service", + "description": "1", + "color": "black" + }, + { + "img": "second-slide.gif", + "title": "Affordable prices", + "description": "2", + "color": "black" + }, + { + "img": "third-slide.gif", + "title": "Courteous staff", + "description": "3", + "color": "black" + }, + + { + "img": "fourth-slide.gif", + "title": "Comfortable waiting area", + "description": "3", + "color": "black" + }, + + { + "img": "fifth-slide.gif", + "title": "Convenient operating hours", + "description": "3", + "color": "black" + } + ] +} diff --git a/server/routers/car-wash/carousel/carousel-ru.json b/server/routers/car-wash/carousel/carousel-ru.json new file mode 100644 index 0000000..ffc081b --- /dev/null +++ b/server/routers/car-wash/carousel/carousel-ru.json @@ -0,0 +1,40 @@ +{ + "status": { + "code": 0 + }, + + "banners": [ + { + "img": "first-slide.gif", + "title": "Быстрое и качественное обслуживание", + "description": "1", + "color": "black" + }, + { + "img": "second-slide.gif", + "title": "Доступные цены", + "description": "2", + "color": "black" + }, + { + "img": "third-slide.gif", + "title": "Вежливый персонал", + "description": "3", + "color": "black" + }, + + { + "img": "fourth-slide.gif", + "title": "Комфортная зона ожидания", + "description": "3", + "color": "black" + }, + + { + "img": "fifth-slide.gif", + "title": "Удобное время работы", + "description": "3", + "color": "black" + } + ] +} diff --git a/server/routers/car-wash/carousel/index.js b/server/routers/car-wash/carousel/index.js new file mode 100644 index 0000000..db1d783 --- /dev/null +++ b/server/routers/car-wash/carousel/index.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.get('/getBanners', (req, res) => { + switch (req.query.lng) { + case 'en': + res.send(require('./carousel-en.json')) + break + case 'ru': + res.send(require('./carousel-ru.json')) + break + case 'en-En': + res.send(require('./carousel-en.json')) + break + case 'ru-Ru': + res.send(require('./carousel-ru.json')) + break + default: + console.log('Unknown language') + } +}) + +module.exports = router diff --git a/server/routers/car-wash/index.js b/server/routers/car-wash/index.js new file mode 100644 index 0000000..d70afa8 --- /dev/null +++ b/server/routers/car-wash/index.js @@ -0,0 +1,9 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.use(require('./carousel')) +router.use(require('./map')) +router.use('/auth', require('./auth')) +router.use(require('./prices')) + +module.exports = router diff --git a/server/routers/car-wash/map/index.js b/server/routers/car-wash/map/index.js new file mode 100644 index 0000000..9915acc --- /dev/null +++ b/server/routers/car-wash/map/index.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.get('/get-map-info', (req, res) => { + switch (req.query.lng) { + case 'en': + res.send(require('./map-info-en.json')) + break + case 'ru': + res.send(require('./map-info-ru.json')) + break + case 'en-En': + res.send(require('./map-info-en.json')) + break + case 'ru-Ru': + res.send(require('./map-info-ru.json')) + break + default: + console.log('Unknown language') + } +}) + +module.exports = router diff --git a/server/routers/car-wash/map/map-info-en.json b/server/routers/car-wash/map/map-info-en.json new file mode 100644 index 0000000..85a2df5 --- /dev/null +++ b/server/routers/car-wash/map/map-info-en.json @@ -0,0 +1,37 @@ +{ + "address": [ + { + "id": "1", + "x": "55.746971", + "y": "48.743549", + "name": "InnoWashing", + "phone": "7654321", + "address": "Russia, Republic of Tatarstan, Verkhneuslonsky District, Innopolis, 106 Sportivnaya Street", + "workingMode": "08:00-20:00", + "services": ["Contactless car wash", "Salon wash"], + "availableTime": ["7.00-8.00", "11.00-12.00", "17.00-18.00", "19.00-20.00", "21.00-22.00"] + }, + { + "id": "2", + "x": "55.754105", + "y": "48.743341", + "name": "Car Wash №1", + "phone": "1234567", + "address": "Russia, Republic of Tatarstan, Verkhneuslonsky District, Innopolis, 1 University Street", + "workingMode": "09:00-20:00", + "services": ["3-in-1 Wash", "Nano Wash", "Salon Wash", "Contactless Wash"], + "availableTime": ["9.00-10.00", "12.00-13.00", "15.00-16.00"] + }, + { + "id": "3", + "x": "55.784105", + "y": "48.733341", + "name": "Hare's car wash", + "phone": "00000", + "address": "Russia, Republic of Tatarstan, Verkhneuslonsky district, Makarievsky forest", + "workingMode": "24 hours", + "services": ["Paw wash", "Juniper wash", "Hose wash"], + "availableTime": ["9.00-24.00"] + } + ] +} \ No newline at end of file diff --git a/server/routers/car-wash/map/map-info-ru.json b/server/routers/car-wash/map/map-info-ru.json new file mode 100644 index 0000000..354ca64 --- /dev/null +++ b/server/routers/car-wash/map/map-info-ru.json @@ -0,0 +1,37 @@ +{ + "address": [ + { + "id": "1", + "x": "55.746971", + "y": "48.743549", + "name": "InnoWashing", + "phone": "7654321", + "address": "Россия, Республика Татарстан, Верхнеуслонский район, Иннополис, Спортивная улица, 106", + "workingMode": "08:00–20:00", + "services": ["Бесконтактная мойка", "Мойка салона"], + "availableTime": ["7.00-8.00", "11.00-12.00", "17.00-18.00", "19.00-20.00", "21.00-22.00"] + }, + { + "id": "2", + "x": "55.754105", + "y": "48.743341", + "name": "Автомойка №1", + "phone": "1234567", + "address": "Россия, Республика Татарстан, Верхнеуслонский район, Иннополис, Университетская улица, 1", + "workingMode": "09:00–20:00", + "services": ["Мойка 3 в 1", "Наномойка", "Мойка салона","Бесконтактная мойка"], + "availableTime": ["9.00-10.00", "12.00-13.00", "15.00-16.00"] + }, + { + "id": "3", + "x": "55.784105", + "y": "48.733341", + "name": "Автомойка у зайца", + "phone": "00000", + "address": "Россия, Республика Татарстан, Верхнеуслонский район, Макарьевский лес", + "workingMode": "24 часа", + "services": ["Мойка лапами", "Мойка можжевеловой мочалкой", "Мойка из шланга"], + "availableTime": ["9.00-24.00"] + } + ] +} \ No newline at end of file diff --git a/server/routers/car-wash/prices/index.js b/server/routers/car-wash/prices/index.js new file mode 100644 index 0000000..c8480ff --- /dev/null +++ b/server/routers/car-wash/prices/index.js @@ -0,0 +1,22 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.get('/get-prices', (req, res) => { + switch (req.query.lng) { + case 'en': + res.send(require('./prices-en.json')) + break + case 'ru': + res.send(require('./prices-ru.json')) + break + case 'en-En': + res.send(require('./prices-en.json')) + break + case 'ru-Ru': + res.send(require('./prices-en.json')) + break + default: + console.log('Unknown language') + } +}) +module.exports = router diff --git a/server/routers/car-wash/prices/prices-en.json b/server/routers/car-wash/prices/prices-en.json new file mode 100644 index 0000000..3fdaf50 --- /dev/null +++ b/server/routers/car-wash/prices/prices-en.json @@ -0,0 +1,59 @@ +{ + "prices": [ + { + "id": "1", + "name": "Contactless car wash", + "price": "459" + }, + { + "id": "2", + "name": "Nanowash", + "price": "759" + }, + { + "id": "3", + "name": "Deluxe wash", + "price": "1559" + }, + { + "id": "4", + "name": "Comprehensive wash", + "price": "859" + }, + { + "id": "5", + "name": "Comprehensive nano wash", + "price": "11559" + }, + { + "id": "6", + "name": "Antireagent", + "price": "1400" + }, + { + "id": "7", + "name": "Antireagent complex", + "price": "1800" + }, + { + "id": "8", + "name": "Express wash", + "price": "250" + }, + { + "id": "9", + "name": "Vacuum cleaner", + "price": "250" + }, + { + "id": "10", + "name": "Glass", + "price": "250" + }, + { + "id": "11", + "name": "Plastic polish", + "price": "250" + } + ] +} diff --git a/server/routers/car-wash/prices/prices-ru.json b/server/routers/car-wash/prices/prices-ru.json new file mode 100644 index 0000000..4e32503 --- /dev/null +++ b/server/routers/car-wash/prices/prices-ru.json @@ -0,0 +1,59 @@ +{ + "prices": [ + { + "id": "1", + "name": "Бесконтактная мойка", + "price": "459" + }, + { + "id": "2", + "name": "Наномойка", + "price": "759" + }, + { + "id": "3", + "name": "Мойка люкс", + "price": "1559" + }, + { + "id": "4", + "name": "Комплексная мойка", + "price": "859" + }, + { + "id": "5", + "name": "Комплексная наномойка", + "price": "11559" + }, + { + "id": "6", + "name": "Антиреагент", + "price": "1400" + }, + { + "id": "7", + "name": "Антиреагент комплекс", + "price": "1800" + }, + { + "id": "8", + "name": "Экспресс-мойка", + "price": "250" + }, + { + "id": "9", + "name": "Пылесос", + "price": "250" + }, + { + "id": "10", + "name": "Стекла", + "price": "250" + }, + { + "id": "11", + "name": "Полироль пластика", + "price": "250" + } + ] +} \ No newline at end of file diff --git a/server/routers/coder/catalog/cardData.json b/server/routers/coder/catalog/cardData.json new file mode 100644 index 0000000..dad6beb --- /dev/null +++ b/server/routers/coder/catalog/cardData.json @@ -0,0 +1,136 @@ +{ "status": "success", + + "dataFeatured": [{ + "title": "Featured", + "items": [{ + "description":"Detailed Explanation of", + "title": "Dynamic Programming", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "/coder/topics/dynamic-programming/", + "progressCard": 0, + "primeContent": null, + "iconCard": "featured1", + "slug": "dynamic-programming", + "categorySlug": "featured" + },{ + "description":"Detailed Explanation of", + "title": "Heap", + "chanptersCount": 4, + "itemCount":28, + "linkToPage": "/coder/topics/heap/", + "progressCard": 0, + "primeContent": null, + "iconCard":"featured2", + "slug": "heap" + + },{ + "description":"Detailed Explanation of", + "title": "Graph", + "chanptersCount": 6, + "itemCount":58, + "linkToPage": "/coder/topics/graph/", + "progressCard": 0, + "primeContent": null, + "iconCard":"featured3", + "slug": "graph" + },{ + "description":"Introductuion to Data Structure", + "title": "Arrays 101", + "chanptersCount": 6, + "itemCount":31, + "linkToPage": "/coder/card/fun-with-arrays/", + "progressCard": 0, + "primeContent": null, + "iconCard":"featured4", + "slug": "fun-with-arrays" + }] + },{ + "title": "Interview", + "items": [{ + "description":"Get Well Prepared for", + "title": "Google Interview", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "coder/interview/card/google/", + "progressCard": 0, + "primeContent": 1, + "iconCard": "interview1", + "slug": "google" + },{ + "description":"Get Well Prepared for", + "title": "Facebook", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "coder/interview/card/facebook/", + "progressCard": 0, + "primeContent": 1, + "iconCard": "interview2", + "slug": "facebook" + },{ + "description":"Top Questions from", + "title": "Microsoft", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "coder/interview/card/microsoft/", + "progressCard": 0, + "primeContent": 1, + "iconCard": "interview3", + "slug": "microsoft" + },{ + "description":"Top Questions from", + "title": "Amazon", + "chanptersCount": 8, + "itemCount":68, + "linkToPage": "coder/interview/card/amazon/", + "progressCard": 0, + "primeContent": 1, + "iconCard": "interview4", + "slug": "amazon" + }] + },{ + "title": "Learn", + "items": [{ + "description":"Detailed Explanation of", + "title": "Graph", + "chanptersCount": 6, + "itemCount":58, + "linkToPage": "coder/learn/card/graph", + "progressCard": 0, + "primeContent": null, + "iconCard": "learn1", + "slug": "graph" + },{ + "description":"Introductuion to Data Structure", + "title": "Arrays 101", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "coder/learn/card/fun-with-arrays", + "progressCard": 0, + "primeContent": null, + "iconCard": "learn2", + "slug": "fun-with-arrays" + },{ + "description":"Introductuion to Data Structure", + "title": "Linked List", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "coder/learn/card/linked-list", + "progressCard": 0, + "primeContent": null, + "iconCard": "learn3", + "slug": "linked-list" + },{ + "description":"Introductuion to Data Structure", + "title": "Binary Tree", + "chanptersCount": 6, + "itemCount":55, + "linkToPage": "coder/learn/card/data-structure-tree", + "progressCard": 0, + "primeContent": null, + "iconCard": "learn4", + "slug": "data-structure-tree" + }] + }] +} + \ No newline at end of file diff --git a/server/routers/coder/catalog/error.json b/server/routers/coder/catalog/error.json new file mode 100644 index 0000000..eb6bf3a --- /dev/null +++ b/server/routers/coder/catalog/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} diff --git a/server/routers/coder/catalog/index.js b/server/routers/coder/catalog/index.js new file mode 100644 index 0000000..9dfe5e1 --- /dev/null +++ b/server/routers/coder/catalog/index.js @@ -0,0 +1,15 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router(); + +router.get('/catalog', (request, response, next) => { + setTimeout(() => next()); +}, (request, response) => { + const params = process.env.stub; + if (params === 'error') { + response.send(require('./error.json')); + } else { + response.send(require('./cardData.json')); + } +}); + +module.exports = router; diff --git a/server/routers/coder/controllers.js b/server/routers/coder/controllers.js new file mode 100644 index 0000000..136f2a5 --- /dev/null +++ b/server/routers/coder/controllers.js @@ -0,0 +1,424 @@ +const { getDB } = require('../../utils/mongo') + +let db = null + +// Database Name +const dbName = 'coder' + +// Collections constant +const TOPIC_TAGS_COLLECTION = 'topic-tags' +const TOPIC_CATEGORIES_COLLECTION = 'topic-categories' +const TOPIC_LIST_COLLECTION = 'topic-list' +const TOPIC_COMMENTS_COLLECTION = 'topic-comments' +const USERS_COLLECTION = 'users' + +// page size +const PAGE_SIZE = 2 + +// TODO убрать из export? +const connect = async () => { + db = await getDB(dbName) +} + +const getCategories = async () => { + // TODO при первом запросе db = null + if (db === null) { + throw new Error('no db connection') + } + + const collection = db.collection(TOPIC_CATEGORIES_COLLECTION) + + const categories = await collection.find({ + }).project({ + _id: 0, + }).toArray() + + if (categories.length === 0) { + const newCategories = require('./forum/categories.json').body + collection.insertMany(newCategories) + return newCategories + } + return categories +} + +const getCategoryByPath = async (path) => { + if (db === null) { + throw new Error('no db connection') + } + + const collection = db.collection(TOPIC_CATEGORIES_COLLECTION) + + const category = await collection.findOne({ + path, + }, { + projection: { + _id: 0, + }, + }) + + if (!category) { + throw new Error('No data') + } + return category +} + +const getTopicById = async (id) => { + if (db === null) { + throw new Error('no db connection') + } + + const topicsCollection = db.collection(TOPIC_LIST_COLLECTION) + + const topic = await topicsCollection + .aggregate([ + { + $match: { + id: Number(id), + }, + }, + { + $limit: 1, + }, + { + $lookup: { + from: USERS_COLLECTION, localField: 'authorId', foreignField: 'id', as: 'author', + }, + }, + { + $unwind: '$author', + }, + { + $lookup: { + from: TOPIC_TAGS_COLLECTION, localField: 'tagsId', foreignField: 'id', as: 'tags', + }, + }, + { + $project: { + id: 0, + categoryId: 0, + authorId: 0, + tagsId: 0, + 'author.id': 0, + 'author._id': 0, + 'tags.id': 0, + 'tags._id': 0, + _id: 0, + }, + }, + ]) + .toArray() + + if (topic.length === 0) { + throw new Error('No data') + } + + return topic[0] +} + +const getCommentsByTopicId = async (id, page) => { + if (db === null) { + throw new Error('no db connection') + } + + if (page === undefined) { + page = 1 + } + + const commentsCollection = db.collection(TOPIC_COMMENTS_COLLECTION) + + let count = await commentsCollection.count({ + }, { + limit: 1, + }) + if (count === 0) { + const newComments = require('./forum/topic-comments.json').body + commentsCollection.insertMany(newComments) + } + + const comments = await commentsCollection + .aggregate([ + { + $match: { + topicId: Number(id), + }, + }, + { + $skip: PAGE_SIZE * Number(page) - PAGE_SIZE, + }, + { + $limit: PAGE_SIZE, + }, + { + $lookup: { + from: USERS_COLLECTION, localField: 'authorId', foreignField: 'id', as: 'author', + }, + }, + { + $unwind: '$author', + }, + { + $project: { + topicId: 0, + authorId: 0, + 'author.id': 0, + 'author._id': 0, + _id: 0, + }, + }, + ]) + .toArray() + + // pagination + count = await commentsCollection.count({ + topicId: Number(id), + }) + const result = { + page, + pageSize: PAGE_SIZE, + total: count, + totalPages: Math.ceil(count / PAGE_SIZE), + comments, + } + + return result +} + +const getTopicsByCategoryId = async (id, page) => { + if (db === null) { + throw new Error('no db connection') + } + + if (page === undefined) { + page = 1 + } + + const topicsCollection = db.collection(TOPIC_LIST_COLLECTION) + + let count = await topicsCollection.count({ + }, { + limit: 1, + }) + if (count === 0) { + const newTopics = require('./forum/topic-list.json').body.items + topicsCollection.insertMany(newTopics) + } + + // TODO delete after auth implementation + const usersCollection = db.collection(USERS_COLLECTION) + const usersCount = await usersCollection.count({ + }, { + limit: 1, + }) + if (usersCount === 0) { + const newUsers = require('./forum/users.json').body + usersCollection.insertMany(newUsers) + } + + const topics = await topicsCollection + .aggregate([ + { + $match: { + categoryId: Number(id), + }, + }, + { + $skip: PAGE_SIZE * Number(page) - PAGE_SIZE, + }, + { + $limit: PAGE_SIZE, + }, + { + $lookup: { + from: USERS_COLLECTION, localField: 'authorId', foreignField: 'id', as: 'author', + }, + }, + { + $unwind: '$author', + }, + { + $project: { + id: 1, + title: 1, + commentCount: 1, + viewCount: 1, + voteCount: 1, + creationDate: 1, + 'author.name': 1, + 'author.avatar': 1, + _id: 0, + }, + }, + ]) + .toArray() + + if (topics.length === 0) { + throw new Error('No data') + } + + // pagination + count = await topicsCollection.count({ + categoryId: Number(id), + }) + const result = { + page, + pageSize: PAGE_SIZE, + total: count, + totalPages: Math.ceil(count / PAGE_SIZE), + topics, + } + + return result +} + +const getTags = async () => { + if (db === null) { + throw new Error('no db connection') + } + + const tagsCollection = db.collection(TOPIC_TAGS_COLLECTION) + + const count = await tagsCollection.count({ + }, { + limit: 1, + }) + if (count === 0) { + const newTags = require('./forum/topic-tags.json').body + tagsCollection.insertMany(newTags) + } + + const tags = await tagsCollection.find({ + }).project({ + _id: 0, + }).toArray() + + if (tags.length === 0) { + throw new Error('No data') + } + + return tags +} + +const findTags = async (value) => { + if (db === null) { + throw new Error('no db connection') + } + const tagsCollection = db.collection(TOPIC_TAGS_COLLECTION) + + const tags = await tagsCollection + .find({ + name: { + $regex: `${value}`, + }, + }) + .project({ + _id: 0, + }) + .toArray() + + return tags +} + +const insertTag = async (value) => { + if (db === null) { + throw new Error('no db connection') + } + const tagsCollection = db.collection(TOPIC_TAGS_COLLECTION) + // TODO no fast, reimplement + const count = await tagsCollection.estimatedDocumentCount() + + await tagsCollection.insertOne({ + id: count + 1, + name: value, + numTopics: 0, + }) + + return count + 1 +} + +const insertComment = async (comment) => { + if (db === null) { + throw new Error('no db connection') + } + const commentsCollection = db.collection(TOPIC_COMMENTS_COLLECTION) + // TODO no fast, reimplement + // TODO может перейти на _id? + const count = await commentsCollection.estimatedDocumentCount() + + const currentTime = Math.round(new Date().getTime() / 1000) + + await commentsCollection.insertOne({ + id: count + 1, + topicId: comment.topicId, + voteCount: 0, + content: comment.content, + updationDate: currentTime, + creationDate: currentTime, + authorId: comment.authorId, + authorIsModerator: false, + isOwnPost: false, + }) + + return comment +} + +const insertTopic = async (topic) => { + if (db === null) { + throw new Error('no db connection') + } + const topicsCollection = db.collection(TOPIC_LIST_COLLECTION) + // TODO no fast, reimplement + // TODO может перейти на _id? + const count = await topicsCollection.estimatedDocumentCount() + + const currentTime = Math.round(new Date().getTime() / 1000) + + const tagsId = [] + + if (topic.tags) { + for (let index = 0; index < topic.tags.length; index++) { + const tag = topic.tags[index] + if (tag.id === 0) { + const tagId = await insertTag(tag.name) + tagsId.push(tagId) + } else { + tagsId.push(tag.id) + } + } + } + + const result = await topicsCollection.insertOne({ + id: count + 1, + categoryId: topic.categoryId, + title: topic.title, + commentCount: 0, + viewCount: 0, + tagsId, + voteCount: 0, + voteStatus: 0, + content: topic.content, + updationDate: currentTime, + creationDate: currentTime, + authorId: topic.authorId, + isOwnPost: true, + }) + + if (!result.insertedId) { + throw new Error('Insert data failed, try again later') + } + + return count + 1 +} + +module.exports = { + connect, + getTags, + findTags, + insertTag, + getCategories, + getTopicsByCategoryId, + getTopicById, + getCommentsByTopicId, + insertComment, + insertTopic, + getCategoryByPath, +} diff --git a/server/routers/coder/forum/categories.json b/server/routers/coder/forum/categories.json new file mode 100644 index 0000000..5e15ea1 --- /dev/null +++ b/server/routers/coder/forum/categories.json @@ -0,0 +1,49 @@ +{ + "success": true, + "body": [ + { + "id": 1, + "title": "Interview Question", + "description": "Share and discuss questions from real technical interviews", + "path": "interview-question" + }, + { + "id": 2, + "title": "Interview Experience", + "description": "Share details about the interview processes you have been through", + "path": "interview-experience" + }, + { + "id": 3, + "title": "Compensation", + "description": "What kind of offers have you received? Share it here!", + "path": "compensation" + }, + { + "id": 4, + "title": "Career", + "description": "Question about working in the tech industry? Discuss your career questions here.", + "path": "career" + }, + { + "id": 5, + "title": "Study Guide", + "description": "Share your study guide or summaries for certain topics/patterns", + "path": "study-guide" + }, + { + "id": 6, + "title": "General Discussion", + "description": "Discuss anything not covered in other categories", + "path": "general-discussion" + }, + { + "id": 7, + "title": "Support & Feedback", + "description": "Get help on issues or submit feedback regarding LeetCode", + "path": "feedback" + } + ], + "errors": [], + "warnings": [] +} diff --git a/server/routers/coder/forum/error.json b/server/routers/coder/forum/error.json new file mode 100644 index 0000000..eb6bf3a --- /dev/null +++ b/server/routers/coder/forum/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} diff --git a/server/routers/coder/forum/index.js b/server/routers/coder/forum/index.js new file mode 100644 index 0000000..c1ca4d9 --- /dev/null +++ b/server/routers/coder/forum/index.js @@ -0,0 +1,96 @@ +const router = require('express').Router(); + +const { getResponse } = require('../../../utils/common'); +const { + getTags, + connect, + findTags, + insertTag, + getCategories, + getTopicsByCategoryId, + getTopicById, + getCommentsByTopicId, + insertComment, + getCategoryByPath, + insertTopic, +} = require('../controllers'); + +connect(); + +router.get('/forum/topic-categories', async (req, res) => { + const errors = []; + const categories = await getCategories().catch((e) => errors.push(e.message)); + res.send(getResponse(errors, categories)); +}); + +router.get('/forum/topic-categories/:groupId', async (req, res) => { + const errors = []; + const category = await getCategoryByPath(req.params.groupId).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, category)); +}); + +router.get('/forum/topic-comments/:topicId', async (req, res) => { + const errors = []; + const comments = await getCommentsByTopicId(req.params.topicId, req.query.page).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, comments)); +}); + +router.post('/forum/topic-comments', async (req, res) => { + const errors = []; + if (!req.body) { + errors.push('Bad request, no body'); + res.send(getResponse(errors, undefined)); + } else { + const comment = await insertComment(req.body).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, comment)); + } +}); + +router.get('/forum/topic-list/:id', async (req, res) => { + const errors = []; + const topics = await getTopicsByCategoryId(req.params.id, req.query.page).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, topics)); +}); + +router.get('/forum/topic/:id', async (req, res) => { + const errors = []; + const topic = await getTopicById(req.params.id).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, topic)); +}); + +router.post('/forum/topic', async (req, res) => { + const errors = []; + if (!req.body) { + errors.push('Bad request, no body'); + res.send(getResponse(errors, undefined)); + } else { + const topic = await insertTopic(req.body).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, topic)); + } +}); + +router.get('/forum/topic-tags', async (req, res) => { + const errors = []; + if (req.query.search !== undefined) { + const tags = await findTags(req.query.search).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, tags)); + } else { + const tags = await getTags().catch((e) => errors.push(e.message)); + res.send(getResponse(errors, tags)); + } +}); + +router.post('/forum/topic-tags', async (req, res) => { + const errors = []; + const tags = await insertTag(req.body?.name).catch((e) => errors.push(e.message)); + res.send(getResponse(errors, tags)); +}); + +router.get('/forum/stub/:data', (request, response) => { + console.log(request.params); + process.env.stub = request.params.data; + + response.sendStatus(200); +}); + +module.exports = router; diff --git a/server/routers/coder/forum/topic-comments.json b/server/routers/coder/forum/topic-comments.json new file mode 100644 index 0000000..4a7b69e --- /dev/null +++ b/server/routers/coder/forum/topic-comments.json @@ -0,0 +1,29 @@ +{ + "success": true, + "body": [ + { + "id": 1, + "topicId": 1, + "voteCount": 36, + "content": "wish for offer", + "updationDate": 1563064458, + "creationDate": 1563064458, + "authorId": 1, + "authorIsModerator": false, + "isOwnPost": false + }, + { + "id": 2, + "topicId": 1, + "voteCount": 10, + "content": "Thank you for your explantion", + "updationDate": 1559050657, + "creationDate": 1559050657, + "authorId": 1, + "authorIsModerator": false, + "isOwnPost": false + } + ], + "errors": [], + "warnings": [] +} diff --git a/server/routers/coder/forum/topic-list.json b/server/routers/coder/forum/topic-list.json new file mode 100644 index 0000000..9f784f5 --- /dev/null +++ b/server/routers/coder/forum/topic-list.json @@ -0,0 +1,235 @@ +{ + "success": true, + "body": { + "totalNum": 15, + "items": [ + { + "id": 1, + "categoryId": 1, + "title": "How to write an Interview Question post", + "commentCount": 2, + "viewCount": 0, + "tagsId": [1, 2], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1524865315, + "creationDate": 1524865315, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 2, + "categoryId": 1, + "title": "Microsoft Online Assessment Questions", + "commentCount": 0, + "viewCount": 0, + "tagsId": [1, 2], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1570318826, + "creationDate": 1570318826, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 3, + "categoryId": 2, + "title": "Google Online Assessment Questions", + "commentCount": 0, + "viewCount": 0, + "tagsId": [1], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1565090199, + "creationDate": 1565090199, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 4, + "categoryId": 2, + "title": "Meta | March 2022 | Onsite USA E4", + "commentCount": 0, + "viewCount": 0, + "tagsId": [3, 4], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649546823, + "creationDate": 1649546823, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 5, + "categoryId": 2, + "title": "Flipkart | SDE 2 | Machine Coding", + "commentCount": 0, + "viewCount": 0, + "tagsId": [4, 5, 6], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649599102, + "creationDate": 1649599102, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 6, + "categoryId": 3, + "title": "Google | SDE (L4/L5) | Virtual Onsite | PENDING", + "commentCount": 0, + "viewCount": 0, + "tagsId": [7, 8], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649537604, + "creationDate": 1649537604, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 7, + "categoryId": 3, + "title": "Leetcode not taking track of submission and not filled the active days box", + "commentCount": 0, + "viewCount": 0, + "tagsId": [11, 12], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649486170, + "creationDate": 1649486170, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 8, + "categoryId": 4, + "title": "Salesforce India || AMTS (2022 Graduate) || Online Assessment || Off Campus", + "commentCount": 0, + "viewCount": 0, + "tagsId": [10, 20], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649572752, + "creationDate": 1649572752, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 9, + "categoryId": 5, + "title": "Meta | February Phone Interview | E4 | USA", + "commentCount": 0, + "viewCount": 0, + "tagsId": [14, 15], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649462307, + "creationDate": 1649462307, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 10, + "categoryId": 5, + "title": "Maximize minimum array", + "commentCount": 0, + "viewCount": 0, + "tagsId": [11, 7], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649652616, + "creationDate": 1649652616, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 11, + "categoryId": 6, + "title": "Yelp | London | April 2022 | Screening + Virtual On-Site | Full Stack Role", + "commentCount": 0, + "viewCount": 0, + "tagsId": [7, 12], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649637943, + "creationDate": 1649637943, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 12, + "categoryId": 6, + "title": "[System Design Question] Design a Game Matching system", + "commentCount": 0, + "viewCount": 0, + "tagsId": [8, 11], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649637516, + "creationDate": 1649637516, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 13, + "categoryId": 6, + "title": "Uber | Data Analyst | SF | 2022-04", + "commentCount": 0, + "viewCount": 0, + "tagsId": [1, 12], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649625709, + "creationDate": 1649625709, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 14, + "categoryId": 7, + "title": "Google Online Assessment", + "commentCount": 0, + "viewCount": 0, + "tagsId": [11, 2], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649622307, + "creationDate": 1649622307, + "authorId": 1, + "isOwnPost": true + }, + { + "id": 15, + "categoryId": 7, + "title": "Amazon || SDE 2 || OA", + "commentCount": 0, + "viewCount": 0, + "tagsId": [], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1649619969, + "creationDate": 1649619969, + "authorId": 1, + "isOwnPost": true + } + ] + }, + "errors": [], + "warnings": [] +} diff --git a/server/routers/coder/forum/topic-tags.json b/server/routers/coder/forum/topic-tags.json new file mode 100644 index 0000000..53ac70f --- /dev/null +++ b/server/routers/coder/forum/topic-tags.json @@ -0,0 +1,107 @@ +{ + "success": true, + "body": [ + { + "id": 1, + "name": "google", + "numTopics": 0 + }, + { + "id": 2, + "name": "phone screen", + "numTopics": 0 + }, + { + "id": 3, + "name": "amazon", + "numTopics": 0 + }, + { + "id": 4, + "name": "facebook", + "numTopics": 0 + }, + { + "id": 5, + "name": "online assessment", + "numTopics": 0 + }, + { + "id": 6, + "name": "onsite", + "numTopics": 0 + }, + { + "id": 7, + "name": "system design", + "numTopics": 0 + }, + { + "id": 8, + "name": "microsoft", + "numTopics": 0 + }, + { + "id": 9, + "name": "online assesment", + "numTopics": 0 + }, + { + "id": 10, + "name": "graph", + "numTopics": 0 + }, + { + "id": 11, + "name": "uber", + "numTopics": 0 + }, + { + "id": 12, + "name": "intern", + "numTopics": 0 + }, + { + "id": 13, + "name": "amazon online assesment", + "numTopics": 0 + }, + { + "id": 14, + "name": "bloomberg", + "numTopics": 0 + }, + { + "id": 15, + "name": "amazon interview", + "numTopics": 0 + }, + { + "id": 16, + "name": "new grad", + "numTopics": 0 + }, + { + "id": 17, + "name": "interview", + "numTopics": 0 + }, + { + "id": 18, + "name": "amazon sde2", + "numTopics": 0 + }, + { + "id": 19, + "name": "array", + "numTopics": 0 + }, + { + "id": 20, + "name": "phone-interview", + "numTopics": 0 + } + ], + "errors": [], + "warnings": [] +} diff --git a/server/routers/coder/forum/topic.json b/server/routers/coder/forum/topic.json new file mode 100644 index 0000000..e28a7b3 --- /dev/null +++ b/server/routers/coder/forum/topic.json @@ -0,0 +1,20 @@ +{ + "success": true, + "body": { + "id": 1, + "categoryId": 1, + "title": "How to write an Interview Question post", + "commentCount": 2, + "viewCount": 0, + "tagsId": [1, 2], + "voteCount": 0, + "voteStatus": 0, + "content": "## Heading level 2\n#### Heading level 4\nI just love **bold text**.\nItalicized text is the _cat's meow_.\n- Revenue was off the chart.\n- Profits were higher than ever.\n", + "updationDate": 1648229493, + "creationDate": 1524865315, + "authorId": 1, + "isOwnPost": true + }, + "errors": [], + "warnings": [] +} diff --git a/server/routers/coder/forum/users.json b/server/routers/coder/forum/users.json new file mode 100644 index 0000000..c77a4c8 --- /dev/null +++ b/server/routers/coder/forum/users.json @@ -0,0 +1,6 @@ +{ + "success": true, + "body": [{ "id": 1, "name": "Test", "avatar": "https://s3-us-west-1.amazonaws.com/s3-lc-upload/assets/default_avatar.jpg" }], + "errors": [], + "warnings": [] +} diff --git a/server/routers/coder/index.js b/server/routers/coder/index.js new file mode 100644 index 0000000..c84f996 --- /dev/null +++ b/server/routers/coder/index.js @@ -0,0 +1,8 @@ +// eslint-disable-next-line new-cap +const router = require('express').Router() + +router.use(require('./forum')) +router.use(require('./catalog')) +router.use(require('./topic')) + +module.exports = router diff --git a/server/routers/coder/topic/dynamic-programming.json b/server/routers/coder/topic/dynamic-programming.json new file mode 100644 index 0000000..6e24fbb --- /dev/null +++ b/server/routers/coder/topic/dynamic-programming.json @@ -0,0 +1,27 @@ +{ + "status": "success", + "title" : "Dynamic Programming", + "slug":"dynamic-programming", + "overview":"In this explore card, we're going to go over the basics of DP, provide you with a framework for solving DP problems, learn about common patterns, and walk through many examples.", + "chapters": [ + { + "title" : "Dynamic Programming", + "section" : "dynamic-programming", + "isLock" : false, + "content" : "

Динамическое программирование

" + }, + { + "title" : "Arrays and Strings", + "section" : "arrays-and-strings", + "isLock" : false, + "content" : "

Массивы и строки

" + }, + { + "title" : "Linked list", + "section" : "linked-list", + "isLock" : true, + "content" : "

Ссылочный список

" + } + ] +} + \ No newline at end of file diff --git a/server/routers/coder/topic/dynamic-programming/arrays-and-strings.json b/server/routers/coder/topic/dynamic-programming/arrays-and-strings.json new file mode 100644 index 0000000..a06974f --- /dev/null +++ b/server/routers/coder/topic/dynamic-programming/arrays-and-strings.json @@ -0,0 +1,10 @@ +{ + "title" : "Arrays and Strings", + "slug" : "arrays-and-strings", + "content": [ + {"data":"## Arrays and String"}, + {"data":"An array is a collection of similar type of elements that are stored in a contiguous memory location. Arrays can contain primitives(int, char, etc) as well as object(non-primitives) references of a class depending upon the definition of the array. In the case of primitive data type, the actual values are stored in contiguous memory locations whereas in the case of objects of a class the actual objects are stored in the heap segment. In Java, all the arrays are allocated dynamically. The size of an array must be specified by an int value and not long or short. The array index starts from 0 and goes up to n-1 where n is the length of the array."}, + {"data":"#### Array Declaration Syntax"}, + {"data": "An array declaration has two components: the type and the var-name. The type declares the element type of the array. The element type determines the data type of each element that comprises the array. The var-name declares the name of the array variable. Like an array of int type, we can also create an array of other primitive data types like char, float, double…etc."} + ] +} diff --git a/server/routers/coder/topic/dynamic-programming/dynamic-programming.json b/server/routers/coder/topic/dynamic-programming/dynamic-programming.json new file mode 100644 index 0000000..59d9819 --- /dev/null +++ b/server/routers/coder/topic/dynamic-programming/dynamic-programming.json @@ -0,0 +1,10 @@ +{ + "title": "Dynamic programming", + "slug": "dynamic-programming", + "content": [ + {"data":"## Hello markdown"}, + {"data":"Dynamic programming is both a mathematical optimization method and a computer programming method. The method was developed by Richard Bellman in the 1950s and has found applications in numerous fields, from aerospace engineering to economics. In both contexts it refers to simplifying a complicated problem by breaking it down into simpler sub-problems in a recursive manner. While some decision problems cannot be taken apart this way, decisions that span several points in time do often break apart recursively. Likewise, in computer science, if a problem can be solved optimally by breaking it into sub-problems and then recursively finding the optimal solutions to the sub-problems, then it is said to have optimal substructure.If sub-problems can be nested recursively inside larger problems, so that dynamic programming methods are applicable, then there is a relation between the value of the larger problem and the values of the sub-problems.[1] In the optimization literature this relationship is called the Bellman equation."}, + {"data":"#### Mathematical optimization"}, + {"data": "In terms of mathematical optimization, dynamic programming usually refers to simplifying a decision by breaking it down into a sequence of decision steps over time. This is done by defining a sequence of value functions V1, V2, ..., Vn taking y as an argument representing the state of the system at times i from 1 to n. The definition of Vn(y) is the value obtained in state y at the last time n. The values Vi at earlier times i = n −1, n − 2, ..., 2, 1 can be found by working backwards, using a recursive relationship called the Bellman equation. For i = 2, ..., n, Vi−1 at any state y is calculated from Vi by maximizing a simple function (usually the sum) of the gain from a decision at time i − 1 and the function Vi at the new state of the system if this decision is made. Since Vi has already been calculated for the needed states, the above operation yields Vi−1 for those states. Finally, V1 at the initial state of the system is the value of the optimal solution. The optimal values of the decision variables can be recovered, one by one, by tracking back the calculations already performed."} + ] +} diff --git a/server/routers/coder/topic/dynamic-programming/linked-list.json b/server/routers/coder/topic/dynamic-programming/linked-list.json new file mode 100644 index 0000000..01402ac --- /dev/null +++ b/server/routers/coder/topic/dynamic-programming/linked-list.json @@ -0,0 +1,8 @@ +{ + "title" : "Linked list", + "slug" : "linked-list", + "content": [ + {"data":"# Hello markdown"}, + {"data":"# Hello markdown"} + ] +} diff --git a/server/routers/coder/topic/dynamic-programming/overview.json b/server/routers/coder/topic/dynamic-programming/overview.json new file mode 100644 index 0000000..9ca1f3d --- /dev/null +++ b/server/routers/coder/topic/dynamic-programming/overview.json @@ -0,0 +1,8 @@ +{ + "title" : "Overview", + "slug" : "overview", + "content": [ + {"data":"## Overview"}, + {"data":"In this explore card, we're going to go over the basics of DP, provide you with a framework for solving DP problems, learn about common patterns, and walk through many examples.No prior knowledge of DP is required for this card, but you will need a solid understanding of recursion, a basic understanding of what greedy algorithms are, and general knowledge such as big O and hash tables. If you aren't familiar with recursion yet, check out the recursion explore card first."} + ] +} diff --git a/server/routers/coder/topic/error.json b/server/routers/coder/topic/error.json new file mode 100644 index 0000000..eb6bf3a --- /dev/null +++ b/server/routers/coder/topic/error.json @@ -0,0 +1,3 @@ +{ + "status": "error" +} diff --git a/server/routers/coder/topic/index.js b/server/routers/coder/topic/index.js new file mode 100644 index 0000000..7ebc0b7 --- /dev/null +++ b/server/routers/coder/topic/index.js @@ -0,0 +1,30 @@ +const router = require('express').Router() + +router.get('/gettopic/:topic/:section', (request, response) => { + const topic = request.params.topic + let section = request.params.section + + if (!topic || !section) { + response.send(require('./error.json')) + } else { + response.send( + // require(`./${topic}/${section}.json`) + require(`./dynamic-programming/${section}.json`), + ) + } +}) + +router.get('/gettopic/:topic', (request, response) => { + const topic = request.params.topic + + if (!topic) { + response.send(require('./error.json')) + } else { + response.send( + // require(`./${topic}.json`) + require('./dynamic-programming.json'), + ) + } +}) + +module.exports = router diff --git a/server/routers/easy-project/auth.js b/server/routers/easy-project/auth.js new file mode 100644 index 0000000..59fe821 --- /dev/null +++ b/server/routers/easy-project/auth.js @@ -0,0 +1,48 @@ +const router = require('express').Router() +const jwt = require('jsonwebtoken') +const { JWT_SECRET } = require('./constants') +const { registrationUser, signInUser } = require('./db') +const { requiredFields, responseWrapper } = require('./utils') + +router.get('/healthcheck', (req, res) => { + res.send(true) +}) + +router.post('/registration', requiredFields(['email', 'login', 'password']), async (req, res, next) => { + const { email, login, password, ...rest } = req.body + + try { + await registrationUser({ + email, login, password, ...rest, + }) + + res.send(responseWrapper(undefined, { + })) + } catch (e) { + next(e) + } +}) + +router.post('/sign-in', requiredFields(['email', 'password']), async (req, res, next) => { + const { email, password } = req.body + + try { + const user = await signInUser({ + email, password, + }) + + req.session.user = user + + const token = jwt.sign({ + id: user._id, + }, JWT_SECRET) + + res.send(responseWrapper(undefined, { + token, user, + })) + } catch (e) { + next(e) + } +}) + +module.exports = router diff --git a/server/routers/easy-project/constants.js b/server/routers/easy-project/constants.js new file mode 100644 index 0000000..e8b7f4a --- /dev/null +++ b/server/routers/easy-project/constants.js @@ -0,0 +1,30 @@ +const JWT_SECRET = `MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDsZZ+2H3Q0uvFh +JohVkLKGUGR0dJRo801QbH/UMQjsuIYPExn4wLHr06ALGb3WQe+hiERthsJu3veV +38AuQ3YHE1mcD5KRwkBflqc+lldp1JyZm8qPO1PLCJBc/553EPV16MbuDdmdxoY5 +Uk2X5b3+UVjzDY83Pd9YFa3i42y7wREKj7csTxJPGXGvFDtCgyhhH3vjtd91pCg8 +nuXuFShv5HI5S2ffBbxj/p8rjIK+a+DOw2zKEeYN3G5OLCVsmBow76KQZyVmmYAq +Qnlut0s0HbNX8Deo70iib35AEts00ey+2Y5gJh4Lq8tCpSeFlO0mQ13g/jN8jDxu +mnoluhQnAgMBAAECggEARG4KdHLYdacj1maMEpDHTOAapCdXCqZbXAt8WVU0aynj +DJwP6ZUGK+jfrDbwYARINK84d6gJwoRikQzrGblHgjbUurs7R1w+vCzlDtYASc9U +4ZZaZWncEKrS90i7e2X6V/5hD2oM84ITOqabdXv4qpSrtffX3DrZ2yqzYjlJMXPc +VT+qqG8pDEhluJWO+CQBr3L7kk69S1s6ehlVh7OFOvtCXTPfwM23NrwDSRp+kx9x +GikhoPUFZL6FZttJxzgonW10Yi4MvlCNHuWs5F1vfK0b3eG9FsGsvclBd9E0P75i +iQeWG+Ecf81XWaqmaKMvQv5upK0jwEvHBEa6IXhoiQKBgQD+XPv68a8TKlbdg0UY +YYKbs+U/7v0ZcRwkweYTPrhg1cO91nRk8e9OXnD+Boqk2zMojLI9FEF7qf13LY9X +Ue9XikgoDQAIg6bS92FUx5KoyxOnQcDdTenhZZ7dbF0qXn8KBz5EXgPxMVfS3hhk +uZ7PBWbeXtnVyvV+7ymjzX/PDQKBgQDt6wslvUrlLLPDE9bqO+Zi7sYPyQXphRWS +IvG4SisKa0Fo/MCgAP+0hfLBXgl+z+JQFmxpGaZIHikgwI0JA2jQLYdTAcjMiWHn +bxtw+dvOyp8xMjDg0cKuSs798zW1ylGdBvOKMcB4tJK66ahNPoGfd/iVpqkXCCJO +rptTRaODAwKBgDknn58li1ddHiOsCWyPDI/7/jk9dDWxSsefohkU8M0he1g+xeyg +yErtwanywliEwJwN8Ub0NDqbWc7bt+fBC2y6L7iAI0/GdUfWOlKYfYXcC9B7X+Da +TwFMmkPaw5xvm1AfjIhEL9KUac2CBi0r4FlYN2MkIQJ/FmatSsf5twxJAoGBALp8 +5E3+pDgi4/zjDjCoJxwhISq6XWH/qTrVHTdhG3+dNrY+eBZy8fvkirW7KiI2fKRe +DzgKnOYmjgJYK7SG8Z9MMKiF24lHnnA0DQRvNTZQaJu9RcbTZJANn1Y7Tzxhi7tT ++Y23FbEHiYPtJrj1Z9FBzp4u9pdRDuMxxhptmY9VAoGANasQyyWaNmJNFqK2OZRk +HhKwV5AXk7Q0F3YbGXOUUmlsQw+wYVtQmyThYESMbS3T9ccjTO1avCDZNcBYnKir +xkMh3KPVALIbolNjaac7TZ+CCu4VL99hCQVerVZqMivXiqmjjioobX3fspQl9nZL +h+adTrBTkdlVVgHE8TNs88Q=` + +module.exports = { + JWT_SECRET, +} diff --git a/server/routers/easy-project/db.js b/server/routers/easy-project/db.js new file mode 100644 index 0000000..4db8ff7 --- /dev/null +++ b/server/routers/easy-project/db.js @@ -0,0 +1,410 @@ +const { v4: uuid } = require('uuid') +const ObjectId = require('mongodb').ObjectID + +const { getDB } = require('../../utils/mongo') +const { _idToId, checkDB, _idToIdArray, filterId } = require('./utils') + +let db = null + +const USERS_COLL = 'ep_users' +const PROJECTS_COLL = 'ep_all_projects' +const PROJECT_TASKS_COLL = 'ep_projects_tasks' +const PROJECT_MEMBERS_COLL = 'ep_projects_members' +const PROJECT_STATUSES_COLL = 'ep_projects_statuses' +const PROJECT_TYPES_COLL = 'ep_projects_types' + +const connect = async () => { + db = await getDB('easy-project') + if (db === null) throw new Error('Нет подключения к базе данных') +} + +connect() + +const hashPassword = (password, salt = uuid(), salt2 = uuid(), salt3 = uuid()) => ({ + password: (password.split('').join(salt) + salt2 + password.split('').join(salt3)).split('-').reverse().join('-'), + salt, + salt2, + salt3, +}) + +const registrationUser = async ({ email, login, password, ...rest }) => { + checkDB(db) + const usersCollection = db.collection(USERS_COLL) + const userExist = await usersCollection.find({ + $or: [{ + login, + }, { + email, + }], + }).toArray() + + if (userExist.length) { + if (userExist[0].login === login) { + throw new Error('Логин уже занят') + } + if (userExist[0].email === email) { + throw new Error('Email уже занят') + } + } + + const { password: hash, salt, salt2, salt3 } = hashPassword(password) + + const user = { + salt, + salt2, + salt3, + hash, + login, + email, + ...rest, + } + + const { insertedId } = await usersCollection.insertOne(user) + user.id = insertedId +} + +const signInUser = async ({ email, password }) => { + checkDB(db) + + const usersCollection = db.collection(USERS_COLL) + + const [userCandidate] = await usersCollection.find({ + email, + }).toArray() + + if (!userCandidate) { + throw new Error('Email или пароль не корректный') + } + const { salt, salt2, salt3, hash, ...cleanUser } = userCandidate + const { password: hashFromDb } = hashPassword(password, salt, salt2, salt3) + + if (hash !== hashFromDb) { + throw new Error('Email или пароль не корректный') + } + + return cleanUser +} + +const getMyProjects = async (userId) => { + checkDB(db) + + const userFilterById = filterId(userId) + + const projectCollection = db.collection(PROJECTS_COLL) + const usersCollection = db.collection(USERS_COLL) + + let projectList = await projectCollection.find({ + $or: [{ + userId, + }, { + members: { + $in: [userId], + }, + }], + }).toArray() + + if (projectList) { + const [userAuthor] = await usersCollection.find(userFilterById).toArray() + for (let index = 0; index < projectList.length; index++) { + projectList[index].author = userAuthor + projectList[index] = _idToId(projectList[index]) + } + return projectList + } + return [] +} + +const deleteProjectById = async (projectId) => { + checkDB(db) + + const projectCollection = db.collection(PROJECTS_COLL) + const projectFilterById = filterId(projectId) + const deleted = await projectCollection.deleteOne(projectFilterById) + return deleted +} + +const getMyProjectById = async (userId, projectId) => { + checkDB(db) + + const projectCollection = db.collection(PROJECTS_COLL) + const usersCollection = db.collection(USERS_COLL) + + const userFilterById = filterId(userId) + + const [userAuthor] = await usersCollection.find(userFilterById).toArray() + + const projectFilter = filterId(projectId) + + let [projectMyExist] = await projectCollection.find(projectFilter).toArray() + + const members = await usersCollection.find({ + _id: { + $in: projectMyExist.members.map((memberId) => new ObjectId(memberId)), + }, + }).toArray() + + projectMyExist.members = members.map((m) => ({ + value: m._id, label: m.email, + })) + projectMyExist.author = userAuthor + + projectMyExist = _idToId(projectMyExist) + + return projectMyExist +} + +const newProject = async ({ + title, + code, + userId, + members, +}) => { + checkDB(db) + + if (!title || !code) { + throw new Error('Fields can\'t be empty') + } + + const projectCollection = db.collection(PROJECTS_COLL) + + const project = { + title, + code, + userId, + created: Date.now(), + changed: Date.now(), + changedBy: userId, + taskIndex: 0, + members, + } + + await projectCollection.insertOne(project) + + return _idToId(project) +} + +const updateProject = async ({ projectId, title, code, members }) => { + checkDB(db) + + if (!title || !code) { + throw new Error('Fields can\'t be empty') + } + const projectCollection = db.collection(PROJECTS_COLL) + + const projectFilterById = filterId(projectId) + + const updatedProject = await projectCollection.updateOne(projectFilterById, { + $set: { + title, + code, + changed: Date.now(), + members, + }, + }) + + return updatedProject +} + +// TODO: Совмещение projectId с userId ИЛИ поиск по memberIds +const getProjectById = async ({ projectId }) => { + checkDB(db) + + const projectFilterById = filterId(projectId) + + const projectCollection = db.collection(PROJECTS_COLL) + const [projectExist] = await projectCollection.find(projectFilterById).toArray() + + return projectExist +} + +const getTaskById = async ({ taskId, userId }) => { + checkDB(db) + if (taskId) { + const userFilterById = filterId(userId) + const taskFilterById = filterId(taskId) + + const taskCollection = db.collection(PROJECT_TASKS_COLL) + const usersCollection = db.collection(USERS_COLL) + let [taskExist] = await taskCollection.find(taskFilterById).toArray() + + if (taskExist) { + const [userAuthor] = await usersCollection.find(userFilterById).toArray() + taskExist.author = userAuthor + return _idToId(taskExist) + } + } + return { + } +} + +const createTask = async ({ taskData, authorId, projectId }) => { + checkDB(db) + + const projectCollection = db.collection(PROJECTS_COLL) + const projectFilterById = filterId(projectId) + + const [projectExist] = await projectCollection.find(projectFilterById).toArray() + + if (!projectExist) { + throw new Error('The project not exists [createTask]') + } + + const nextIndex = projectExist.taskIndex + 1 + + const taskCollection = db.collection(PROJECT_TASKS_COLL) + + const { type, status, ...taskRest } = taskData + + const task = { + ...taskRest, + type: Number(type), + status: Number(status), + changed: Date.now(), + created: Date.now(), + taskIndex: nextIndex, + authorId, + projectId, + } + + await projectCollection.updateOne(projectFilterById, { + $set: { + taskIndex: nextIndex, + projectChanged: Date.now(), + }, + }) + + await taskCollection.insertOne(task) + + return _idToId(task) +} + +const getTaskListByProjectId = async ({ projectId }) => { + checkDB(db) + + const projectFilterById = filterId(projectId) + + const projectCollection = db.collection(PROJECTS_COLL) + const [projectExist] = await projectCollection.find(projectId).toArray() + + if (!projectExist) { + throw new Error('The project not exists [getTaskListByProjectId]') + } + + const taskCollection = db.collection(PROJECT_TASKS_COLL) + let taskListCandidate = await taskCollection.find({ + projectId, + }).toArray() + + // if (taskListCandidate.length > 0) { + // for (let index = 0; index < taskListCandidate.length; index++) { + // // const [userAuthor] = await usersCollection.find(userFilterById).toArray() + // // taskListCandidate[index].author = userAuthor + // projectExist[index] = _idToId(projectExist[index]) + // } + // } + + taskListCandidate = _idToIdArray(taskListCandidate) + + return taskListCandidate +} + +const editTask = async ({ taskData, projectId, authorId, taskId }) => { + checkDB(db) + + const taskCollection = db.collection(PROJECT_TASKS_COLL) + const projectCollection = db.collection(PROJECTS_COLL) + + const taskFilterById = filterId(taskId) + const projectFilterById = filterId(projectId) + + const { type, status, ...taskRest } = taskData + + const updatedTask = await taskCollection.updateOne(taskFilterById, { + $set: { + type: Number(type), + status: Number(status), + ...taskRest, + }, + }) + + await projectCollection.updateOne(projectFilterById, { + $set: { + projectChanged: Date.now(), + }, + }) + + return updatedTask +} + +const deleteTaskById = async (taskId) => { + checkDB(db) + + const taskCollection = db.collection(PROJECT_TASKS_COLL) + const taskFilterById = filterId(taskId) + const deleted = await taskCollection.deleteOne(taskFilterById) + return deleted +} + +const getAllUsers = async () => { + checkDB(db) + + const usersCollection = db.collection(USERS_COLL) + + let allUsers = await usersCollection.find().toArray() + + return _idToIdArray(allUsers) +} + +// const getProjectMember = async () => { +// checkDB(db) + +// const usersCollection = db.collection(USERS_COLL) + +// let allUsers = await usersCollection.find().toArray() + +// return _idToIdArray(allUsers) +// } + +const updateProjectMembers = async (projectData, members) => { + checkDB(db) + + const memberCollection = db.collection(PROJECT_MEMBERS_COLL) + + await memberCollection.deleteMany({ + projectId: projectData.id, + }) + + const membersAdd = [] + + for (let memberIndex = 0; memberIndex < members.length; memberIndex++) { + const member = { + projectId: projectData.id, + memberId: members[memberIndex].value, + } + membersAdd.push(member) + } + const { insertedData } = await memberCollection.insertMany(membersAdd) + + return insertedData +} + +module.exports = { + connect, + registrationUser, + signInUser, + getMyProjects, + deleteProjectById, + newProject, + createTask, + editTask, + deleteTaskById, + getTaskListByProjectId, + getProjectById, + getMyProjectById, + getTaskById, + updateProject, + + getAllUsers, + + updateProjectMembers, +} diff --git a/server/routers/easy-project/index.js b/server/routers/easy-project/index.js new file mode 100644 index 0000000..4a3965c --- /dev/null +++ b/server/routers/easy-project/index.js @@ -0,0 +1,15 @@ +const router = require('express').Router() + +router.use('/', require('./auth')) + +router.use((err, req, res, next) => { + res.status(400).send({ + success: false, error: err.message || 'Что-то пошло не так', + }) +}) + +router.use('/projects', require('./projects')) +router.use('/tasks', require('./tasks')) +router.use('/users', require('./users')) + +module.exports = router diff --git a/server/routers/easy-project/middlewares/auth-middleware.js b/server/routers/easy-project/middlewares/auth-middleware.js new file mode 100644 index 0000000..e69de29 diff --git a/server/routers/easy-project/projects.js b/server/routers/easy-project/projects.js new file mode 100644 index 0000000..d72ec45 --- /dev/null +++ b/server/routers/easy-project/projects.js @@ -0,0 +1,116 @@ +const router = require('express').Router() +const { expressjwt: jwt } = require('express-jwt') + +const { JWT_SECRET } = require('./constants') +const { + getMyProjects, + newProject, + getProjectById, + updateProject, + getMyProjectById, + deleteProjectById, + updateProjectMembers, +} = require('./db') +const { requiredFields, responseWrapper, _idToId } = require('./utils') + +router.get('/healthcheck', (req, res) => { + res.send(true) +}) + +router.get('/', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const projectList = await getMyProjects(req.auth.id) + + res.send(responseWrapper(undefined, projectList)) + } catch (e) { + next(e) + } +}) + +router.get('/:projectId', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const { projectId } = req.params + const myProject = await getMyProjectById(req.auth.id, projectId) + + res.send(responseWrapper(undefined, myProject)) + } catch (e) { + next(e) + } +}) + +router.post('/new', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const userId = req.auth.id + const { title, code, members } = req.body + + const project = await newProject({ + title, code, userId, members, + }) + + res.send(responseWrapper(undefined, project)) + } catch (e) { + next(e) + } +}) + +router.post('/delete', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const userId = req.auth.id + const { projectId } = req.body + + const myProject = await getMyProjectById(userId, projectId) + + if (myProject) { + const answered = await deleteProjectById(projectId) + if (answered.result.ok) { + res.send(responseWrapper(undefined)) + } + } + } catch (e) { + next(e) + } +}) + +router.post('/edit', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const userId = req.auth.id + const { projectId, title, code, members } = req.body + + const projectCandidate = await getProjectById({ + projectId, + }) + + if (!projectCandidate) { + throw new Error('The project not exists [project.edit]') + } + + await updateProject({ + projectId, title, code, members, + }) + + const updatedProject = await getProjectById({ + projectId, + }) + + const projectSummary = { + oldData: projectCandidate, + newData: updatedProject, + } + + res.send(responseWrapper(undefined, projectSummary)) + } catch (e) { + next(e) + } +}) + +module.exports = router diff --git a/server/routers/easy-project/tasks.js b/server/routers/easy-project/tasks.js new file mode 100644 index 0000000..b0ae914 --- /dev/null +++ b/server/routers/easy-project/tasks.js @@ -0,0 +1,137 @@ +const router = require('express').Router() +const { expressjwt: jwt } = require('express-jwt') +const ObjectId = require('mongodb').ObjectID + +const { JWT_SECRET } = require('./constants') +const { requiredFields, responseWrapper } = require('./utils') +const { createTask, getTaskListByProjectId, getProjectById, editTask, getTaskById, deleteTaskById } = require('./db') + +router.get('/healthcheck', (req, res) => { + res.send(true) +}) + +router.get('/:projectId', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + const { projectId } = req.params + + const taskList = await getTaskListByProjectId({ + projectId, + }) + + res.send(responseWrapper(undefined, taskList)) +}) + +router.get('/:projectId/:taskId', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + const { projectId, taskId } = req.params + + if (projectId && taskId !== undefined && taskId !== 'undefined') { + const userId = req.auth.id + + const taskDetail = await getTaskById({ + taskId, userId, + }) + + res.send(responseWrapper(undefined, taskDetail)) + } else { + res.send(responseWrapper(undefined, [])) + } +}) + +router.post('/create', requiredFields(['projectId', 'title', 'type', 'status']), jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const authorId = req.auth.id + + const { projectId, ...taskData } = req.body + + const taskCandidate = await createTask({ + taskData, projectId, authorId, + }) + + res.send(responseWrapper(undefined, taskCandidate)) + } catch (e) { + next(e) + } +}) + +router.post('/edit', requiredFields(['projectId', 'taskId', 'title', 'type', 'status']), jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const authorId = req.auth.id + + const { projectId, taskId, ...taskData } = req.body + + const projectCandidate = await getProjectById({ + projectId, + }) + + if (!projectCandidate) { + throw new Error('The project not exists [task.edit.projectCandidate]') + } + + const taskCandidate = await getTaskById({ + taskId, + }) + + if (!taskCandidate) { + throw new Error('The project not exists [task.edit.taskCandidate]') + } + + await editTask({ + taskData, projectId, authorId, taskId, + }) + + const updatedTask = await getTaskById({ + taskId, + }) + + const taskSummary = { + oldData: taskCandidate, + newData: updatedTask, + } + + res.send(responseWrapper(undefined, taskSummary)) + } catch (e) { + next(e) + } +}) + +router.post('/delete', requiredFields(['projectId', 'taskId']), jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + try { + const authorId = req.auth.id + + const { projectId, taskId } = req.body + + const projectCandidate = await getProjectById({ + projectId, + }) + + if (!projectCandidate) { + throw new Error('The project not exists [task.edit.projectCandidate]') + } + + const taskCandidate = await getTaskById({ + taskId, + }) + + if (!taskCandidate) { + throw new Error('The project not exists [task.edit.taskCandidate]') + } + + const answered = await deleteTaskById(taskId) + if (answered.result.ok) { + res.send(responseWrapper(undefined)) + } + } catch (e) { + next(e) + } +}) + +module.exports = router diff --git a/server/routers/easy-project/users.js b/server/routers/easy-project/users.js new file mode 100644 index 0000000..8a535c8 --- /dev/null +++ b/server/routers/easy-project/users.js @@ -0,0 +1,21 @@ +const router = require('express').Router() +const { expressjwt: jwt } = require('express-jwt') +const ObjectId = require('mongodb').ObjectID + +const { JWT_SECRET } = require('./constants') +const { requiredFields, responseWrapper } = require('./utils') +const { getAllUsers } = require('./db') + +router.get('/healthcheck', (req, res) => { + res.send(true) +}) + +router.get('/getForSelect', jwt({ + secret: JWT_SECRET, algorithms: ['HS256'], +}), async (req, res, next) => { + const userList = await getAllUsers() + + res.send(responseWrapper(undefined, userList)) +}) + +module.exports = router diff --git a/server/routers/easy-project/utils.js b/server/routers/easy-project/utils.js new file mode 100644 index 0000000..e6ccf63 --- /dev/null +++ b/server/routers/easy-project/utils.js @@ -0,0 +1,49 @@ +const ObjectId = require('mongodb').ObjectID + +const requiredFields = (fields) => (req, res, next) => { + for (const fieldName of fields) { + if (!req.body[fieldName]) { + throw new Error(`Field ${fieldName} does't set`) + } + } + + next() +} + +const responseWrapper = (error, data, success = true) => ({ + error, data, success, +}) + +const _idToId = (data) => { + const { _id, ...rest } = data + + return { + id: _id, + ...rest, + } +} + +const _idToIdArray = (arrayData, setAuthor = false) => { + let newArray = [] + for (let index = 0; index < arrayData.length; index++) { + newArray[index] = _idToId(arrayData[index]) + } + return newArray +} + +const checkDB = (db) => { + if (db === null) throw new Error('no db connection') +} + +const filterId = (id) => ({ + _id: new ObjectId(id), +}) + +module.exports = { + checkDB, + requiredFields, + responseWrapper, + _idToId, + _idToIdArray, + filterId, +} diff --git a/server/routers/example/index.js b/server/routers/example/index.js new file mode 100644 index 0000000..85e655e --- /dev/null +++ b/server/routers/example/index.js @@ -0,0 +1,19 @@ +const router = require('express').Router() + +const first = router.get('/first', (req, res) => { + res.send({ + success: true, + warnings: [{ + title: 'Внимание', + text: 'Данный api создан для примера!', + }], + }) + + /** + * Этот эндпоинт будет доступен по адресу http://89.223.91.151:8080/multystub/example/first + */ +}) + +router.use('/example-api', first) + +module.exports = router diff --git a/server/routers/hub-video/index.js b/server/routers/hub-video/index.js new file mode 100644 index 0000000..c1755a2 --- /dev/null +++ b/server/routers/hub-video/index.js @@ -0,0 +1,11 @@ +const { getIo } = require('../../io') + +const io = getIo() + +io.on('connection', (socket) => { + socket.on('play', () => { + socket.broadcast.emit('play') + }) +}) + +console.log('test') diff --git a/server/routers/music-learn/index.js b/server/routers/music-learn/index.js new file mode 100644 index 0000000..5b3578d --- /dev/null +++ b/server/routers/music-learn/index.js @@ -0,0 +1,51 @@ +const router = require('express').Router() + +router.get('/courses', (req, res) => { + res.send(require('./mocks/courses/success.json')) +}) + +router.get('/courses/1', (req, res) => { + res.send(require('./mocks/courses/1/success.json')) +}) + +router.get('/notes', (req, res) => { + res.send(require('./mocks/notes/success.json')) +}) + +router.get('/user/courses', (req, res) => { + res.send(require('./mocks/user/courses/success.json')) +}) + +router.post('/user/courses', (req, res) => { + res.send(require('./mocks/user/courses/add/success.json')) +}) + +router.get('/user/notes', (req, res) => { + res.send(require('./mocks/user/notes/success.json')) +}) + +router.get('/user', (req, res) => { + res.send(require('./mocks/user/success.json')) +}) + +router.post('/user', (req, res) => { + res.send(require('./mocks/user/success.json')) +}) + +router.post('/login', (req, res) => { + if (req.body.login === 'error' || req.body.password === 'error') { + return res.status(401).send({ + message: 'Unauthorized Error', + }) + } + + res.send(require('./mocks/user/login/success.json')) + return null +}) + +router.get('/logout', (req, res) => { + res.send(require('./mocks/user/logout/success.json')) +}) +/* eslint-enable global-require */ + +module.exports = router diff --git a/server/routers/music-learn/mocks/courses/1/success.json b/server/routers/music-learn/mocks/courses/1/success.json new file mode 100644 index 0000000..c540c83 --- /dev/null +++ b/server/routers/music-learn/mocks/courses/1/success.json @@ -0,0 +1,5 @@ +{ + "key": 1, + "name": "Mock course 1", + "href": "/" +} diff --git a/server/routers/music-learn/mocks/courses/success.json b/server/routers/music-learn/mocks/courses/success.json new file mode 100644 index 0000000..68ab110 --- /dev/null +++ b/server/routers/music-learn/mocks/courses/success.json @@ -0,0 +1,77 @@ +[ + { + "key": 1, + "name": "Mock course 1", + "href": "https://www.youtube.com/watch?v=827jmswqnEA" + }, + { + "key": 2, + "name": "Mock course 2", + "href": "https://www.youtube.com/watch?v=bzNKQ2FkEJI" + }, + { + "key": 3, + "name": "Mock course 3", + "href": "https://www.youtube.com/watch?v=EHI3e75zHis" + }, + { + "key": 4, + "name": "Mock course 4", + "href": "https://www.youtube.com/watch?v=kLFkT3LBWzA" + }, + { + "key": 5, + "name": "Mock course 5", + "href": "https://www.youtube.com/watch?v=827jmswqnEA" + }, + { + "key": 6, + "name": "Mock course 6", + "href": "https://www.youtube.com/watch?v=bzNKQ2FkEJI" + }, + { + "key": 7, + "name": "Mock course 7", + "href": "https://www.youtube.com/watch?v=EHI3e75zHis" + }, + { + "key": 8, + "name": "Mock course 8", + "href": "https://www.youtube.com/watch?v=kLFkT3LBWzA" + }, + { + "key": 9, + "name": "Mock course 9", + "href": "https://www.youtube.com/watch?v=827jmswqnEA" + }, + { + "key": 10, + "name": "Mock course 10", + "href": "https://www.youtube.com/watch?v=bzNKQ2FkEJI" + }, + { + "key": 11, + "name": "Mock course 11", + "href": "https://www.youtube.com/watch?v=EHI3e75zHis" + }, + { + "key": 12, + "name": "Mock course 12", + "href": "https://www.youtube.com/watch?v=kLFkT3LBWzA" + }, + { + "key": 13, + "name": "Mock course 13", + "href": "https://www.youtube.com/watch?v=827jmswqnEA" + }, + { + "key": 14, + "name": "Mock course 14", + "href": "https://www.youtube.com/watch?v=bzNKQ2FkEJI" + }, + { + "key": 15, + "name": "Mock course 15", + "href": "https://www.youtube.com/watch?v=EHI3e75zHis" + } +] diff --git a/server/routers/music-learn/mocks/notes/success.json b/server/routers/music-learn/mocks/notes/success.json new file mode 100644 index 0000000..d74e075 --- /dev/null +++ b/server/routers/music-learn/mocks/notes/success.json @@ -0,0 +1,13 @@ +[ + { "key": 1, "name": "Music Sheet 1", "href": "/" }, + { "key": 2, "name": "Music Sheet 2", "href": "/" }, + { "key": 3, "name": "Music Sheet 3", "href": "/" }, + { "key": 4, "name": "Music Sheet 4", "href": "/" }, + { "key": 5, "name": "Music Sheet 5", "href": "/" }, + { "key": 6, "name": "Music Sheet 6", "href": "/" }, + { "key": 7, "name": "Music Sheet 7", "href": "/" }, + { "key": 8, "name": "Music Sheet 8", "href": "/" }, + { "key": 9, "name": "Music Sheet 9", "href": "/" }, + { "key": 10, "name": "Music Sheet 10", "href": "/" }, + { "key": 11, "name": "Music Sheet 11", "href": "/" } +] diff --git a/server/routers/music-learn/mocks/user/courses/add/success.json b/server/routers/music-learn/mocks/user/courses/add/success.json new file mode 100644 index 0000000..24745a2 --- /dev/null +++ b/server/routers/music-learn/mocks/user/courses/add/success.json @@ -0,0 +1,3 @@ +{ + "status": 500 +} diff --git a/server/routers/music-learn/mocks/user/courses/success.json b/server/routers/music-learn/mocks/user/courses/success.json new file mode 100644 index 0000000..3668483 --- /dev/null +++ b/server/routers/music-learn/mocks/user/courses/success.json @@ -0,0 +1,37 @@ +[ + { + "key": 1, + "name": "My course 1", + "href": "https://www.youtube.com/watch?v=827jmswqnEA" + }, + { + "key": 2, + "name": "My course 2", + "href": "https://www.youtube.com/watch?v=bzNKQ2FkEJI" + }, + { + "key": 3, + "name": "My course 3", + "href": "https://www.youtube.com/watch?v=EHI3e75zHis" + }, + { + "key": 4, + "name": "My course 4", + "href": "https://www.youtube.com/watch?v=kLFkT3LBWzA" + }, + { + "key": 5, + "name": "My course 5", + "href": "https://www.youtube.com/watch?v=827jmswqnEA" + }, + { + "key": 6, + "name": "My course 6", + "href": "https://www.youtube.com/watch?v=bzNKQ2FkEJI" + }, + { + "key": 7, + "name": "My course 7", + "href": "https://www.youtube.com/watch?v=EHI3e75zHis" + } +] diff --git a/server/routers/music-learn/mocks/user/login/success.json b/server/routers/music-learn/mocks/user/login/success.json new file mode 100644 index 0000000..24745a2 --- /dev/null +++ b/server/routers/music-learn/mocks/user/login/success.json @@ -0,0 +1,3 @@ +{ + "status": 500 +} diff --git a/server/routers/music-learn/mocks/user/logout/success.json b/server/routers/music-learn/mocks/user/logout/success.json new file mode 100644 index 0000000..24745a2 --- /dev/null +++ b/server/routers/music-learn/mocks/user/logout/success.json @@ -0,0 +1,3 @@ +{ + "status": 500 +} diff --git a/server/routers/music-learn/mocks/user/notes/success.json b/server/routers/music-learn/mocks/user/notes/success.json new file mode 100644 index 0000000..a7a37b9 --- /dev/null +++ b/server/routers/music-learn/mocks/user/notes/success.json @@ -0,0 +1,7 @@ +[ + { "key": 1, "name": "Music Sheet 1", "href": "/" }, + { "key": 2, "name": "Music Sheet 2", "href": "/" }, + { "key": 3, "name": "Music Sheet 3", "href": "/" }, + { "key": 4, "name": "Music Sheet 4", "href": "/" }, + { "key": 5, "name": "Music Sheet 5", "href": "/" } +] diff --git a/server/routers/music-learn/mocks/user/success.json b/server/routers/music-learn/mocks/user/success.json new file mode 100644 index 0000000..a2dc2e3 --- /dev/null +++ b/server/routers/music-learn/mocks/user/success.json @@ -0,0 +1,6 @@ +{ + "id": 88, + "email": "current.user@example.com", + "login": "userlogin@564", + "password": "1234568" +} diff --git a/server/routers/neptunium/index.js b/server/routers/neptunium/index.js new file mode 100644 index 0000000..b91f560 --- /dev/null +++ b/server/routers/neptunium/index.js @@ -0,0 +1,226 @@ +const router = require('express').Router() + +let labels = [ + { + color: 'D50101', + title: 'Важное', + }, + { + color: 'F4511E', + title: 'Дом', + }, + { + color: 'F5BF25', + title: 'Работа', + }, + { + color: '0B8043', + title: 'Дача', + }, + { + color: '0C9CE5', + title: 'Аниме', + }, + { + color: 'E67C73', + title: 'Синий', + }, + { + color: '33B679', + title: 'Грабежи', + }, + { + color: '8E24AA', + title: 'Оранжевый', + }, +] + +const todos = [ + { + id: 0, + completed: false, + title: 'Съесть деда', + labels: [ + { + color: 'D50101', + title: 'Важное', + }, + { + color: 'F4511E', + title: 'Дом', + }, + ], + description: 'Lorem ipsum dolor sit amet.', + completeDate: 567800000000, + }, + { + id: 1, + completed: false, + title: 'гав', + labels: [ + { + color: '0B8043', + title: 'Дача', + }, + { + color: '0C9CE5', + title: 'Аниме', + }, + { + color: 'F5BF25', + title: 'Работа', + }, + ], + description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur, laboriosam.', + completeDate: 1997800000000, + }, + { + id: 2, + completed: true, + title: 'Мяу', + labels: [ + { + color: 'E67C73', + title: 'Синий', + }, + { + color: '33B679', + title: 'Грабежи', + }, + { + color: '8E24AA', + title: 'Оранжевый', + }, + ], + description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur, laboriosam.', + completeDate: 1997800000000, + }, + { + id: 3, + completed: false, + title: 'Неудаляемая', + labels: [ + { + color: 'E67C73', + title: 'Синий', + }, + { + color: '33B679', + title: 'Грабежи', + }, + { + color: '8E24AA', + title: 'Оранжевый', + }, + ], + description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur, laboriosam.', + completeDate: 1997800000000, + }, +] + +const ErrorHandler = (error, _req, res) => { + const statusCode = res.statusCode || 500 + res.status(statusCode) + res.json({ + message: error.message, + stack: process.env.NODE_ENV === 'production' ? '🥑' : error.stack, + }) +} + +try { + router.post('/signup', (_req, _res, next) => { + setTimeout(next, 1000) + }, (_req, res) => { + res.status(200).send({ + accessToken: 'jhbdhbfsuhbvhsfbvuhsbfuvhsbfu', + }) + }) + + router.post('/login', (_req, _res, next) => { + setTimeout(next, 1000) + }, (req, res) => { + if (req.body.password !== 'pass') res.status(401).send('Wrong password!') + else { + res.status(200).send({ + accessToken: 'lfhjvbfealihvbsfjlh', + }) + } + }) + + router.get('/user', (_req, res) => { + res.send({ + username: 'stalin', + email: 'vozhd@kgb.ussr', + }) + }) + + router.put('/user/username', (req, res) => { + if (req.body.username === 'error') { + res.status(500).send() + } else { + res.status(201).send() + } + }) + + router.put('/user/password', (_req, res) => { + res.status(201).send() + }) + + router.get('/labels', (_req, res) => { + res.send(labels) + }) + + router.patch('/label', (_req, res) => { + res.status(201).send() + }) + + router.put('/labels', (_req, res) => { + res.status(201).send() + }) + + router.get('/todos', (_req, res) => { + res.send({ + todos, + }) + }) + + router.post('/todo', (_req, _res, next) => { + setTimeout(next, 1000) + }, (req, res) => { + if (req.body.title === 'error') { + res.status(500).send() + } else { + res.status(204).send() + } + }) + + router.put('/todo', (_req, _res, next) => { + setTimeout(next, 300) + }, (req, res) => { + if (req.body.todo.title === 'error' || req.body.todo.title === 'Неудаляемая') { + res.status(500).send() + } else { + res.status(201).send() + } + }) + + router.delete('/todo', (_req, _res, next) => { + setTimeout(next, 300) + }, (req, res) => { + if (req.body.id === 3) { + res.status(500).send() + } else { + res.status(204).send() + } + }) + + router.patch('/todo', (_req, res) => { + res.status(204).send() + }) + + router.use(ErrorHandler) +} catch (e) { + console.error(e) +} + +module.exports = router diff --git a/server/routers/publicium/index.js b/server/routers/publicium/index.js new file mode 100644 index 0000000..a697a5f --- /dev/null +++ b/server/routers/publicium/index.js @@ -0,0 +1,42 @@ +const { Router, json } = require('express') +const cors = require('cors') + +const router = Router() + +router.use(json()) + +if (process.env.NODE_ENV !== 'production') { + router.use(cors()) +} + +router.get('/games/trending', (req, res) => res.status(200).send(require('./mocks/games/trending.json'))) + +router.get('/users/top-load', (req, res) => res.status(200).send(require('./mocks/users/top-load.json'))) + +router.get('/maps/trending', (req, res) => res.status(200).send(require('./mocks/maps/trending.json'))) + +router.get('/search', (req, res) => res.status(200).send(require('./mocks/search.json'))) + +router.get('/games', (req, res) => res.status(200).send(require('./mocks/games.json'))) +router.get('/games/:id', (req, res) => { + const games = require('./mocks/games.json') + + const game = games.find((game) => game.id === Number.parseInt(req.params.id, 10)) + + if (!game) { + return res.status(404).send({ + code: -3, + message: 'Game not found', + }) + } + + res.status(200).send(game) +}) + +router.get('/users/:id', (req, res) => res.status(200).send(require('./mocks/users/12.json'))) + +router.get('/users/:id/collection', (req, res) => res.status(200).send(require('./mocks/users/12/collection.json'))) + +router.get('/maps/by/:id', (req, res) => res.send(require('./mocks/maps/by/id.json'))) + +module.exports = router diff --git a/server/routers/publicium/mocks/games.json b/server/routers/publicium/mocks/games.json new file mode 100644 index 0000000..34184f2 --- /dev/null +++ b/server/routers/publicium/mocks/games.json @@ -0,0 +1,17 @@ +[ + { + "id": 1, + "name": "Black Mesa", + "logo": "bms" + }, + { + "id": 12, + "name": "Minecraft", + "logo": "mc" + }, + { + "id": 31, + "name": "CS: GO", + "logo": "csgo" + } +] \ No newline at end of file diff --git a/server/routers/publicium/mocks/games/trending.json b/server/routers/publicium/mocks/games/trending.json new file mode 100644 index 0000000..91593cc --- /dev/null +++ b/server/routers/publicium/mocks/games/trending.json @@ -0,0 +1,22 @@ +[ + { + "id": 1, + "name": "Black Mesa", + "logo": "bms" + }, + { + "id": 12, + "name": "Minecraft", + "logo": "mc" + }, + { + "id": 31, + "name": "CS: GO", + "logo": "csgo" + }, + { + "id": 43, + "name": "Left 4 Dead", + "logo": "l4d" + } +] \ No newline at end of file diff --git a/server/routers/publicium/mocks/maps/by/id.json b/server/routers/publicium/mocks/maps/by/id.json new file mode 100644 index 0000000..d09110e --- /dev/null +++ b/server/routers/publicium/mocks/maps/by/id.json @@ -0,0 +1,20 @@ +[ + { + "id": 302, + "name": "Lambda Core 1", + "logo": "lambda-1.png", + "game": 1 + }, + { + "id": 21, + "name": "Xen Factory 2", + "logo": "bms-xen2.png", + "game": 1 + }, + { + "id": 5, + "name": "Office Complex 4", + "logo": "bms-office4.png", + "game": 1 + } +] diff --git a/server/routers/publicium/mocks/maps/trending.json b/server/routers/publicium/mocks/maps/trending.json new file mode 100644 index 0000000..aa590ab --- /dev/null +++ b/server/routers/publicium/mocks/maps/trending.json @@ -0,0 +1,26 @@ +[ + { + "id": 302, + "name": "Lambda Core 1", + "logo": "lambda-1.png", + "game": 1 + }, + { + "id": 12, + "name": "Inferno", + "logo": "csgo-inferno.png", + "game": 31 + }, + { + "id": 43, + "name": "Ice Spikes", + "logo": "mc-icespk.png", + "game": 12 + }, + { + "id": 9, + "name": "Dust 2", + "logo": "csgo-dust2.png", + "game": 31 + } +] \ No newline at end of file diff --git a/server/routers/publicium/mocks/search.json b/server/routers/publicium/mocks/search.json new file mode 100644 index 0000000..a9cf18a --- /dev/null +++ b/server/routers/publicium/mocks/search.json @@ -0,0 +1,28 @@ +[ + { + "type": "game", + "item": { + "id": 1, + "name": "Black Mesa", + "logo": "bms-logo.png" + } + }, + { + "type": "map", + "item": { + "id": 302, + "name": "Lambda Core 1", + "logo": "lambda-1.png", + "game": 1 + } + }, + { + "type": "map", + "item": { + "id": 21, + "name": "Xen Factory 2", + "logo": "bms-xen2.png", + "game": 1 + } + } +] \ No newline at end of file diff --git a/server/routers/publicium/mocks/users/12.json b/server/routers/publicium/mocks/users/12.json new file mode 100644 index 0000000..a00088d --- /dev/null +++ b/server/routers/publicium/mocks/users/12.json @@ -0,0 +1,5 @@ +{ + "id": 12, + "name": "Gordon Freeman", + "avatar": "user.png" +} \ No newline at end of file diff --git a/server/routers/publicium/mocks/users/12/collection.json b/server/routers/publicium/mocks/users/12/collection.json new file mode 100644 index 0000000..263f505 --- /dev/null +++ b/server/routers/publicium/mocks/users/12/collection.json @@ -0,0 +1,40 @@ +[ + { + "game": 1, + "maps": [ + { + "id": 302, + "name": "Lambda Core 1", + "logo": "lambda-1.png", + "game": 1, + "size": 12280 + }, + { + "id": 21, + "name": "Xen Factory 2", + "logo": "bms-xen2.png", + "game": 1, + "size": 14760 + }, + { + "id": 5, + "name": "Office Complex 4", + "logo": "bms-office4.png", + "game": 1, + "size": 9810 + } + ] + }, + { + "game": 12, + "maps": [ + { + "id": 43, + "name": "Ice Spikes", + "logo": "mc-icespk.png", + "game": 12, + "size": 43210 + } + ] + } +] \ No newline at end of file diff --git a/server/routers/publicium/mocks/users/top-load.json b/server/routers/publicium/mocks/users/top-load.json new file mode 100644 index 0000000..034ec41 --- /dev/null +++ b/server/routers/publicium/mocks/users/top-load.json @@ -0,0 +1,22 @@ +[ + { + "id": 1, + "name": "Foo Bar", + "avatar": "user.png" + }, + { + "id": 31, + "name": "Holy Radar", + "avatar": "user.png" + }, + { + "id": 12, + "name": "Gordon Freeman", + "avatar": "user.png" + }, + { + "id": 43, + "name": "Portator Defunctorum", + "avatar": "user.png" + } +] \ No newline at end of file diff --git a/server/routers/stc-21-03/controllers.js b/server/routers/stc-21-03/controllers.js new file mode 100644 index 0000000..1567c93 --- /dev/null +++ b/server/routers/stc-21-03/controllers.js @@ -0,0 +1,107 @@ +const { getDB } = require('../../utils/mongo') + +let db = null + +const connect = async () => { + db = await getDB('stc-21-03') +} + +const _idToId = (data) => { + const { _id, ...rest } = data + + return { + id: _id, ...rest, + } +} + +const FILM_TOMATOS_COLL = 'films-tomatos' +const getFilmData = async (filmId) => { + if (db === null) throw new Error('no db connection') + + const filmsCollection = db.collection(FILM_TOMATOS_COLL) + const data = await filmsCollection.find({ + filmId, + }).toArray() + + if (data.length === 0) { + const newData = { + filmId, + views: 0, + ratings: [], + likes: 0, + } + + filmsCollection.insertMany([newData]) + + return _idToId(newData) + } + const filmData = data[0] + filmsCollection.updateOne({ + filmId, + }, [ + { + $set: { + views: ++filmData.views, + }, + }, + ]) + return _idToId(filmData) +} + +const setLike = async (filmId) => { + if (db === null) throw new Error('no db connection') + + const filmsCollection = db.collection(FILM_TOMATOS_COLL) + const data = await filmsCollection.find({ + filmId, + }).toArray() + + if (data.length === 0) { + throw new Error('no film data') + } + + const filmData = data[0] + filmsCollection.updateOne({ + filmId, + }, [ + { + $set: { + likes: ++filmData.likes, + }, + }, + ]) + return _idToId(filmData) +} + +const setRating = async ({ filmId, rating }) => { + if (db === null) throw new Error('no db connection') + + const filmsCollection = db.collection(FILM_TOMATOS_COLL) + const data = await filmsCollection.find({ + filmId, + }).toArray() + + if (data.length === 0) { + throw new Error('no film data') + } + + const filmData = data[0] + filmData.ratings = [...filmData.ratings, rating] + filmsCollection.updateOne({ + filmId, + }, [ + { + $set: { + ratings: filmData.ratings, + }, + }, + ]) + return _idToId(filmData) +} + +module.exports = { + connect, + getFilmData, + setLike, + setRating, +} diff --git a/server/routers/stc-21-03/index.js b/server/routers/stc-21-03/index.js new file mode 100644 index 0000000..ca9eb7f --- /dev/null +++ b/server/routers/stc-21-03/index.js @@ -0,0 +1,94 @@ +const router = require('express').Router() + +const { connect, getFilmData, setLike, setRating } = require('./controllers') +const { getAnswer } = require('../../utils/common') + +connect() + +router.get('/film/:id', async (req, res) => { + const data = await getFilmData(req.params.id) + res.send(getAnswer(null, data)) +}) + +router.post('/film/:id/rating', async (req, res) => { + const filmData = await setRating({ + filmId: req.params.id, rating: req.body.rating, + }) + res.send(getAnswer(null, filmData)) +}) + +router.post('/film/:id/like', async (req, res) => { + const filmData = await setLike(req.params.id) + res.send(getAnswer(null, filmData)) +}) + +const first = router.all('/feedback', (req, res) => { + setTimeout(() => { + res.send({ + success: true, + body: { + ...req.query, ...req.body, + }, + }) + }, 1000) + + /** + * Этот эндпоинт будет доступен по адресу http://inno-ijl.ru/multystub/stc-21-03/feedback + */ +}) + +function idGen() { + let i = 1 + return () => i++ +} + +const getId = idGen() + +let posts = [ + { + id: getId(), + link: 'https://www.unian.net/russianworld/v-rossii-na-bereg-zaliva-vybrosilo-tonny-ikry-mestnye-udobryayut-eyu-ogorody-video-novosti-rossii-11420710.html', + header: 'В России на берег залива выбросило тонны икры: местные удобряют ею огороды (видео)', + poster: 'images/1.jpeg', + text: `На побережье залива Анива в Сахалинской области РФ штормом выбросило тонны икры тихоокеанской сельди сахалино-хоккайдского стада. Об этом на своей странице в Facebook рассказал глава общественной организации "Экологическая вахта Сахалина" Дмитрий Лисицын. + По его словам, икру косяки сельди ранее отметали недалеко от берега, а теперь ее сплошная полоса шириной в несколько метров растянулась по побережью примерно на 3 км. Толщина слоя икры местами достигает 10-15 см.`, + }, + { + id: getId(), + link: 'https://www.unian.net/curiosities/zhenshchina-postirala-vyigryshnyy-bilet-na-26-millionov-dollarov-poslednie-novosti-11420341.html', + header: 'Женщина постирала выигрышный билет на 26 миллионов долларов', + poster: 'images/2.webp', + text: `Американка случайно постирала со штанами выигрышный лотерейный билет на 26 миллионов долларов. +Женщина приобрела лотерею еще в ноябре в пригороде Лос-Анджелеса. Однако за выигрышем она пришла тогда, когда истекал крайний срок – через 180 дней. В магазине американка отметила, что не может показать билет, поскольку постирала его в кармане одежды. +В то же время представитель калифорнийской лотереи Кэти Джонстон заявила, что отснятого материала (имея в виду кадры с камер видеонаблюдения, на которые попала покупатель) недостаточно, чтобы выдать призовые деньги женщине.`, + }, +] + +const getPosts = (req, res) => { + setTimeout(() => { + res.send({ + success: true, body: posts, + }) + }, 1000) + + /** + * Этот эндпоинт будет доступен по адресу http://89.223.91.151:8080/multystub/stc-21-03/posts + */ +} + +const addPost = (req, res) => { + posts.push({ + id: getId(), ...req.body, + }) + setTimeout(() => { + res.send({ + success: true, body: posts, + }) + }, 1000) +} + +router.get('/posts', getPosts) +router.post('/posts', addPost) +router.use('/', first) + +module.exports = router diff --git a/server/routers/stc-22-24/controller.js b/server/routers/stc-22-24/controller.js new file mode 100644 index 0000000..6401b42 --- /dev/null +++ b/server/routers/stc-22-24/controller.js @@ -0,0 +1,198 @@ +const ObjectId = require('mongodb').ObjectID + +const { getDB } = require('../../utils/mongo') +const dishData = require('./data/dishdata.json') +const tabsData = require('./data/tabs.json') +const { getResponse, _idToIdArray, _idToId } = require('./utils/common') + +const DISH_COLLECTION = 'default_dishes' +const TAB_COLLECTION = 'default_tabs' +const USER_COLLECTION = 'users' + +const _idRemove = (data) => { + const { _id, ...rest } = data + + return { + _id: undefined, + ...rest, + } +} + +let db = null + +const connect = async () => { + db = await getDB('dish') +} + +const init = async () => { + await connect() + const dishesCollection = db.collection(DISH_COLLECTION) + const findDish = await dishesCollection.find({ + }).toArray() + if (findDish.length === 0) { + await dishesCollection.insertMany(dishData) + } + const tabsCollection = db.collection(TAB_COLLECTION) + const findTabs = await tabsCollection.find({ + }).toArray() + if (findTabs.length === 0) { + await tabsCollection.insertMany(tabsData) + } + const usersCollection = db.collection(USER_COLLECTION) +} + +init() + +const getDish = async () => { + if (db === null) throw new Error('no db connection') + try { + const dishesCollection = db.collection(DISH_COLLECTION) + const defaultDishes = await dishesCollection.find({}).toArray() + return _idToIdArray(defaultDishes) + } catch (e) { + throw new Error(e) + } +} + +const getTabs = async () => { + if (db === null) throw new Error('no db connection') + try { + const tabsCollection = db.collection(TAB_COLLECTION) + const defaultTabs = await tabsCollection.find({}).toArray() + return _idToIdArray(defaultTabs) + } catch (e) { + throw new Error(e) + } +} + +const updateTab = async (id, timestampsNew) => { + if (db === null) throw new Error('no db connection') + try { + const tabsCollection = db.collection(TAB_COLLECTION) + const findData = await tabsCollection.findOne({ + _id: new ObjectId(id), + }) + if (!findData) throw new Error('Tabs is not exist') + const filter = { + _id: new ObjectId(id), + } + const options = { + upsert: false, + } + const updateDoc = { + $set: { + timeStamps: timestampsNew, + }, + } + const result = await tabsCollection.updateOne(filter, updateDoc, options) + return _idToId(result) + } catch (e) { + throw new Error(e) + } +} + +const getUsers = async () => { + if (db === null) throw new Error('no db connection') + try { + const usersCollection = db.collection(USER_COLLECTION) + const users = await usersCollection.find({ + }).project({ + _id: 0, + }).toArray() + return _idToIdArray(users) + } catch (e) { + throw new Error(e) + } +} + +const getUserByEmail = async ({ email }) => { + if (db === null) throw new Error('no db connection') + try { + const usersCollection = db.collection(USER_COLLECTION) + const user = await usersCollection.findOne( + { + email, + }, + { + projection: + { + _id: 0, + }, + }, + ) + return user + } catch (e) { + throw new Error(e) + } +} + +const addUser = async ({ email, hash }) => { + if (db === null) throw new Error('no db connection') + try { + const usersCollection = db.collection(USER_COLLECTION) + const user = await usersCollection.findOne( + { + email, + }, + ) + if (user) throw new Error('User is exist') + const insertData = await usersCollection.insertOne( + { + email, + hash, + }, + ) + const { insertedCount, ops } = insertData + if (insertedCount) { + return _idRemove(ops[0]) + } + throw new Error('insert error') + } catch (e) { + throw new Error(e) + } +} + +const getDishById = async ({ id }) => { + if (db === null) throw new Error('no db connection') + try { + const dishesCollection = db.collection(DISH_COLLECTION) + const dish = await dishesCollection.findOne( + { + _id: new ObjectId(id), + }, + ) + return _idToId(dish) + } catch (e) { + throw new Error(e) + } +} + +const getDishByCategory = async ({ cat, id }) => { + if (db === null) throw new Error('no db connection') + try { + const dishesCollection = db.collection(DISH_COLLECTION) + const dish = await dishesCollection.find( + { + _id: + { + $ne: new ObjectId(id), + }, + category: cat, + }, + ).toArray() + return _idToIdArray(dish) + } catch (e) { + throw new Error(e) + } +} + +module.exports = { + getDish, + getTabs, + getDishById, + getDishByCategory, + getUsers, + addUser, + getUserByEmail, + updateTab, +} diff --git a/server/routers/stc-22-24/data/dishdata.json b/server/routers/stc-22-24/data/dishdata.json new file mode 100644 index 0000000..6680232 --- /dev/null +++ b/server/routers/stc-22-24/data/dishdata.json @@ -0,0 +1,116 @@ +[ + { + "category": "Salads", + "title": "Qwerty salad", + "image": "qwertysalad.jpg", + "price": 244, + "description": "Fragrant crispy keys dressed with coffee, beer or coca-cola" + }, + { + "category": "Salads", + "title": "Fibonacci salad", + "image": "fibonaccisalad.jpg", + "price": 199, + "description": "Refined taste of yesterday salad, complimented by salad from two days ago" + }, + { + "category": "Salads", + "title": "RNG salad", + "image": "rngsalad.jpg", + "price": 317, + "description": "Exquisite original taste of fully natural, randomly generated numbers" + }, + { + "category": "Salads", + "title": "Merge request", + "image": "mergerequestsalad.jpg", + "price": 241, + "description": "Non-merged salad, ideal for merge conflicts intolerance" + }, + { + "category": "CFood", + "title": "SalmON", + "image": "salmon.jpg", + "price": 441, + "description": "Salmon with user-friendly interface" + }, + { + "category": "CFood", + "title": "SalmOFF", + "image": "salmoff1.jpg", + "price": 16, + "description": "The pink Salmon skeleton is perfect for research and debugging" + }, + { + "category": "CFood", + "title": "Develobster", + "image": "develobster.jpg", + "price": 1024, + "description": "High skilled senior frontend develobster" + }, + { + "category": "CFood", + "title": "8-bit Octopus", + "image": "octopus1.jpg", + "price": 500, + "description": "8-bit Octopus summary" + }, + { + "category": "Soups", + "title": "Hooks & props", + "image": "hookspropssoup.jpg", + "price": 411, + "description": "A rich fragrant soup with a large set of properties and states that is easy to hook" + }, + { + "category": "Soups", + "title": "Float points", + "image": "floatpointsoup.jpg", + "price": 433, + "description": "A light soup, the original taste and unique aroma of which is provided by floating points" + }, + { + "category": "Soups", + "title": "BorscHTML", + "image": "borschtml.jpg", + "price": 422, + "description": "Marked up by sour cream soup based on thoroughly tested bit-root" + }, + { + "category": "Soups", + "title": "Try-catch", + "image": "trycatch3.jpg", + "price": 455, + "description": "Soup for real gourmets familiar with advanced try-catch technologies" + }, + { + "category": "Desserts", + "title": "Fractal", + "image": "fractal3.jpg", + "price": 378, + "description": "Self-similar fractal produced by recursion from dark chocolate and cream" + }, + { + "category": "Desserts", + "title": "Debugged apple", + "image": "apple.jpg", + "price": 85, + "description": "Eco-friendly apple debugged and tested in the most thorough way" + }, + { + "category": "Desserts", + "title": "Cookies", + "image": "cookies2.jpg", + "price": 111, + "description": "We also use cookies, but not for this" + }, + { + "category": "Desserts", + "title": "Syntactic sugar", + "image": "sugar.jpg", + "price": 100, + "description": "Syntactic sugar which make it easier for humans to code. Enjoy it!" + } +] + + diff --git a/server/routers/stc-22-24/data/tabs.json b/server/routers/stc-22-24/data/tabs.json new file mode 100644 index 0000000..d27a9dd --- /dev/null +++ b/server/routers/stc-22-24/data/tabs.json @@ -0,0 +1,137 @@ +[ + { + "location": [ + [0, 1], + [1, 1], + [1, 0] + ], + "timeStamps": ["2022-12-12", "2022-12-13"] + }, + { + "location": [ + [1, 1, 1], + [0, 1, 0] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 1], + [0, 1], + [0, 1] + ], + "timeStamps": ["2022-12-13", "2022-12-14"] + }, + { + "location": [ + [1, 1], + [1, 0], + [1, 0] + ], + "timeStamps": ["2022-12-14"] + }, + { + "location": [ + [1, 1], + [1, 1] + ], + "timeStamps": ["2022-12-15", "2022-12-16"] + }, + { + "location": [ + [1, 0], + [1, 1], + [0, 1] + ], + "timeStamps": ["2022-12-15"] + }, + { + "location": [ + [1, 0], + [1, 1], + [1, 0] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 1], + [1, 1] + ], + "timeStamps": ["2022-12-12"] + }, + { + "location": [ + [0, 1], + [1, 1], + [0, 1] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 0], + [1, 0], + [1, 1] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 0], + [1, 1], + [0, 1] + ], + "timeStamps": [] + }, + { + "location": [ + [0, 1], + [0, 1], + [1, 1] + ], + "timeStamps": [] + }, + { + "location": [ + [0, 1, 1], + [1, 1, 0] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 1, 1], + [0, 1, 0] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 1, 1], + [1, 0, 0] + ], + "timeStamps": [] + }, + { + "location": [ + [1, 0, 0], + [1, 1, 1] + ], + "timeStamps": [] + }, + { + "location": [ + [0, 1, 0], + [1, 1, 1] + ], + "timeStamps": ["2022-12-12"] + }, + { + "location": [ + [0, 0, 1], + [1, 1, 1] + ], + "timeStamps": ["2022-12-13"] + } +] diff --git a/server/routers/stc-22-24/index.js b/server/routers/stc-22-24/index.js new file mode 100644 index 0000000..f8ccda8 --- /dev/null +++ b/server/routers/stc-22-24/index.js @@ -0,0 +1,8 @@ +const router = require('express').Router() + +router.use('/auth', require('./routes/auth')) +router.use('/dish', require('./routes/dish')) +router.use('/reservation', require('./routes/reservation')) +router.use('/order', require('./routes/order')) + +module.exports = router diff --git a/server/routers/stc-22-24/midlewares/checkRequired.midleware.js b/server/routers/stc-22-24/midlewares/checkRequired.midleware.js new file mode 100644 index 0000000..0d62845 --- /dev/null +++ b/server/routers/stc-22-24/midlewares/checkRequired.midleware.js @@ -0,0 +1,12 @@ +const checkRequiredMidleware = (options) => (req, res, next) => { + // eslint-disable-next-line no-restricted-syntax + for (const option of options) { + if (!req.body[option]) { + res.status(400).send(`Required field ${option} is not present`) + return + } + } + next() +} + +module.exports = checkRequiredMidleware diff --git a/server/routers/stc-22-24/routes/auth.js b/server/routers/stc-22-24/routes/auth.js new file mode 100644 index 0000000..2d9ffe0 --- /dev/null +++ b/server/routers/stc-22-24/routes/auth.js @@ -0,0 +1,47 @@ +const authRouter = require('express').Router() +const jwt = require('jsonwebtoken') +const bcrypt = require('bcrypt') +const { JWT_TOKEN, SALT } = require('./key') +const { getResponse } = require('../utils/common') +const { getUsers, addUser, getUserByEmail } = require('../controller') +const checkRequiredMidleware = require('../midlewares/checkRequired.midleware') + +authRouter.get('/users', async (req, res) => { + let error = null + const dishData = await getUsers().catch((e) => error = e.message) + res.send(getResponse(error, dishData)) +}) + +authRouter.post( + '/register', + checkRequiredMidleware(['email', 'password']), + async (req, res) => { + const { email, password } = req.body + const hash = await bcrypt.hash(password, SALT) + let error = null + const user = await addUser({ email, hash }).catch((e) => error = e.message) + res.send(getResponse(error, user)) + }, +) + +authRouter.post( + '/login', + checkRequiredMidleware(['email', 'password']), + async (req, res) => { + const { email, password } = req.body; + let error = null + const user = await getUserByEmail({ email }).catch((e) => error = e.message) + if (user) { + const passwordCorrect = await bcrypt.compare(password, user.hash) + if (passwordCorrect) { + // eslint-disable-next-line no-undef + const token = jwt.sign({ email }, JWT_TOKEN) + res.send({ email, token }) + return + } + } + res.status(400).send('Incorrect email or password') + }, +) + +module.exports = authRouter diff --git a/server/routers/stc-22-24/routes/dish.js b/server/routers/stc-22-24/routes/dish.js new file mode 100644 index 0000000..32aa356 --- /dev/null +++ b/server/routers/stc-22-24/routes/dish.js @@ -0,0 +1,33 @@ +const dishRouter = require('express').Router() +const ObjectId = require('mongodb').ObjectID +const { getResponse } = require('../utils/common') +const { getDish, getTabs, getDishById, getDishByCategory } = require('../controller') + +dishRouter.get('/', async (req, res) => { + let error = null + const dishData = await getDish().catch((e) => error = e.message) + res.send(getResponse(error, dishData)) +}) + +dishRouter.get('/reservation', async (req, res) => { + let error = null + const tabData = await getTabs().catch((e) => error = e.message) + res.send(getResponse(error, tabData)) +}) + +dishRouter.get('/alsolike/:dishId', async (req, res) => { + let error = null + const dish = await getDishById({ id: req.params.dishId }).catch((e) => error = e.message) + const categoryArr = await getDishByCategory({ + cat: dish.category, id: req.params.dishId, + }).catch((e) => error = e.message) + res.status(200).send(getResponse(error, categoryArr)) +}) + +dishRouter.get('/:dishId', async (req, res) => { + let error = null + const dishData = await getDishById({ id: req.params.dishId }).catch((e) => error = e.message) + res.send(getResponse(error, dishData)) +}) + +module.exports = dishRouter diff --git a/server/routers/stc-22-24/routes/key.js b/server/routers/stc-22-24/routes/key.js new file mode 100644 index 0000000..fb1a6a5 --- /dev/null +++ b/server/routers/stc-22-24/routes/key.js @@ -0,0 +1,7 @@ +const JWT_TOKEN = 'secret' +const SALT = 3 + +module.exports = { + JWT_TOKEN, + SALT, +} diff --git a/server/routers/stc-22-24/routes/order.js b/server/routers/stc-22-24/routes/order.js new file mode 100644 index 0000000..a05dd5f --- /dev/null +++ b/server/routers/stc-22-24/routes/order.js @@ -0,0 +1,8 @@ +const orderRouter = require('express').Router() + +orderRouter.post('/', (req, res) => { + const orderNumber = 2003 + res.status(200).send({ orderNumber }) +}) + +module.exports = orderRouter diff --git a/server/routers/stc-22-24/routes/reservation.js b/server/routers/stc-22-24/routes/reservation.js new file mode 100644 index 0000000..5750b70 --- /dev/null +++ b/server/routers/stc-22-24/routes/reservation.js @@ -0,0 +1,32 @@ +const reservationRouter = require('express').Router() +const { getTabs, updateTab } = require('../controller') + +reservationRouter.get('/', async (req, res) => { + let error = null + const tabData = await getTabs().catch((e) => error = e.message) + if (error) { + res.status(400).send(error) + } else { + res.status(200).send(tabData) + } +}) + +reservationRouter.post('/post', async (req, res) => { + let error = null + const data = req.body + console.log(data.length) + const promises = [] + for (let i = 0; i < data.length; i++) { + const item = data[i] + const result = updateTab(item.id, item.timeStamps) + promises.push(result) + } + await Promise.all(promises).catch((e) => error = e.message) + if (error) { + res.status(400).send(error) + } else { + res.status(200).send() + } +}) + +module.exports = reservationRouter diff --git a/server/routers/stc-22-24/utils/common.js b/server/routers/stc-22-24/utils/common.js new file mode 100644 index 0000000..9b77704 --- /dev/null +++ b/server/routers/stc-22-24/utils/common.js @@ -0,0 +1,34 @@ +const _idToId = (data) => { + const { _id, ...rest } = data + + return { + id: _id, + ...rest, + } +} + +const _idToIdArray = (data) => { + const _idToIdMap = data.map((item) => _idToId(item)) + + return _idToIdMap +} + +const getResponse = (error, data, success = true) => { + if (error) { + return { + success: false, + error, + } + } + + return { + success, + data, + } +} + +module.exports = { + getResponse, + _idToIdArray, + _idToId, +} diff --git a/server/routers/stc/controllers.js b/server/routers/stc/controllers.js new file mode 100644 index 0000000..1567c93 --- /dev/null +++ b/server/routers/stc/controllers.js @@ -0,0 +1,107 @@ +const { getDB } = require('../../utils/mongo') + +let db = null + +const connect = async () => { + db = await getDB('stc-21-03') +} + +const _idToId = (data) => { + const { _id, ...rest } = data + + return { + id: _id, ...rest, + } +} + +const FILM_TOMATOS_COLL = 'films-tomatos' +const getFilmData = async (filmId) => { + if (db === null) throw new Error('no db connection') + + const filmsCollection = db.collection(FILM_TOMATOS_COLL) + const data = await filmsCollection.find({ + filmId, + }).toArray() + + if (data.length === 0) { + const newData = { + filmId, + views: 0, + ratings: [], + likes: 0, + } + + filmsCollection.insertMany([newData]) + + return _idToId(newData) + } + const filmData = data[0] + filmsCollection.updateOne({ + filmId, + }, [ + { + $set: { + views: ++filmData.views, + }, + }, + ]) + return _idToId(filmData) +} + +const setLike = async (filmId) => { + if (db === null) throw new Error('no db connection') + + const filmsCollection = db.collection(FILM_TOMATOS_COLL) + const data = await filmsCollection.find({ + filmId, + }).toArray() + + if (data.length === 0) { + throw new Error('no film data') + } + + const filmData = data[0] + filmsCollection.updateOne({ + filmId, + }, [ + { + $set: { + likes: ++filmData.likes, + }, + }, + ]) + return _idToId(filmData) +} + +const setRating = async ({ filmId, rating }) => { + if (db === null) throw new Error('no db connection') + + const filmsCollection = db.collection(FILM_TOMATOS_COLL) + const data = await filmsCollection.find({ + filmId, + }).toArray() + + if (data.length === 0) { + throw new Error('no film data') + } + + const filmData = data[0] + filmData.ratings = [...filmData.ratings, rating] + filmsCollection.updateOne({ + filmId, + }, [ + { + $set: { + ratings: filmData.ratings, + }, + }, + ]) + return _idToId(filmData) +} + +module.exports = { + connect, + getFilmData, + setLike, + setRating, +} diff --git a/server/routers/stc/index.js b/server/routers/stc/index.js new file mode 100644 index 0000000..ca9eb7f --- /dev/null +++ b/server/routers/stc/index.js @@ -0,0 +1,94 @@ +const router = require('express').Router() + +const { connect, getFilmData, setLike, setRating } = require('./controllers') +const { getAnswer } = require('../../utils/common') + +connect() + +router.get('/film/:id', async (req, res) => { + const data = await getFilmData(req.params.id) + res.send(getAnswer(null, data)) +}) + +router.post('/film/:id/rating', async (req, res) => { + const filmData = await setRating({ + filmId: req.params.id, rating: req.body.rating, + }) + res.send(getAnswer(null, filmData)) +}) + +router.post('/film/:id/like', async (req, res) => { + const filmData = await setLike(req.params.id) + res.send(getAnswer(null, filmData)) +}) + +const first = router.all('/feedback', (req, res) => { + setTimeout(() => { + res.send({ + success: true, + body: { + ...req.query, ...req.body, + }, + }) + }, 1000) + + /** + * Этот эндпоинт будет доступен по адресу http://inno-ijl.ru/multystub/stc-21-03/feedback + */ +}) + +function idGen() { + let i = 1 + return () => i++ +} + +const getId = idGen() + +let posts = [ + { + id: getId(), + link: 'https://www.unian.net/russianworld/v-rossii-na-bereg-zaliva-vybrosilo-tonny-ikry-mestnye-udobryayut-eyu-ogorody-video-novosti-rossii-11420710.html', + header: 'В России на берег залива выбросило тонны икры: местные удобряют ею огороды (видео)', + poster: 'images/1.jpeg', + text: `На побережье залива Анива в Сахалинской области РФ штормом выбросило тонны икры тихоокеанской сельди сахалино-хоккайдского стада. Об этом на своей странице в Facebook рассказал глава общественной организации "Экологическая вахта Сахалина" Дмитрий Лисицын. + По его словам, икру косяки сельди ранее отметали недалеко от берега, а теперь ее сплошная полоса шириной в несколько метров растянулась по побережью примерно на 3 км. Толщина слоя икры местами достигает 10-15 см.`, + }, + { + id: getId(), + link: 'https://www.unian.net/curiosities/zhenshchina-postirala-vyigryshnyy-bilet-na-26-millionov-dollarov-poslednie-novosti-11420341.html', + header: 'Женщина постирала выигрышный билет на 26 миллионов долларов', + poster: 'images/2.webp', + text: `Американка случайно постирала со штанами выигрышный лотерейный билет на 26 миллионов долларов. +Женщина приобрела лотерею еще в ноябре в пригороде Лос-Анджелеса. Однако за выигрышем она пришла тогда, когда истекал крайний срок – через 180 дней. В магазине американка отметила, что не может показать билет, поскольку постирала его в кармане одежды. +В то же время представитель калифорнийской лотереи Кэти Джонстон заявила, что отснятого материала (имея в виду кадры с камер видеонаблюдения, на которые попала покупатель) недостаточно, чтобы выдать призовые деньги женщине.`, + }, +] + +const getPosts = (req, res) => { + setTimeout(() => { + res.send({ + success: true, body: posts, + }) + }, 1000) + + /** + * Этот эндпоинт будет доступен по адресу http://89.223.91.151:8080/multystub/stc-21-03/posts + */ +} + +const addPost = (req, res) => { + posts.push({ + id: getId(), ...req.body, + }) + setTimeout(() => { + res.send({ + success: true, body: posts, + }) + }, 1000) +} + +router.get('/posts', getPosts) +router.post('/posts', addPost) +router.use('/', first) + +module.exports = router diff --git a/server/routers/sugarbun/collections/adminstats.json b/server/routers/sugarbun/collections/adminstats.json new file mode 100644 index 0000000..d634cc9 --- /dev/null +++ b/server/routers/sugarbun/collections/adminstats.json @@ -0,0 +1,15 @@ +{"status":"success", +"adminstats":[ + {"id":1,"month":"Январь","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":100.5}, + {"id":2,"month":"Февраль","monthly_sales":110000,"monthly_orders":23,"monthly_revenue":120.4}, + {"id":3,"month":"Март","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":100.6}, + {"id":4,"month":"Апрель","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":102.3}, + {"id":5,"month":"Май","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":80.2}, + {"id":6,"month":"Июнь","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":150.6}, + {"id":7,"month":"Июль","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":130.2}, + {"id":8,"month":"Август","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":240.7}, + {"id":9,"month":"Сентябрь","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":180.4}, + {"id":10,"month":"Октбярь","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":100.44}, + {"id":11,"month":"Ноябрь","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":15.5}, + {"id":12,"month":"Декабрь","monthly_sales":85600,"monthly_orders":23,"monthly_revenue":21.7} + ]} \ No newline at end of file diff --git a/server/routers/sugarbun/collections/cakeitem.json b/server/routers/sugarbun/collections/cakeitem.json new file mode 100644 index 0000000..6e8e035 --- /dev/null +++ b/server/routers/sugarbun/collections/cakeitem.json @@ -0,0 +1,229 @@ + { + "cakes": [ + { + "title": "АйЛи", + "image": "AiLi.png", + "description": "Ванильный бисквит", + "description1": "Ванильная пропитка", + "description2": "Сливочно-сырный крем", + "description3": "Клубничная прослойка", + "price": "1600", + "id": "cake" + }, + { + "title": "Лавандовый", + "image": "Lavender.png", + "description": "Лавандовый бисквит", + "description1": "Черничная пропитка", + "description2": "Сливочно-сырный крем", + "description3": "Черничный соус", + "price": "1700", + "id": "cake1" + }, + { + "title": "Шоколадный с солёной карамелью ", + "image": "Chocolate_with_salted caramel.png", + "description": "Шоколадный бисквит", + "description1": "Сливочно-сырный крем", + "description2": "Соленая карамель", + "description3": "Орехи и мягкий шоколадный ганаш", + "price": "1700", + "id": "cake2" + }, + { + "title": "Шоколадный трюфель", + "image": "Chocolate_truffle.png", + "description": "Шоколадный бисквит", + "description1": "Ванильная пропитка", + "description2": "Мягкий шоколадный ганаш", + "description3": "", + "price": "1700", + "id": "cake3" + }, + { + "title": "Красный бархат с вишней", + "image": "Red_velvet.png", + "description": "Бисквит красный бархат", + "description1": "Ягодная пропитка", + "description2": "Сливочно-сырный крем", + "description3": "Вишневый соус с кусочками вишни", + "price": "1600", + "id": "cake4" + }, + { + "title": "Фисташка-малина", + "image": "Pistachio-raspberry.png", + "description": "Фисташковый бисквит", + "description1": "Сливочно-сырный крем", + "description2": "Малиновый соус", + "description3": "", + "price": "1600", + "id": "cake5" + }, + { + "title": "Морковный с облепиховой прослойкой", + "image": "Carrot.png", + "description": "Пряный морковный бисквит с орехами", + "description1": "Облепиховая пропитка", + "description2": "Сливочно-сырный крем", + "description3": "Облепиховый соус", + "price": "1700", + "id": "cake6" + }, + { + "title": "Груша-дорблю", + "image": "Pear-dorblu.png", + "description": "Ванильный бисквит", + "description1": "Томлёная с ванилью груша", + "description2": "Сливочно-сырный крем", + "description3": "Кедровые орехи", + "price": "1700", + "id": "cake7" + }, + { + "title": "Шоколадный медовый", + "image": "Chocolate_honey.jpeg", + "description": "Шоколадные медовые коржи", + "description1": "Ванильное суфле", + "description2": "Сметанный крем с добавлением грецких орехов", + "description3": "", + "price": "1600", + "id": "cake8" + }, + { + "title": "Наполеон", + "image": "Napoleon.png", + "description": "Тонкие коржи из слоеного теста", + "description1": "Пропитка из заварного крема на сливках", + "description2": "", + "description3": "", + "price": "1700", + "id": "cake9" + }, + { + "title": "Тропический", + "image": "Tropical.png", + "description": "Кокосовый бисквит", + "description1": "Пропитка на кокосовом молоке", + "description2": "Пюре из манго и маракуйи", + "description3": "Сливочно-сырный крем с кокосовым муссом", + "price": "1700", + "id": "cake10" + }, + { + "title": "Маковый", + "image": "Poppy.png", + "description": "Маковый бисквит", + "description1": "Пропитка абрикос-маракуйя", + "description2": "Сливочно-сырный крем", + "description3": "Прослойка из абрикоса и маракуйи", + "price": "1700", + "id": "cake11" + }, + { + "title": "Павлова", + "image": "Pavlova.png", + "description": "Воздушные коржи из меренги с мягкой серединкой", + "description1": "Начинка апельсин-маракуйя", + "description2": "Сливочно-сырный крем", + "description3": "", + "price": "1800", + "id": "cake12" + }, + { + "title": "Чизкейк Нью-Йорк с солёной карамелью", + "image": "New-york-cheesecake_with_salted_caramel.png", + "description": "Песочная основа по оригинальному рецепту", + "description1": "Нежный сырный слой под слоем тягучей соленой карамели", + "description2": "", + "description3": "", + "price": "1600", + "id": "cake13" + }, + { + "title": "Чизкейк Нью-Йорк", + "image": "New-york-cheesecake.jpeg", + "description": "Песочная основа по оригинальному рецепту", + "description1": "Нежный сырный слой", + "description2": "", + "description3": "", + "price": "1500", + "id": "cake14" + }, + { + "title": "Чизкейк Сникерс", + "image": "Cheesecake_Snickers.png", + "description": "Песочно-шоколадная основа", + "description1": "Сырный слой", + "description2": "Соленая карамель с орехами", + "description3": "Покрыт слоем настоящего шоколада", + "price": "1600", + "id": "cake15" + }, + { + "title": "Баноффи", + "image": "Banoffi.png", + "description": "Песочная основа", + "description1": "Банановые кольца под слоем соленой карамели", + "description2": "Воздушный крем-чиз", + "description3": "", + "price": "1600", + "id": "cake16" + }, + { + "title": "Классический медовый с клюквой", + "image": "Classic_honey.png", + "description": "Недные медовые коржи", + "description1": "Небольшая кислинка в виде клюквенной прослойки", + "description2": "Ванильное суфле", + "description3": "Сметанный крем", + "price": "1600", + "id": "cake17" + } + ], + + "desserts": [ + { + "title": "Капкейк", + "image": "Kapkeik.png", + "description": "Нежный кекс с начинкой и кремовой шапочкой", + "price": "160", + "id": "des" + }, + { + "title": "Макарон", + "image": "Makaron.png", + "description": "Классический французский десерт из двух миндальных крышек и мягкой начинки", + "price": "100", + "id": "des1" + }, + { + "title": "Десерт Павлова", + "image": "Pavlova_desert.png", + "description": "Безе с мягкой сердцевиной внутри", + "price": "240", + "id": "des2" + }, + { + "title": "Трюфель", + "image": "Truffel.png", + "description": "Нежные конфеты на бельгийском шоколаде", + "price": "80", + "id": "des3" + }, + { + "title": "Кейк-ппс", + "image": "Keyk-pops.png", + "description": "Любимое лакомство детей. Пирожное картошка в новом исполнении", + "price": "100", + "id": "des4" + }, + { + "title": "Эклер", + "image": "Ekler.png", + "description": "Десерт на основе заварного теста с заварным кремом внутри", + "price": "160", + "id": "des5" + } + ] +} diff --git a/server/routers/sugarbun/collections/cakeshape.json b/server/routers/sugarbun/collections/cakeshape.json new file mode 100644 index 0000000..c672e74 --- /dev/null +++ b/server/routers/sugarbun/collections/cakeshape.json @@ -0,0 +1,22 @@ +[{ + "name": "Круг", + "id": "sh1", + "available": true +},{ + "name": "Квадрат", + "id": "sh2", + "available": true +},{ + "name": "Прямоугольник", + "id": "sh3", + "available": true +},{ + "name": "Овал", + "id": "sh4", + "available": true +},{ + "name": "Сложной формы", + "id": "sh5", + "available": true +} +] \ No newline at end of file diff --git a/server/routers/sugarbun/collections/cakesweight.json b/server/routers/sugarbun/collections/cakesweight.json new file mode 100644 index 0000000..97f15a3 --- /dev/null +++ b/server/routers/sugarbun/collections/cakesweight.json @@ -0,0 +1,30 @@ +[{ + "name": "1.5 кг", + "id": "cw1", + "available": true +},{ + "name": "2 кг", + "id": "cw2", + "available": true +},{ + "name": "3 кг", + "id": "cw3", + "available": true +},{ + "name": "4 кг", + "id": "cw4", + "available": true +},{ + "name": "5 кг", + "id": "cw5", + "available": true +},{ + "name": "6 кг", + "id": "cw6", + "available": true +},{ + "name": "7 кг", + "id": "cw8", + "available": true +} +] \ No newline at end of file diff --git a/server/routers/sugarbun/collections/ingredients.json b/server/routers/sugarbun/collections/ingredients.json new file mode 100644 index 0000000..438fa62 --- /dev/null +++ b/server/routers/sugarbun/collections/ingredients.json @@ -0,0 +1,74 @@ +[{ + "name": "Ванильный с клубникой", + "id": "ing1", + "available": true + },{ + "name": "Лавандовый", + "id": "ing2", + "available": true + },{ + "name": "Шоколадный с солёной карамелью, орехами и шоколадом", + "id": "ing3", + "available": true + },{ + "name": "Шоколадный трюфель", + "id": "ing4", + "available": true + },{ + "name": "Красный бархат с вишней", + "id": "ing5", + "available": true + },{ + "name": "Фисташка-малина", + "id": "ing6", + "available": true + },{ + "name": "Морковный с облепиховой прослойкой", + "id": "ing7", + "available": true + },{ + "name": "Груша-дорблю", + "id": "ing8", + "available": true + },{ + "name": "Классический медовый с клюквойм", + "id": "ing9", + "available": true + },{ + "name": "Шоколадный медовый", + "id": "ing10", + "available": true + },{ + "name": "Наполеон", + "id": "ing11", + "available": true + },{ + "name": "Тропический", + "id": "ing12", + "available": true + },{ + "name": "Маковый", + "id": "ing13", + "available": true + },{ + "name": "Павлова", + "id": "ing14", + "available": true + },{ + "name": "Чизкейк Нью-Йорк", + "id": "ing15", + "available": true + },{ + "name": "Чизкейк Нью-Йорк с соленой карамелью", + "id": "ing16", + "available": true + },{ + "name": "Чизкейк Сникерс", + "id": "ing17", + "available": true + },{ + "name": "Баноффи", + "id": "ing18", + "available": true + } +] \ No newline at end of file diff --git a/server/routers/sugarbun/controller.js b/server/routers/sugarbun/controller.js new file mode 100644 index 0000000..1713859 --- /dev/null +++ b/server/routers/sugarbun/controller.js @@ -0,0 +1,107 @@ +const ObjectId = require('mongodb').ObjectID + +const { getDB } = require('../../utils/mongo') + +const ingredients = require('./collections/ingredients.json') +const cakeshape = require('./collections/cakeshape.json') +const cakesweight = require('./collections/cakesweight.json') +const adminstats = require('./collections/adminstats.json') + +const INGREDIENTS_COLLECTION = 'ingredients' +const CAKESHAPE_COLLECTION = 'cakeshape' +const CAKESWEIGHT_COLLECTION = 'cakeswaight' +const ADMINSTATS_COLLECTION = 'adminstats' + +let db = null + +const connect = async () => { + db = await getDB('sugarbundb') +} + +const init = async () => { + await connect() + const ingredientsCollection = db.collection(INGREDIENTS_COLLECTION) + const findingredients = await ingredientsCollection.find({ + }).toArray() + // console.log(findingredients) + if (findingredients.length === 0) { + await ingredientsCollection.insertMany(ingredients) + } + const cakeshapeCollection = db.collection(CAKESHAPE_COLLECTION) + const findcakeshape = await cakeshapeCollection.find({ + }).toArray() + if (findcakeshape.length === 0) { + await cakeshapeCollection.insertMany(cakeshape) + } + const cakesweightCollection = db.collection(CAKESWEIGHT_COLLECTION) + const findcakesweight = await cakesweightCollection.find({ + }).toArray() + if (findcakesweight.length === 0) { + await cakesweightCollection.insertMany(cakesweight) + } + const adminstatsCollection = db.collection(ADMINSTATS_COLLECTION) + const findadminstats = await adminstatsCollection.find({ + }).toArray() + if (findadminstats.length === 0) { + await adminstatsCollection.insertMany(adminstats.adminstats) + } +} + +init() + +const getIngredients = async () => { + if (db === null) throw new Error('no db connection') + try { + const ingredientsCollection = db.collection(INGREDIENTS_COLLECTION) + const defaultIngredients = await ingredientsCollection.find({ + available: true, + }).toArray() + return (defaultIngredients) + } catch (e) { + throw new Error(e) + } +} + +const getCakeshape = async () => { + if (db === null) throw new Error('no db connection') + try { + const cakeshapeCollection = db.collection(CAKESHAPE_COLLECTION) + const defaultCakeshapes = await cakeshapeCollection.find({ + available: true, + }).toArray() + return (defaultCakeshapes) + } catch (e) { + throw new Error(e) + } +} + +const getCakesweight = async () => { + if (db === null) throw new Error('no db connection') + try { + const cakesweightCollection = db.collection(CAKESWEIGHT_COLLECTION) + const defaultCakesweights = await cakesweightCollection.find({ + available: true, + }).toArray() + return (defaultCakesweights) + } catch (e) { + throw new Error(e) + } +} + +const getStats = async () => { + if (db === null) throw new Error('no db connection') + try { + const adminstatsCollection = db.collection(ADMINSTATS_COLLECTION) + const defaultStats = await adminstatsCollection.find().toArray() + return (defaultStats) + } catch (e) { + throw new Error(e) + } +} + +module.exports = { + getIngredients, + getCakeshape, + getCakesweight, + getStats, +} diff --git a/server/routers/sugarbun/index.js b/server/routers/sugarbun/index.js new file mode 100644 index 0000000..2cdda98 --- /dev/null +++ b/server/routers/sugarbun/index.js @@ -0,0 +1,44 @@ +const router = require('express').Router() +const { getIngredients, getCakeshape, getCakesweight, getStats, getCakeitem } = require('./controller') + +module.exports = router + +router.get('/constructor/formitems', async (req, res) => { + // получение данных из бэкенда + const ingredient = (await getIngredients()).map((item) => ({ + ...item, + _id: undefined, + })) + const cakeshape = (await getCakeshape()).map((item) => ({ + ...item, + _id: undefined, + })) + const cakesweight = (await getCakesweight()).map((item) => ({ + ...item, + _id: undefined, + })) + res.send({ + ingredients: ingredient, + cakeshapes: cakeshape, + cakesweights: cakesweight, + }) +}) + +router.get('/admin/adminstats', async (req, res) => { + // получение данных из бэкенда + const adminstat = (await getStats()).map((item) => ({ + ...item, + _id: undefined, + })) + res.send({ + adminstats: adminstat, + }) +}) +router.post('/constructor/submit', (req, res) => { + res.send() +}) + +router.get('/menu/cakeitems', async (req, res) => { + // получение данных из бэкенда + res.send(require('./collections/cakeitem.json')) +}) diff --git a/server/routers/task-boss/auth.js b/server/routers/task-boss/auth.js new file mode 100644 index 0000000..d06cd24 --- /dev/null +++ b/server/routers/task-boss/auth.js @@ -0,0 +1,22 @@ +const hash = require('pbkdf2-password')() + +const users = [{ + salt: '1iKffJhuhGpQGx7JjiGc+ShnorhVcJDtEqTTBQjX7tnuMxfdN3nMpYpcxY0MZSPSCCGP+9l4swhit4E/ZGgVZA==', + hash: 'tQ0V8293708V2/sjyVG6yMSAlizKmTezTpoLxBc0hpfxEOImRNRGQbEx3HuGrowE4HYjzdshJbu52E5rsDE0Hfrmy1unoL/8tjeWGRF04d2sF1lhUrpxt3v1pf3du0rhR2PLTL5d2BWEtT3pSStiWeetw/zdZRDNMo9PVQqnjX0=', + login: 'task-boss', + id: '1', +}] + +function authenticate(login, pass, fn) { + let user = users.find((u) => u.login === login) + if (!user) return fn(new Error('невозможно найти пользователя')) + hash({ + password: pass, salt: user.salt, + }, (err, pass, salt, hash) => { + if (err) return fn(err) + if (hash === user.hash) return fn(null, user) + fn(new Error('неверный пароль')) + }) +} + +module.exports = authenticate diff --git a/server/routers/task-boss/constants.js b/server/routers/task-boss/constants.js new file mode 100644 index 0000000..16dd41b --- /dev/null +++ b/server/routers/task-boss/constants.js @@ -0,0 +1,5 @@ +const JWT_SECRET_KEY = 'hefiowaehfipwehafcpoweHPOCHopcvhophvnpx dsl;sad sl;dn lsdn lsd' + +module.exports = { + JWT_SECRET_KEY, +} diff --git a/server/routers/task-boss/controllers.js b/server/routers/task-boss/controllers.js new file mode 100644 index 0000000..aeb3a31 --- /dev/null +++ b/server/routers/task-boss/controllers.js @@ -0,0 +1,288 @@ +/* eslint-disable no-restricted-syntax */ + +const hash = require('pbkdf2-password')() + +const { getDB } = require('../../utils/mongo') +// eslint-disable-next-line import/order +const ObjectId = require('mongodb').ObjectID + +let db = null + +const connect = async () => { + db = await getDB('task-boss') +} + +const _idToId = (data) => { + const { _id, ...rest } = data + + return { + id: _id, + ...rest, + } +} + +const DEPTS_COLLECTION = 'depts4' +const PEOPLES_COLLECTION = 'peoples4' +const USERS_COLL = 'users3' + +const getDepts = async () => { + if (db === null) throw new Error('no db connection') + + const deptsCollection = db.collection(DEPTS_COLLECTION) + + let responseData = null + + try { + responseData = await deptsCollection.aggregate([{ + $lookup: { + from: 'peoples', + let: { + id_fio_resp: '$idFio', + }, + pipeline: [ + { + $match: + { + $expr: + { + $eq: ['$id', '$$id_fio_resp'], + }, + }, + }, + { + $project: { + id: '$_id', + _id: 0, + family: 1, + name: 1, + secondName: 1, + email: 1, + phone: 1, + }, + }], + as: 'responsible', + }, + }, + { + $unwind: '$responsible', + }, + { + $project: { + id: '$_id', + _id: 0, + parentId: '$parentDept', + name: 1, + qty: { + $size: '$employees', + }, + responsible: '$responsible', + notes: '$note', + tasks: { + inWork: '0', + newTasks: '0', + }, + }, + }, + ]).toArray() + } catch (e) { + console.log(e.message) + } + + if (!responseData || responseData?.length === 0) { + responseData = require('./stubs/depts.json').body + } + + return responseData +} + +const getDeptData = async (deptId) => { + if (db === null) throw new Error('no db connection') + + const deptsCollection = db.collection(DEPTS_COLLECTION) + const data = await deptsCollection.aggregate([ + { + $match: { + _id: new ObjectId(deptId), + }, + }, + { + $lookup: { + from: 'peoples', + pipeline: [{ + $project: { + id: '$_id', + _id: 0, + family: 1, + name: 1, + secondName: 1, + email: 1, + phone: 1, + }, + }], + localField: 'idFio', + foreignField: 'id', + as: 'responsible', + }, + }, + { + $unwind: '$responsible', + }, + { + $project: { + id: '$_id', + _id: 0, + parentId: '$parentDept', + name: 1, + qty: { + $size: '$employees', + }, + responsible: '$responsible', + notes: '$note', + tasks: { + inWork: '0', + newTasks: '0', + }, + }, + }, + ]).toArray() + + if (data.length === 0) { + throw new Error('No data') + } + + return _idToId(data[0]) +} + +const dropDocuments = async (id) => { + try { + const deptsCollection = db.collection(DEPTS_COLLECTION) + + const data = await deptsCollection.find({ + parentDept: id, + }).toArray() + + data.forEach((element) => { + dropDocuments(element._id) + }) + + deptsCollection.deleteOne({ + _id: new ObjectId(id), + }) + } catch (e) { + console.log(e) + } +} + +const deleteDeptById = async (body) => { + if (db === null) throw new Error('no db connection'); + try { + // eslint-disable-next-line guard-for-in + for (let deptId in body) { + dropDocuments(deptId) + } + } catch (e) { + console.log(e) + } +} + +const getPeoplesData = async () => { + if (db === null) throw new Error('no db connection') + + const peoplesCollection = db.collection(PEOPLES_COLLECTION) + const data = await peoplesCollection.find().toArray() + + if (data.length === 0) { + const newData = require('./stubs/peoples/success.json').data + + peoplesCollection.insertMany(newData) + + return _idToId(newData) + } + + return data +} + +const createDept = async ({ form, peoples }) => { + if (db === null) throw new Error('no db connection') + + const deptsCollection = db.collection(DEPTS_COLLECTION) + + const data = await deptsCollection.find({ + name: form.name, + }).toArray() + + if (data.length > 0) throw new Error('duplication of stirng') + + const employees = [] + peoples.forEach((item) => employees.push({ + id: item.id, + })) + const dataToInsert = { + ...form, employees, + } + deptsCollection.insertMany([dataToInsert]) + + return dataToInsert +} +const authenticate = async (login, pass, fn) => { + if (db === null) return fn(new Error('no db connection')) + const usersCollection = db.collection(USERS_COLL) + const users = await usersCollection.find({ + login, + }).toArray() + if (!users.length) return fn(new Error('невозможно найти пользователя')) + const [user] = users + + hash({ + password: pass, salt: user.salt, + }, (err, pass, salt, hash) => { + if (err) return fn(err) + if (hash === user.hash) return fn(null, user) + fn(new Error('неверный пароль')) + }) +} + +const setUsers = async (dataUsers) => { + if (db === null) throw new Error('no db connection') + + const usersCollection = db.collection(USERS_COLL) + const data = await usersCollection.find({ + $or: [{ + login: dataUsers.login, + }, { + mail: dataUsers.mail, + }], + }).toArray() + + if (data.length === 0) { + hash({ + password: dataUsers.password, saltLength: 15, + }, (err, pass, salt, hash) => { + const users = { + } + const { login, password, mail } = { + ...dataUsers, + } + users.login = login + users.name = login + users.mail = mail + users.hash = hash + users.salt = salt + usersCollection.insertMany([users]) + }) + + return dataUsers + } + if (data.length !== 0) throw new Error('Почта или логин уже существует') +} + +module.exports = { + connect, + getDepts, + getDeptData, + getPeoplesData, + createDept, + setUsers, + deleteDeptById, + authenticate, +} diff --git a/server/routers/task-boss/index.js b/server/routers/task-boss/index.js new file mode 100644 index 0000000..2a845dc --- /dev/null +++ b/server/routers/task-boss/index.js @@ -0,0 +1,162 @@ +const router = require('express').Router() +const { promisify } = require('util') +const jwt = require('jsonwebtoken') +const fs = require('fs') +const path = require('path') +const md5 = require('crypto-js/md5') + +const { JWT_SECRET_KEY } = require('./constants') +const { getResponse } = require('../../utils/common') +const { connect, getPeoplesData, createDept, getDepts, getDeptData, deleteDeptById, setUsers, authenticate } = require('./controllers') + +connect() + +router.get('/depts', async (req, res) => { + const errors = [] + const depts = await getDepts().catch((e) => errors.push(e.message)) + res.send(getResponse(errors, depts)) +}) + +router.get('/peoples', async (req, res) => { + const errors = [] + const peoplesData = await getPeoplesData().catch((e) => errors.push(e.message)) + res.send(getResponse(errors, peoplesData)) +}) + +router.post('/depts/create', async (req, res) => { + const errors = [] + const deptData = await createDept(req.body.data).catch((e) => errors.push(e.message)) + res.send(getResponse(errors, deptData)) +}) + +router.get('/dept/:id', async (req, res) => { + const errors = [] + const data = await getDeptData(req.params.id) + res.send(getResponse(errors, data)) +}) + +router.post('/dept/delete', async (req, res) => { + const errors = [] + await deleteDeptById(req.body) + res.send(getResponse(errors, 'success')) +}); + +router.post('/login', async (req, res, next) => { + const auth = promisify(authenticate) + try { + console.log(req.body.login) + console.log(req.body.password) + const { hash, salt, ...user } = await auth(req.body.login, req.body.password) + + const token = jwt.sign({ + user, + }, JWT_SECRET_KEY) + req.session.regenerate(() => { + req.session.user = user + res.send({ + success: true, + body: { + ...user, + token, + }, + errors: [], + warnings: [], + }) + }) + } catch (error) { + next(error) + } +}) + +router.get('/tasks', (req, resp) => { + resp.send(require('./stubs/tasks/tasks.json')) +}) + +router.post('/tasks/create', (req, resp) => { + try { + const { dept } = req.body + const rawTasksData = fs.readFileSync(path.resolve(__dirname, './stubs/tasks/tasks.json')) + const tasksData = JSON.parse(rawTasksData) + const deptTasksData = tasksData.body.filter((data) => data.label === dept) + + const task = { + id: md5(new Date()).toString(), + number: 100, + task: req.body.task, + status: 'open', + priority: req.body.priority, + performer: req.body.performer, + deadline: new Date(req.body.deadline).getTime(), + lastChanged: new Date().getTime(), + description: req.body.description, + } + + if (!deptTasksData.length) { + const newDeptTasksData = { + label: req.body.dept, + data: [task], + } + tasksData.body.push(newDeptTasksData) + } else { + tasksData.body.map((data) => { + if (data.label === dept) { + return data.data.push(task) + } + return data + }) + } + fs.writeFileSync(path.resolve(__dirname, './stubs/tasks/tasks.json'), JSON.stringify(tasksData)) + resp.send({ + success: true, + body: task, + errors: [], + warnings: [], + }) + } catch (e) { + resp.send('./stubs/error.json') + } +}) + +router.post('/tasks/delete', (req, resp) => { + resp.send(require('./stubs/tasks/delete.json')) +}) + +router.post('/tasks/edit', (req, resp) => { + resp.send({ + success: true, + body: req.body, + errors: [], + warnings: [], + }) +}) + +router.post('/sign-up', async (req, res, next) => { + try { + const { hash, salt, ...user } = await setUsers({ + login: req.body.login, + password: req.body.password, + mail: req.body.mail, + }) + + const token = jwt.sign({ + user, + }, JWT_SECRET_KEY) + req.session.regenerate(() => { + req.session.user = user + + res.send({ + success: true, + body: { + ...user, + token, + }, + errors: [], + warnings: [], + }) + }) + } catch (error) { + next(error) + } +}) + +module.exports = router diff --git a/server/routers/task-boss/stubs/depts.json b/server/routers/task-boss/stubs/depts.json new file mode 100644 index 0000000..657d691 --- /dev/null +++ b/server/routers/task-boss/stubs/depts.json @@ -0,0 +1,119 @@ +{ + "body": [{ + "id": "001", + "parentId": "0", + "name": "Головной", + "qty": 56, + "responsible": { + "id": 1, + "family": "Иванов", + "name": "Иван", + "secondName": "Иванович", + "phone": "", + "email": "" + }, + "tasks": { + "inWork": 12, + "newTasks": 54 + }, + "notes": "" + }, + { + "id": "002", + "parentId": "0", + "name": "Цех", + "qty": 52, + "responsible": { + "id": 2, + "family": "Буйнов", + "name": "Александр", + "secondName": "Александрович", + "phone": "", + "email": "" + }, + "tasks": { + "inWork": 67, + "newTasks": 12 + }, + "notes": "" + }, + { + "id": "003", + "parentId": "002", + "name": "Токарка", + "qty": 6, + "responsible": { + "id": 3, + "family": "Петров", + "name": "Иван", + "secondName": "Иванович", + "phone": "", + "email": "" + }, + "tasks": { + "inWork": 22, + "newTasks": 2 + }, + "notes": "1 этаж. красный сектор" + }, + { + "id": "004", + "parentId": "002", + "name": "Слесарка", + "qty": 34, + "responsible": { + "id": 3, + "family": "Петров", + "name": "Иван", + "secondName": "Иванович", + "phone": "", + "email": "" + }, + "tasks": { + "inWork": 34, + "newTasks": 10 + }, + "notes": "1 этаж. синий сектор" + }, + { + "id": "005", + "parentId": "002", + "name": "Отрезной", + "qty": 12, + "responsible": { + "id": 4, + "family": "Сидоров", + "name": "Сергей", + "secondName": "Викторович", + "phone": "", + "email": "" + }, + "tasks": { + "inWork": 11, + "newTasks": 0 + }, + "notes": "1 этаж. оранжевый сектор" + }, + { + "id": "006", + "parentId": "0", + "name": "Снабжение", + "qty": 1, + "responsible": { + "id": 5, + "family": "Зыков", + "name": "Александр", + "secondName": "Геннадьевич", + "phone": "", + "email": "" + }, + "tasks": { + "inWork": 2, + "newTasks": 0 + }, + "notes": "" + } + ], + "errors": [], + "warnings": [] +} \ No newline at end of file diff --git a/server/routers/task-boss/stubs/error.json b/server/routers/task-boss/stubs/error.json new file mode 100644 index 0000000..8f49e38 --- /dev/null +++ b/server/routers/task-boss/stubs/error.json @@ -0,0 +1,6 @@ +{ + "success": true, + "body": null, + "errors": [], + "warnings": [] +} diff --git a/server/routers/task-boss/stubs/peoples/success.json b/server/routers/task-boss/stubs/peoples/success.json new file mode 100644 index 0000000..6dcca0f --- /dev/null +++ b/server/routers/task-boss/stubs/peoples/success.json @@ -0,0 +1,30 @@ +{ + "data": [ + { + "id": 1, + "family": "Иванов", + "name": "Иван", + "secondName": "Иванович", + "phone": "", + "email": "" + }, + { + "id": 2, + "family": "Буйнов", + "name": "Александр", + "secondName": "Александрович", + "phone": "", + "email": "" + }, + { + "id": 3, + "family": "Зыков", + "name": "Александр", + "secondName": "Григорьевич", + "phone": "", + "email": "" + } + ], + "errors": [], + "warnings": [] +} diff --git a/server/routers/task-boss/stubs/tasks/delete.json b/server/routers/task-boss/stubs/tasks/delete.json new file mode 100644 index 0000000..c54731f --- /dev/null +++ b/server/routers/task-boss/stubs/tasks/delete.json @@ -0,0 +1,8 @@ +{ + "success": true, + "body": { + "id": "1" + }, + "errors": [], + "warnings": [] +} diff --git a/server/routers/task-boss/stubs/tasks/tasks.json b/server/routers/task-boss/stubs/tasks/tasks.json new file mode 100644 index 0000000..104f008 --- /dev/null +++ b/server/routers/task-boss/stubs/tasks/tasks.json @@ -0,0 +1,165 @@ +{ + "success": true, + "body": [{ + "label": "Головной", + "data": [{ + "id": "1", + "number": 10, + "task": "Установить Microsoft Office", + "status": "inProgress", + "priority": "middle", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "2", + "number": 11, + "task": "Замена картриджа", + "status": "open", + "priority": "high", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "3", + "number": 12, + "task": "Установка второго монитора", + "status": "inProgress", + "priority": "low", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "4", + "number": 13, + "task": "Замена клавиатуры", + "status": "inProgress", + "priority": "high", + "performer": "Иванов Иван Иванович", + "deadline": 1629534740538, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "5", + "number": 14, + "task": "Закончилась подписка на ПО", + "status": "needInfo", + "priority": "middle", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }] + }, { + "label": "Цех", + "data": [{ + "id": "6", + "number": 20, + "task": "Установить Microsoft Office", + "status": "inProgress", + "priority": "middle", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "7", + "number": 21, + "task": "Замена картриджа", + "status": "open", + "priority": "high", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "8", + "number": 22, + "task": "Установка второго монитора", + "status": "inProgress", + "priority": "low", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "9", + "number": 23, + "task": "Замена клавиатуры", + "status": "inProgress", + "priority": "high", + "performer": "Иванов Иван Иванович", + "deadline": 1629534740538, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "10", + "number": 24, + "task": "Закончилась подписка на ПО", + "status": "needInfo", + "priority": "middle", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }] + }, { + "label": "Токарка", + "data": [{ + "id": "11", + "number": 30, + "task": "Установить Microsoft Office", + "status": "inProgress", + "priority": "middle", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "12", + "number": 31, + "task": "Замена картриджа", + "status": "open", + "priority": "high", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "13", + "number": 32, + "task": "Установка второго монитора", + "status": "inProgress", + "priority": "low", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "14", + "number": 33, + "task": "Замена клавиатуры", + "status": "inProgress", + "priority": "high", + "performer": "Иванов Иван Иванович", + "deadline": 1629534740538, + "lastChanged": 1629534740538, + "description": "Описание" + }, { + "id": "15", + "number": 34, + "task": "Закончилась подписка на ПО", + "status": "needInfo", + "priority": "middle", + "performer": "Иванов Иван Иванович", + "deadline": 1640927340000, + "lastChanged": 1629534740538, + "description": "Описание" + }] + }], + "errors": [], + "warnings": [] +} diff --git a/server/routers/uryndyklar/index.js b/server/routers/uryndyklar/index.js new file mode 100644 index 0000000..8e370f5 --- /dev/null +++ b/server/routers/uryndyklar/index.js @@ -0,0 +1,41 @@ +const router = require('express').Router() + +// The code in this folder is partially based on the code from this repo: +// https://bitbucket.org/online-mentor/auth-system/src/master/stubs/api/ + +const wait = (time = 100) => (req, res, next) => setTimeout(next, time) + +const stubs = [ + ['cart', 'get', 'success'], + // ['search', 'get', 'success'], + ['cart', 'post', 'success'], +] + +for (let [func, method, mock] of stubs) { + router[method](`/${func}`, wait(), (req, res) => { + res.send(require(`./mocks/${func}_${method}/${mock}`)) + }) +} + +router.get('/search', wait(), (req, res, _) => { + let data = require('./mocks/search_get/success.json') + let { items } = data + const filters = req.query.filters.length > 0 ? req.query.filters.split(',') : [] + const query = req.query.query.toLowerCase() + + const chairsToSend = [] + for (const chair of items) { + if (chair.model.toLowerCase().includes(query) && filters.every((tag) => chair.tags.includes(tag))) { + chairsToSend.push(chair) + } + } + + res.send( + { + success: true, + items: chairsToSend, + }, + ) +}) + +module.exports = router diff --git a/server/routers/uryndyklar/mocks/cart_get/empty.json b/server/routers/uryndyklar/mocks/cart_get/empty.json new file mode 100644 index 0000000..deb15e1 --- /dev/null +++ b/server/routers/uryndyklar/mocks/cart_get/empty.json @@ -0,0 +1,4 @@ +{ + "success": true, + "items": [] +} diff --git a/server/routers/uryndyklar/mocks/cart_get/error.json b/server/routers/uryndyklar/mocks/cart_get/error.json new file mode 100644 index 0000000..bcdf55b --- /dev/null +++ b/server/routers/uryndyklar/mocks/cart_get/error.json @@ -0,0 +1,4 @@ +{ + "success": false, + "message": "Error retrieving cart" +} diff --git a/server/routers/uryndyklar/mocks/cart_get/success.json b/server/routers/uryndyklar/mocks/cart_get/success.json new file mode 100644 index 0000000..ec6e1bc --- /dev/null +++ b/server/routers/uryndyklar/mocks/cart_get/success.json @@ -0,0 +1,18 @@ +{ + "success": true, + "items": [ + { + "id": "42", + "model": "model A", + "price_usual": "$299", + "picture": "https://cdn.shopify.com/s/files/1/0011/1273/5803/products/LF-HB_BrisaBlackOnyx_shadow_clip_c-j_800x.jpg?v=1612828182" + }, + { + "id": "322", + "model": "model T", + "price_usual": "$499", + "price_discounted": "$69", + "picture": "https://ehire.co.za/wp-content/uploads/2018/10/furniture-chairs-conference-chair-charcoal.jpg" + } + ] +} diff --git a/server/routers/uryndyklar/mocks/cart_post/error.json b/server/routers/uryndyklar/mocks/cart_post/error.json new file mode 100644 index 0000000..2b5c85f --- /dev/null +++ b/server/routers/uryndyklar/mocks/cart_post/error.json @@ -0,0 +1,4 @@ +{ + "success": false, + "message": "Unknown action: not_add_or_remove" +} diff --git a/server/routers/uryndyklar/mocks/cart_post/success.json b/server/routers/uryndyklar/mocks/cart_post/success.json new file mode 100644 index 0000000..33c0c84 --- /dev/null +++ b/server/routers/uryndyklar/mocks/cart_post/success.json @@ -0,0 +1,3 @@ +{ + "success": true +} diff --git a/server/routers/uryndyklar/mocks/search_get/empty.json b/server/routers/uryndyklar/mocks/search_get/empty.json new file mode 100644 index 0000000..deb15e1 --- /dev/null +++ b/server/routers/uryndyklar/mocks/search_get/empty.json @@ -0,0 +1,4 @@ +{ + "success": true, + "items": [] +} diff --git a/server/routers/uryndyklar/mocks/search_get/error.json b/server/routers/uryndyklar/mocks/search_get/error.json new file mode 100644 index 0000000..7971079 --- /dev/null +++ b/server/routers/uryndyklar/mocks/search_get/error.json @@ -0,0 +1,4 @@ +{ + "success": false, + "message": "Error retrieving search results" +} diff --git a/server/routers/uryndyklar/mocks/search_get/ikea.json b/server/routers/uryndyklar/mocks/search_get/ikea.json new file mode 100644 index 0000000..85d9da7 --- /dev/null +++ b/server/routers/uryndyklar/mocks/search_get/ikea.json @@ -0,0 +1,21 @@ +{ + "success": true, + "items": [ + { + "id": "101", + "model": "model M", + "price_usual": "$9", + "price_discounted": "$4.99", + "picture": "https://dg-home.ru/pic/234417/taburet_tronco_kollektsiia_tronko__4__big.jpg", + "tags": ["for_children", "ikea", "yellow", "spruce"] + }, + { + "id": "1337", + "model": "model H", + "price_usual": "$1", + "price_discounted": "$0.01", + "picture": "https://media.istockphoto.com/photos/old-broken-chair-picture-id157336134", + "tags": ["for_children", "ikea", "multi_color", "spruce"] + } + ] +} diff --git a/server/routers/uryndyklar/mocks/search_get/ikea_multicolor.json b/server/routers/uryndyklar/mocks/search_get/ikea_multicolor.json new file mode 100644 index 0000000..ab4f8c5 --- /dev/null +++ b/server/routers/uryndyklar/mocks/search_get/ikea_multicolor.json @@ -0,0 +1,13 @@ +{ + "success": true, + "items": [ + { + "id": "1337", + "model": "model H", + "price_usual": "$1", + "price_discounted": "$0.01", + "picture": "https://media.istockphoto.com/photos/old-broken-chair-picture-id157336134", + "tags": ["for_children", "ikea", "multi_color", "spruce"] + } + ] +} diff --git a/server/routers/uryndyklar/mocks/search_get/modelH.json b/server/routers/uryndyklar/mocks/search_get/modelH.json new file mode 100644 index 0000000..ab4f8c5 --- /dev/null +++ b/server/routers/uryndyklar/mocks/search_get/modelH.json @@ -0,0 +1,13 @@ +{ + "success": true, + "items": [ + { + "id": "1337", + "model": "model H", + "price_usual": "$1", + "price_discounted": "$0.01", + "picture": "https://media.istockphoto.com/photos/old-broken-chair-picture-id157336134", + "tags": ["for_children", "ikea", "multi_color", "spruce"] + } + ] +} diff --git a/server/routers/uryndyklar/mocks/search_get/success.json b/server/routers/uryndyklar/mocks/search_get/success.json new file mode 100644 index 0000000..3e452e1 --- /dev/null +++ b/server/routers/uryndyklar/mocks/search_get/success.json @@ -0,0 +1,67 @@ +{ + "success": true, + "items": [ + { + "id": "322", + "model": "model T", + "price_usual": "$499", + "price_discounted": "$69", + "picture": "https://ehire.co.za/wp-content/uploads/2018/10/furniture-chairs-conference-chair-charcoal.jpg", + "tags": ["office", "chairman", "black", "dark_oak"] + }, + { + "id": "42", + "model": "model A", + "price_usual": "$299", + "picture": "https://cdn.shopify.com/s/files/1/0011/1273/5803/products/LF-HB_BrisaBlackOnyx_shadow_clip_c-j_800x.jpg?v=1612828182", + "tags": ["office", "gamer", "argos", "black", "red", "maple"] + }, + { + "id": "228", + "model": "model G", + "price_usual": "$999", + "price_discounted": "$599", + "picture": "https://www.powerplanetonline.com/cdnassets/silla_gaming_white_shark_monza_rojo_01_l.jpg", + "tags": ["gamer", "chairman", "red", "acacia"] + }, + { + "id": "101", + "model": "model M", + "price_usual": "$9", + "price_discounted": "$4.99", + "picture": "https://dg-home.ru/pic/234417/taburet_tronco_kollektsiia_tronko__4__big.jpg", + "tags": ["for_children", "ikea", "yellow", "spruce"] + }, + { + "id": "111", + "model": "model C", + "price_usual": "$199", + "picture": "https://www.techinn.com/f/13809/138093984/talius-caiman-gaming-chair.jpg", + "tags": ["gamer", "dx_racer", "black", "yellow", "oak"] + }, + { + "id": "1337", + "model": "model H", + "price_usual": "$1", + "price_discounted": "$0.01", + "picture": "https://media.istockphoto.com/photos/old-broken-chair-picture-id157336134", + "tags": ["for_children", "ikea", "multi_color", "spruce"] + }, + { + "id": "227", + "model": "model K", + "price_usual": "$549", + "price_discounted": "$499", + "picture": "https://l33t-gaming.com/wp-content/uploads/2021/01/160373_01.png", + "tags": ["gamer", "office", "chairman", "black", "white", "birch"] + }, + { + "id": "121", + "model": "model Q", + "price_usual": "$949", + "price_discounted": "$899", + "picture": "https://target.scene7.com/is/image/Target/GUEST_1144a161-ee20-484b-b9a1-724bbee36c41?wid=488&hei=488&fmt=pjpeg", + "tags": ["gamer", "secretlab", "multi_color", "spruce"] + } + ] +} diff --git a/server/routers/zoom-bar/index.js b/server/routers/zoom-bar/index.js new file mode 100644 index 0000000..9bea5c6 --- /dev/null +++ b/server/routers/zoom-bar/index.js @@ -0,0 +1,97 @@ +const router = require('express').Router() + +const onlines = new Map([ +]) + +const otmetki = new Map() + +setInterval(() => { + [...otmetki.entries()].forEach(([user, otm]) => { + if (Date.now() - otm > 3500) { + onlines.set(user, { + ...(onlines.get(user) || { + }), + online: false, + }) + } + }) +}, 3000) + +const mapToObj = (map) => [...map.entries()].reduce((acc, [key, value]) => ({ + ...acc, + [key]: { + name: key, + ...value, + }, +}), { +}) + +router.post('/enter', (req, res) => { + const { username } = req.body + onlines.set(username, { + ...(onlines.get(username) || { + }), + online: true, + }) + req.session.username = username + res.send({ + }) +}) + +let syncData = { + online: mapToObj(onlines), +} + +router.get('/events', (req, res) => { + syncData.online = mapToObj(onlines) + res.send(syncData) +}) + +router.post('/set-usr-event', (req, res) => { + const { + username, + userData, + } = req.body + onlines.set(username, { + ...(onlines.get(username) || { + }), + data: userData, + }) + res.send({ + }) +}) + +router.post('/set-bar-event', (req, res) => { + const { type } = req.body + syncData.event = type + syncData.id = Math.random() + + res.send({ + }) +}) + +router.get('/bar/:u', (req, res) => { + onlines.set(req.params.u, { + ...(onlines.get(req.params.u) || { + }), + online: true, + }) + syncData.online = mapToObj(onlines) + // syncData.id = Math.random(); + otmetki.set(req.params.u, Date.now()) + + res.send(syncData) +}) + +router.get('/quit-bar', (req, res) => { + onlines.set(req.session.username || req.params.u, { + ...(onlines.get(req.session.username || req.params.u) || { + }), + online: false, + }) + syncData.online = mapToObj(onlines) + res.send({ + }) +}) + +module.exports = router diff --git a/server/utils/common.js b/server/utils/common.js new file mode 100644 index 0000000..d5b7d00 --- /dev/null +++ b/server/utils/common.js @@ -0,0 +1,35 @@ +const getAnswer = (errors, data, success = true) => { + if (errors) { + return { + success: false, + errors, + } + } + + return { + success, + body: data, + } +} + +const getResponse = (errors, data, success = true) => { + if (errors.length) { + return { + success: false, + errors, + warnings: [], + } + } + + return { + success, + body: data, + errors: [], + warnings: [], + } +} + +module.exports = { + getAnswer, + getResponse, +} diff --git a/server/utils/mongo.js b/server/utils/mongo.js new file mode 100644 index 0000000..c6be2a0 --- /dev/null +++ b/server/utils/mongo.js @@ -0,0 +1,34 @@ +const MDBClient = require('mongodb').MongoClient + +const rc = require('../../.serverrc') + +// Connection URL +const url = `mongodb://${rc.mongoAddr}:${rc.mongoPort}` + +const dbInstanses = { +} +const mongoDBConnect = async () => { + try { + const MongoClient = new MDBClient(url, { + useUnifiedTopology: true, + }) + return await MongoClient.connect() + } catch (error) { + console.error(error) + } +} +const client = mongoDBConnect() + +const getDB = async (dbName) => { + try { + const cl = await client + dbInstanses[dbName] = await cl.db(dbName) + return dbInstanses[dbName] + } catch (error) { + console.error(error) + } +} + +module.exports = { + getDB, +}