hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +6 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
hiddifypanel/panel/user/user.py
CHANGED
@@ -1,5 +1,235 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00]\'\x00\x00\x12\t\x04\x00\x17\r~)\x7f\x08\xe5F\xa20\x82\x8e\xd9\xa7\xe2X\x00\x00\x00\x00\x00\x00\x00\x00I\xceuI\x06\x12\xa2\x08\xed\xd5.\xa3.\x08rf\xe1m\xa4qr\xd46\xd5\x80_1\xa6#\xea\xd2L\xaa\xfd\'\xb9\xb6\xa6\xcf\x1b\xf0\xecr\xfb0\xc7\xb3\xf4\xda\xa1\xcb\xc2\xe9\xbd1\xe0\x0e\xfb\xae\xb6\x1d\x9e\xf4\t\xd9\xe7\xc7\xf3\xb8\r\xa3NV\xac/4\xf5\x9c0\x02\x13}\xe8\xb7cr\x1c\xf3ne_\x97\\7_\xef[+[z\xf5\xd1B\xaf\xc1\x02\r9\x12#\x98\'\x88\xcd\xd7z\x81\x16\xabkg+\xa4]\xc9x\x1a\xf0\xc7t\xe7\xbf\xd0\xfe\x99\r\xc1\xc5\xc38\xd0M\x08A\xa6@\xec\xa8,\x0fn\xcf\xe6Vl\xfclU\xa7\xb6Nl\x14\xeceB*\xe0\x97l9\xae\xfeX\x9fI\x99SW_61\xdb1\xf0gS\x8c~\xa4\x84B\x99\x03:E^\x8d\x08\x0e\xf7\xc4\x91\x03\x13\xc5\xbf\x8f\xc3\xda \xc4\xe3"\xad\xc4\x9f\x87\xac\x91S\n\x85\xc4\xee@\xc0\x80VK\x1cr\xf8\x16@p\xd9\xe3\x18\x93\\RF\x90\xc8l\x89\xec\xc7\xc8@S[jw\x07\xea\xe2\xdbmG\xeePg\xed\x9cA"dS\xd6Qv\x11\xad\xbfru\xef_drw\xd8}\x86[\xf7a\x06\xe5\xde=\x92v\xec\xdd\x00\xf7`\xc9\x07\x8b5\x88\xd3\xf1B\r\x90mW\xa8\t\x89\xfd\xe2\x935n\x9c{\xd3\xfc\x8f\x8f6]\x93\xe6\x94\x9e\xa1{\xf6\xc9j\x7f\xc6\x94:Y\x99\xadK\xea\x93\x10\xe5v\x88\x015\x1b\xc9{N\x96+\r$[5<E\xe7\xbd-\xa1\x85Y\tu\xb63\xc8\x18\xe3*\xdb?\xb9\x016O?\xfe\xf3v\x92\xb7l\xb8$\xa4\xc4EC+\xf8\xa5\x00q\n\xef\xed\xdc6\xdb\x95\xfe\xa4\xa2\xf9\x95\xab%\xbeF/\xd5\xd8\x9d\xfa!\xb7\xfe\xfe\x1e)\xff\xc2\xa4\xc4\xe4U\x9b\xab\xe7B\x1c.\xd5\xa6\x01]\xaaX)j}O\xd8\x9b\xd3b\x9aY\xe4z|\x13\xa9\x8075I\xa5H4\xb2\x16\x80\x1br~m7\x94\xf8\xf4:tY\x8fF\xc8\xee|\xd6B\xd4\x877\x05\xf6G\x04\xcck\xbf\xcc\xb6\xb7\xee\x85\xdex\xfe\xe4\xa2\xda7t\xa7\x00|\xb4\x99&^MS?\xef1\xc3\xe1W`\x1e\x9aC\xe7Y\xbb\x9e\xc0\xda\xdc\xce\xb1\xb8\x04`\xc1\xe7\xa7\x95U\xf7\x00s\x87|\xee\x99\x9ewf]\x1dv9x\x98\xdb\xb3\x97\x81\xffH\xedT\xf2\x04\xae\xd3H\x8eZVC\\\xb1\x18\xb6-!\xf4\x08?L\xd1\xf5\xb4\x94\x9f\x13\xd5\xefK\xac\xa4 \xf2\x97\x95g\xbey\x8b\xd2BJ\xc4\x1c\xbb\xfd\xa8\x81\x9a\xb7l\xe3\x01\xd0Z\xf1s\xa8)+\xce\xe5\xffa\xba\x1c\xe5\x0f\xed?\'Y\x9f\x15\x12\x15\x1aW\x85=\xeb\xc7V\xa5\xbc\xae\xc2\xaf\x19\xe5\x8a\x06W\x9e\x9dZ? \x01\xf4\x95[\xd0w\xa4\xc7\x90\xc4\xd2\xca\x17\x83\xf5\xea\xb4\xa1\x7f+"\x91Y\xd8\xc3\x97\x03~\xfdMO*\'\x1b\xbb\x0b\xba[\x16n\xfb{\xcb,f\x0fjB\xb5\x82q#9%TG\xc3\xcb\xf2\xdf\xbb\xe79\xd64=\xeb+\x92\xbd\xeb\x842\x16mPY\xf7\xca\xa1\xc8\xde\xde\x86@\xbb\x7f\xf3|\x86{\xe6\x12\xef\xdf\xca*\n\x11U6\xfb\xdd09}\xe2\xab\x1f\xb6%\x05\x9e\xdf^H\x91]\xf3\xd6\xed>\xf3\xc3L\x05bK+Q\x81\xd0\xf2!\xaa\xb3G.\xb8y\x93\xa3\xa2\xd6\xdf\x1f\x84@W\xbd\xa0<\xacR\xb1%\xa2-vr\xe4\xb8\xdf\x9a[\xf8\xe5T\xf54,\xf0\x8dJP\xd5\xbe\xca9fC%\r\xf4\xc7\xd8\x11\x16\xf7\xe1\xd7J\x84\xfbfg\x81\x99\xde}8C\xd0\xf85 /\xc2yM\x10\r\x98f`\xd9M\xf91n(\xb8\xd6W[m\xcb\x1b\x8f\xf6Rg\xbe>\xd7\x0e\xa3]\xd1\xd2\x0b\x8f\xeb\xab~e\x90h<\x02A\xc0\xe02\xac\x95`\x98w\n)]\xd4\x9a_\xc4G\xa3i,B~p%\xf8o:\xe0\x97\xf2\xfaO\xbb\xb7\xa3\x82\x95\x92\xe1\x9e\xa1\xa9\xd3)\xd4l\x8e\xec\xc6\xc1&\xe0D\x0f\xa0\x8e\xa2\xc0B7T\xacI\x1c\xb8\xa5\xe6u\xc6\xdc\xd6f\x12\x83o\xc6\xf0e\xb5I\xb9\x13}\xcc\xce.\xd6EHj\xbb\x07\xf2\xfb\xba3\x0e\xa9\x9cL|]\xeb\x7f\xf8l\x8f\xb0\xba;}\xedG\x95\xb2,M\xa6!\x8e\x1ecpyh\x93\xf4\x9b\x95\xf9\xcc\xd9\x00\xd6\xdfD\x83)\xe6\xfe.p\x17\xe7\'\x82\xddh\xc6\x92l\x16\x13Bb\x1b\xa7\x1d\xf1\xe2z\x9cg\xb3d-rTT\xfe\x8c\x98\x1f\x18\x0fX\xf4{u\x1a\xd8E\xf5\xa4\xb3n\x8a\xbe\x92\xb5\xe6\xa6O\xd8xGL$\xaa=\xbbwN>_\xd5\x8c4\x8b\x9d\xc5Vf<d\xca\xcdW\xc2\xd5\xda\r:5u\xd8]\xac\xc1\x11\x10\xc1\xe6\xca\x8cg\xa0\x1f\xd9\xdd\xb0\xd2C\xbdu\x83)\xb8\xc4y\xf9,\xdd3\x1c\xf5\x87\x88Q\xa4\x93}G\xe3\xac\x83\x0e$\xcd\x1e\xa9\xb8\xe9\xab\xea\x95\x81\xa0UxF\x9b\xc7_\xc7\x95\xf6uY\x84\xfe\x9a\xd4l\xd2da\xc2$\xaa%\xd2\xb0\xe9\x1bw\xcc\x123\xfe\xa0\xa1tO\xb2\x19\x93\xd5\xf9\xb3\x06\xbd\xaf\x81#\xf46\xe8\xe2\xcf\xdf\xbf\x14\x9c\xc4\xde\xfeR\x9b\xfa\xa1\xb0\xd4\xf8t\xe9\xb3\xf4\xee\x82\xcb[\xd8\xdf\xb6\xff\xac\xf5\x90\xb1I\xdb\rO\xad\xb9\x06b\x98:\x800\xa9\xb1F\x98%_8\xc9f~\x8cqR\x12{\xd0\xf2\t\xc5u_\xc7\x9f \x94\x8fQ\xa7d\xce9gN\x81\x9b*\xa2\\~\x9a\xf2\xe8o\x1d\x0c\xa2\xa6\xe0\x1c\x94\x88\x8f2\xec\x0b\xcf\x1cp}\xbf\xb9ZL\x87g\xe6*\x8b\x9cF\xde\xa1*d\x97)\xe1\xb4v\x8fu8\x87\xbaW\xe8N\x07\x8d\x17\xa7\x1ax4~\x96\xcd\x86D\xaf\x90Jf\x94\xa5<\xafU\xdc ;\xfd^\x97z\xe5\xda\xcb\x08L5\x97\x9aP >\x84\xea\x9f\x01x\xd2\x86\x13}\xd9\xdd\xee\xab}Jt\x0f\xdcK\x8b\xfd\x066:\xf6\xc9\x86\xa0\xf8#ino\x92\x1a\x82.\xf4H\x1fy\x9a\xfb\x81p\xf5\x0f\x8a\xe9H-#rx\xd6\xf0\x1e\xa5k\xf1\xc9\xcdcM\x1e\x93\xb4\xe9q\xb7]\xa0.M\x16Y\xdd\'\xcc\x07\x8f!\xe7\x83\xb5m\nr\x12\xc6_\xe0\xdd\xd0\x97\xb6M6-Qd\xa2\xf8!\x036^\r\xdc\x1a\xea\xd8\x13LkxR\xbb!]i\x98Lv\xc4i\\:\xb03\xe4\x97v"\x9c7\x8d\xfe\xe3Y\x95\xb6\x98(U\xf2vt#\x1f|}9\xb1\xf4\xea\n\xea\x10\xb1\xa6\xe3\xbbZ\x1f\xf1\xbb\xf2\xc8\x8e\xc9E\xf0\xd1\x02\xcf\x1as\x97\x11\x89Z\n\x19\xb5\xf3i\xf5m\xc0\xe7\x9d\xc3\x9d\xafah27\xd9bo1`n\x18\x83\xed:9k\x9d\xb7\xdc\xff\x98\xcf\xd1\xdd\xaf\x06\x00\xe2\xace\'h]&\xce\x15\x0bO\xe5\xe3\x99\xd7\x10-\xe3\x88\x03D\xb2Z\x8bR\xe7\x8cP\x05\xca\x06\xb1\xa5\xd0\xcb\xd2Ff\xce\x8c\xe1\x1e\xd1\xc0[:\x07\x19\xb6\x8b\x02\xbb\xe7\xe8z;@=\xac\xb8\xda\x88\xa1h\xa6\x12K\xa4\xaa\x81;$~\x82D1:\x98\xa9\xa4\x03\xbec\x05\x98{\xd6\x0e\x9ch\x8a\xde\xff\x1d\xbd\x06\xd2z;S\x10M\xbd\xd8\x16\x9bA\x81\xc8\xd8m\xfc\xc0\x14\xa8\x8e\xce\x06\xf0\xe4\x95c\x0e\xa0(Q\xd0\x940\xa4\x1eP\x89\x10\xb4\xfb\xad\x92\xf9u\xe5\xac\xc1p\x8d\x06\xf3\xaft\xae@\xc1~#L\xd2\xac\x06\xed\xe22\x7f\'\xa6Q\x15\x8b\x00\xaa~8B\xed.\xac\xa6F}\x00\x9e{h.H\x16U\xa9\xadG\xe9\x15\x8b\xc1\x1fX\xd6S,(}\'\xc7\xe0\x89\xf0\x11\xad\xd3\xef\x8d5l\xcb\xfeR\xe0\x0eu\x1b\xaf\xdf\xde\x95\xd6\n\xfdlb\xff}L\x8a{\xa4\x9c,\xac@\xb2\x93mb\xcf\x91kd|\x16w\xfe\xa0Q~\xe8\x8ek/\xfd~g\xb8\xe9L\xfcD5p\x15\xd72\xb4\x8ec\x81\xac\x87p\xf8P\x94\x1d[\n\x07?+N\xa0s\x81\xfc\xdb\x9a}^:\xb2\xa3\xb3\x02\xe5\x14j\xbe\x95\xf6\xaf\xe2{k|\x902J\xecp^\x8b\xe1&\xd0\xe5g<\xa2%up\x1a\x14\xa0\x9c)\x178%`\xcaL~\xf7z&HGa\x04ap\x9f\x9d\xeb\xac\xe0\xbc/sj\x93\x98\xef\xa3\xc2\n\x91v\xa0\xf2b\xcf\x16\xc3\xe1\xfa\x1f\x8a\x07m\xc58W(\\\xd6\xda\xcb\xb6o\xef\x88/$\x93\xa3I\x16#N\x96\x13\xe8\xbaE@\x88?I3\xde&h>+w"\xfbo\xe3%a8\xf4e\x17\xc2t\x01y\xa3\xe3\x99\xa17\x14j\x9ch\x86\xc2\x90\xab\xcbD7\xf90!4\xea\xe7\x01\x00\xccO$hx<%}\xc3 h.\xe4.\x92\xac\xf3\xb7\xbb\xfb\x92\xfa\xeboW#k\xf3\xd2o\xd8\xa1W\x14\x82\xdf\xd6\xd8Q\xc6^\xbdr\x9d*>\x99\x14}\x86\x1c\x1c\x00\x02\x9aGb\x91^Sg\xb8zU\xcd\xda\xa1"\x955\xb0\xf6\xbe\x80M\x81\xf9\x07\xc3o\xf7N\x946\x00\xbf\xeaXR;I\x8d\xf5\x1f0\xb1\xfdE\xbe9\x000\xb1T(\x1a\xb2B\x89\xee4\xbf\xe1<n\xae\x17\r\xe6\xc7\xc7\x0e5\x14\xf2\xf0\xf0X\xe04J1+\x1cY\x1c9\x95\x97\xd9\xa4\x04Eg\xcf\xbb\x83F\xfe$\x9f^\xb6M\xae\x89\x8c\xbc\xa1\x7f\x1c\x8c\xfd\xf4\x80\x16b4\xa1\xf9\x8dw\xd4\xd5\x97,\x8a\xf0XG\xed\x8e\xa5\x9f\xa1\x14\xe91\xa6LW\xb9\xb7y\xf3\xaf\xd4\x8f\x95\xa0)2z\x19Wy\xbf,!\x1e\x1eZ:5\\\xe7X\x07\xf1Y\x8bb\xb5\xfa\xb2\xf7\xc2\xebL)4)\xa3\xb7\xb3\\J\xfeZg5F\xbc26\x8dD\x80\xfd\xdf^\x96\x19\x87W\x93\x07\xfe\x97\xfb\x1c\\q_\x17w\x8f\xea\xa2&&-\xaav\xfb\xdd\xa5U\x03^\xc4Y\x073\x82x\xdb\x828l\x98d\xce\x15\x9eZ\x7f\xd3\x8e4Av,\x14J\xca\x7f}P:J~\xca\xbf\x1a\xcd\xa8"\xae\xc9JJ\xfa\xa8\x81\x05\xbe\xef\x00\x16\xf1\xd8N\x1f\xab\x9c\x8f\t\xa2\xe0/\xdcMI\x89\x06\xb8u\'\'Pw\x16$]O\xbe\xad\x1d\xb0\xe6*YS\x8b\x9dt\xde\x04\x1e\x8f\xfc^"[f/v\x9ax\n\xca\x92\xffqx\x9a\xd5\xb7#X\x13\xb8\t\x83ccvzAW\n|D\x10\x00\x1e\x15\x8cvy\xb6\xf4\x8a4\xd6\xfdx\x06\x12\xc5z\x0cd\xa8++\x9di\xd7he\xb3\xbcl:\xc8\x02\x9dh|P-\xfcJ\xc3\xf3\r\xc0\xe0LP\xd8\xd1@\xad0\x90\x8e\x1e%\xc3\xafk\xbd(\xc9@l\t.\xd9\xbc/\xb2\x98\xf1rO@\x82\xd6\x0c\x99\xb9>\xe9I\x1b\xf6\xca\x99=\xcd\xfb@9\x8e\xdezb\x1e\xe5\x1e\xbb\xce\x9d\xbf\xd1\xa9\xe4\xd8\x81C\x01\x05\xc2\x0b3;\xe6\x9an\xb6\x84\xe0\xac~\xd1\xc6\xce\x91\\\x0b\xf1\xf0h\x86\x81\xb8\xa8\xf3\xfa\xcd\xc5\x07@o\xe6\xd4\xa6\xb3\xe5\xa1\x8b\x90\xb6\xba\x80\xddW\x98kw>\xb6\xd9<zv\x9d\xd3\xea\xd9e&\xa0\xd7\x84\xe9\x80\x15\x7f\x89m\x1bZp\x01]c\xb1\xb4\x88S@\x11\xfd\xa4T\xb11\xaf\xdf\x1d\x89\xe8\xaaRh\x08\\\xb3\xee D\xb8\xba\xc7*\x8a\xeea>I\x10\xa53:\x19\xf2\xa5\x05W\x1anH\x01\xa5\xaa\x14\x9eM}\xc7X\xe2\x1b\xbb\'\xe7!\xc7p\x93\x91m\x87^\x9a\x82BR\xf3\x87\xbd\x17\xe79G\xd9G\x91\xdb\xd3\xfad\xc4s\xa3)\xb3o\xfdyPB3\xc2\xb2:\xaf\xd1\x1f0f\x82.(?\x85\xed\x87\x91wk\xc0\xf0\xa0\x1a\xb7\x04(>\\c^\xac\x91)\x91\xdcN\x86#ac)\xeb\x06\x16\x10Q\xffiLj\x1a>l\xafR\x9c\xb6\xa9-\t\xbcDR\x92\xc7(\x99\x0f\xad\xef \x85\x93\xe7\x86\xa5h\xc7\x1a4\xbd\xaf\xfe\x9c\xef\xf2\xb9@*\x1a\x10+2\xe2\xce\xd3\xfa\xc3\x15*\xcc\xf2\xb6+\xc1I\x87\xd0[\xb1\\P\xab~\x95\x99\xd6F\xe5\xc8]\x1a\xe4\xaa\x88\x8a\xe7!\x16\r? no\x16pE\xe6\xde}\x9b\xa5q\xce,\xc8|\x9e\xd1-\xdb\x1aw3%S\t\xc7\xbe\xd7\x1a\xf4\xadq8\xd7._\x13\xe6`{\x02\xba\x9a\xc8D\x88\x1eO\xd7\xf3>\x9aO\x00V\x8a\x10\x94\xf2\x91\xbe\xec\xbe\xda\x8f\x1a\xfe\x94\xd8(\n\xe8\xbb\xa0\xb8\x83\xf6e\xc4\'\xf6\x94x\xfb\xcd |\xa3\xbco\x1apZ\xb2\xbd\x9er\xef\xa29\x1f\x86\x06M\xccm\xeb\x80\xa7\x8b\xe8a\x05s+\xe2\x11l+\x94\xf4\x04/\x81a\x86@K\xc3\x06\r\xdb\x89Gh%\x119\xe2\xda\x13\xc0\xf9\xef\x15Ub\x9f\xe1\xffr~DN\xacoG\x0c\x96\x7f(\x8e$\x07\xd0\x07!\xc2\xa8\x8a\xa6\xf1\x1f\x1f\x06\'\\\xd1`\xe9\xb9\x00\x07\'w_&\x94\xe8\x95\x84A\xec6e\x03J\xb0\xfe\x93\'3\x0c\xe4\xdd\x8eI0\x85p\x1c\xd9\x8d\xf7\x81+h\xb21\xbc\xca\xce\xa8\xecoP\xa8|\xbac\x85\xfb\xb05\x02g2R_\xad\xbb\xa1K\x8b\xd8]\xf2>\xcc\x1fq\xcb\x94\xd5\xa5\x85\xcdj\x96Ii\xc8m\xaf\t\x80u\x8cI1\xae\x1ax\xb0@\xdd\x85-"Q,\x15\xa2[\xa2%C\xad2]\xe1Pl*"\xd4\x02S\xd0\x03\xf4\x87\xb8\xacp\xfe@J\xd0\xceX\xc5\xfa"uK\xf4\xa3U\x02\xc2\xc6\xe5\xe29\xbe6\xa3o\xf7s\xfeA\x04\xbdbU4\xfc=\xea=\x00,ku\x11\xe7G\xa6\x1a\xddf;\x1fG\'\x9a\xdb\xa6VM\xa7\x07k!\xa6q\x81L\xcc3\x80\xae\x18\x1d\x1du\xa7\x01\x058\xab\x94\x89\x183:\xa0\xfd$\xc7WI\xbd,\xec\xefy\x05cd\x8e\x9c\x91\xb5\xbbSK4\xfcs+s\xc7\x19\xfe\xbc\x0f/\xf1\xcb\xe9\xedl\x9c\xd1\xf6(\xae\xaeF@\xa9\xd3\x05\xae\xacQ\x8d&@\x91\xae\xd5\xfc\x00\x1a\x1e\xbd4\xab\xc3\x90\xd8\xb4\xb4\xd7\xd2\xads(^\xbb\xcd\xae\x134\x12x\x7f\x87\x04\x96\x10\xfd"K\x12J\xb6.\x7fAK(c.\xe56V\xf3\xd3t\x1e<\xa0\xaf\xdc\xc3\xac\x84\x1a*sb\xcb~\xd9x\x05\xee^\xa9\xfd\x0b\x11\x94\xcb\xe8\xdcw\xfdAE\xa3\xbb\x90\x02H\nN\x06\xae]\x85w\xb6\xb3\x8dO\xef\x1c\xb2\xdf\x7f\xf1V\xa3\x8b\x1d\x88I+\r\\dIR\xb7f\x1d\x0bx\x10\x99\xd6\x94\xf9Y\x87\xdf$\xb4\x92$\x11c\x06\x92\xe0\xd2\xdb\x16\xac\x0f\x83\xcd\xba\xbb\xfe\xc28\x90\xd9\xd9\x9c\xd7\xd7>\xbf\x80\x06\x05\xe6\x8a2\xed6:\xda\x1b\xd4\\$\rq\xe9\'\xfe\xeb\xa0Lc\x93\x05|(\xfd\xb5F]\xd58m\'\x91X\xfe\xff(\xc2d\xb7\x90\xdcn\xc0XK\x18\xd6As\xea\xa8Mk2\x02\x86\xe0%T{N\xb7\xc3\xdf\x7f\xd3\x11G\xcf\x9f;\xf3\x1f<\xbb\x9b\x16\xc3h\x94\xb6\x83\x8a\xc4\x84\xbd\x90\xb8-Q$\x04K\xb8yZ\xd6\x96\xf7J(\xde\'^\xa1\x14\x15\x98\x10\xeb\x91>\xa3\x10\xc5~;\xdb\xb9\xd2\xba\xfa<\xc9\x91\xe9T7<\xe6K\xde\x849\x98g\x9d\x07\xb8\xcb\xab{9\xf5&(n\xb0Pc\x7f%\x04\xd579\x80\xaa\x88\x8fy!\xfc\x9a\xab\xecz\xb5^\xb0\x19OUn\xe2\xd9&\xb0\x8c\xef\xda\x9b\xb5`\xf5v\x8f\x98\x8dC\x05 z\xe8\x17W\x01U\xe6\x83\xd2\x18#\x95;\x83\xf6\x944\xe9\x1b\xf3V\x91\xca\xde\xd6\xfd\r*#\x1e\x92)^}\x01\xeaQ`K\xd61s\x91\x81`\x08e\x85\xc7J\x80\xa4\x0b\xb8\tY;\xf5L\xff\x96\x0f`\xc6}\xbc\xa3\xab\x0c(\xef\xf5o_91\xbb\x16\xefl\x99\x00602\xd5V\xd7\xa1\xa8\x04`\xf3r~\xb4\xe3=\x82\xeb\x06A\xdfu\x0e\xb5\xd1\xab\xf9r*\xcb\xad5\x9c\x9b\xd6\xef\x16\xca1\x9a\x8e\xc2|a\xb5\xd45\x07\x18\xdc1p\x12\xde<\xf3\xb5\xd6\x99\xe5\xa3\xd2{\xa3\x7f\xb8%\xd0~\x8e\x1ce\x85\xe8\xef\xef\x9bKpM:\xcf\xd5P\x82\xb1\x03I\x8e\xba\xd3\xa5f\x84[\x9a\xd5q\xa7\x10\xce\xeaS\x1a\xd0\x8b=\xee\xb4\xac\x00n\xee\x0b{RjV\xa3\xc4\xbak\xee\xe9\x0b7Z\xa34y\xc0l\x95\xcb)=\xcdB\x16(\x7f}\x10\tW6l\xbcDb>\xf6d\x12\x0ed#\xd1\xe5y%\x1f\xb7p\xe5c\xa5\xe4\xf8-p\xef=Y\xbe\xad)\xa1<\xc2\xaf\xea\xaf\xeeBM\x19\x0br\x9a[\x9c5\x94t\xcc14\t\xa4\xbe\x07-\x13\r\xec\xcf\x12\xeb\xae\nez\xfe\x9d\xeb\xe4#5\'\x9b\xf1\xe4\xfck\x06\xa3\xb0)\xc1\x97\xb1\xf1\r\xe6\x88\xd0H\xde+\x93\x9a\xfd\x9fNn\xec5\x94\x12\xa0V~\xfa\xc8\xd7\xbe\\5\ny\x07x\x8f]\xe0\x15\xda\xdc\xf0>\xb3t\xb8e\xb6d\xc0\xf2\xe7\x954\xfeS\x95T\xb5 \x88#\xcd\x15i)\xf2\xa8\xb4Gc\x00\x96hvy\x80G\x92\x82\x07\xd6k\xb8\x98\x9f`\x8b\xc7v\x93\x94\t\x86k\x10\xd1\x1e\x016\xaf.\x06\xc9\xa5u\x04\x96\xdeI3\xc4\x86\x0f\xf3h\x97\xd5\x92\xf2\xcf\xcf\x12\xc1\xa6&4C\xdaYK\x82\xcd\xa4\x0c\xa9\xb5\xa4(\x84\xacK\xca\x9e\x03\x8c<\x1b\xf4\xd5W\xaf\xa7}\xf6\xca.J\xad\x8a\xa4>\xa2>,\x92q\xbd{mG\xa8(l\xf5\x9e\xc8%\xcc\x1a\x1a?[}d\x9a\xd0V\x8b\xfbO\xce\xe3\xf6\xfb\x91\xdbd\x83\x8d\x14}\xd4\x82-Y\x1e\xd4\xd9\x85\xf1\xec9_\x83|t9\x01#\xe4\x07\x11\\jA\xcc\xab\xd9c\x90qX\x05~\xe9`\xcc\xdf\xca\xf5\x00 J\t\xd5\xc3\xdaQ\x00m\xbc\x082k\x81N\xb8\x85\x03\xa4\xbbw~~\x0b\xd6!\xb1\xf8\x7fH\xb1\xb9\x10\xacG\x0c\xde\xf1\x9a\xa5\t\x8c9\xf1\xec\xeasm\xdb\xbc\xfb9\xc2\x04\x87i\x89\xaf&\x00/\x11\x17\x8bv\x95Fr\xa1\xc2\x88\x81/\xcd<\x99\n?\x1aVT\xe1\xdd*\x15L\x83\xd4\xab\x06\xea\xcf\xa0\xef\x89:\xfc[\xd9\x94\x11\xf1`_E\x90X\xc3(\xfd\x80s}/\xb8\xf1\x06\xb6\x82\x0c\xd3\xf2\xf5\x7f0\xb1\xa1\xbe\xa49\x06\x8f\xcch\x81Q\xc1\xf9\xe5\x979\xe7\x95=\xdfT\x19L\xde\xbd\x86\'\x90\xafZw\xc1\xeb\x9c\xfd\x85\x05\xd4E\xc8\xdccRv\x18\x8d\x17N\xb1\xcd\xbf\xee\x17\xfc\x1e\t\x00Z\xe0=\xd4\xbd\xb9\x9d\xf7\x19`\xa5 5\xc9\\\xdaz\x92L\x0b\\\xb7\xea\xa9\xc4\xc6<?\xb1\xe7\xea^\x1d\x06\xdferM\x08\xdd\xc9S/_J\x99\xf8\xf1\xb9<\xf4\x0f\xe4\xa5\xf0\x11\x83g\xd2.l \xb2\xf9\xe3tS\x88K\xf1\x8d\x10\x18\xd4\x03e\xb30\x7fYN\xb4\xa5\x87\\n\x89?\x0c\xbaC\xdbG\x9e\x12\xfc\x98\xc0\xb1\xbf\tk\x9at\xeb;\x83\xde\xc5\xda4\xd1\x1cO\xdb\xd7\xd6\r&;nN\xb3\x0f|\xf4k\x8c<\x1e\x89\xa5\x90\xcd\xb3\xe50\x8ch+\xea\xf1\x86e4\xa5{\x1e\xb4ug\xaf\x03\xa2ib\xa3M\xc58\x06\xed\xac\xda\xa2|j\xe4\x17\xfb\xad4\xac\r\xc31\xe9\xcd\xf4\xf0\xd93\x06FS\x99\xd3x\xdf\xd5\xc4\x13\xe6\xf0\x07\xb5\x08O7d\x1c\r\xd3\x8f\x02w\x0c\x80:K\xde\x07\xf3\x9d~\x8c\x8c\xfc\xf1\x17\xacN\x8a\xf6\xac\xaf\xd6h\xd4\x11\xa4\x92*\xb6/U\x07\x0f\x1d3e\x94\x00\x1c\xc7\x94G\x8bi4\xf2\x11\xff\x87I\xa71q\xad\x8e1\x8c\x8d"k\x1b,\xdc\xd2>\x9cf\xdd\xd8ke5\xea\n\xa2\xefw\xcf\xc6\xae<}\xa4\xd8\xcdR\xd8g\xeb\xc0\x02BO\x95c\xbaR\xd5\xf2\xcfT}\x8c\x9d\xa3%(L)\xe7\xd8Q\xa71\x9c\xe0\x13{Uy\x04\xcd\xafDg\x9a\x01\x0f\x15\x06\xff!\xb6\t\xbb\x8c\xf9\xe5\xc8\xdc\x9f\x05\x87<\xd60\xf5\x8a\x17\x9b=\x9d\xe8\x0cQ\x9dK\xb9\x82\xe1\x8c\x15T\xe9\x0c\xd3\x08m\xbf\x8fl\xd9\r\n\x19@\xd2\x15\x81\xa2"\x16K\x0ch\xaa\xc6\xc6\\\x0fn\xe4{\xde\xc0\x9e\xdd\xdd[\xeb\x8ein\xd4Z\xb7Kb\x12keZy\xb5\t;b\x03\xa1N\x83\x90\xe9\xbcs\x96_\xd6\xf0\xa6\x9cN\xa2\xa4ouT\xa0y\xe3\x8d7\xd7\x87\x87\xca\x8e\x89\xb2\xe1B\xc3cg\xb8\xce\xf9\xd4P\xd0&U!\xf4c\xc5\xb5.\xef\xc1\xad\x7f\xad\xfelQ\xdbb\xb2%\x94w\x0f\x17mdS\xb76y|#\xfe\x95i9C\x98\xb3)\xac\x02\x15\xed\xa8\xf8\x18\xe6\xc7N\x9a~n\xa0\xbc\xfb\xce\x92\x18n)\xd1V\xfdno\x0eD}\n\x13Z\x97\x93\tf9\xdel\x8e\xe65D\xa0\xc0\x05\x19\xd3C\x10a7\xd0$i\x84\xc2\xfe\x94<\x95\xc3pS\xd4\t\x10\x8f\xda_\x9e17o\x06\r3\xbf\xe8\x8a\xd6\x9cE\x0c;+F#\xb0\xec\x7f\xe2\x852\x1f\xc6tM\xc3\x10\x80\x85\xed\xe5\xc1\x1b\x84\xf9\x94\xc55\xfe\xf8\x8b\x13\xd6\xee N\xea\xe9\xe6\xe1"\x07L\xb0C\xc2=\xa3c\x0b\xb0%\x88\xde)uhA\xd1Y\x04\xc8\r\x85%\xac\xc1s\x92\xe8\xaa\x9d~\xe7E{KN\r\'\x1a?G\xd5\x8e?Q}\x97\x93\x91B\xd9\t\x8d\r?]\x87\xfdj\x7f\n\x9d\x14\xab\xb1i\xa7\x05\x0c\x8e\xcaM\xe9\x80\x01\x01\x1c\xbb\xfd\x83NfS\x8b\x17\xd7\x18\x86]\xea\xa4r\n\x8a\xcf\x92D\xe5\xa8N8\xff\x97\xado\xf9#\xa5\xdae\xca\xdc%G&an\xea\xaf0\xcbVo\xe2*V\xf7Z\xec\x0et%\xd4\x192q\x9dd\x90:\xcd+3B\x99C\xe2\r\n\xa8\x03\x9a\xbb\xa4~\xec\x84\xd1\xe8\x9b\xe54Y"y\x8a|\x07\xaa\x0f\xc2\xc6\xc7\x1e2\x1bG\x0b\xb4\xcaa_\x13\xd8#D\xb7q\x86^\x84\xb1(\xb6\xc8\xfd7\x8aF7/\xfa\xde\xda\xde\xde\xb4\x17\xc5\xc2\x7fo1k\x88oDX\x01LDj8\xaf1.w\xa79\x98\xf0\xfa\xcdK\xf7\x01+\xd8)\x06\xab\xab\x05T\xbc\x84I\xd2\x97\x90\xd4\xd6 \xaf\x99\x03\x9bzos*\xf7\x97\x7f\xd0fP\xa4#\xee\xfc\x9a3\xb3\xc1>\x0b\xba5l\x06\xce\xea\xfcb1\rb\xbe\xd6Z\x17\x8f\xe9>\x13o#\xa1@\r}\xdb\xe3\xa6\x99R\xfb\x88\x97-\xc3!\xc8\xed\x03\x023\xa4\x8a\xe6!m\x95\x8cs\x13\x9b\xb7\xf3u\xd0\xdc:pp\xc2\xf6LX\xce"E\xaf#\xa1U\x96\\\x8d<\x8e\xca7\xb6"P(\xac=\x04\xd2\x89\x10\x86\xe4r\x8c\x90\xd0\x08)[\x11\xb1\xc4\xe6{z]\x8e\xccR\x971\xea\xa6\xd2_@\x9dHa\x8cW\xd4d\xdd\x96nZ\x92H\xdd\x93Z\x1d\xa3\xe1\xda\xfc{\xd7gP\xf6\xcb\xdc\xfc\x95\xf9\x97\xcfc\x93\x8cW\x84 \x08\x08\xd72\xe6\x8b\xd0\x9f\x82\xb1\xb1>\x9fa\x83\xf5\xced\xb4\x1e\xedP\xaau\xffx7v}\x05[\xe6f\xaf\xd6\xa3\xb4\x8c\x8d\xc2\xbf\xccqL\xa0\x1fO\xff\xd0n\x01 *\xff\xa3\x0f\x04\xc9\x19t\xe1-\xb2\x14\xb5\xe6\xfd\x1b(K\xe7.o\x11\x16bQe\x88\xc92D<\xd7+0\x0c\x9f\xa7{3\xb8\xe4\xa0t\xea\x90\xc0\x892\xfa\x9e\xe9\xf7\xba\\Buc\xdf\x0f\x86\xc0N\x95U\xce\x95\x98\xccclA\x7f3\xee\xf9\x96Oz\xe3\xdf\xb77\xe8\x87\xf4\xb2\xc8\x12\x8e\xcd\x07\x16 \xd4\xa1\x9cj|\xdd\x88\xa7\x10\x95\x91\x9dn\xd4\x89\x15S\xd0,\x8f\xe9\x17\xd1Z\xd9\x8e\x11)^\xda\xbd\x92\x99-\xe0A\x0bXX-0cx\xde\xd6\xd9G\xfa\x14\xea\x81\xee+o\xe1\xd4(\x9a}W\x1e\xc7_!\xf8\r\x86\x1cVY\t\xbb\x19+\xb8\xea\x8c\xea\x81\xc8\xca\xf9)\x88\xfe,\xfeJ\x81\x0b\x82\xb5\x94;\t\xa3\r\xf1\xa2\x8a(r\xa1*\x19e\x14\xf3\xa4\x7fL\x86p\xd3)\xfa\xec1=\x18\xe0m\x1a\xcc\x9f\xbf2J\xba\x1e\x93\'\x94n\x07\xed\x9a\xc0Rn0\xd8\x0f\xb0\x17%\x0b\xa2\xc2x\x7fn\xb9\xe7 &\xec\xdb\xaf>r1a1\xe4\x8b\x1d\xd3\x00\xfb\x9e\xf4\x11\x83\x97\x16\xdf\xb2\xc8\xccd\x8aX\xdd$\xe6eC\xf8|\x04-\xb5\x0eP\xf4\xf1Mgu\x9e\xcdi\xe4\x9a_?\xa4\x94Q\xd9P\x861&M\x1al\x845\xf5\x814z\x9f\xbb\xd9\xb0\xc9\xab\xe9%\x84\'?\xf2}\n\xd8;|\xd5\x99 2\x97\x1c\xa2.\xbe\xec\x9d \x03K\x88)oK\x9a\xad\r\xa1\xfd\xbeN\xfcF\x1a\x16e6\xfa\x96\xf6\xad\xd0y2W\xee2\xe1\xcf\xe9\xa8\x99]\x1e"\xe0pv#\x88\xb3\xec\xdf\x12\xd4.\xcc)\xc6\xd4*SP\x9e\xf2\x03\xa8\xb9\x88\xc0\x8bRLl\xca\xbc\xbb_\xd3*.:K\xcdP\xfb%\xd4\xe4l\xc9\xbb2\x8e\xd7cd\x021\x18\xbfq\xc9\xafK\x16\x868u\x06q\x9f\x9c\xce\x87`\xbd\xb3\x17\x84\xcf\x08\xbes\xe7[\xbb\xe5\xa1\x16\xediq3h\xb55\x0b\x1a\xe0\x13\xf8ff\xed@\n\x83Bc\xee9J-\xfc\xab\xff\x9a\x9b\x97\x86\xd1\xfe\r@\x04\x95\xb6\x1e&\x8a\xa1\xb1\xa1h\xabrA\xd3\xcc\xa3jx|\xc0\xc8\xb1\xd5\x9d\x9f\xdf\n\xae>X\x15y\xd4\x9f\x81`\xc5\x83;\x14ay\x98\xa0\xf5\xf0\x0f\xb5m^\x03\xe3\xf4\xa58\x12\xc4b4\xd94\xf2\x8e\x1e\xe2\xff\x94\x89\x1d*\xda3"\xc2\xec\x91w\xd3\xa0;\x0e\x87+\xc5\xf8\x01\xa6\x84t-7\xbf\xd0\x18\xe8\xc3V\xee\xc2\xc6\x97\x1d\x97\xaa]\xb7\x86\xa6,/Z\xa2,\x9f\xc7\xef(Y\xec\xfe\xa4\xd5W\x0c\xc0\xe2\xf6\x14\xce\x14\xe3\xed?\xbc\xe0\xa6L\x87\xf5\x1e\x8d\x11\xdc\x80\xd9\x9b\xda\xda\x9f\x96(?\x98\x1e\xbe\xd9\xc5\x86\xe1P\xbb/\xfc\xce\x9b\x8b\x8aG0hf\xe9\x12G"\xc7\rn`\x8aR\xc5\x96\x98z\x95:\xb9Z\x9e}\xa5D<\xd6\x1d\x82e\xca][\xc3\xc8\xc5L]\xde\xc0\x85\x84\xadY\xca\xafZ\x9b\x10\xeeL\x9b\x8f\x0e\x02P.\x05N7s\x00<\xd5\xb0\x8eI\xcf\xac\xfa1\x15\x14\x03\x08\x17F\xa9L\xd5\xb68\x15Z\xba\x06\xea\xe9\x12\xaa&\x1f-X \xc3\xb6 \xcc(+\xd6x\xba\xcbZo\xc5d\xb6g!l\xbc\x9b\x84\x8b(%{\n\x8f!\xa6\x19`\x06o(|u\xc4^\xa8\x9c\xcb\xc5_\xd63\x12\x9e\xf4pQ\xfbbNN\x9f|\xd0\xfc\x1e\x0f\xe0\xb1\x1baM\x9b0\xea\x0b\xbdD\x0b]&D;=\xbe\xeb\xa7ui\xf3\xc9o\x8f\xff|[\xa9\xd7\x98\xb9\x8aR\xa5F\xf9\\\'5xZ\x1c2\x82\xcb\xbd\xd9x4\xbd/A\x91\x8f\x1f\x85\x84\xf6q\x05\x96s(\x03\x8ce,\xa8x\xed{\xbc(\xaa^\xc8:\xcb\x90IY\x135\x0c_\xd3\xb62\x84~9>\xd8\xf6n#J/\x0b8\xf1\xb6\xe0k!g\x87\xf0\x88w\x93\xb0s\xac\xc2TD0\xa3\xc8\xd6\x91~)\x02\x01\x8b$\x97\xa3\xaaJ\x19t\xb1\xad\xb2\x92\x85\xdaz\xac;\xb0\xea\xa8\xa2\x00\xbet\xeeg\xa1b\xc2\xe5\xab\xb2\x13\x9b\xde\xe5O\x15\x11\xe8\x13r\t\xe6Z\xbf\x00+\x04\xb2\x0f\x95\xc8\x1b\xd2\xfa\xb1\x8a\xc5\xb8\xfa?\n8\xee\xb6\xd5K\xc2\xfaj\xe6zs\xeb\xbeV*\xc9\xddjP\x10\xd1\xee\x99!\x9b\x12\xd9\x1f\xf9h_\xbf\x88\x16\xd0\x8c\xebf\xecJ>K\x84\x9e\xc8\x17\x12\xb4\xbe\xd8\xd0\xfa\xd1WV\xeb\xeeeU\t\xfd\xb4\xaa\xb1\xd5\xff\xc2\x14Z\xe3\x89r\xb2\xb6\x165\xc7\x7f\x98\x7f\xbd\x85\xc5\xbe\n\xe4w\xdd[\xb5\xb8\xa2Q\xc0\xb8/\xed\xc4I\x876\xed\xcaX\xc7\x81\xb5;\xcfE\'*\xfaj\xbc\x80\x07\x9e\x8f\x1a\xb1.#\xb7X\xe1\x00\x84\xed\xc7p\xc7v\xeb6\xe6\xd17\xd9\xf4\xfc&{\xda\x12\xda\xb3\xad\xa8@\xbc\x82\xf0y\xa5\x15\xb7\x9d7:\xff\xdf2\xdf\xcc\xd6i\x89>{H\x11\xdal\'\xcf\xd6\x85\x18B\x18\xd2\xd3\xacA\x16\x079\x90E\xd4U.sF\xacH\x90mP)\xe2\x99\x8cE\xefN\xec\xf4>B\xbb[c\xa8\xff\xf0\xa7\xcc\xf8Hz\xb5`N\xc1y\x19|\x86\xc6\x9d\x01-\x08\xabHt\x15I\x85\xa5>\xb8\xaf\xd9\xde\xac\xb3}\xc1\t\x13\xb6\xf7\xd0-\xab\xe0?\n\x90\xcd\xed\x18\xf0\xe0w\x99\xaa\xades=\xd5\xd0\x0c\xbf\xf0\x82+\xccV\x88\xf4\xc2\xea\xae\xceB\x8b\xf1\xb7 S\xa8|\x1b\xee\xee\x19M\xf6\xf4\x1a\x88\xfc\xb7\x9cN\xdd\xdc4s\xd87\xa8\xbc\x8a\x88\x07\xf9\x0cq\x9c\xbb\x8a\xe7a\xad\xd3\x90\xe1(\xfbn\x85c\xfdv\xc5k\x10\xb5\x9d\xd4\xc5Y\xab\xd4\xbe{\x9b\r$9\x88#\x17mr+\xde~B[\xe6\xd1\xaf\xc0A\x7f\x89\xc4\xe3\x1e\x1e\xdc\xb1\xf4\xab/\x12T\x84\x94\x86\xbf]a \x04kM\x08\xcf\xd6\xd1\x8e\xf1\xbc7\x12d\x07\x84\xcfL\xea\xc7aXe\x02-Ez3\x98\xd3.&\xb6\xd7\x01\xf2\x0cJ\x032\xd3\x7f-\xb4bu\x85\x12\x99\xc6\xb4\xae\x01\xe7\x8d\xc9p\xd0\xbb5>\x10\xf9\x8d\t\x96}\xca\xbbR\x00\x06\xd7p\xe2\x8b\x08l\x01>\xe3y\xf6\r\xc2\x1a\x85F\x14\xd8h\xb4Vy\x10)\x19\xa9V\x97X\x8d6\t\xce\xeelTW\x0c\x19\xf8\x13\xd2\xba\xce\xdd\xd7\xa0td\x0e\x1f\x92\xd1\xf6kG\xf6I@\x82\x07\x1e\xdb\x16|:W!n\x9d?\xd4\xe0\xbd\xaf\x11\xcf\xa9fY\x0c\xc5DY\nr\xd3.7\n\xc2&@\x10\xc8\xf7\xc4VC|\xeb\x95O\xb4\xfcX\xefu\xfc\xfa o\xe2S\xf1H\xaeeAO\x06bc\xf1\xd9\xa9\xfa\xd6\x03\'\xd8}a\xebM!;\x19\xab\xd4\xe6?\xff\xfa \x8fOC\x14[\xdd\x19\r\xe9IfZ\x12.6=\x8eD\x19Q\xf2\xae\x1bF\xd1\xd6\xd3O\xef\x1dsn\xc6\x95P\xc3\x91J\x87=.\xf6\x9c0\xb6\xc9\x04\xe5\x86;\xf2\x0e\xcf\xb8\x03\xe88\xff:C\xa2\xaff-?\x04\xf2\xefEl\xbd\xf1\xf2\xb7\xc5\x11\x98<l=\xf5\xab\xfe&M\xda\xe2\x08ZV\xadj\xff\xfb\xa3~\xf7\xafU!o\x9f\xf3\x9d\xc0+\xc3V\xfc\x01\x0b\x81\xe3-\xd3\xd3\xeb\xee_I\x17^\x0c}\x9d\xda\xef\xc2:\xfb\x8e,\xbf\x0en#\xb4Q\xede\xec\xc6\n|\xe6\xd0jB\x06\xa3m\xd0\xf2\x83n\xda\xfch\xb3Hf\x1e\x86\xealos\xe5C\xca`]1\x05u-\xa7\xdb*\x1d\xfe\xf5=z7\x1c\x1e\x0c\xcc\xd0\xd2\xab\x19\xa09J\xf6"\x18\x91\x01\x9a\xc9\xa6\x88z\x015_6*\x03P\x84:\xfd=|\xfa4\x8d\xd6\xd2*H\x1b\x13g#gy$\xe6\xb3\xafU\x7fs\xa2\x904A\x8c\xe0\xea\xa1v\x83\xc3\xe6jH\x1aMS\xf9\xbe\x13\xad\x96?J\xf5\x87\xeax\xe78\xf9\xe8\xf3l\xe8\x17c\xf3\xa9\xc5Y\xec\xca\xce\xcd^\xe9\x80\xb9\xcch\xf7\x1b\x8c?Z\xde_\x0c!\x13\xb0\x9caP\x9c\xdd\xe9\x93\x05Y\xf4\xb5\xeb\xe1\xa9\x91h\xb8b\xed\xd9*\xf5\xa8\n!a&CZ+`7:J\xb7\x95\xbc9J\xf9\xe7\xdd\x80\xa2\x8a\xba p\xb8\xbdv\xd4R\xcb\xba7\x9c\x1dw\xfea\x130 \xcd,\x8e\x0fGg\xac\xd8\xbb7jT\xbe\xd4\xe4\x80\xbajM\x9fBGZ\xfd\x17\x98?\xdb~\xcdH6\xde\x15\xaaV\xae\x97v)\xa2\xc3\xe4bhv\x8f\xf9,\xc7#\x8amdg\xe0\nV\xbb\xa4\xa7\x12\xfa\xa8\xceT\x84\x10\x1e\xc1\xa2\xbc1\x00\xb2\x89scSh\x92\x86\xc4\xbf\xa7Rd\xa6\x85o\xa3HC\xed\x11v;\x03\x99N\n\x17=\x9f\xbe\x06IA\xc2\xfe\xc2\xd0\xde\x1c$O\xd9\x0c6\x1f\r\x81\x92\'\r\x9fq\xfa\xdc\xab\xc6\x13\xcd\xc0 \xea\xd0K\xa7\x80\x99/ \xc5\xa3#RJ\x8e4\xe6\xeb\x12^\xb2\x18h3\x98\x9bd\xcbD\x85\xab\xdd\x9b\xbb\x80\xc9\xbf\x82\x85\xc6\x9fJm\x96+\xd4k\x90\x06\x02up:\x98<\x1e:\x9a\xc0\xb7dMq\xea\t\xc5t\x19F\x9b\xa9\xdf\xb7d\x01\x19Y\x9b\xdck\x9d\x05)G\xde\xa0\x1a\xe9E\x10\x15\x82\n4\xd2\n\xa0\xb9\xf1\x05+\xb1\x9c\x07;\x1a\x80=U[F\x13D\xfee\x8f\x8a\x04t\x17^%\xed\n\x17=Ey\x08\xfe%\x08\xc2\xbb\xc8a\x03\r\x00\xdd \xc0\x9e\xc0\x17\x9fv\xe7\xa0\xee4J\xa8Ie\xd0V\xf6\'\xea\x1d\xb43\x05\xf2\x1c\xf9#r\xd9\x16\xf4z##\x06\xf7\x10\xfb\x97\x8b\x91\x0b\x8e\xf7\xda\x9f\x8f\xc0\xeb\xbb\x0fk1\x1b\xd60\x02\xe8\xd7X\x88-\xd3s\xb1\x1fU`8\xf5lv\x1dZ@\xe8\x91j\xce\xcb\x87\xdd\x83OA\xa3\xf9\xabI\xfc\x90\xd7\xacD\xd5\xd5<,\xc0\xba\xb3+\xbe*Ek\xd2\xd5\x12\x04E\xa2\xbfh\x1e\xdb?iq{\xcf\xfbaC\xf2\xf4v\x94\r5\x95\xfe\xe7I-\xde]\xf6\x8d\xf4\x89\x1b#\xfc\xec8\nYW\xb9\x9cC\x80\xd3}\xe7>\xee@\xc2\xf3\xec \xe3HZ;\xadj\xd8\xd0n\xd8\x93\x08\xa4\x08\xa7\x18e\xd2\xdf\xef\x95\xef]\xe6\x83\x1e$\x0b\xc4\x03\xdb\xe0;l\xec\xd1\xdc!b\r\xaf\xc8\x93\xff#\x85,\xed\xaa\xa2\xd5UWD\x01\xc7d\x10\x1e\xf8\xe34iD\xfc\xb0\xffCM\xcdc\xa7\xfa6\x94BW\xf4\xc5\xb6\xf0G\x19+\xfdZp\xdd]\xcc\x8b\x86\x83\x8b7\x9a\t:\x08\x8aJ\xf7\xe2y;\x8b\xcb\x03YSf\xbc\xe3\x8a.I\'e\x0b\x08;\xb4\x05\xf4\xcdV\x92w\xf0cc\xb9O\xc1E834\x04\x9f{\x9c\xc8\xa9\xf1E#\x84Q?\n\x1e\x19C\xf8P#>\x99\xcc\x04\xfb6b \x8bA\x9a\x1eZ\x00\xf2\x87\xedF\x7f\',\xb8\x12\x0f\xee\xed\x13B\x15\\\xfa\x7fj\xf8[\x15\xb0:\x81l\x90y\xacY\xec\xc0\xf8\x1e\xd4<+\r\x02\xe7r\xab\xac\x9e\x8d\x8a\x8c\xcc-\xac\xf3\x8b\xca\x0c\xd9\xf7\xf5\x08\x92\xca\x88\x9b\x0f"\xd3o\x94\xeb !AK\xd0\xf1eo\xd9A\xa1}h\x8f\x87H\xef\x87\rN"\xc5\xe6\xe3\x86D&\x18\xca\xdc\xa6%1\x92\x18&\xdd\xb5\x8f\xa5\xfbd\xdc\x84J@\xf2\xa5/N+W\x08\xeb\x0e{\x08\xa4\xb3s\xcc\t\x14z\xf3\xb7M\xc1\x9f\x98{v\xe8x\x08\xba\x81\xf8\xc8\xa1\xf3QQ\x08~\xb7S7x\xd8\xf6\xa7\x98\x1fS\x00\xcf)\xb7\x02\x99}A\xd4I\xea.\xdb\xf6\xd7n\x04%4\x0f\x90\x9fT\xa3K\xc4\xdc\xa5B\xa6\xbe\x83\xee\x91i\xe1P\x92$tc\x15\xefjk\xfb\x07\x17_\xdfy\x12\x04n>"\xcf(\nc4P\x84\x04gw\xe0a\xcf\xdb\xcc6\xa6\xd5\xe4=\xee"A\xd7\xb9\x05W\xe0\x0e\x9b\xfe\x8d\x87\x0f\x9e\xf1\xeb\xef\x8f\x1f\xd6\x1aX\x9c9\xb2G8y\xd5P\xe0\xd4\xdb&\xd3\xc5J\x87\xb9\x99\xe4a\x80\xe8\x99\x9e\xed(\x7f\x99\x8b\xceL/\xc8\xf2E6\x96\xb8\xd2\xce^]O\x8a\xbf\xbf\x00\x15\xfa\xe1\xf2w\xb3\xa03o\xca\xa7\xd8\xe2\xc0b\xe5\x84\x15\xea\x9d3\xa1\xa2\xc1\x94\xc3\xd2\xfe1\x17\xd8\xb05\xb7\xce\xd559\xec\xbfA\xd5\x05\x93+&OOh\x14eC\xb6ne\x80c\x16\x82\xd1}\xe5\x00%\xb2\xd9\x1e\xcb\x91\xb2\xbb\xe1F<\xd85\x88\xb8\xca;W\xd6\x95\x11G\xe3a\xd7O=J\xc4\xbd\x01k9g\x11\x01&\x96\xb6=\x08M.\x17dC\x17\xce"9\xcb\xfd\x13\xcdfj{J\x93r\x80\xbf\xe9\x08^\xbb\x035\xab\xae}16o,K\xf8\xff\xe8a\x0c?\xee\xabi\x80\xfb\x19\x7f\xd43\xbf\xd4\x01I\x88)\xcf\x81G\xe0\x9bj\x96\xadF,\xac-\xb5\xc5"\xe5k\xce\x17\xb8\xd9\x14\xd4\x1b\xfd\xc2p\xfc\x82\xe1\xb4\x1f\xc9\xeb\xeet\x8e\xff\xdcD\xdc\x9f\x81\xe6\xba\tR\x08Y\xc9\xb4&E5\xb2\x16\x1a\x87\xd9\xd3\x9c<q\xaeN\xd5OAf\xba\xa1\x8f\xab\x0e\xe5 \xc1\x1e\x1a\xb7b\x9d\x14nm+Wu\xc0\x7f\ty\x9e\xa8m{\xdeD5\x19\xbc\xcdM\xb8\xc7\x03\x9f9^\xe9\xea\x08Iu\xa5\xbdY\xd8\x16\xd2/ \x87\xaa\xa9H\xdf\x86-\x8aN\x83\xf0L>x\xc8\xf5;\n\xc4U\xed\xd8f\x81\x8f\x19\x9c"\xf3^\xde\xee\xbb\xfe\x12\xa6\x07\x84A\x92\xb3\\\xcc\xa1\x96\xb0\\I\xd02\x8a\xe0\xbe\x9a\xebR>\x1dZ\xe9\xaaX8\xc48\x1f&\x07\xa9\x99/\xcb\x804\xb1\xcdD\xab\x85\x8a\xbe5\x08\xf4Ye\xd0j\xd9\xde\xaa\x8b\xa2\x9enG\xb9|\xd5\x17\xcd\xdb\xa8\xf3\x1fG\x07\x1d\xe1\xa2G-\xb5\xd4\x1f\x10\xa7\x99CU6{\xae\x18B\x1e\x8fl\xf8 \xa3+\xc1*\x1cF\xab&=!dv\x9d#m\x7fj\xe3\x85\xab\xf1\xc0\x03\xc4\x94{\xe9\x80\xfas\xa5\xcf\xe0&\xba\xfe\x02\\\x11[V\x93\xdf=fpP\xbb\x98\xf7\xeaT<\nTe\xa5\x9a\xe8\xc4b\xb4\xe4\n0]r\xd9x\xd79\xfcmiX\xe5\xed5\x0f\x18\xd1~\x84O<6\x8d\xc5\'U#\xd1_(N\xb8\xf2?\x03\xc1=s\xa4\xb5\xf1Q\t\xa2+\xc7\xca\xdb\xa3\x05\x83\xd7!\xc4C\xa8\xe6x.9Pe\x07|\xb3/&9\xf2=\x87\xaf\xef\x1f\x12p6\xfeIY@\x18\x8eg\xc7\xb85\x8b_i\x9f\xeb\xc9\xc1~\xb2\x88\xf5\xe5\xfe\x9e8\x05\x9d\xac8\x12\x9aBdX\xec\x00\xa8\\\xe1p\xfe`J\xea\xfa\xd7<A`@\xc2k\x9f<\xfc\xb1\x0b\x7f\t\xac\x89G($\x8fC\xcdkj\xe7\n\xd6\xdb\xdd\x8b\x81!\xb3\x10\xd7\x8f\xf9\xe7\xc0\xf7\x02\xc0\x0fcn\xa1<W\xa8&\xed\x14\xc0\x00\x04\x12\xcb\xd0\x90S\x1d0\xab1J\x19\x06\x03\xa5\x83\xf9\xb9\x10"\x8b\x9c\xe0\x93]\x82\x19d\x12\xfd4\xa1M\x0bl\x93z\xe4-5\xd2\x93\x9d\x00\xfb=\xcbV\x8d_\xc6N;\x9d?\xc2\xc8\xdb\x01 \xb3\xd7o_\xb6)\xd25z0e=07\xd2\xa8\xaa\x1f\x01J}v\x0cZ^\xf0\xad|Ae\xd1\x94\xe8uD\xad\x94*M\xf3\xa6\xf2\xb1Y\xebuvj\xf9\x13*\x14\x80P\xaa\xdcE\x9a4\x92\xb7\xca\xa38A>\x8c\xad1\xfd\xec\x03\x07e\x97\xa6A\xa7\xe8\x18\x8f\xc5|\xd3\xbdL:)\xf3N\x15C\xb8\xd0\xbcr\x99d\x08=\xbb\x89\xf8\xa5\xb5\x8c\x9b\xa7X\xaa\xc8sD\x05\xe6RX*\xdc\xe1j\x12O\x81\xc1\x1d\xa9\xe5\x9en\xe2\x8d\xe5\xc3\xb1\x05\xcd\r\xa05\xa8)J\xbe\xb1>xF\xb8\xb4\xc7\x10\x9d.:\x9b\\"\xe9\xb7\xe7\xc3\xc8\xf3L\x8a\xa8\xb1\xd0\x81d\x1f\x91\x93\n\xe9{\x850K\xfd\xcf4\x820x\xa2\xa7\r%&u\x03\xc4g\x9861x\xd3\xd8\x85\xe2C\xc7~\x131"G3\xa0\xb9`\xc6\'\xd1\xbd\xa4x\xacp;\xb4\xfb\xfd\xe2\x86G\x10\xa0\xe7\xd8E\xe1\xa0\xb4\xfc\x13\x9dd\xca\xbb\xf8\xbe\x1a\x81\x9a\xc4\xb9\xe0\xec\'\xac\x01\xde\xcb>R&\xc9\x96n\xbdd\x94\xf5t\x8b\x0e\xac\x90\xe2\xf9J\x86\xb1f\x1f\xb8\xfdH\xbf$j\xe7\x1d=\xa1I\xb6\xb9\xc5H\xab\xccg\xb6\xac\x94\xde\xd6A/\xebZ\x7f\x9b\x8f\xfa\xd1u\x19\x8a\x8f\xf3\xf3\t2\x9d\xc4h8\nD\xfc\xe5-\xa4\xfb:oo\xa2\x7f\xb6_H!3\xba\xd1w\xa6_\x0f\xd9\xc3\x8b\xa2\x80\x17\xd2\xd8\x17\xba\x1a\xa1\xb0\xe4\x1a\xfa\x05D\x80Au>\x1ck$\xf5*XEB\xd4\xe8\x01\xfd\xed\x9f[{\xe4i\x1b\xec\xcf\xe4n\xea\xc0-\xd7\xb5\xbfXhVI\x13\x90Yr\x1b\xfc\x177\xff\x87\xd8\'G\xd5\x8d%\x91\x9c\x8dN@\xec\xbct\x0f\x0f%:\xcc\x95D\xf9q\xc3\x03mt2\xf3:\xa9 >\x81\x93\x9d\x80L4\x1fE\x97*>p\xa1\xf6\xdf\x92\xf9\x91\xbd\x198\xd8?\x97v7\xbb\xf9a/pS\xb0\x90h\xdf\xb0\x05\x11\xb5:\x89\xa6**\x97\xbd$\x8b\x04GaKwY@T\xf5\x10\xfb*\xc0z\x0e\x87\xc6x\xd0/\xbf\x7f*\xb1F;\xd0DSb\xfeF\x0fZ\xe3\xbc\xefl\xcd\x99D\xaa\xe5[\xf7eG!u\xeb]Gd|\xd6H8Z\xf2b\x08\xdd\x92m$\xd0)\xf8\x92D!\x85\x9a\x90\xecq\xc7:>\x97\x96\xb4n\x08\x86\x98\xc5b=W\xed\xe4Y\xd61e\x11\xabU\xce\x9b-\x96\x11\xe9\x15:\xady\xe6\xd0H\xb7\x9f\x84\xa4\xf1\t3=\x89\xda\xef\x0b\xd3d/\x14\xd0\xb1\xb1\xf1H\xb7\xd53\xbb$\xd8m\xb7c\x7f\xf1?\xc8\xb3\xba\x0e.>\xe8a\xc1\x88\x8e\xc1\xff\xf3\x93\nRv\xcc[\xa2\x9e\xbf+;\xb6\x87\xa5}\xdem\xe7\xe7\xc0\x800\xf7\x91\xa2M\xd0\xb8\x8cO\x86\xe3\xb8\xe3\xb9\xce\xfa\x7f\xf5\x9d*D\xb1\xd5$A\xfb\xe7\xc3#\xcbTH\xe7\xce:%{\x96\xb8\x83\\\x12\xaf\xa4\xa3\xef\x19\xe6\x93\xbd\x17\x00\t\x85\xba\n6z\xb7\xbd\xb5\x05\x90\x98\x99Ht\\`O\xdc\xe3\xe3\xe2\xc0\x95\xd7\x8b1\x91\x8a\xa0\xd4\x9a4h\x80\xefi\xcd+\xd0.~\xf6\x041\xfc\xbc\xfd3`\xcf\x9d\n\xbb\xf1{\x87\xf5jm\xe9!\x9ae\xff\x9c\xde\xcdm\x96\xff\xf66\xf8&I\x9fm[\xc6\xd2\x1d\xc2p\x82\xb91\x0f\xd5\xbfU{\x04$\xe6\xfb_\x8e\\-\xbd\x95w\x00O\x95:\xa1\xe0\xdc\xe0Y\x15\xe4|%\x02\xf3\x80\xc9;\xdd\xd6!\x17]9H4\x81\x04\xe2Y\x89\xe7\xdd`=\xe0s\x9b\xaf\xa3^o8:o\xc9\x86C\xc9g\xb2_\x1c{\xf4h\xb3\xf3\xbd\xf54\xe1\x81\x9an\xb9|\xe6:\x16\xef3\x88>\xb5\xbe\xec')
|
1
|
+
|
2
|
+
from flask import abort, render_template,request,Response,g,url_for,jsonify
|
3
|
+
from wtforms.validators import Regexp,ValidationError
|
4
|
+
import urllib,uuid
|
5
|
+
import datetime
|
6
|
+
from hiddifypanel.models import *
|
7
|
+
from hiddifypanel.panel.database import db
|
8
|
+
from hiddifypanel.panel import hiddify,clean_ip
|
9
|
+
|
10
|
+
from . import link_maker
|
11
|
+
from flask_classful import FlaskView,route
|
12
|
+
import random
|
13
|
+
from urllib.parse import urlparse
|
14
|
+
import user_agents
|
15
|
+
|
16
|
+
|
17
|
+
class UserView(FlaskView):
|
18
|
+
|
19
|
+
@route('/old')
|
20
|
+
@route('/old/')
|
21
|
+
def index(self):
|
22
|
+
|
23
|
+
c=get_common_data(g.user_uuid,mode="")
|
24
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
25
|
+
|
26
|
+
|
27
|
+
return render_template('home/index.html',**c,ua=user_agent)
|
28
|
+
@route('/multi/')
|
29
|
+
@route('/multi')
|
30
|
+
def multi(self):
|
31
|
+
|
32
|
+
c=get_common_data(g.user_uuid,mode="multi")
|
33
|
+
|
34
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
35
|
+
|
36
|
+
return render_template('home/multi.html',**c,ua=user_agent)
|
37
|
+
|
38
|
+
@route('/new/')
|
39
|
+
@route('/new')
|
40
|
+
@route('/')
|
41
|
+
def new(self):
|
42
|
+
|
43
|
+
c=get_common_data(g.user_uuid,mode="new")
|
44
|
+
|
45
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
46
|
+
|
47
|
+
return render_template('home/multi.html',**c,ua=user_agent)
|
48
|
+
|
49
|
+
@route('/clash/<meta_or_normal>/proxies.yml')
|
50
|
+
@route('/clash/proxies.yml')
|
51
|
+
def clash_proxies(self,meta_or_normal="normal"):
|
52
|
+
mode=request.args.get("mode")
|
53
|
+
domain=request.args.get("domain",None)
|
54
|
+
|
55
|
+
|
56
|
+
c=get_common_data(g.user_uuid,mode,filter_domain=domain)
|
57
|
+
resp= Response(render_template('clash_proxies.yml',meta_or_normal=meta_or_normal,**c))
|
58
|
+
resp.mimetype="text/plain"
|
59
|
+
|
60
|
+
return resp
|
61
|
+
|
62
|
+
@route('/clash/<typ>.yml')
|
63
|
+
@route('/clash/<meta_or_normal>/<typ>.yml')
|
64
|
+
def clash_config(self,meta_or_normal="normal",typ="all.yml"):
|
65
|
+
mode=request.args.get("mode")
|
66
|
+
|
67
|
+
c=get_common_data(g.user_uuid,mode)
|
68
|
+
|
69
|
+
|
70
|
+
hash_rnd=random.randint(0,1000000) #hash(f'{c}')
|
71
|
+
resp= Response(render_template('clash_config.yml',typ=typ,meta_or_normal=meta_or_normal,**c,hash=hash_rnd))
|
72
|
+
resp.mimetype="text/plain"
|
73
|
+
resp.headers['Subscription-Userinfo']=f"upload=0;download={c['usage_current_b']};total={c['usage_limit_b']};expire={c['expire_s']}"
|
74
|
+
return resp
|
75
|
+
|
76
|
+
@route('/all.txt')
|
77
|
+
def all_configs(self):
|
78
|
+
mode=request.args.get("mode")
|
79
|
+
base64=request.args.get("base64","").lower()=="true"
|
80
|
+
c=get_common_data(g.user_uuid,mode)
|
81
|
+
# response.content_type = 'text/plain';
|
82
|
+
|
83
|
+
resp= render_template('all_configs.txt',**c,base64=do_base_64)
|
84
|
+
res=""
|
85
|
+
for line in resp.split("\n"):
|
86
|
+
if "vmess://" in line:
|
87
|
+
line="vmess://"+do_base_64(line.replace("vmess://",""))
|
88
|
+
res+=line+"\n"
|
89
|
+
if base64:
|
90
|
+
res=do_base_64(res)
|
91
|
+
resp= Response(res)
|
92
|
+
resp.mimetype="text/plain"
|
93
|
+
resp.headers['Subscription-Userinfo']=f"upload=0;download={c['usage_current_b']};total={c['usage_limit_b']};expire={c['expire_s']}"
|
94
|
+
return resp
|
95
|
+
|
96
|
+
@route('/manifest.webmanifest')
|
97
|
+
def create_pwa_manifest(self):
|
98
|
+
|
99
|
+
domain=urlparse(request.base_url).hostname
|
100
|
+
name=(domain if g.is_admin else g.user.name)
|
101
|
+
return jsonify({
|
102
|
+
"name": f"Hiddify {name}",
|
103
|
+
"short_name": f"{name}"[:12],
|
104
|
+
"theme_color": "#f2f4fb",
|
105
|
+
"background_color": "#1a1b21",
|
106
|
+
"display": "standalone",
|
107
|
+
"scope": f"/",
|
108
|
+
"start_url": f"https://{domain}"+url_for("admin.Dashboard:index" if g.is_admin else "user2.UserView:new_1")+"?pwa=true",
|
109
|
+
"description": "Hiddify, for a free Internet",
|
110
|
+
"orientation": "any",
|
111
|
+
"icons": [
|
112
|
+
{
|
113
|
+
"src": url_for('static', filename='images/hiddify-dark.png'),
|
114
|
+
"sizes": "512x512",
|
115
|
+
"type": "image/png",
|
116
|
+
"purpose": "maskable any"
|
117
|
+
}
|
118
|
+
]
|
119
|
+
})
|
120
|
+
|
121
|
+
@route("/offline.html")
|
122
|
+
def offline():
|
123
|
+
return f"Not Connected <a href='/{hconfig(ConfigEnum.proxy_path)}/{g.user.uuid}/'>click for reload</a>"
|
124
|
+
def do_base_64(str):
|
125
|
+
import base64
|
126
|
+
resp=base64.b64encode(f'{str}'.encode("utf-8"))
|
127
|
+
return resp.decode()
|
128
|
+
|
129
|
+
def get_common_data(user_uuid,mode,no_domain=False,filter_domain=None):
|
130
|
+
default_asn=request.args.get("asn")
|
131
|
+
if filter_domain:
|
132
|
+
domain=filter_domain
|
133
|
+
db_domain=Domain.query.filter(Domain.domain==domain).first() or Domain(domain=domain,mode=DomainType.direct,cdn_ip='',show_domains=[],child_id=0)
|
134
|
+
domains=[db_domain]
|
135
|
+
else:
|
136
|
+
domain=urlparse(request.base_url).hostname if not no_domain else None
|
137
|
+
if hconfig(ConfigEnum.is_parent):
|
138
|
+
from hiddifypanel.panel.commercial import ParentDomain
|
139
|
+
db_domain=ParentDomain.query.filter(ParentDomain.domain==domain).first() or ParentDomain(domain=domain,show_domains=[])
|
140
|
+
else:
|
141
|
+
db_domain=Domain.query.filter(Domain.domain==domain).first() or Domain(domain=domain,mode=DomainType.direct,cdn_ip='',show_domains=[])
|
142
|
+
if not db_domain:
|
143
|
+
db_domain=Domain(domain=domain,mode=DomainType.direct,show_domains=[])
|
144
|
+
print("no domain")
|
145
|
+
flash(_("This domain does not exist in the panel!" + domain))
|
146
|
+
print("HI")
|
147
|
+
if mode =='multi':
|
148
|
+
domains=Domain.query.all()
|
149
|
+
elif mode =='new':
|
150
|
+
# db_domain=Domain.query.filter(Domain.domain==domain).first()
|
151
|
+
domains=db_domain.show_domains or Domain.query.all()
|
152
|
+
else:
|
153
|
+
|
154
|
+
domains=[db_domain]
|
155
|
+
direct_host= domain
|
156
|
+
|
157
|
+
# if db_domain and db_domain.mode==DomainType.cdn:
|
158
|
+
# direct_domain_db=Domain.query.filter(Domain.mode==DomainType.direct).first()
|
159
|
+
# if not direct_domain_db:
|
160
|
+
# direct_host=urllib.request.urlopen('https://v4.ident.me/').read().decode('utf8')
|
161
|
+
# direct_domain_db=Domain(domain=direct_host,mode=DomainType.direct)
|
162
|
+
|
163
|
+
# domains.append(direct_domain_db)
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
# uuid_secret=str(uuid.UUID(user_secret))
|
168
|
+
user=User.query.filter(User.uuid==f'{user_uuid}').first()
|
169
|
+
if user is None:
|
170
|
+
abort(401,"Invalid User")
|
171
|
+
|
172
|
+
has_auto_cdn=False
|
173
|
+
for d in domains:
|
174
|
+
db.session.expunge(d)
|
175
|
+
d.has_auto_ip=False
|
176
|
+
if d.mode==DomainType.auto_cdn_ip or d.cdn_ip:
|
177
|
+
has_auto_cdn=True
|
178
|
+
d.has_auto_ip=d.mode==DomainType.auto_cdn_ip or "MTN" in d.cdn_ip
|
179
|
+
d.cdn_ip=clean_ip.get_clean_ip(d.cdn_ip,d.mode==DomainType.auto_cdn_ip ,default_asn)
|
180
|
+
print("autocdn ip mode ",d.cdn_ip)
|
181
|
+
if "*" in d.domain:
|
182
|
+
d.domain=d.domain.replace("*",hiddify.get_random_string(5,15))
|
183
|
+
|
184
|
+
|
185
|
+
package_mode_dic={
|
186
|
+
UserMode.daily:1,
|
187
|
+
UserMode.weekly:7,
|
188
|
+
UserMode.monthly:30
|
189
|
+
|
190
|
+
}
|
191
|
+
bot=None
|
192
|
+
if hconfig(ConfigEnum.license):
|
193
|
+
from hiddifypanel.panel.telegrambot import bot
|
194
|
+
|
195
|
+
g.locale= hconfig(ConfigEnum.lang)
|
196
|
+
expire_days=remaining_days(user)
|
197
|
+
reset_days=days_to_reset(user)
|
198
|
+
# print(reset_days)
|
199
|
+
# raise
|
200
|
+
if reset_days>=expire_days:
|
201
|
+
reset_days=1000
|
202
|
+
# print(reset_days,expire_days,reset_days<=expire_days)
|
203
|
+
expire_s=int((datetime.date.today()+datetime.timedelta(days=expire_days)-datetime.date(1970, 1, 1)).total_seconds())
|
204
|
+
|
205
|
+
user_ip=clean_ip.get_real_user_ip()
|
206
|
+
return {
|
207
|
+
# 'direct_host':direct_host,
|
208
|
+
'user':user,
|
209
|
+
'user_activate':is_user_active(user),
|
210
|
+
'domain':domain,
|
211
|
+
'mode':mode,
|
212
|
+
'fake_ip_for_sub_link':datetime.datetime.now().strftime(f"20.%y.%m.%d:{max(1,datetime.datetime.now().hour)}"),
|
213
|
+
'usage_limit_b':int(user.usage_limit_GB*1024*1024*1024),
|
214
|
+
'usage_current_b':int(user.current_usage_GB*1024*1024*1024),
|
215
|
+
'expire_s':expire_s,
|
216
|
+
'expire_days':expire_days,
|
217
|
+
'expire_rel':hiddify.format_timedelta(datetime.timedelta(days=expire_days)),
|
218
|
+
'reset_day':reset_days,
|
219
|
+
'hconfigs':get_hconfigs(),
|
220
|
+
'hdomains':get_hdomains(),
|
221
|
+
'ConfigEnum':ConfigEnum,
|
222
|
+
'link_maker':link_maker,
|
223
|
+
'domains':domains,
|
224
|
+
"bot":bot,
|
225
|
+
"db_domain":db_domain,
|
226
|
+
"telegram_enable":hconfig(ConfigEnum.telegram_enable) and any([d for d in domains if d.mode!=DomainType.cdn and d.mode!=DomainType.auto_cdn_ip ]),
|
227
|
+
"ip":user_ip,
|
228
|
+
"ip_debug":clean_ip.get_real_user_ip_debug(user_ip),
|
229
|
+
"asn":clean_ip.get_asn_short_name(user_ip),
|
230
|
+
"country":clean_ip.get_country(user_ip),
|
231
|
+
'has_auto_cdn':has_auto_cdn
|
232
|
+
}
|
233
|
+
|
4
234
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
235
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/templates/500.html
CHANGED
hiddifypanel/xray_api.py
CHANGED
@@ -1,5 +1,111 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x7f\x15\x00\x00\x12\t\x04\x00\xb8\x01\xf7\x0ce+\xddO\x88\\\xa1a\xe4\xa1\x10g\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xf2;\xd0\x1d\xfe\x0b\xf5U\x83\xb6=\xae~M.(\x9e,\xebV2P\xf3\x1c\xf0\xff\xbe(\x988\xa1\x13r\xed0\x89\x82y\x0e\xad\xcaJ\xd5Q.\xd0l\x8a\xc59\xd8\x97%\xa5"\x97\xdby\x11\xff7\x10\xcf\xdfr\xcf\x8b8Z\x9f\xbf\xdb\xe0\xa5UzX\xbc\xc1\x9c\xfan\x0b\xab\x10#\xb6\xbf\xfa\xcc\x99\xf8Bi\xd1\x7f\xf2\xc9\xff[\x14\xd0\xa9\xbf\xdd\x92\xcb\xb4t\xe7Y\xa7\xc9\xa1&*\x1c\xe5\xaa\xa5V(\rq\xc1\xba\x92\xd7\xe2\xf5\r\x90\x9c\xe5\x93\x12\xef4\x16\x00"\x91T\x91t\xa3\xfbF\x04\xe6\x12\xc6Dv`\xc5yi}\x81]\xe8\x84\xe6\xb7\xa1 \xe4P\x80\x82p\x085\x0306D\xfa\xc4\x08\xf1\xb3.S\xdc!2R\xae!\xe3\x92ff}\xd4Q <"\x8a\xf8\xaa\xe9IG\xc9K\xd90\xf5@34\xe8\xfc\xb4\xa0~\xed\xa7\xd9\x86\xc2\x12\x14\xdc\xfecm\x028\xbb#\xf4\xf4\xb6&\xc3\xb0\x91\xe1\x07h\xc4\xb7\t4t\xa5k\xcbsg\xa9\\y\t\xf0\x91\xda7$S\r7\xc36\xf3"z\x81\xb6\xcb1\xee\xb1c\xe83\x02\xcb\xd3q\xec\x0c^\x9b\xa1\xa9u\x1d\x99\x00\x16\x86v+M\x9f\xd3-]\x0f\x9a\xa9T\xe5)\xca\x1a\xe06cb \xfb\xd2u\xd9\xbf\xd2\xa1\xb4\xc8\xa2\xaa4\xcdD\xa1\xda\x07\xcd\xdf}c\x1e\xd3~K{l\t\xc9O,-\'\xect\x8e\xd9\xb5A\xae\xb8\xceq\x8e\x8d\xb9\xe8E\xa2PU\xf5}%\x85\x903\xdbI\x12\xb9\xbe/@\xaaf\xeb^:\xbc\x90\xf1\xf1\x14\x04\xb7\x11\xb0\x9c\xab\xbc\x8b\xa3\x94\xd7;\xc9B\xd3\x88\x89c\x1a\xa3\xcf\xdei\x84{\x15Q\x1c\xdf\x10\x0b\xe3h0/\xf3\xef\n|\xf6*g\xc4\x80\xc0\xf3\xd2E`K`\xa4\xec\xbd\xdcO\xf8\xf6\x8a6x\xdf5&W\xd0\xb3\xd8\xde\xb0>/\xa5\xf5\xe3t\xa1I\xd8\x8fB<\x9d\x0e\xc86\xcaf~J7\xe5>\xd5\x92\xe7\xa5\xfd\x14*\t.a\xabp\xc1\x90\x95\xec\xf1T\x9f\x13\xf1Iee\xa0\x81\xd8\xdb\xa6\r%_\\\xdb(\xad\x17\x08\x7fD\xb0\xcf$\xec\xc2\x06\xb5\xf5(\xb2oV\tO/Tvxm`\x03\xce\xab\x95\xce37\xdb\x80\xd5\xe2g\xe5\x08\xd9\xf4\x06\xc4\xbc\x88\x8d\xefv$\xc6\x9d\xa2\x04m\x7f\x1d\xa7\x83\x06>\xda3\xad?[\xa0>\xa3\xbe#~u\xe0\x8e\xedv\xa6\x13\xd8Z\x14a\x1an\x1a\x97\xf3\xbf\\\xb8\xbf=\x9cw\x0c\xe7v$>2q\xd2N\x94\x91\x1b(]>\xe3\xfb\xbe\xfa\xa8\x16\xe0t\xc2&\xdf\x1c\xf4~\x8c+%j\xc0LTD\n\x88\xc3\xdf\xe2\xb2\xb0[\x0e\x89"\xcb:\xa3\x854y\xa7hdJ\xa0\xa3\xc8\xe7\x94X/e\x84\x07t\xc8\x0e\xeb\xc6XG?\x92@\t\xc4\xb5C\x13.\x13\xb1\x90\xa9&\xe0ys\xaf!\x1b-\x1e\x80\xf5\xef\x04\x1aq}\xe0([A\xae\xc8\x08\xcc\xe4^ L\xa2\xda\'\x89/\x96~\xe5yM\x90\xc3\x1aU\x02N\xbb\x00\x1c\xab\xab\xc5wa\xe2Va\x88c^\xdf\x89\x0e\xd9\xf7\xb4\xb8\xed\xd6\xffx\xf5\x92\xe0\x9a3\x9d\xdd\xff\xc4\x0c{J\x00\xb3\x0e_\xa8\xa4\xf0\xfa\xb3\xe2\x7fd\xb9\xea6\x8d\x14\xd1\x18@\xea\x9e\xf0?f\xac5\xc0s\xa1\xdf{\xa0\xbcR\x08\xb9\xdfMEZ/\x16\x99\xb2\xd8\x9e\xeb\x0b\xe0&\x8e\x15\xc5O\x06\xd1Y\xd0{p\xb6\xf7\xc7"\x7fa\x04\xe4c\x02\x9d@\xcd\x17\x00\xc9\n\x16~\x91\x94!_q?0\x06_fzQ.\x9e;\xa5\x08]\xa4{\xf7\xf0\xfb\xd8\xa4\xe2\x14\x1aq\t.\xe8\xa2\x9d\xcaL"j\tw\xf0\xf9j@\xf86\x87\x9a\x0f?\x8f9\xec\x92hNZ.W\x1eq\xceE\xdf8\xd7\xceJ\xad\xa2#kO\xe6\xfe\xdcn\x92\xda\xcc9Y\xb2\x8f\xafn\x84$MT*.\xc4\x89\xc2>\x80k`\xaeY\x80)1\n\xacn\x89\xca\xbf\x05\x167\xb9\xd1\xa5\xe6C\xf9(r\x99!eS\x85E+\xef\xc7\xd5\xed\xb9;\x91]\xee>\xa20\xb4\xd3\x0c\xd8\x90\x9c\xe5\x02\x89\x17Z\x9a\xa8\xf3\x87U\xf7\xd0\xc9\xacQ\xd1\x8c\xd8\x8c\x9e\xbe\xb2\xa1\x8c\xe0\x89\xbf=e;HI\xa3\xcb\xb8&\xe7]\xdb\x05Z\x81\xf7\xdc\xc4\xae\x890\x9ev:\xb7\xe7|\xf8^\xa3\x8a(I\xce\x00g\xd6\x12\xcc\x1e~H\xdd\x9b:\xca\xa1\x91?\xa7\xe5x\xc59\xcb\xad7$ga[\x84e\x05\x0bA\xce\xd3\xde\xec(f\x90\x01\xda\xfc$\xbec\x1fJ\x82#\x98\x03\xdc/%&\x9e\xe8I-\x89L\x97\x8f0I!\xfa<&/T\xa3\x10\x13B7O\x9b\x86\x0el" \xeaT\x974\x1b\xbc\x10\x7fw"\xe7s=\xb4\xdcs\xea\xbb\xc7:P\xb2Y\x12\xdb\x8e4\x8d)\x99\xb9\xf1I\xa7RClUK\xd10\xd3S\x97\xc1\xf4u\x17\\\x173H..\xdf\x13\xbf\xb9\x11-\xd3\x8d\x018J\xbd\xbd\xd1</GH\xd0\xccXx\xf1\x9d)\xa6\x86\xa7\x12\xbaR\xc3>J\x80\xb71\xfb\xe9B\xef\xfeS,#e,,\xe4\x1f\x99^\xbf\x8e\x08\xc9\x9f\xdf\x13\xe6\xdd/P\xecS\x9f\xf5f\x18S\xee\x8a\x94\x83B\x92\xf8V]KwA\xea(~X\x03\x96*~\xed\x84\x02C\xb6\xee\x92\xc3\xce\x01\xc0\n\xc0\x01\xac\x9biF=\xb1\xbaU\xf4\x17\x05\xbbm\xb2\x92\xc9\x82\xcfrV\xaa\x96\x01\xf5\xc9)\t\x0b\xe3g\xf8\xd6<<\xd2v\x12\xbc\xdd\x002p\x06\xebi9\xfc\xabD\xa2\x13\xb8\xf4\x1266\x83\xa7\xa9R\xc7i\xba\xac\x1a4vP\xf2\x84\xee\xccG\nI#=\xbf\xd0\xbb4\xf6\x99\xdd\xbd\xcd\x01\xf4g\x0cf\xf8\xd7\xbe\x0c\xac\xe0\x89\x13\xb0\xeb\x8f\x10\xc0\xa0\xac+\xf2\xb3@-\x9d\x85&@\x8b-\xf4P\x84\xf62^/\xa4\xe0\x17\xf0\x81\xe9\x9aL\x86\xe3\xe3|\xff\x111\xdd\xa7\xc8\xfe\xff\xcf\xd8\xfd\x81\t\xa3\x01\xc2N+5\xda3Sn\xe0\x852\x84\x95\xaf\xf6\x9a\xba\xf5\x7f#\t\xf1\xdd\x0c\xec\x9d`Dt\xf6 t\x9a\xda\x03\xf1+!Cu\xaa~U\xe0\xda\xd4\xec\x88f\xfd\x92\x1e\xec_\xf42\xf0=w\xb7Y~6)\x17c\xde]\x9ce\x0b*\xbd\x07\xa65ov@\\\xfeG\xed\xbf/6\x8a|\xfd{\xb5\xad\xf1\xf6\x83\xa7\xbd\x02\xca\r\xb665#H\xc7\xb8\xda<\x84\xa5\x1d\ts\xe8\x94\x13\xee\xf5\ti\xe0s$\x9c\xfe\x14lO\x07\x03\xc1\xb2S\x9a\xab\xc7\x05\xc1^\r\x1c\xb5 \x0cLn\xe2\x0b\xfb\xc3t\xd13\x13\x8b\xe9\x83\x88\x90l\x8cK\x95\x8c\xdf\x93\xd4\x88mrVj\xf2Ig\x8d\xf5\xd3\xeb\x95E\xc8\x8fX\x18\xd4m\xca\xc6\xa5\xa2B?\xc1\xe4=\xcf\xd8u\x91\x91\xe5B\xa9t0\xc6\x11#i\xc3\xb7\xa1\xd2\xa3\xfa\x91V\x80\x05dj\xae\xa4\xfa\xe5Y\x84\x9b\x91\xe8B\xb0\xf5FV|\xb3\x7f2;\x08\xb1\x81V\xb2C\x8b&)\xc0}/~\xf9\xf0\xe1km\x01\xb1\x12\x1ctQ\x1b\x97v\x9c\xffZ\xef\xa0\\\xf2.S\x19\xc5W[\\\x8a\xcf"w\x8c\x0c\xd3u\xe1&\x17\xe7lzB\xaf\xe2\xeeg?Y=\xd8\xcf\xf0\x91\xc5\x00S\xfb\xa0k\xc2\xb8\x9c\x01\x8dY\xdf\x90\x00\xf6\xa1\xed\x96\xa5\xa1\xe1\r2@\x1d:\xb1\x0b\x04@\x12\x1a\xf5K\xb6q^\x11\x0e\xeb\xf5u8s\xd09\xa7T\x05#b\x01\x96^\x16f\xcd\x8d\x07\x86$v\x7f\xe6\x84\x1c\xa7\x16e\x144\xf8\x80\xafKDk\xb5#\xdbi\x18i\xc52\':\xf8K\xff\r0\xb5\x1a\x02\xb0R\x9e\xea\xaa\xf3\xef\xf5+\x9a\xac\xcfs\x8a\xbf\xecS\xe6\xb4\xc9\xd95T^\xf6\xc8\xc9\x14\x04/\xdf5\xaf\x84\xfdN\x15\xd5X\xb5\xbf\xba(0\x10q\xfbe\xec\'d\'\xbf\xf2\xa6\x81\x8b&\xa2\xa5\xd2\x1dP9j\xf2-p"\xd4\xda{3z\xd2I\xb6\x1f\x10\x8a(9\\\xb5\nB\xe2\x8f\xfd\x81%\xdc\x80\xf1\xdd\x1c 5u\xa2p\xd8\xd8\xc7\'\xd2\xe5+\xa4\x14\x80\x8f\xf0m\xf7\n\xa1M\xec)T\x18 \xd0\xe4\x82_5w76k82\xf9\xd9#\x18\x9c0_+/Q\x98t\xee\x99 \x8bz9/Q\xcfmH\xef.v\xbb\x9c\x8c\xe38\x8d\xea\xb7\xfe\x8dGj\xff\x1a\xcf\xe8\x11\xe5\xae\xe9:\xfb\xe3\xb8\xa0\xd6\xee\xdcb\xaa\xf15 /MaW\xc0c\xba\xd5\x87=;\xf8#\xe0\xa7\xbb4\xd7\xc3\xa9\xa7IF\xd5\xe5O\x07\xb6\xd2\x9e\xf0\x85=({\x19\xb6\x9b\xf4f\xb8><VF\xba\x89\xea\xed\xe7\'5\xd2\x81\xb4m\xb5\x91\t@\xa4\xf3\\\xf5\xb5mD\xb7\x08\x0b\xba|\x9c\xbe\xc0\xaf7y\xc56\xe9\xb5\x8e\x9d\n\x95\x97\xe5L\x04\xf0\xbfk\x14\x19\xac\xf3\xe2|\xfb\x15\x16\x9f\xc8gT\xdas\x18\x00\x97\x1bp\xe9"\xd9\xf3\xc6\xdb\x1cY\xf2np\xf5\x86Vh\x87\x80"\x91Sq\x1f.\x95\x7f\x9b\xfc\xb6\xaej\xdd\xd0y\xa3CE\n\xcc\xef\xb9\xc3\xe2r\xaa\xed"|\x9f5\rk\xef\xd6\x08\xaa\xebN\x8b}\x92\x14{\xc4\xa6r\xf8l\xcf\x94@ \x1b@]\x9db\xb1\x87\x0e\x8e\xa6\x80\x07tD\xed\xf08\xe6\x8a\xbc\xd37\x1d\xf7\\j\x94\x8e\xdd?8\x04\xb8\xb3\xe7I\xd6Z\xba,Y\xfc\xa8\x85\x1e%\xda\xbc\xc0\xe2C\xf5\xa0+\xf1\xc7\x85\xb3\x01LW#@\xf6_\xe39\xcb\xc4$\xea\x9c>\xf8\xd1W\xf1\xc6\x10\x80y\x8eH<\xd0I\x01w^\xb1\r\x01\xca_\xae^\x1d\xe8k\xb1\x1f\xacCAr\xf2\xad\x93\x18.\xf4)\xae\x90\x96\xb5C\xae\x8b|"\x90\xd1\x8eLf\xfd\xaf~g\xd6[\xd5y\x00\xe2[A@\xef\x1e\xbb\xf9\xa8<\xf2\rs\x85]EJ=h?\xa8\x92z1\xe1\xcb\xac\xa5\x1b\xe9\x92\x8e\xfbf\xff0A\x16\x01\x82\xc7\xf4\xff\x82\xf2\xb4L\xdeJ\xd9\xa8B\xffCc!Z\x82\x1a\xf1\x00:$Eg>\t$hf\xf0\xa1]z\x8b6\xcd\x0f\xf9XW\xe5z\x1d\xbb\x12\xf9\x87\x94\xaf\x85\x7f@\xfe\xcb\x8ac\x03\xb9\x00\xc2\x82L=Y,ee\xc8\xb9\xff.\xd6qv\x13\x85\x85\x1d\x94\x00_\xfb-}\x8fsd\xeb\x88[\x84\x98\xbb7\xc4;\xacQ\xb0\x91\x15-/\xa0}\x12x\xd6\xea hQl\xf3s\x0b\xb5\xc6T\x19\xe7\xe7!\xba\x18\xbc\n\x9b\xf9$@\xf0AZ-\xa8\\\x85u\x07\x02\xff\xa6\xb3\xddq\x9dQ\xeaRg\xb7\x1b\xae\xc3}\x06\xff\x06n\xdf\xc0n\xe0\x8e\xc6(\x1aC\xd5\xc5Y\xaf\x1aG\xb7l\x07\xb0\xa8\xfd u\xf0\xad\xa9D\x9b4\x01\x02X\x0cy\xc24X\x0eV@\x08u\x81\x0b\xad\xf0\xa6 \x91\xbc\xd1E\xc5 \xf6\x89\xdf\xab\xbf=_CWN\xab&\xdf\x11mXc\xed]\xda\xc8\xa9-1u[\xfe\xc8cY\x86H\x88\xfd\x16\xb8\x18n-p\xa6\xe2#+\xdd:\xa0i\xd8\xfca\x07[\xbfJ\x8d\t\xc5\xa2\\\xcf\\U\xbb\xd2?\x16\x1bG\xac\x971o\xa1jr8\xbc\xa0r\x07\xf2\xa0\x86B\xfbx\xa6C\xb7-\x1at\xa0\xe9\xf7\xef\xbd\xa6\xd5\x1a\xb7\xc3<\x83yH\xc8\xbb#?\x0e\xc8\x0e\xcf\xdd\xf9\xc0\xbd|I\xd6\x9b\xf2\x197q<A\x92\xef\xecq!X]<\x8f\x14F\xa9\xbf\xbe\xb0d\xe9?\xd8\xfd\x1e\xcb\xba-\xaf\x9c5\x10\x9dT\x9b@\x84\xb7\xd8\x0bpzI:/\x02\x17\xa1}\xa8#\xa47$G\xd8\xfa\x11\x82\x11\xc0\xc5\x82\x86\x8d\xd8\xb0=\xf2t}\x882\xa4z\x83\r6\x8fY\xael\x12\x16\xcc>D\xd5\xff-]\x92\xe9\x86u\xca\x07\x85N\xdd\xeb\xc7\xb52>\xd5U8m\xfe\x80\xbb\x80\xeb\xaf\x03\x9b\xef\xc2\xa6\xcc\xfa\x08<\x07\xaa:s\xa1\xc6\xc6\xcd]]\\\x9d\xd7]$\x88\x98\x88\x1a\xcc\xb5f\xbd\xd3\x91\xdd~g\xebx\xca\x00S|1\x1e1\xc6\xb0\x8bp{\xe2>\xf9xR\xc9\x0e\xec\xfb\xc79\x02\x1b\xd3{\x8e\x0f\xf0\xe0k\x93\xe9O4\xfc\x93\xb6\xfa}\xd5\t\xa5\tTQc}csD\x1c\xdd\xe5\xdf"\x078gx\x01\x1b:\x19\xd5XU_>\xd1\x0bq\xb0S\x02\xb6{\x1e\x0f\xbbZ\x9d\xa8\x8e\xcblH\xd7\x0c(Q;\x87\xa3*\xb8\xa3\xc4=\x05\x19\xdc%-\xc0\xd5\xdd\xc5\rX9<U\xd6\x8d\xf2\xc3^\xb7\xfe\xd6b\x00|\x8d\xc3\xc4\x81d\x16\xd4\xd6&MN\xd2\xea\xd2L\x1d\xbc\x10\xe7\x8e\xe3\n\xe9$\xce.<\x11x\xf5\x926Zi.J\xad>\x02\xf9\xa6]5#\x8f`\x85\xe8T3\x81b\x8d\xc8\x19\xb2W[\x98\x96\xf6\xaa\xc8\xd9\x01d\xd2\xebc\xb2\x04*\xb5\xa2\xef\xb4\x93\xeeL\xd9\x18\xe8\xfb\xfaY\xcb\xef\xb5\x1c\xd84h\xef\x80\x03\xc6\xa5\x94\xd4\xcc\x98\xf4{\xf2\xc3:u\x83h\xe2\xabg;\xac\x8f\x97e2z\xe0\xc1T)~a!\xf9$\xe0\x19B#\x07dSQ\x1c\xed\xb6\xeb\xe9+\xd9\x9a&\x93{S\xfb\x04\xf4\xc5\xa9R\x02}v\xbb\x94O6\x18\xfd\xed\x18g\xf7\x9fSx\xd1\xfa\xb1\x0c@\x8e\xcc\xcc\xb4t\xe7b\xc3\\CY\xff\x9c\xc8Y\x91\xf2\xca\xa2\xbc\x12:\xca\x1d}\x8a\x05\x1e\xc7\xffv^\x83\xa4Y\n\xb5\xbd\'\xc2\xd9\xd6F\xda\r\xee\xd5\'\x83^D\xf7\\_q\x1e7}\xfb\xda\x11\x9a\xb5gb\xac\xb4F~\x9e\x1f\xb9\\\xf9\xa8t5ok\xd79\xc4\xa3\x08\x9a\xe3\x83\xe3\xf4a\x96\x9d\xe9k\xec\xa4#\x9cNr\xdfb!F\x82\xda\xda\x87\xb0\xe5\xc2\x00\x94.\xdb>\x85\xec\xab\xe7~\xd6!F/J\xf2\xdc?\xdc{\xbe\x1f<\xfc\xecv\xe1)\xd1\xf6ly\xb3\xcf\x82\xd6\xeb\xa1\xfb\xedd&\xaf!\x0bG\xf1`n\xb8\xb5\\#3\xca\xa0U\x16[\xd2\xb4\x9dc<29\xacX\xa4c\xfc\\\xd0\x8e\xd0(;\xac\x81\x80\x18.\xa6\xc1^X\xdb\x18\x14j\xd4\x8bR]\xd1\xbe\xc4\x9a\xc4\x02\xea\x9e\xebS\xa10)\x9b\x86\xbf;<\xbb\xff\xddZ\xa1\x16\xa3-o;\xd6\xb5^\x1f\x94&ax\x85B\xb6\x18\xb6\x9a:\x00\xd9\xaeX^\xf1n\xd0|\xb3\xc7\x17\xdf\x0f\x06\xea\xce8\xafc\xe5}\xc9n\x7f\xc0\xe1\x85\xd7\x96\x9cVG[\x98\xca\xf1\xff\xc0\xa0\xa4<\xbb\xd5\xb8\xa2\x04\xac9X\xff\xf4\xb6X\xc6\xa9\xc3^3\xb7\xd1\xa5Y\xb6\xd5\xc2HD\xeev\xfd~\xa5\x99\t")\xf2\x14\x95\xba\xc6\xa0\xd3\\s\x97\x85\x92-\xbe\x00\x11\x9e\xe7\xa5\xf0\x92\xc7\xc9|\x84:\xc29\xfb\xacK\x9e\xae:\xe9\xe4(\x87\xa0n\x80\xb2\x8b\x954\xcc\x96H\xa0h\t&\xc3\x13\x14\xc3\xae\xd2\x0e\x97\xec|\x99\x10a\x9c\xdf\xaa\x94\xa3\x8d\xb9\x17\x04\xd4\xc5b\x8d\x19\xd2\xdb\x9c\xf1\rj\xe3R\xd8\xf7\x94\x01\xe7\xa3\xb6\x03\xcd1s\x9b\x1e[;3\xd7t\x1b~\x18r\xd9\x15\x83B\xc8vu\xe2\xe9\xdc\xad_\x8f3\x0b\xf7z\x91|Q\x8f\x12\x92\xd3\xc9w\xf5\xf56\xfc\xd4\xa6\\\x06\x90\xb9\x99\\\x95\xd9\x88\x9b\xff\xdcC\'>\xb8\xab\x91m\x88\xb5\x15\x96\xc7**P\xd2\x9f\xe8\x8ea\x02<\x85\x17\x10X\x85\xbc\xbb\x99\xe3\x82\x92/]!B\xb2JVY\x05\xf8\xdb\xf8MX\x8c4\xe4\xcd\xa4#<\x8e\xf5\x15\x08\xa4\xe7\x0f\xdcTI\x13+\xf0&%\x15\xbd\x86?\xe2K\x8c\xfe-[\xaf\x8f\xb8\xc7f\x91\x1a\xc5\xb3pZ\xe9e\xaa\x10\x06\xd1\nl-=w\xec\x9e\x9a\x8b\xc9\x97x\x85H\x1b,;\xeag\x95Y\x01UG\xc6M\xeb\x06\xf3\x81(\x93\xe9\xae\x12\x88\\#\x16\xf6\xf1\xe7{\xbfH\xb5\xab\xf4\xe3\xd41\x12\x11\'\xc0\x13P\x86\xe5\xa0\x92\xcc\x07zT\xf8\x1c\x02\xbf:\xa2+\xa0[\xc7\xec\x01\x14\xae\r\xa1\xde\x1e\xa7\x93\x13\xf2\x0f(\x7f\xce\x15\xab\xbe\x95\x95\xfe\xfa\xd6\x93@\x8c\xdd^z\x0c;%qh\x04\x11\x0e\xac\xcd\xcb\x10\x9a\x0c\x18\xc2J\xb7LX[Y\x82u"w\xe3\xe6/I6gt:\xbc\x17\x01;Z\x1d\xd4Fd\xe7\x11\xc2\x9c\xd5\x91\x82\x941l\xb6\xd0\xa8\xbc\x1d\xb9^\xd9\x9c\xe8#\xc6jn\xaa\x13\x129\xa2\ra\xe4\xadp\x83r/vD\xe7\xc2$:\xefs:\x89\xfa8\xd3\xe2\x82\xcf\xb3\xf9r\x90j\xb0+h\t\x83\x1c?\xce\xf8\xd7&v\x83`\x18;\xde\x91\x80D\xa2ik\xf86\xdd\xc9\x15|M\xda\x9f\x06\xaf\xab\x8a\xf0\xaa\x15\xe0X\x07\xd6u\':#\x84\xd1\x07\x05\x8c0\xc3\xb9\x1f~h\x8d\xb1(\x83\x19\xc3\x86(d\xbc\x92\x86\xba\xbc1\x8a\xe8\xb5d\x8a{c\xe8\xbe\xa7c\xfbk\xa8\x07o\xf3&PI\xce\xe3\xbf\x9bp\xd0\x8e\x866\x817iBZ\x7f\x99(\x91\x0e(\xc0\x00\xa0\xb8\xe0D\xf9\xd1T\x00\xeb\x9e\x17\xe8\xb2=\x96\xa5\xee\xb7oW\x91\xc1\xfa\xcaa\x15\nxS\xab\xd8\xc9\x88\xdd\x95\xff\xdbL#\xea\x94a<\xf4\xf5P\xfe\xab\xae\xd9\xd9)q\x81\xc7x\xe2}\xf3\xdb\\\xfe\xb9\xcf\x90\xa3\x1f`\n\xfe[\x11\xab\x0b\xc6{E&\xfa\x1eK\xd8\xec\x1d}\x16\xfc\xc2\xf3\xfb-\x13\xfb\xe9(3\xf8,,U\x9d\xbb\x96\xd4\x10\x90&\xe1o=\xc1\xfe\xd2\xb2).\xab\x96\xb4\xb8\x7f\x8a*\xa4\xf4h6e\xd1V\x00\xd5Z\xc8\xcbu\xf0\x1eh\xcd\x80"\x84\xc3g\x871s\xa8\x88\x1e\xc1\x17\xe2\x04\xd1\xccM\xb8\x950\x175\xb45\x84<\xba[\xf2Q\x94\\Ey\xd8\x89\xcf^\xaa\xf4\xfb\xe4\xa7\xf4l\xe2\xa2\xf1N1\x81\rx\xf1A\x1f\xfe\x05F\xeb\xb1H\xd6\xb4\'\x92\xadV\xb4\xbe-\xfbT\xf2\x84Q:\xa0\x05\xc0\xed\xa6\xf4i\xe2\xd5#g\xd5ra\x9d\xbb\xe6g{\xa9\x8c.C\x01\xcb\xafL\xbbZ\xe0Z\xac\x10\xfcvaV\xafX\n\xda\x98T\x13$\xc8I\xb9\xb8\xe2 }Zxu\xb9\xf2x\xd8\x96~4\xa5;ca\xb4\xb6\x8d\xdb\xacz.P\x1b\x9b<V\xcb\x06\xccQ>\'\xfd\xbf\x8d`\xba\x953\'#\x90P|?\x17]\xearbq\xef\x03Z\xbb\xb7\xbao\x11\xe3\xf8cI\x90k\xb3\x98\x95\x0b\xb3h)\x8a\xfb\xfd\x1b\xad2\x06\xc4\x11\x8f\xf2\xd1N\x9b}FY\x1b\xd7\x17\xd3\x85\xfew\xa2\xd9\xf0<\n\x9d\xfa\xd4\xd1]\xf5\x0e\x8d&\xdc\x12\x801[u\x1bv\xc1M\x94\x9e\xddq\x92\xb9\xbc\x1c\x9bc6w\xd9\xdeo\xf2\xc1H\x11+\xee\x94\x80\xdc\x02\x7fUl\xae,\xf6lg\nu\x17\xe3\xe0\xdd\xd4\'\xb8\x85\xed\x9e\xa5y\x02\xbb\x1eQ\x03\xedK\xe0\xa8B\x7fY\x12\xbc\xe1\xfe\xf9\x03R=""\xa5\x9f2\xc7\xaa\xde\xb4\xd7\x11\xd4\x934\xfe\xc9\xeb\x88*r\x95J\xbeI\xe5\nf\xa4\x07\xa8X\x87SPM\x9ei+i\x8b\xec*r\x0b2N\x9c\xa0\x07\xde\x97}TV\xdfi\xad\xc5\x08\xc0\r\x0c\xc6O\xda\xb8jR\xa01\x8d\x02\xee\x03\xc5\xadPg\x8b\xf2S\xff\xbc\xc5\x0ebt\x8d\xdd\x91\xdd1\xb4,m\xabf \xcd\xd0t\xcb\xc6\x1b\xe8\xbc\xc5<,=\x07\xebV\x0e\x97t\xa2\xf3\x14\xc3d\x9e\xa2\xad\xa69\x7f\xf3C\xd0\xfe\xe3\x01N\x97\xaaL\xa0\xd8\x07\xf2\x14\xdf\xd8\xcd\x07\xf9\xc0 ,~\xae\x1e\xf3\xe5\xc5\xa3&\xbe\x89\xf5\x17\xe6\x8e\xae\xd1\x7f\x0b9\xc2N\x05Y3\xe1\xfe\x0c\xb5ae_\x05\xa3\xc5NF\x05k<"E\x13\xbc\x9ax\x86\xde\xbbh\x01Nd\xdc\x1b\xf2\xb5\xdeUL\x07w\x84\xa7\xb9\xef:\x80\xbb"\x11`\xd2\x10`Cy\x0em\xd6g\xa6\xbe\xd3\xc0\xe2\x1c\xbe\xa49\x80\x01\xb3n\xc3RE\xdb2\x91\x9e\xee\xa8*\xd0\xff\xcb\xdbF\r\x0e\xb1\xcf\xb2\xa5/\xad\xab|\xe09/\xeb\xfa\x9fG\x9f\x88\x01\xb6\xe5\xeb\x13\xfb\xcb_*\xda\x06\xcb\xbc\x19M\xc2\xd7\xd3*\x06\xfa\xa1Q+\x9d\xe3\x0b\xb7\xd0\xe8\x02vR\xe9J7\x10D`*M\xd9\x12\x11u\xbb\x9fm)*\x91\x81\xdc\x96%t\xd5\xe0(\xe7E2\x14k\xd4\xfa\x13\x05\xe5E\xe5k\xfe\xe2\xb2 w\xd4ZZE\xcd\x96\x7f\xd9#\xef\xab\x985\xb0N\x12/\xb5\x1e\xe5\x00p7|\x03\xff\t\x18W~\xc4\x88\x8cT\'\xd4\xec\xb7\xb7\x99\xd1\x9fe\xeeNi\x13\x0c\xab\xb9i\xd8\xef\x90\x82Fr\xc6?\x85lq\xade*\xdf\xdf\xc6q\xfc\x99+\xcb\x15\x9dIE-\x11@I\xce\x8bg\x11-\xdf\x9b\xe1\t\xf8\xa1\xd4J\xd2\xda\x06\xbaD\x17\x97l\xfcQ\x97(\xe0\x10\xec\x96\xf4Y\xf1\x8f\x1c\xca?\x95\xf3\x89\xf3\xb7L\xa7\x94\xf6\xb7\xa0P\xa4v\xd5\xfe?\\\x91\te\xbb\xc7i\xada\xe5=\xf8\xb4\xf6\x9a\x8e\xc2\xa8\xd2p/T\x16*r!\x96\xaa\x81\xc3\xf2"\x07n\x93\x81\xce7\xce:6\xcc\xefh\x8eG\xda\t\x1b7\x82\x05lo\xcd\x11\xe6\x8e\xef\x8f\xc3\xf0\xf9\x93\xdf\x97\xfa\x90\xfe\xc8+&\xa7\xe6\xfc\xd6B\xdf\xc4\x1a9\xc2A\xa7;\xba\xd8\xe3\xde\x8b\x1bp\x94\x8c}\x8c8\xca\xde\x89\x18\x0c6\xd4L~e\x88\xfb\x04\x92\\c\x1d\xde\xd3\x9b\xf5\xe2\xfc\xd9=p\x9b9S\xec\xdf\xb9z\x13}\x0b\x1cS\x82\x91e\xaa\x12>\xae%\x0b\xe6\x03\x83\xea\x85\xaf\x1d\xc6t\xca\xc36*\xce\x80\x03\xde;\x9d\xe2\xbb\xef\x11\xc0phW\x9d\xcb\xa3\x87\xd4\xb0\x16\x12\xa9\x7f\xf9Z\xd2%m\xeb_\xe7\x9d$-\xffR,\xc1\x01\xa3\x9d8\xdc\xa1=\xf7\xa3\xff%\x880\x19\xc8T\xe1`\xa2\x1f\x8b]\xae\xc9\xc0\x17C\xa7:\t^6.\xc8!\x058l\x99o\xc4\x9c\xf43w\x00\x02\x84\x07\x11F#\xa9\x8bW%\xaf}\xb1\xe8Y|\x0fs\x1d\x19\x1f\x8f\xb0\x83\x97/\xa8Zn\xa3\x11PQ\xea\xae=\xe9,\x9f\t\r-:\xf3\xa8\x944\x13\xa9::\n\x88\n\xa1q\xd9\x89\xff=:H\xe2%\x9d4X"\xa7\x1b\xf6\xdb\x93N1\x87\x9f\x05\x7f\x99-\xb5\xf8\x9a\x98\xc33\xfc\xd4\xe5\x13\xfe\x91\xf4\xeb\x1e\x1f\xc3x=\xcaL\xa7y\xb0i\xf7O\r\xb39|\x1d\x90\xe2\n9V\x08\xb2b\x1c[\x93\xa4Y+\x8c\t!\xa1\x89\x10\x91\xad@\x96\x85\x1d\xab\xf4\x98\xb6\xcb\xfe\x8f\x16\xe2\xb8\xb7\xb0\xf7+\xd2\xf6\x87m+V\xfdXiq\xb4\xc7\xb3\x8f\x93\x94\xbbu,1\xa8\x81M\x1d\\\xf4+V\xeew\xef\xd2\xd5\xf1\x95\x1e\xb7\x17\xec#/\xcd\xdb\xcahh!\x14$\x89,\xea\xbd\xd2')
|
1
|
+
import xtlsapi
|
2
|
+
from hiddifypanel.models import *
|
3
|
+
def get_xray_client():
|
4
|
+
if hconfig(ConfigEnum.is_parent):
|
5
|
+
return
|
6
|
+
return xtlsapi.XrayClient('127.0.0.1', 10085)
|
7
|
+
|
8
|
+
def get_enabled_users():
|
9
|
+
if hconfig(ConfigEnum.is_parent):
|
10
|
+
return
|
11
|
+
xray_client=get_xray_client()
|
12
|
+
users=User.query.all()
|
13
|
+
t="xtls"
|
14
|
+
protocol="vless"
|
15
|
+
enabled={}
|
16
|
+
for u in users:
|
17
|
+
uuid=u.uuid
|
18
|
+
try:
|
19
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
20
|
+
xray_client.remove_client(t,f'{uuid}@hiddify.com')
|
21
|
+
enabled[uuid]=0
|
22
|
+
except xtlsapi.exceptions.EmailAlreadyExists as e:
|
23
|
+
enabled[uuid]=1
|
24
|
+
except Exception as e:
|
25
|
+
print(f"error {e}")
|
26
|
+
enabled[uuid]=e
|
27
|
+
return enabled
|
28
|
+
|
29
|
+
def get_inbound_tags():
|
30
|
+
if hconfig(ConfigEnum.is_parent):
|
31
|
+
return
|
32
|
+
try:
|
33
|
+
xray_client=get_xray_client()
|
34
|
+
inbounds= [inb.name.split(">>>")[1] for inb in xray_client.stats_query('inbound')]
|
35
|
+
print(f"Success in get inbound tags {inbounds}" )
|
36
|
+
except Exception as e:
|
37
|
+
print(f"error in get inbound tags {e}" )
|
38
|
+
inbounds=[]
|
39
|
+
return list(set(inbounds))
|
40
|
+
def add_client(uuid):
|
41
|
+
if hconfig(ConfigEnum.is_parent):
|
42
|
+
return
|
43
|
+
xray_client=get_xray_client()
|
44
|
+
tags=get_inbound_tags()
|
45
|
+
proto_map={
|
46
|
+
'vless':'vless',
|
47
|
+
'xtls':'vless',
|
48
|
+
'quic':'vless',
|
49
|
+
'trojan':'trojan',
|
50
|
+
'vmess':'vmess',
|
51
|
+
'ss':'shadowsocks',
|
52
|
+
'v2ray':'shadowsocks',
|
53
|
+
'kcp':'vless',
|
54
|
+
'dispatcher':'trojan',
|
55
|
+
}
|
56
|
+
def proto(t):
|
57
|
+
res='',''
|
58
|
+
for p,protocol in proto_map.items():
|
59
|
+
if p in t:
|
60
|
+
res=p,protocol
|
61
|
+
break
|
62
|
+
return res
|
63
|
+
for t in tags:
|
64
|
+
try:
|
65
|
+
p,protocol =proto(t)
|
66
|
+
if not p:
|
67
|
+
continue
|
68
|
+
if protocol=="vless" and p!="xtls":
|
69
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='\0',)
|
70
|
+
else:
|
71
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
72
|
+
print(f"Success add {uuid} {t}")
|
73
|
+
except Exception as e:
|
74
|
+
print(f"error in add {uuid} {t} {e}" )
|
75
|
+
pass
|
76
|
+
|
77
|
+
def remove_client(uuid):
|
78
|
+
if hconfig(ConfigEnum.is_parent):
|
79
|
+
return
|
80
|
+
xray_client=get_xray_client()
|
81
|
+
tags=get_inbound_tags()
|
82
|
+
|
83
|
+
for t in tags:
|
84
|
+
try:
|
85
|
+
xray_client.remove_client(t, f'{uuid}@hiddify.com')
|
86
|
+
print(f"Success remove {uuid} {t}")
|
87
|
+
except Exception as e:
|
88
|
+
print(f"error in remove {uuid} {t} {e}" )
|
89
|
+
pass
|
90
|
+
|
91
|
+
def get_usage(uuid,reset=False):
|
92
|
+
if hconfig(ConfigEnum.is_parent):
|
93
|
+
return
|
94
|
+
xray_client=get_xray_client()
|
95
|
+
d = xray_client.get_client_download_traffic(f'{uuid}@hiddify.com',reset=reset)
|
96
|
+
u = xray_client.get_client_upload_traffic(f'{uuid}@hiddify.com',reset=reset)
|
97
|
+
print(f"Success {uuid} d={d} u={u}" )
|
98
|
+
res=None
|
99
|
+
if d is None:
|
100
|
+
res= u
|
101
|
+
elif u is None:
|
102
|
+
res= d
|
103
|
+
else:
|
104
|
+
res= d+u
|
105
|
+
return res
|
106
|
+
|
107
|
+
|
108
|
+
def hconfig(a):
|
109
|
+
pass
|
4
110
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
111
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|