Warning
è¿ææåç°æéšåçšæ·åš.envæä»¶äžå¡«å
¥äºæççœæäºAPI, å¯èœäŒæäººäžæ, Vercelæ¯æ500GBæµééå¶ç
è¿ç§ç°è±¡å¯ŒèŽäºæçæŒç€ºç«ç¹äžçŽè¶
åºéå¶å¯ŒèŽç«ç¹æ æ³è®¿é®, æä»¥åŒå倧家äžèŠææçAPIå¡«å
¥èªå·±çé
眮æä»¶å
èŠæ¯è¿åç°æäººåšèæ å¿æ®çäœ¿çšæçAPI, æå°äŒå°çŠäœ çIPå¹¶äžæäœ ççœæäºCookieå
¬åŒå°åœåä»åºäž
Important
飿¯å 䞺åšimsyyçdev忝å°äŒåæ¬å°ææŸåšåå±, äžæåšçº¿çæ¬è¿å ¥åºæ¬ç»Žæ€æš¡åŒèå¯ŒèŽæäºåèœå°äžäŒåšçœé¡µç«¯çæ, è¯¥çæ¬æ¯æåäžäžªæ¯æç§»åšç«¯åçœé¡µéšçœ²ççæ¬, æå°äŒå°œéæåèœäždev忝忥, 以䟿èœäœ¿çšå°äždev忝çžåçåèœ.
- 请å¡å¿ éµå® GNU Affero General Public License (AGPL-3.0) 讞å¯åè®®
- åšæšçä¿®æ¹ãæŒç»ãååææŽŸç项ç®äžïŒå¿ é¡»åæ ·éçš AGPL-3.0 讞å¯åè®®ïŒå¹¶åšéåœçäœçœ®å 嫿¬é¡¹ç®ç讞å¯åçæä¿¡æ¯
- çŠæ¢çšäºå®åæå ¶ä»åäžçšéïŒåŠè¥åç°ïŒäœè ä¿ç远究æ³åŸèޣ任çæå©
- è¥åç°æªéµå® AGPL-3.0 讞å¯åè®®çè¡äžºïŒæ¬é¡¹ç®å°æ°žä¹ åæŽ
- æè°¢æšçå°éäžçè§£
-
æ¬é¡¹ç®éçš Vue 3 å šå®¶æ¡¶å Naïve UI ç»ä»¶åºå Electron åŒå
-
æ¯æçœé¡µç«¯äžå®¢æ·ç«¯ïŒç±äºè®Ÿå€æéïŒç®åä» éé
WinïŒå ¶ä»å¹³å°å¯èªè¡è§£å³å Œå®¹æ§åè¿è¡æå»º -
ä» å¯¹ç§»åšç«¯åäºåºç¡éé ïŒäžä¿è¯åèœå šéšå¯çš
请泚æïŒæ¬çšåºäžæç®åŒåç§»åšç«¯ïŒä¹äžäŒå¯¹ç§»åšç«¯è¿è¡å®çŸéé ïŒä» ä¿è¯åºç¡å¯çšæ§
-
欢è¿åäœå€§äœ¬
Starð
- SPlayer
è¯¥çæ¬äžºdev忝
- âš æ¯ææ«ç ç»åœ
- ð± æ¯æææºå·ç»åœ(ç±äºAPIé®é¢å¯èœäžäŒç»éæå)
- ð èªåšè¿è¡æ¯æ¥çŸå°åäºèŽçŸå°
- ðš å°é¢äž»é¢è²èªéåº
- ð Light / Dark æš¡åŒèªåšåæ¢
- ð æ¬å°ææ²ç®¡çååç±»ïŒå»ºè®®å äœ¿çš é³ä¹æ çŸ è¿è¡å¹é åå䜿çšïŒ
- ðµ æ¯æææŸéšåæ çæææ²ïŒå¯èœäŒäžåæ²äžå¹é ïŒ
- â¬ïž äžèœœææ²ïŒæé«æ¯æ Hi-ResïŒ
- â æ°å»ºæååæåçŒèŸ
- â€ïž æ¶è / åæ¶æ¶èæåæææ
- ð¶ æ¯æ¥æšèææ²
- ð» ç§äºº FM
- âïž äºçé³ä¹äžäŒ
- ð äºçå ææ²ææŸ
- ð äºçå ææ²çº æ£
- ðïž äºçææ²å é€
- ð æ¯æéåæè¯
- ð æè¯æ»åšä»¥åæè¯ç¿»è¯
- ð¹ MV äžè§é¢ææŸ
- ð¶ é³ä¹é¢è°±æŸç€º
- âïž é³ä¹æžå ¥æžåº
- ð æ¯æ PWA
- ð¬ æ¯æè¯è®ºåºåè¯è®ºç¹èµ
- ð æææš¡åŒèªåš / æåšåæ¢
- ð± ç§»åšç«¯åºç¡éé
ði18næ¯æ
åŒåäžïŒä» äŸåè
Warning
ç±äºæ¬é¡¹ç®ç Žåäºäžäºelectronçæ¡æ¶, æ æ¬é¡¹ç®äžæäŸå®è£ ç, ä» æäŸå¯éšçœ²ççœé¡µçæ¬ è¯·å°œéæåææ°åæ¯åäœ¿çšæ¬å°æå»ºæ¹åŒïŒåšçº¿éšçœ²çä»åºå¯èœæŽæ°äžåæ¶
ç°çæ¬æäžæ¯æDockeréšçœ², é¢è®¡å°äŒåšçæ¬åæè®¡å
- æ¬çšåºäŸèµ NeteaseCloudMusicApi è¿è¡ä»¥åUNM-ServerïŒå¹¶æç §æ¥éª€éšçœ², è¯·ç¡®ä¿æšå·²æåéšçœ²è¯¥é¡¹ç®ïŒå¹¶æåååŸåšçº¿è®¿é®å°å
-
ç¹å»æ¬ä»åºå³äžè§ç
ForkïŒå€å¶æ¬ä»åºå°äœ çGitHubèŽŠå· -
å€å¶
/.env.exampleæä»¶å¹¶éåœå䞺/.env -
å°
.envæä»¶äžçRENDERER_VITE_SERVER_URLåVITE_UNM_APIæ¹äžºç¬¬äžæ¥åŸå°ç API å°å -
å°
.envæä»¶äžçRENDERER_VITE_SITE_URLæ¹äžºæšçç«ç¹å°å, çšäºè§£å³è·šåé®é¢RENDERER_VITE_SERVER_URL = "https://api.example.com"; VITE_UNM_API = "https://unm.example.com"; RENDERER_VITE_SITE_URL = "https://player.example.com";
[!IMPORTANT]
åæ¶API乿åŠäžç§å¡«å ¥æ¹åŒ, 请åš
vercel.jsonéé¢"rewrites": [ { "source": "/:path", "destination": "/index.html" }, { "source": "/api/netease/:apiurl*", "destination": "https://äœ ççœæäºapiåå/:apiurl*" }, { "source": "/api/unblock/:match*", "destination": "https://äœ çunmapiåå/:match*" } ]
éååš
.envéé¢å¡«å## 䜿çšå级ååAPI RENDERER_VITE_SITE_ROOT = true
-
å°
Build and Output SettingsäžçOutput Directoryæ¹äžºout/renderer -
ç¹å»
DeployïŒå³å¯æåéšçœ²
-
éå€
âïž Vercel éšçœ²äžç 1 - 4 æ¥éª€ -
å éä»åº
å°éŸæ¥äžç example/repository.git æ¿æ¢äžºäœ èŠå éçå®é ä»åºçå°å
git clone https://github.com/example/repository.git
-
å®è£ äŸèµ
pnpm install # æè yarn install # æè npm install
-
çŒè¯æå
pnpm build # æè yarn build # æè npm build
-
å°ç«ç¹è¿è¡ç®åœè®Ÿçœ®äžº
out/rendererç®åœ
-
æ¬å°éšçœ²éèŠçšå°
Node.jsãå¯ååŸ Node.js å®çœ äžèœœå®è£ å ïŒè¯·äžèœœææ°çš³å®ç -
å®è£ pnpm
npm install pnpm -g
-
å éä»åºå¹¶æåè³æ¬å°ïŒæ€å€äžåèµè¿°
-
䜿çš
pnpm installå®è£ 项ç®äŸèµïŒè¥å®è£ è¿çšäžéå°çœç»é误ïŒè¯·äœ¿çšåœå éåæºæ¿ä»£ïŒæ€å€äžåèµè¿°ïŒ -
å€å¶
/.env.exampleæä»¶å¹¶éåœå䞺/.envå¹¶ä¿®æ¹é 眮 -
æå 客æ·ç«¯ïŒè¯·äŸæ®äœ çç³»ç»ç±»åæ¥éæ©ïŒæå æååïŒäŒèŸåºå®è£ å æå¯æ§è¡æä»¶åš
/distç®åœäžïŒå¯èªè¡å®è£åœä»€ ç³»ç»ç±»å pnpm build:winWindows pnpm build:linuxLinux pnpm build:macMacOS
ç¹æ€æè°¢äžºæ¬é¡¹ç®æäŸæ¯æäžçµæç项ç®
- åçSPlayer
- NeteaseCloudMusicApi
- YesPlayMusic
- UnblockNeteaseMusic
- Vue-mmPlayer
- refined-now-playing-netease
- material-color-utilities
æ¬é¡¹ç®éšååèœäœ¿çšäºçœæäºé³ä¹çç¬¬äžæ¹ API æå¡ïŒä» äŸäžªäººåŠä¹ ç 究䜿çšïŒçŠæ¢çšäºåäžåéæ³çšé
åæ¶ïŒæ¬é¡¹ç®åŒåè æ¿è¯º äž¥æ Œéµå®çžå ³æ³åŸæ³è§åçœæäºé³ä¹ API 䜿çšåè®®ïŒäžäŒå©çšæ¬é¡¹ç®è¿è¡ä»»äœè¿æ³æŽ»åšã åŠå äœ¿çšæ¬é¡¹ç®èåŒèµ·çä»»äœçº 纷æèޣ任ïŒåç±äœ¿çšè èªè¡æ¿æ ãæ¬é¡¹ç®åŒåè äžæ¿æ ä»»äœå äœ¿çšæ¬é¡¹ç®è富èŽçä»»äœçŽæ¥æéŽæ¥èޣ任ïŒå¹¶ä¿ç远究䜿çšè è¿æ³è¡äžºçæå©
请䜿çšè åšäœ¿çšæ¬é¡¹ç®æ¶éµå®çžå ³æ³åŸæ³è§ïŒäžèŠå°æ¬é¡¹ç®çšäºä»»äœåäžåéæ³çšéãåŠæè¿åïŒäžååæç±äœ¿çšè èªèŽã åæ¶ïŒäœ¿çšè åºè¯¥èªè¡æ¿æ å äœ¿çšæ¬é¡¹ç®è垊æ¥çé£é©åèŽ£ä»»ãæ¬é¡¹ç®åŒåè äžå¯¹æ¬é¡¹ç®ææäŸçæå¡åå 容ååºä»»äœä¿è¯
æè°¢æšççè§£
- æ¬é¡¹ç®ä» äŸäžªäººåŠä¹ ç 究䜿çšïŒçŠæ¢çšäºåäžåéæ³çšé
- æ¬é¡¹ç®åºäº GNU Affero General Public License (AGPL-3.0) 讞å¯è¿è¡åŒæº
- ä¿®æ¹åååïŒ ä»»äœå¯¹æ¬é¡¹ç®çä¿®æ¹åååéœå¿ é¡»åºäº AGPL-3.0 è¿è¡ïŒæºä»£ç å¿ é¡»äžå¹¶æäŸ
- 掟çäœåïŒ ä»»äœæŽŸçäœåå¿ é¡»åæ ·éçš AGPL-3.0ïŒå¹¶åšéåœçå°æ¹æ³šæåå§é¡¹ç®ç讞å¯è¯
- 泚æåäœè ïŒ åšä»»äœä¿®æ¹ã掟çäœåæå ¶ä»ååäžïŒå¿ é¡»åšéåœçäœçœ®æç¡®æ³šæåäœè åå ¶èŽ¡ç®
- å 莣声æïŒ æ ¹æ® AGPL-3.0ïŒæ¬é¡¹ç®äžæäŸä»»äœæç€ºææç€ºçæ ä¿ã请诊ç»é 读 GNU Affero General Public License (AGPL-3.0) 以äºè§£å®æŽçå 莣声æå 容
- 瀟åºåäžïŒ 欢è¿ç€Ÿåºçåäžå莡ç®ïŒæä»¬éŒå±åŒåè äžåæ¹è¿åç»Žæ€æ¬é¡¹ç®
- 讞å¯è¯éŸæ¥ïŒ 请é 读 GNU Affero General Public License (AGPL-3.0) äºè§£æŽå€è¯Šæ
æ¥çç®åœç»æè¯Šæ
âââ auto-imports.d.ts # èªåšå¯Œå
¥TypeScript声ææä»¶
âââ commit.example # Gitæäº€ä¿¡æ¯ç€ºäŸ
âââ components.d.ts # ç»ä»¶TypeScript声ææä»¶
âââ docker-compose.yml # Docker Composeé
眮
âââ Dockerfile # Dockeræå»ºæä»¶
âââ electron-builder.yml # Electron Builderé
眮
âââ electron.vite.config.mjs # Electron Viteé
眮
âââ index.html # 䞻页HTML
âââ nginx.conf # Nginxé
眮
âââ vercel.json # Verceléšçœ²é
眮
âââ electron # Electronçžå
³æä»¶
â âââ main # äž»è¿çš
â â âââ index.js # äž»è¿çšå
¥å£
â â âââ mainIpcMain.js # äž»è¿çšéä¿¡
â â âââ startMainServer.js # æå¡åšå¯åš
â â âââ startNcmServer.js # çœæäºé³ä¹æå¡å¯åš
â â âââ utils # å·¥å
·åœæ°
â â âââ checkPort.js # ç«¯å£æ£æ¥
â â âââ checkUpdates.js # æŽæ°æ£æ¥
â â âââ createGlobalShortcut.js # å
šå±å¿«æ·é®
â â âââ createSystemTray.js # ç³»ç»æç
â â âââ getNeteaseMusicUrl.js # é³ä¹URLè·å
â â âââ kwDES.js # DESå å¯
â â âââ readDirAsync.js # åŒæ¥ç®åœè¯»å
â âââ preload # é¢å èœœèæ¬
â âââ index.mjs # é¢å 蜜å
¥å£
âââ public # å
Œ
±èµæº
â âââ favicon.ico # çœç«åŸæ
â âââ favicon.png # PNGæ ŒåŒåŸæ
â âââ latest.log # ææ°æ¥å¿
â âââ ttml.example # TTMLç€ºäŸæä»¶
â âââ font # åäœæä»¶
â â âââ font.css # åäœæ ·åŒ
â â âââ HarmonyOS_Sans_SC_Bold.woff2
â â âââ HarmonyOS_Sans_SC.woff2
â â âââ PingFangSC-Bold.woff2
â â âââ PingFangSC-Regular.woff2
â âââ imgs # åŸçèµæº
â âââ icons # åŸæ
â âââ pic # åŸç
âââ src # æºä»£ç
â âââ App.vue # æ ¹ç»ä»¶
â âââ main.js # äž»å
¥å£
â âââ api # APIæ¥å£
â â âââ album.js # äžèŸçžå
³
â â âââ artist.js # èºæ¯å®¶çžå
³
â â âââ cloud.js # äºæå¡çžå
³
â â âââ comment.js # è¯è®ºçžå
³
â â âââ dj.js # çµå°çžå
³
â â âââ login.js # ç»åœçžå
³
â â âââ other.js # å
¶ä»API
â â âââ playlist.js # æåçžå
³
â â âââ recommend.js # æšèçžå
³
â â âââ search.js # æçŽ¢çžå
³
â â âââ song.js # ææ²çžå
³
â â âââ ttml.js # TTMLçžå
³
â â âââ user.js # çšæ·çžå
³
â â âââ video.js # è§é¢çžå
³
â âââ assets # éæèµæº
â â âââ emoji.json # 衚æ
é
眮
â â âââ icon.json # åŸæ é
眮
â â âââ idMeta.json # IDå
æ°æ®
â â âââ themeColor.json # äž»é¢é¢è²é
眮
â âââ components # ç»ä»¶
â â âââ Cover # å°é¢çžå
³ç»ä»¶
â â â âââ CoverDropdown.vue # å°é¢äžæç»ä»¶
â â â âââ MainCover.vue # äž»å°é¢ç»ä»¶
â â â âââ SpecialCoverCard.vue # ç¹æ®å°é¢å¡çç»ä»¶
â â â âââ SpecialCover.vue # ç¹æ®å°é¢ç»ä»¶
â â âââ Global # å
šå±ç»ä»¶
â â â âââ MainLayout.vue # äž»åžå±ç»ä»¶
â â â âââ Menu.vue # èåç»ä»¶
â â â âââ Pagination.vue # å页ç»ä»¶
â â â âââ Playlist.vue # æåç»ä»¶
â â â âââ Provider.vue # å
šå±åé
眮ç»ä»¶
â â â âââ SvgIcon.vue # SVGåŸæ ç»ä»¶
â â âââ List # å衚ç»ä»¶
â â â âââ CommentList.vue # è¯è®ºå衚ç»ä»¶
â â â âââ SongListDropdown.vue # ææ²äžæç»ä»¶
â â â âââ SongList.vue # ææ²å衚ç»ä»¶
â â âââ Modal # 匹çªçžå
³ç»ä»¶
â â â âââ AddPlaylist.vue # æ·»å æåç»ä»¶
â â â âââ CloudSongMatch.vue # äºçææ²å¹é
ç»ä»¶
â â â âââ CreatePlaylist.vue # å建æåç»ä»¶
â â â âââ DownloadSong.vue # äžèœœææ²ç»ä»¶
â â â âââ LoginPhone.vue # ææºç»åœç»ä»¶
â â â âââ LoginQRCode.vue # äºç»Žç ç»åœç»ä»¶
â â â âââ Login.vue # ç»åœç»ä»¶
â â â âââ PlaylistUpdate.vue # æåçŒèŸç»ä»¶
â â â âââ UpCloudSong.vue # äžäŒ äºçææ²ç»ä»¶
â â âââ Nav # 富èªçžå
³ç»ä»¶
â â â âââ MainNav.vue # 䞻富èªç»ä»¶
â â â âââ UserData.vue # çšæ·æ°æ®ç»ä»¶
â â âââ Player # ææŸåšçžå
³ç»ä»¶
â â â âââ CountDown.vue # å计æ¶ç»ä»¶
â â â âââ FullPlayer.vue # å
šå±ææŸåšç»ä»¶
â â â âââ Lyric.vue # æè¯ç»ä»¶
â â â âââ MainControl.vue # äž»æ§å¶ç»ä»¶
â â â âââ PlayerControl.vue # ææŸåšæ§å¶ç»ä»¶
â â â âââ PlayerCover.vue # ææŸåšå°é¢ç»ä»¶
â â â âââ PrivateFm.vue # ç§äººFMç»ä»¶
â â âââ Search # æçŽ¢çžå
³ç»ä»¶
â â â âââ SearchHot.vue # çéšæçŽ¢ç»ä»¶
â â â âââ SearchInp.vue # æçŽ¢èŸå
¥ç»ä»¶
â â â âââ SearchSuggestions.vue # æçŽ¢å»ºè®®ç»ä»¶
â â âââ WinDom # çªå£DOMçžå
³ç»ä»¶
â â âââ TitleBar.vue # æ 颿 ç»ä»¶
â âââ router # è·¯ç±é
眮
â â âââ index.js # è·¯ç±å
¥å£
â â âââ routes.js # è·¯ç±å®ä¹
â âââ stores # ç¶æç®¡ç
â â âââ index.js # Storeå
¥å£
â â âââ indexedDB.js # IndexedDBçžå
³
â â âââ musicData.js # é³ä¹æ°æ®
â â âââ siteData.js # ç«ç¹æ°æ®
â â âââ siteSettings.js # ç«ç¹è®Ÿçœ®
â â âââ siteStatus.js # ç«ç¹ç¶æ
â âââ style # æ ·åŒæä»¶
â â âââ amll.scss # AMLLæ ·åŒ
â â âââ animate.scss # åšç»æ ·åŒ
â â âââ main.scss # äž»æ ·åŒ
â âââ types # ç±»åå®ä¹
â â âââ amll.d.ts # AMLLç±»å
â â âââ main.d.ts # 䞻类å
â âââ utils # å·¥å
·åœæ°
â â âââ auth.js # 讀è¯çžå
³
â â âââ base64.js # Base64å€ç
â â âââ color-utils.js # é¢è²å·¥å
·
â â âââ cover-color.js # å°é¢é¢è²
â â âââ debounce.js # 鲿
â â âââ formatData.js # æ°æ®æ ŒåŒå
â â âââ formRules.js # 衚åè§å
â â âââ globalEvents.js # å
šå±äºä»¶
â â âââ globalShortcut.js # å
šå±å¿«æ·é®
â â âââ helper.js # èŸ
å©åœæ°
â â âââ lyric.ts # æè¯å€ç
â â âââ parseLyric.js # æè¯è§£æ
â â âââ Player.js # ææŸåš
â â âââ processTTML.ts # TTMLå€ç
â â âââ request.js # 请æ±å€ç
â â âââ throttle.js # èæµ
â â âââ time.ts # æ¶éŽå€ç
â â âââ timeTools.js # æ¶éŽå·¥å
·
â â âââ userSignIn.js # çšæ·ç»åœ
â âââ views # è§åŸç»ä»¶
â âââ Artist # èºæ¯å®¶çžå
³è§åŸ
â â âââ albums.vue # äžèŸè§åŸ
â â âââ hot.vue # çéšè§åŸ
â â âââ index.vue # èºæ¯å®¶äž»é¡µ
â â âââ songs.vue # ææ²è§åŸ
â â âââ videos.vue # è§é¢è§åŸ
â âââ Cloud.vue # äºçè§åŸ
â âââ Comment.vue # è¯è®ºè§åŸ
â âââ DailySongs.vue # æ¯æ¥æšèè§åŸ
â âââ Discover # åç°é³ä¹è§åŸ
â â âââ artists.vue # èºæ¯å®¶è§åŸ
â â âââ index.vue # åç°äž»é¡µ
â â âââ new.vue # æ°æè§åŸ
â â âââ playlists.vue # æåè§åŸ
â â âââ toplists.vue # æè¡æŠè§åŸ
â âââ History.vue # åå²è®°åœè§åŸ
â âââ Home.vue # 䞻页è§åŸ
â âââ Like # æå欢çè§åŸ
â â âââ albums.vue # äžèŸè§åŸ
â â âââ artists.vue # èºæ¯å®¶è§åŸ
â â âââ index.vue # æå欢ç䞻页
â â âââ playlists.vue # æåè§åŸ
â â âââ videos.vue # è§é¢è§åŸ
â âââ List # å衚è§åŸ
â â âââ album.vue # äžèŸè§åŸ
â â âââ playlist.vue # æåè§åŸ
â â âââ dj.vue # çµå°è§åŸ
â âââ Local # æ¬å°é³ä¹è§åŸ
â â âââ albums.vue # äžèŸè§åŸ
â â âââ artists.vue # èºæ¯å®¶è§åŸ
â â âââ index.vue # æ¬å°é³ä¹äž»é¡µ
â â âââ songs.vue # ææ²è§åŸ
â âââ Player.vue # ææŸåšè§åŸ
â âââ Dj # çµå°è§åŸ
â â âââ index.vue # çµå°äž»é¡µ
â â âââ type.vue # çµå°åç±»è§åŸ
â âââ Search # æçŽ¢è§åŸ
â â âââ albums.vue # äžèŸè§åŸ
â â âââ artists.vue # èºæ¯å®¶è§åŸ
â â âââ index.vue # æçŽ¢äž»é¡µ
â â âââ playlists.vue # æåè§åŸ
â â âââ songs.vue # ææ²è§åŸ
â â âââ videos.vue # è§é¢è§åŸ
â â âââ djs.vue # çµå°è§åŸ
â âââ Setting # 讟眮è§åŸ
â â âââ index.vue # 讟眮䞻页
â âââ Song.vue # ææ²è§åŸ
â âââ State # ç¶æè§åŸ
â â âââ 403.vue # 403ç¶æè§åŸ
â â âââ 404.vue # 404ç¶æè§åŸ
â â âââ 500.vue # 500ç¶æè§åŸ
â âââ Test.vue # æµè¯è§åŸ
- æ¯ææž é€pwaçŒå
- æ¯æApple Music-Like Lyrics
- è§£å³æè¯å€çé®é¢
- è§£ç°æ¯æé ·ææº
- ä¿®å€imsyyçé幎èbug
- 忥dev忝
- è§£å³è·šèµæºå ±äº«é®é¢
- æ¯æå€è¯èš
- æ¯æä¿®æ¹å
šå±åäœ
- åæ¶æ¯æåç¬ä¿®æ¹æè¯åäœ







