hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev66__cp38-cp38-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.
Files changed (77) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/websocket.py +9 -3
  32. hiddifypanel/panel/admin_2.py +33 -3
  33. hiddifypanel/panel/asset.py +17 -3
  34. hiddifypanel/panel/cf_api.py +35 -4
  35. hiddifypanel/panel/clean_ip.py +125 -3
  36. hiddifypanel/panel/cli.py +172 -3
  37. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  38. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  39. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  40. hiddifypanel/panel/commercial/__init__.py +50 -4
  41. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  42. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  43. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  44. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  45. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  46. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  47. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  48. hiddifypanel/panel/common.py +98 -3
  49. hiddifypanel/panel/custom_widgets.py +71 -4
  50. hiddifypanel/panel/database.py +18 -3
  51. hiddifypanel/panel/hiddify.py +655 -4
  52. hiddifypanel/panel/hiddify_api.py +70 -3
  53. hiddifypanel/panel/init_db.py +393 -3
  54. hiddifypanel/panel/usage.py +85 -3
  55. hiddifypanel/panel/user/__init__.py +25 -4
  56. hiddifypanel/panel/user/link_maker.py +416 -3
  57. hiddifypanel/panel/user/templates/clash_config.yml +1 -0
  58. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  59. hiddifypanel/panel/user/user.py +233 -3
  60. hiddifypanel/static/css/custom.css +6 -0
  61. hiddifypanel/templates/500.html +1 -1
  62. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  63. hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
  64. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  65. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
  66. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  67. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
  68. hiddifypanel/xray_api.py +109 -3
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
  71. hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
  72. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  73. pyarmor_runtime_000000/__init__.py +0 -4
  74. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  75. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
  76. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
  77. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,73 @@
1
- # 2023-04-08T16:23:20.381369
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xe6\x0f\x00\x00\x12\t\x04\x00\xf4;F\xa2Oi\xa1d\xe8\xdd\xa436\x91\x12\xfb\x00\x00\x00\x00\x00\x00\x00\x00\xd4V\xc5\xa2`Ay\xbd-\xab\x07\xb6\x88\xd2\xb3\x8ekpW\x13\xe3>\xe8\x03#ASy\xed\xaf\x076\x9b\xfcr\xbaT\xc3|3J\xd10N\x05kJ\xcao!DL&\xa3fl+\x8eH"\xe2\x8aA\xd8\x8d7!NG\x1d\x1b\xd4\x00\xa7w\xb3\xfbz\r\x92\xda\xc0\xdc\x8c\x13j\xeaSn\x97\x10\x02&V\x1fa\xde\xa0\xe2K\x99\xb5\x9c\x1f\xd9\xec%\xf4\xf9\t<\xd8_0]\xefi*\xa32\xd90\xa1\xebk\t-\xb6HJY#\xc4r\xdc\xc1\xe5\xa2h\x14QX\xdcQ\xaa<\xed3VZ_\x8f\x04o\xd8"\x83\xf1/s\x01\xdf\x8d8{\xac\t\x1b\x1e\xee\xf8\xb2a\xb0\n\x05\xcdH\xba\xcc\xf135Fq\xce>\xac\xda7(\n\xf6\xabo\xe3O\xad\xc6MR\xc5y.=<\xd1K\xe5\x8bl\xd5\x1a\x8f??\x0ca\x04\x04\x14\xd3Z\x953\xc1\x14\x89\x99\xcdp\x04\xc5\xc0\xe2\x80\xd4`b5\xe3o\xda4+\x1f\xc3\x18\nQ}\xc8\x1af\xa7\xd3\xce\x89@&\xd7H\x95\xb3\xb1\xac\xe0L\xc3^\xa09\x85\xda`\'\xd5\x18q(\x9a]\x05\xab7\xe6S\x98\x83\xb9\xb25\xde\xf2\x9a\xab\xe6\xe2\x85m\x1eZ!\xa8\xfb%H\xbaw&ak\x8a\xf9\x13\xf2\x82xN\x12\x8bN\xef\x98)\xa0\xeal\xeb_\xef\x01\x0bL\x92\xfd2{\x97U?S\x96G\xe3n^\xac\xce\x10\xd0\xdaXl?b\x03C\xc2\xe4t\x05\x1fE\x0c\xfeY\'\\[<\xb0\x94z\x9a\xa0"w\x82\xa9#\x9a\xde#\x8c\xbdy\xc8\x04\xe5\xc9f6I-\xf9\x04\xb4\x0f\x1a\x08\xb8\x0bt\x0b\xe5\x97\xc7|\xb0\x87\xb9=\xebJ\x10\xb3\xeb+\xee\xe4\xcb\xafpsN]\xd3\xadc]\xdf]\x99\x9a_\xea\xeb\xc4\x12\xb39c\xcb\xa4)\xec\x96\xf5\xfd\xfbO\x12a\x1c^-\xe1\x92S"5\x87u\xb4nV\x05\x82_\xdf\xab\xd5\x07LY\xbaI\xda_n\xb0=\x95\x17/o\xb4\x1e\x88d4\xc1!\x17\x9a\xb3\xecb\nA\x9c\xe8\x11\x16,-\x98\xc3)\x0c_\x0b\xe09\x86#\x11yx\xe9\x0f\x95\xce?\xb4\x85i\x85]\x936\x9brR~!\x80\x9c\x97T~\x8e\xd4[\xe02\x82\xbc\xe5U\xcf\xe5u#&\xb6\x14\xf0\xb4a\xdf\xa8\x1c\xf2I0\x9by\x03a6\xf0\xf4\xe9\xd9\x0c/\xbe\xa1\xd9\xcb\xcf\x07rh\x1e\x10\x9b&\xb8\x9eO\xfaU\xdeC\xab\\ \xf1\xa0+M\x15U\xef:\xd7\xc9y\x8e&\xdc\x98^\xdb\xf5\xb5\x00X\xa7p\xef\x94\xc6\xae\x1f>\n\xe7A9\xa81\x8c\xf2\xad7\xb7\xf03QT\xac\xca`\xe8\x1ab1\x14f\xb25+\xf6\x82(\xce5\xfb\xa1Xq8\xd2s\xae\x0f\xb3\xed\xaf\'\x9f\x04V&]\x9b\xb8"}\xd6\x05-wo\xb8\xee5\x00:\x999\x8c\xf0\xfc\x81:\xb3,\xedZ\x97z\\\xf8\x10uY\xf0^\xae\xbcT\x99\xc1\x17V\x17\t\xf7*\xf4\xc4\xf3\xcc/\xca\x18\xc1ejT\xa2\xd2\x90\x85W\xd1\x1e\x88^\r+utP\x1d\xc1\xf8\x86\xa0\xc8q\xecI\x8d48J9\xeb6{\xc6\x83i@\x84\xe6\xc3\xe0\x1doyg\xf6!\xaccb\rK\x18\xba\xf2\x94\x0c6\xcb\x9a\xc1\xcc]\xf6\xda \x04\xab7\xf18\x8a\x08W\x97M[\x96x\xc8\x15\xe0\x08\xd6\xf3n\x05pE2\x90\x02\x17\x81fU[x\xfb\x1ab;\x0b]nU\xa3L\xa7\xdc\x8a\xde\xff\x82\x1b\xe39\xb1\xa2\xe1M\x00*\x03\xd5\xa3\x1cgM\xd5+\x8a\xf8\x03/Jy\x9b\xaf\xf6\\\xf12\xa8bR\x1bF\x97\xea\x10#y\xda\xf4~\x8a\x01*\x1f\x15\xa0\xee\xe9~6u\x02\xf7\xeb\xdewj\x03\xe0d|-\xd02\xeej\x03\xfcn 6\xf1F\x9a\xc1\x8e\t\xa1\xf3\x9c\xdc4\x0c\xecnu\xa72\x9c\xfbO\xaaa\xdc\xc1\t\x91\x87\x8a9\xc1\x01\xd7\x01\x89\xe55\x1a\xdap\xff\x0fz\xfd\xe7\x0cD\xf0UB\xa8\xbf;*\xe0o\x16\x0f\t\xa4\x13\xb7\xb9\xa3\x8b\x04\xb6\xd6!\x18\xda\xe30\xa8~?\xce1\xb8qo\xb26X\xc1Y\xfc\x13\xd4\xb99W\xfe\x13\xc7\xe9\xd6\xb1\x17:\x8f\xc3\xce\xbd\x05\x9e_\x01\xca\x7f\'\xc1,\r\xf0\xb8\x0fy\x02\xa4&r\x83\xc9\xffcuCh,\xdc\xb5\x82\x07\xd8\xdfX\xb8R7\x81[\x90\xea\x92\x032\xcb\xb5\x00;X\x9d0\x16\xd6\x14\xe5\x90\xa1)\xff\x0f\x9d\x95%(\xd6\xea(\x85\xf7I\xd2I\xa1\xe0\x8f\xceM\xfa\x9a\x10\xdex,U\x04?6\xdc\xb4$9\xcd7I\xcf\x0e\xbe\x1d\xbcx;\x99\xf3\xe2\xe5P\xf0\xb2\x89\x9b\xba\x80\x9emd\xf6\x1d!\xa9\xbef\x02\xe2\xff\x9b\xc4\xc9*#^\xd6)FZ\x88S\xf0\x16\xd9\xa7\x1f%\xe3\xf7\x92\x9d\xad\xb8\xf6?\xd1"n\x97\x8b\x89\xff\xe3\xec\xbf\x05B\xcb\x84\xbep:\xc2[\x16~\xe1j&\x9b\x0fS8\xb9i\x18oes\xf2\xb6\xb4\xb6\xc8{\xed\xa92/\x83\xacZ\xca\n6 \\\xd0^-KA\xe9#Fy\x07\x0b\xdb\x17\xca\xbe\x1a\x12O%W\x13U\xc5\t\x19\x80\xc3\xc8\xf6@\x96\x02CF_\xa0r\xf7\x0c\xdf\x01\xd4/\xb5\x16\xb1R!\xe1{9v\xe7\x90\x10R\xb1:\xdd\xdb\x16\x06\xcb5\xa4\xab\xe6\x8a\x8c4\xebW\xf2\xcf9\xd0QP\x05\xe5@\x10\xce\xe6eo\x95\x9e\xa5\xd1\xa2\xab\x0bH\x0b7v\xe8`#\xa9\xbc\x18C\xcc\xf1\x9f\x92[\xe0}*:\xf3\xac\xee\xb9\xb76\xa5\xc0Ey\xf0\x84\x96t\xf6\xa4\xc9c\xa0\xf6-\xab\x8b\xd8\xfe\xb7\xd18h\x1b\xd5\xaa,6\xe75\xabXd\xd6\x94\x05\xa0\xc8\x19\'\xd1~\xa1I(\x1c\xc5\xfa\x18`\xb9\xbe\x8a\xd5ae\x8c\xef\xff\xbem3\xf9J:h\xc7\xc2\xd8\x90\x01B\xd1\x0c\xda\x87\xbfD\x1b\x10\xebj\x10!/\xe1\xa2\x82\xe0k\x9e\x1e\xd6(\xc0\xd2\xc1\x867\xc2\xa8\xc9\xd4\x18\xb3\xe1}3\x90\xe0\x7f\xa3a\xca\xeb\xff<\xe7}<\x8c\xda\\At\x158\xbb&uS\xdd\xf2\xa1\xed[\xcd@\xc6\xd2:\x0c\\\xdc\x9f\xccf\xbd\xa6\x02E\xd5\xeaKG\x96(\x08|6\x9bD\xd3\x82S\x18\x94*\x17>\x1c}\xc7Ph\xf0\xa4\x1al\xd3\xb3p\x1eN/\xb4\xa6\xc0\xa7*\xae\xf4\xdb\xe7\xb5O\x19\x1d\x8ei\x8b\x0cp\x89o0\xfb\xce\xf8\x02\xea\xb5\xb9f\x9b\x8f\xb9O\x81j\x1e\x99\xb7V\xec\xf8\x93\x95|^]\x17:aW&\xde\xba\x10\x82dH\xc9+\xc9\xdd\x17#\x89N\x8d\xd7\x93\x16\xe5\x93<RXr\x1c\x16L\xa1\x81\xf6S\x9a\x87\xf6f\x1d\xcf\x9e\xeat\x8d\xc1\x00\x81\x90\xd40EU\xf5\x16U\xc94w|Z)\x03\xcdIX\x1e\xf9\xb6\x9d\x12\\\r~A)\x8f\xd8\x0e\x97$E\x90Xm\x80JP\xe4\xfa\xb1\xb8\xb2\x7f$\xbb,\xb4\xf6&\xdf\x10\xd5R\'h*&\xef\x89\xdc\x16\xfb[jZ\xd5\x9c\xdb"\xc1\xb65\xc8\xd0\xdf\xe5\xe4\x16\x8f\x04zN%\xa2s{UX\xc30>W\xbe\xd8\xfe\x17_\xc7aA\x9d\xbc\x051\x17l\xc7\xde#\xa9\xbece\xbb\xa7\xec\xd8\xdc\xb4\xa3\xa8\x02\x9dq\xb4\x92~FUr\xff\\\xe5-\x92\xa2:hiO\xad\xe7\x85\xa7n\x1e\xd4U\x83z\x9d8\x93\xdes\x1a\x92\xde\xb3iW\xdd\xa7\xb1o\x14\xb8E\\t\x00\xcb\'\x04\xdc\x91\x02Z\x07\xde@\x11\x84\x8a\xa4\xdbJ\x98J\xdd\x8f\xd6 \xe5\x87\xdf\x0fK\xf0n\xf4\xd6\xa2T\x12\x8e\x10\x8dN\xe5\xe9a\x80\x06\xa0U\xb5d \xfaJ\x01\xf5\x0cE\x8c\xa5\x13w\xc1\x0eD]\xce\xe2\x18\xc7\xe9\x13\x89q_\xdeh\xc1\x9c\xdf8\xa9`\x04\xb3\xd7N\xc4sI\x91qU\x95\x10(3_p`-O\x0c\x91\xff\xd1/\x91\xb1\x96\xd39\xe4\xf85\xc3\x18\xd7U\xce[\xda\x10ZD\xf2\x1d\x03\xbf\xdcC\xed60mO\xa5\x92E!@\x8f9J\x03\xbe\xed\xe58_\xffh@\xf4L\x8a\x0e\xe7\n\x98\xdeu\xfa\x7f\x97\xea\x12\xca\x8dT\xad\x8b.cf\x13\xb0\xbe[\xc1\xda\xa2\x94\xef[v\xcc\xf9k\xd1JP\x043\x19\xc5\xfd`\xd3:\x04\xa8o\x97]\xa9\xd4i\x92\xb4\xb213\xda\x1cR\xbbp\x9e\xecwk>\x01%\xdf\xb2\x05oamSb[\x86\xa4\xf6\xee%\x85\x0b\x83\xf2\\\xdc\x87\xbf\xbcA_Z\xcf\x03m\xc8uW\xe8\xe0\x84/\xb1\xcc\xbbKG\xe4\x03\xcc=\t\x0e\xc7\x8d\xdd\'\x1fY\x1e\x08]\x12\xa8\x10)\x97\xe4u\xe1\x82e^\x15\xb9[\x10:\xd7\xf8\xd7\xd2C\xe8&\x94\x95`\xde&\xebb\x1b\xa5(9\x06F\xec\x8c\xb7H\xfd\xca\x8f\xaf\x92\xca\x12\xbf\xe0\x8d\xae\xe8\xd0b\xca\xe2 \xdd\x81\x89hw\x197H\xa5F\x92\x1c\xd2\x04\xdb9\x00\xdf\xf8\xbf\x90\xc0[\x83\x05\xb2zEB\xc2/\x94\x0ez\xaf\xe5\xb99\x9e\x82\xaf\x9di\xcd\x9a\x88\xbc\xa0\x16\xe0\x1e\x9c\xe8g\x94\x89r\xe9(\x9c\xef\xe73\x0f\'J\xcc\xb5\x99\x0c\x1d\x0ey5\xec\xff\xab\xe9Se8\x9e\xa4)\xdd\x1ct\xa8\x9duB\xd5v\xc5Pq?\x83\x92\xca\xc5M t\xad\xea<\x10(\xd6\xa9~`\xc3b\xb12\xba\x91.\xdb\xfaVM\xd0\xbfF\xee\x04\x9f\x02\xcc<\xbb \x7f|\x7f\x1f\x89RCp\xd6\t\x98\xf2\xfb\xd6&\xd4\xbab\x9a3\xed\x92\xa9r\x9cT\x9e\xaa\x01\xd197\xf4\xeb\x12\rfuO*T\xcb\x1b\x97\xaeo\xa7O\xf2Da\x88\xee\xd5\xc6\xdd\x98\xd0}D\xb1\xf9F\xff)|y%wU*Xg\xa6\xe1\xd4kp\xbe\x85vRsq\x82\xe4n\xf4\xd9i\xdf4\x85\xed;\x18\xd5V\xe7\x91\x18\xf0$\x1e\xe2B\xe6\x05"\xf4\xac\xdc\x8e\x06\x9e\xbb\x14\xfb6\xb91&\x14\xc7\x08\x80\xfa\xe8;FO\xa8/\x1c/\xc1}\x0b%[\xda\xddP\x8c\xfa)l\x11\xec?\x96\xa6\x08\x82\xb4\xa8<\x84@\x96\xf0\x10\x8f\x15\xb3\xd4n\xac\t\n_<*\x8f!\nz1\xd0\xa8\xf7\xa3d\xf61\nH\x1c\x89(\xe0\xbc\x12a\xcc\x1dj\x89@Z\x02\xf1y&a\xfd\xad+\xa0)=\xc1\x1f\xb4\x06\xd65\xd8"xO\xbc\xfa\xe5\x91<\xbd?\xf3\xf5\xe3tLm\x02\x05(\x08\xed^\xa7qDZ\xb2\xcd\x1aB\x01\x1d\x8d\xe6d\x1d\xd7,~Y\xd5\xeb\xa8\xd6)s\x07I\x95\xa2\xb7E\xe9\xc1\x0c\xd4\xa5\xd7d\xac#L\x8d\xca\xd4\x15%-\xea\xe8bYC\xdb\xa24\xc4\x7f+=\x0b,\x05\x03\x9b\x0c\xb7\xda\x1f\xb2p#\xcd\xd9b \x9b\xder\xb9\xde\x9e\x13L\x06\x03\xb6\x94Jc?\xfaM\x1a\xa8b\xf7\x86\xd2\x03\x01*\xd4]\xaa\x8a\\\x03~\xc0\xaeUN\xdd\x99Wn\xd5T\xa9\xaa;-\xdc\xc7\'\xf8\x88\xf4\\\xec\xa2\n\xcf\xa3j\x12\r@\xa4Jr\x9f-\xa4\xe5\xf5/s\x10[\xc1\x01\xd2\x14b\xa0\x92\xc4\xf6v\x93\x19\xb7\xef\xab\xcc|[\x0e\xa9\xe6\x1b\x1bf\xe1\x92\x98\xd0:\xc2\xee\xae\xdau\x91\xe28D\xff\x1c)\xdb\xc0\xa2\xe77\xa0\\\x97?n\xda\\\xc1"\x1f\xfe\xaeZ\x19\xa9R\xfd\xddnPv\n\\\xd8\xb0w\xd9\x90$<\xecM"\xd7r\'_r\xe3M\x92\xd9\xa3\t\x9c\xbf\x19\xa3G\xc1\x1e\xbb\xce\x9a3x\xab\xfd\x0f\xe5~r\xb9\xe6h\xd3\xf1~#\xe8}\xc2\xafx\xca+\x13\xce\xc42{\x83\x01\x8fX\xdb&\xa9\xae4U\xe7\x95x\xd6\xe1\xde,\xa7\x1dU>\x83\xdc9ta\x0e\x1f\xcds\t\x10\xc8F\x83\xdd\x9f\t8\xd4\x07\x0e\xc9\xda{\xe8\xb7\x88@\xd3o\t\xc2\xbe\xc3\xeec\xabrI\xb7A\x0b&\xd6c\xd5\x01\xb5\x1b\xb9?\xb2aO\xc1\xa3E\x89\r\xd7\xeeu\\a\xf4\xdf\xbc\xa5E0\\\x9cf\x0e\xcb\xb4&\xb6\x97\xaby\xe9A32\xcc\x0cm\xb9\x9a\x97XP\x8f\xb8\x071\xbfa(\x7f\xde\xc7\xec\xd9\xf4*\xdd\xb9\x01\xf1\x1d\xe2\x86\xe4\xed\xf0X|\xc8\x13\xc9\xcb\xb5[\x07\xaf.\x89<\x89?U5\xf3\x04_\x9f\x86\xc2\xef=\xc8\x8e\x19\xfcD\xf7\xf9\xc3\xcd\xa8\xaf r\xb3KD\x7f\xbccIu\x9fv\xa2\xd5\x82h\xfc\xfe\x9a\x8dg\xc19h\x9e\r\x90\xe2\xd5\x042\x97\xd5?\x0b\x84G\r\x9f\xc0\x1b\xe0\x8ct\xdf\x1d\x9aJ\xe9[\xc9.u\x1dUs\xa8\xe6\xf6\xbb;\xeb\x08\xf9q$8X\x13|\x17\xa3\xeb\xd7\xf8\x8b\x7f\xb8\x1b[\xcb\xcf\xe7\x86\x1d\x98\xf5\xb7P\x0b\xcb~\x85\xec\xf5\x907\xec\x7f\xcc\xf1\xd6\x91\x94~\xe1\x9d\xf6=f\x98o\x91\xfauO\xf0y\x9fyS\x89.`T\xb7\xffR\x8b4/\xa2\xf5$\xff\x14\xe4:z\xc4\x1d\xe9a\xac\xc9`\x00\x18\x13\x8f\xdb\xb8\x8b\xee\xc5d<\xbd\xde\xf1\xe7\xc6(E\xe2\xd52\x9fU/\xb34\xf4\xae\x92O\xac\x82\xf4W\x88\x83\x19J\xcd\xf8\x9a\x05\xe7\xcbN\xfe\xf7\x93\xcdT\xc9\xfc\x19\xeb\xb3z\x18\xd8Ek5\x0e?\x12. d\xd3q(=a|\xf2\x91\x0c4_R\xc1)\x11\xe9\x91X\xd9\x0b\xeeV\xe8U\x86l\xac\n\t\x84O~o\xf9\x82\xdf\x8a\t\xfaZY\x87\xce\xc2>\xe9\xe2\xb0\x84\x87]\x19hm\xc2\xec\xca\xf9\xabD\x11`8\x9a5\x8c,\xe6ok\x7f\xc2\x9d\xed$\x07\xa0\xef\x80U6h,\xf3\x8e\xac\xeas\xad\xd5\x95P\xc6\xdc\x93-PcT\xf9w\x1c\x08\x1f\xd1\xd1FD?\xe9O\xf9"T\xc8k>\xb9\x13\x1ea\xb2{\x0c*\xd2Io\x8a\xe2\xa7\\\'\xf9\xa8\x8b\xb8(\x16A\xf5\x82\xa1\xf1Ul\xf8\x15\x80s+\xfaJ\xb5\x1c\x97\xf8\x1e\x88\x81|\xef\xfe\xb6\xe1\xa7]\xb4z\x8b\xbb\xf9\x8fU\xc7]_~\xe8R\xe4 \x91\xfeQs\x05ZX\x97\x06\xe6\x8a\x8e\x05\x91\xc6\xd7\x08\x1b\xc5\xc2 j}\xa4\x95T\x1a\r\xd4\xf7\x01K\xd1\x05\x0e0Y\xcd\x1e\x8b=\xec\xcc\xdc\xd4\xd7\xa8O\xaf\x8b\xca\xc9h6\x8f\xa8ZB((\xce\x01\x80\xf1\xfb\x00\x90?\x00\x8d\x8d\xac/\xf0(\xde\\C1\xc1\xc6\x9b\xa2L}\xee\xdd\x0e\x95\x93R|\x96`\xb7\'\xf6\xef\t<\xde\xb8JBY\x80\x9d\x9bH\xad/\xfe\x9c\xf3"\xc5@\'\xc6\x1bY\xd5\xd5H\x86\x86\xdc\x97\x17\x88^6}\xcck\xfe~\\\x15\x90\x83X\x10\xe4\x86J@\x0f\xac\xd4\xa8\x0c}P<\xe4\xf7\xffR\xa8uEK\xd0\xce\x89\xbd\xb3\xb4\xdfD?\xc5\x0c\xf5K\x98\xb3\xfb\xafv\xbc\xd8\x80|\xb3\t\t\x87\x1dU\n\x01\x9d\xea\x15\xcc8A\x94\x82\xb4\x938\x13\xbf\x88\x95:\x8b|.\x97\xb3\x7f\x19g\x1df\xb4\xa6.\xcc\x8a\x00\xae\xeb\xe0z5\x0c\x1d\xb3:\xbe\xfcO\xd4\xad\x05Jvxjz\x132fE\x92\n\xa3k\x0f\xb8x\xc4\xfe\x82_mG\x83C\x05l)0\xdf\xac\xee\\\xeb\xf6\xab\xd5\n\x1dH6\x87\xfe\xbf\x80\x8d\xddP\xf1o\'+\x8a\xc9\xe0\x13F2\xd00>[{\xf8X\x03\xdaP\xf91\xcf\x99M\\\x937\x17}\xffd\x85G\x98\x8e2\x19\xb6\x8c\x11\x08B\xf9+\x92ft\xc2$\x97\xa6\xbf\xf2\xfc\xd8\xdc\xfb\x94\x7f\xca\xd53\xd2m\xf5|Ikx\xa4\xba\xffI\xb6\x8c\x1e\x19\x02\x92\x8a\xd8\xbe\xd6\xa2tb\xe9\x1f\x1f\xcfjc@\x96\xaa\t\xbc\xc5\x05eO\xf4\xdc\xc9\xeb\xe6:\x9a\xbd\xc1\x1e\xac\xa9\x9dVw\xc5\x886\x01\xb2\xa6\xb1s(\xe1]$DM\xf5\xedCn\xa1\x07\x9e1\xcb\x96\xf3\xfe\x87"\x1e\x0e\xed\xa6\xee*\x91D\xca\x9cu\xc8\xda\x93\x0b\x8dOKK\x10\xdc\xd6\xa6\x03/D\x0e\x9c\xd6\xa7\xa7\x99\xffw\xd4\xa33\xb0\x07\xb2\x10ts \xae\x1c\x0f\xdfq\xc5\xb2\x80\xce\x16\xdeDe@\xc3d\xb8\xc3^\x8cbZN+\x9f\xdd\x9f\x0bt\x8a=\xe7\xc7:\xe0Wn\xd0\xce\x1aW\xf2\r\xc6,\x00\x96c\xd6\xea\xb4\x98r\xd4\xdd\xd2jY\x85\xdb\x80\xfbG\xa4*v\xcf\xd4\xfd\xe5H\x9b\x15\xe0Tzr*2\x17\x9f>\xec,\xfd\xd8\x85\xbc\xe8\x1f\x07\xe5\xe4\xe6\xae\x90\xb4\xea\nT\x08`\xb7a\x08\xc7\xe0\x91\xff\xac\x86\xe4o\x1a\xa2z5\xb5\xeepk\xa4\xcf\xb9-\x05{\xb4\x18\x9e|\x0e\xd2\xab\x0fl\xbf\x9d\x00`\xa6\x96\xe9mrRP\xce\xb1\x19fk\xfe\x88\x06Z\xb0h\x19oN\xe3\x1cj\xb6n\xb3\x94_U\xd8d\xf8\x99"\xc9X\x88\xcd[L\x04e\x8cY\xe5 jMN\x14#\x1b\x91dVG\xd0\x06\xe8aEG\xee\xbc\x9aT\xecOQ\x10\n\x1cD\xe4\x0c\n{\x98sk\xc3G\xda\x08\xaen\xa7Q\xd19\xb4\x0f\xa6\xb0\xab\xe3\xf2\xf3Uj%\x88')
1
+ from telebot import types
2
+ from flask_babelex import gettext as _
3
+ from flask import current_app as app
4
+ from hiddifypanel.models import *
5
+ from . import bot
6
+ from hiddifypanel.panel.user.user import get_common_data
7
+
8
+ @bot.message_handler(commands=['start'],func=lambda message: "admin" not in message.text)
9
+ def send_welcome(message):
10
+ text = message.text
11
+ uuid = text.split()[1] if len(text.split()) > 1 else None
12
+ if uuid:
13
+ bot.reply_to(message, get_usage_msg(uuid), reply_markup=user_keyboard(uuid))
14
+ else:
15
+ bot.reply_to(message,
16
+ _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
17
+ "Welcome to hiddifybot.\n"
18
+ "Start by clicking the link on the panel or entering your UUID."))
19
+
20
+
21
+ def user_keyboard(uuid):
22
+ return types.InlineKeyboardMarkup(
23
+ keyboard=[
24
+ [
25
+ types.InlineKeyboardButton(
26
+ text="update",
27
+ callback_data="update_usage " + uuid
28
+ )
29
+ ]
30
+ ]
31
+ )
32
+
33
+
34
+ def get_usage_msg(uuid):
35
+ with app.app_context():
36
+
37
+ user_data = get_common_data(uuid, 'multi')
38
+
39
+ user = user_data['user']
40
+ expire_rel = user_data['expire_rel']
41
+ reset_day = user_data['reset_day']
42
+
43
+ domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
44
+ user_link=f"https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/"
45
+ msg = f"""{_('<a href="%(user_link)s"> %(user)s</a>',user_link=user_link ,user=user.name if user.name != "default" else "")}\n\n"""
46
+
47
+ msg += f"""{_('user.home.usage.title')} {round(user.current_usage_GB, 3)}GB <b>{_('user.home.usage.from')}</b> {user.usage_limit_GB}GB {_('user.home.usage.monthly') if user.monthly else ''}\n"""
48
+ msg += f"""<b>{_('user.home.usage.expire')}</b> {expire_rel}"""
49
+
50
+
51
+ if reset_day < 500:
52
+ msg += f"""\n<b>{_('Reset Usage Time:')}</b> {reset_day} {_('days')}"""
53
+
54
+ msg+=f"""\n\n <a href="{user_link}">Home Link</a> - <a href="https://t.me/{bot.username}?start={user.uuid}">Telegram Bot Link</a>"""
55
+ return msg
56
+
57
+
58
+ @bot.callback_query_handler(func=lambda call: call.data.startswith("update_usage"))
59
+ def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
60
+ text = call.data
61
+ uuid = text.split()[1] if len(text.split()) > 1 else None
62
+
63
+ if uuid:
64
+ try:
65
+ new_text = get_usage_msg(uuid)
66
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,
67
+ reply_markup=user_keyboard(uuid))
68
+ bot.answer_callback_query(call.id, text='Updated', show_alert=False, cache_time=1)
69
+ except Exception as e:
70
+ print(e)
71
+ bot.answer_callback_query(call.id, cache_time=1)
4
72
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
73
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,7 @@
1
- # 2023-04-08T16:23:20.371561
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00;\x02\x00\x00\x12\t\x04\x00\xa3cBq\x88\xc2\xc2{=\xa8\x10n\x84b\xb5\x04\x00\x00\x00\x00\x00\x00\x00\x00S7b;\x16\xe7&%>\xcb\xe5\xc7Q\x9e\xd2\x0b\x0c\x8f\xa9\x9c}\x99\x01%/\xdcF\xc9tC\x17\xb4\x83\x8d\x9a\x84\x9f\x90\x16\x0f\xd6\x88#\xfa\xf7(\xbc\xde\xe1\xac\xf8p\r7\xee&\x91|\xcf1\x04\xd0uq\x13\xe3%\xb5nC\xa7=\x01\x9a\xc4\x0e\' \xec\x9fn@$\xdaV\x86u\xef\x95\xe3\xde\xaf\xff\xa4\x88\xf7\'\xa7+i\xdf\x0f\xea\xb2"\xdf\x04\xed\x17\xfd\x9b\xe79$\xedU\x1a\x87\xce\x9d\xdb\x17\x8cf\xc7\xd3\x93\xc9\xbb\xa05s\xcc\x9d\x93\xf0\x03\xbc\xae\x8bD\xa5\xc2\x85r\xa3&\x98\xbb)N\x8c\xdcb\xdcCn\xfc\x073\xbc0\x9a\x83\x7f\x8c\x1d\x96I\x1dO\xb5\xb1w\xd1\x80%\x9d;q\xb5\x9a\x90\xee\xe2\\N\xf8:\xbf\xad\x0c\xc6\xec.I6\x8d\x97B9z5\x18\x15\xbbm\xc0\xad\xccs\tZ\x05s\xd3\xe9\xf7&\r\xe6~\xd03<q\xa6o\x06\x1c\xedJ\xf2\xb4\x1c\xd5+\x07\xe6\xdd\x07lE\x84\xee`\x80\x8b:\xb2\xaa\xe5\x15\xd4\xffF\xa4\xeaT\xf3\xbc\x13\xa4T\xfe\xc6\xa6\xe8\xbc\x95\xef\xe9_}\x19\x17\xe8\xa7!\\e\xaf\x88m\x8bca\xa4\x831\x95\x0fV\x9c\xc7\x87\xc7\x05p\xb2$O\xd7\xeb\x14[\x8b+^{\x19\x96\xa8\xc3\x16\xc7\x85I\xa9}\x16\xb2\xf9B{\xae\xb5<\xe5\xd0U\x9aX\xf4F\xc4+\xaeTL\n\x0bM\xcdq2yH$\x85\x85\x17\xbd\xee\xa0\xdb\xdaV\x88\xfc;\xec\x9d`\x90\xa1:\xc8\x9c\xbf\xb8\xc2}\xbf*6\x8f\x04\xc1]u\xf2m\xa2b\xe8?\xc6\xdc\x14w\xb5n{\xebv\xbb\x903\x05\xa6\xa6\xf2f\x89\x8e}\x16\xcc\x88i\xf0\xcb\xb6\xf3\xe5\xad\x85\xcd/\x97\x7fa\\\x88~,O\xa3\x1e"Cw&\xd0\xfe\xa7{\xd1\x7f\x07+\x83\xf9\x9f\x01\xc8\xa8\xba\xb5\xb8r\xbd\xdd\xd9Z\x98E\xdf\\msW\xbd]Fp7.\xc5R\xde\xed\x04\xd9\xd9\x1ab\x87\x02.\xe20\x8e\xba\xcb\xe5}\n\x85\x00\xae\x05\x8d\x82\xf7\x11\xa8we\x95P\x9a\xd2?+\x07{A\xae\xcd+\n\x17\xe9\x12\xf0]\x13\xe2M\x0e\xb5\x94v\xf7\xa0\xc56\xfd;\x10?\x0c\xbf\x83\x16wc(\xc2\x81\\\x9f\xfc\xc2\x82\xea\xf8\xffX\x97\xb73b\x03\x0f\xa9\xe5\xa5f\xf4\x7f\x82w\xd2\x0b\xeb\x07\xb1j')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from hiddifypanel.panel.commercial.restapi import bot,register_bot
2
+
3
+ from . import Usage
4
+ from . import information
5
+ from . import admin
6
+ from . import DefaultResponse#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
7
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,122 @@
1
- # 2023-04-08T16:23:20.354632
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xad\x1e\x00\x00\x12\t\x04\x0071\x13\x06$\xb7\x88\xf30\x99\x8f\xcf\xcc)\xfb\xa5\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x97\x07\xe3\x8bkO\x97_wqd\'\xf4j2C\x9d\x83\x98\x93\xd3\xd6\xc8Rt\xac\xd5\x17\xf8\xafLP\xe6+\xcb\xb7v_"e\xaa<\xecz\xea\xea\xeb\xdd\xcf\x0c\x0c\ra\x1a\xc1\xae\xd7\xc3\xb4\x9dL\x02\xc2\xad\xd9xT\x8a\xba\xe2dg8G\xf1i^b\x0e\xa5:\xd4\x84\xbd\xea\rC\x1a\x02 \x852lO\xb5-\xfc\xd6\x1bd#\x8c\x89\xe1\x1c\xd9/Y\xab\xffi\xf4\xaeK[\xf8\x9bS\xab\x06\x1e\xd3\xcb\x01I\x9cw\xac\x86\xfdtW\xc80A\r\xe4\xf2\x1a\xbe0\xc5\xeb\x03|\xff\xbb\xe8\xffB\xe2\x88\xe1\xe4S\xe6\xeek\xabL/*\xa6\x82P\x05\xfe\xe3?\xb9\xa0\x0c\xce\x8b\xc4?\x9d\xf5k\x05\x16\xc0A\x90B\xb7uR\xba\x18\x18e\xb5"\x01wP\xc74\xcei\xe5\xea\xac\x19\xf0\xd0;\x05d\xf7sT\x07\x11\xf1\x13\xf1\x99]\xb6E\xb0k5\xdc\xba\x9e\x05\x1dZ\x17\xeey\xccK|\xfbKZ#\xcf&1\xe3[\xfc\x8cw\xb9\x19\x1b\x0bB\x1en\x9f\xbc\xb6\xc1\\\xe2?\xc9\xd3\x9c\x93E\x02\xa2\x00\xaa\x80\xa0\xcfV\x1e\xf6Qe\x13FO0\x9dz\xbf\x8a\xdd%\t,\xf1\x08\n\x89\xed\x14\x10o\xfe,\x0c \xe6#a\xa0[I\x18\x95\xca\x02\xb0P\xe1\xdb\xe1\x8a\xea&T\xf0)C\x971\x8c\x97\xa2\x19v\xe9[\xff\x87\xcb\xa1\xf1\x07F\xbb%\xee\xae\x14\xce\xd2\xca\x0f\x0b\x81}6\x90\t\x98\x0f\xf5\xf0\x0cb\xfc\xcb\xbft\xc0\xc4\xcb-\x17f\x01\xac\xca\xa2>\xc4\xfeN\x9a\x15\xccs\xe0\t{c\x0c\xdc\xf9\x8e\xd5\xfc<\xfb?\xd0Dgei6\xa1\x15\x86\x8el\xeb\x1a\x12a0\xf6\x81\xcb\xc9\xb6\x96\x87\xb3\xcc\xaby.\x05\x08I\xd5\xb7t\x84#C\xb0H7\x931\xea~\xe1\x99\x1ce\xb8\xff\x95X\x12\x9b\x1c\xdb\xd2\xa83H\x81\xcf1n\xe79\x10\xac\xe4\xf0\x0b\x89\xe5\xf6\xc76\xc3\x9f\xe6\x90\x06G\xda\xcf\xd0(\xf5c\xdf\x15\xe3\xd5\xaf\xce\xd6\xe9\x1a\x95CU\x8b{\xf2\x84y\x90\xa3\x0b\xdd6\x1eO\xb9\xd9\x88\xc5\rc\xb5\x0b\x02\x03~H\xb0\x95n\xbc\xb6\x12`;\xa4\x8d\x94\xd1\xa6\xff\x92\x01;iO0\xfb/.\x11\xc1,\xb7\xb8\\\'\x05\xd6\x86!7\x13\x89:\xdb\x95A\x83\xfbAh\xdf\x9cQ.k\t\x9dRg2\xc2\xa8\xcc\xfe\xa8.\xe1\xea\x86-\xe9+`j\xdf\x9e\n\xcd\xa4n\x17T\x1a3.\x12\xd6\x9b\x87\x01D"!\xd1w\xa7(\x95t\xd5\xe6J\xa0\xad\xa7~q\x9a\x00\xd2\xfb\x0c\x93\xb4\xce\xe1\xef\x9f\x8d\x07\xb5P\x9f*\x9f\'\x104\x83\x0c\xc5\\\x9f]p\x0b\xd4\xffj\xb7\xf1\\f\xca`$bA\xb1\xe9\x7foS)\xe0\x1b\xbdj\xc7\x15\x00\x00Y\xe5\x86\x08\x0c\xe2\x1e/\x06|"%\xa6\x83\x1c\xe45e;\x83\xfd\xaf\xed\xb7\x0b\xd8\xbd1\x9bX\xbe\xbfb\xe2d\xb5V\xe8\xe7\xa7q\xfd\xdeZ\x19wv1\xe4y\x01C*p\xbf\xean\xb9\xf5\x05\xe9\x96\xed\xa3\x9e\xd3\x81l\xc6Ov\x02(m\x82]\xb1\xe9\x84F\xc7;/e+\xef\xa4=\xe7X\x95<\xbcu(\xfb\x19\x92\xf1\xc7\xc6\x88{\xba\xcf%&\x89\x88\xeaN\x9d,\xbc\x1a\x16\x0ci\x83\xe8(|\x86\x82\xa2\x16T\xc2\x92\x19\x93\xbc\'6[\x93\xd8.\x02\xea\x1e\xf0cVx\x0b\x15~\xfehy\xad*(^^\xfb\xf0/\x07d\xb0Bx\xeei5n\xa9\x10\x7f\xedR!3v\xc5\xe3\xdfb\xd2\xb2P\x08r)\x8c\x0eP*+F\x06\xc0W\xa9,\xb3*\x183\x11\x1a\x84lp\xb8\xf3\xf6tO6(\x85\xac\x95q#b\xab<\xf0b\xdb3\x10\xfciVf\x1c\xe8\x8c>a/\x9f\xf7\xde\xbf\xc0\x8b\x13\xc5\x03K\x8d\xe1\x08A\xdc\x91\xfb\xbc\xc6?\xb0\x9f\x17\xfe\x83\xeb\x92@\xed*\xb4f\x1a\x8b\xff\xfa\xbb\xfc\xeb\xe8?\xf8\xadT\xec\x85\xa4\x0b\xa2\xb7\xae\xb0\xd4\xe6\x1d%\xdd\xc3\xa5g\xd68\xd4%\xe9\xcd\x8c\tV\xca\x87\xac\x87V{\xc6\'\xe5F\x95\xa6\x89\x05\x12\x97\xaa\xae\xe0\x05DEz\xb2ku\xa3\x963\xfcv\x1e\xc0\xfddn\xa8\xe1\xf0\x16]\xcc\xf0>@F\x08\xe5|\xdb@FA!\xbbwhA\x12\xa4\x90M`\xd6$8\xd8\xcf0\x89\xa9#\xc8\xe9+\x0c\xef\x94\x9c@\x97\xcaU9g\x198F\xe0)\xba\xbb\x7f\x9b\xfe\x11\x92\xbd\xd8\xbc9\x85\xd6 \xcb\x13\xa9\xb6\x9bu\x98\x81\xeb^W\xbd&\xa0\x85\x13\xbc\x91\x16,?lm\xd7\x19\xb5J\xe4\xdb\xfe\n\x0e\x17\xa8\xe4+:\x9c\xa3\xbc\xb9\xbb\xb5`*\xc86hAsB>wB\x8c\xc8\xc2^/\xd1\xcf\x82\x91xJ;$G\x85\xbe\xd9^\x15\xa0\xb6\xe1?\x87\xa0\x84\x8f$\xfbZ\x01\x86\x8bJy\'(\x7f\x96ZM\xe6F>\x84\xff\xe6\x9c\xfbE\xbd\xb7\x8c\x99\xf0\xa4\x02\x7f\x14\xb0t\xe2(y\xbb\xce\x80O\x7f\xce\xf7]_\x07\xf2\x14\xb5\xf3\xf8\x8a\x95>\x94\x8f\xcee~\xcf\xfe3\xa7\xe9\x83V\t\xd1Z\xd9\xe9\xb4\xf03\x17J\xc6$\xfa\x89>\xed\xef\xa5Ok]W\xd5\x1ek\xaf]\xb4\xb7\x1d\xd6\x02\x8c\x13\xd5n\x13*tk\xb2XyQ\xe9\xfc\xc7A\xd2\xf7\x9d\x1e\xe1\xcc\xdeH\x937-\xdbC\xf8\xeb\x05\x94\xf2\xa3\xd0-d\xb9[\xc9\r\xe5P[\xf9\xef{\x96\xcbFy\x01\x19\x9e\x0f\x94A\x9b;\xec\xcdL\xe6\xbe\xc0\x92\xe9I\xd6\xa7\x9a\xc2\xa0\x89\x87x\xed\x18\xc1\xed\x7f\xeeY\x86,e\xc5T\xe4\x0f\x96}A6\xc5\x10)\x82Z\'R&\xfe\x08m\x81\xb0\xc1{\xec\xa1\x00W\xc26\xe8`\xad\xb9\x906\xf0E3)\x19i\xd4\x9cw3JC\x02\xda\xc0\xaa\t\xed\x01\xbd"\x7f\x12\xeb\xd7\x9b\x89^\x9enF\xe8;\x95;\x91\x81L\'\x99W\x85\n\xfe:\x1f\xe0\xa6\n\xe9jO\x14\x95\xceU\xdfK\x8e|\xb4I\x96\xba\x05\xc6\xaf(\x05\x8a\x7f\xb0\x92\xd1\xf7\x14\xce5H-\xf1d\x1b\xf9\x92\xa1\xb1o|}\x1b\xf6\x93\tB\x89y\xe3\x8b\xa9cJ\x83\x11#d\r\x06lp\xa1\x83\xe1\xbe?\xad\x93\xf3\xa4\x05\x99\xb1\xfc\xf5Ga~O\x9a@\xe4\x1f\xf3 \x88f\x19\x00\xebx\xfe\x05%>\xa5H\xbfj\'\\`UD\x1f\xc8m\x9c7\x16\x1f\x92\xbb^\xde\x92\x1a\xbbA\xc0B|i\x9d\xb7V_\xc3Z\xed\xef\xb2Rw\x8a\x11\xbc\n/\xb5\x1b\xc4\x11MQ\xb1*\xa5x$\xf4\x9bJp\x1ac\tU\xe7\x03\x03\xb3M\xef\xc0\x03\xc4R\xc8Nb\x93\xd5\xaf\xf2\xdf\xb2\x1bY!\xae\t\x1b\xc0\x01\xcf\x80D{\xff\xaf\x02\xf0\xcc}\xc6\x93\xd7\x94}\xafg\x9c\xedW6\x89S\xa0\x84\xcc\\\xe7\xc5\x98\x16b\xa4)\xb4\x0b\xc6n\x8c$5\xbf\x90\x03\xb5\xb5\xe0s\xb9K{\x00\xc1\x8b\x8e\x9d\xf9+\xc1Q\xaa&92\xf6\x9bJu\\`\xa1\xb5\xd6e\xe7n\x0b\xee\xe0?\x17\xa9\xa2{T\xaa\xf5\xba\xb4\'\xbatV\x85\x00\xa0\xd0\xbe\xf3\xf2\xfa7dR\xe8N\x93\xb0\xe2:j\xdbP\x01\xf2\xd1\xc1\x1c\xe7=\xf9\xa7\xb4P\xd6\xc2\x05ST`\xdf\xc8\x15\xd7^\x17\x89\xf9\xa8\xf3\x88(\x14S\xff\xab\xc8\x90\xb5\'S>\x93\xe4\x1eV\x0c\x87\x1b\xe73X\xd7n\x04He\x91\x0fd \x89\x02\xd6\xe5\x19\xff\\\x11\x7f`\xb2x\xac\x04\xee\x082\xc3\x197,\xd27Q\xcb\x1f\xb4\xb4\xc5\xea\x17\x81\tW\xd0\x82n\x81\x88=S\x9c\xbb\x83\x96\x93\xb9\xa3\xf6"\xa6f\xaez\xceM\x8b\xbd\x0e\x88\x9d\xf4\t\x16\xf3Qy#\x9fb\xa4\xa1\x7f\x02L\x12\xfc\xc3\x9b6.\xe9\x1e\xf5Ak\xc1c\xc6\x8a\xdc\xb1\xeaY\xf3jO?\xa1)H\xcb\x02\xa7\x89@\x93\xb7P\xcf\xb3\xaf\x84\xe1c\xabLd/A\xe3_\xfa\xb7\xc0\xf7\xf0\x1erVl\xd7\xb3\xe86\xbd@\x8c&\x1dQ\xee4\x17\xb5.\x9a%@\xb4\xa1\x16\x07$\xd6\xf1FL\x8b\x1a\x9aq\xc1u#L\xa9\x1d\x06\xde\xe4M\xaf\xa8]\xaeXc\xc8Kk=\x87N\x95X\\\xc3<\xcfb\x10D\xfe\xc2\xc6\xf9fV{i\x91n\x1a\xb3\x19\xa5\xc2\xa8`{\xc8\x9c\x9f\x15\x1a\xb0\xba\x16\x02\xdd\x93s\xa4\xe4M\xcf\xce\x80\xa2\xa4\x1e\x96a\xce \xce}z\xf29c\xf5\t\x0f\xb1[\n_\x1dM\x07\x89\x06\x12\x00[*\xc1x"\x01\x98tD\x0b\xdf\x92\xdc8\\\xf9\xf9\xe58B\xdb\x82&l\xf3\xef\xf2-W\xef\x96e\xf9)\xab\x00\xf3\x0e\x12bC8\x92;D\xd6,\x81\xbd\xa3i\xdc\xf0\xa5\xd7\xf4\xff\xcb\xbe\xfc\xa1[\xbb\x15\xcfy\xb4\x15\xc2d\xd0\xe2\xe8\x8a\x14\xe6\x9a8\x9eL\xb0\x1b\x8b\x86\x00C\x9d>\xc6\xe7O\xc5=\xd2\xb3\xbaS9J\xf3i\xf9\xa1\xe5R\xfc\xa0\xcdU\xbb\x83~\xd0\xf7>\xfd\xde\xde\x19[\xbd*\x1e5T\xbf\xb5%\xb3\xc3\xd9\x86\xfb\xee\xb8\xd1)\xfc\xf4\x981\\i\x1fq\x95f\x94\xcf\x1dNy\xeeR\xcb\xbe\x83\xa2N\x9b\x00D\xc0\x9f\x82\xe8\xb70\xb7\x01I\xba+\x00lm\xab\x82\x86kR\x13X\xe0\xd0O\x80\xc8Lw \x89}\x94\xb9\x8f\xe7w\xc6\x006<\xfcN`P\xc2\xea^\xc7\r7\x05\xe7K\rq\xca\x95\xe3\xee\xd0\xa6\xa86\xec\xfc B\xfb\xfe+\xed\x07RW\xa9\x9cE\x94\x01yLv\x80\x9b\x9a\xdd\x1bo\x0e\xc4\xe0\x1a\xa3Z/\xdc\xe9|\xc9#U)*\xe5cK\xb0\x04\xe6a\xd9B\xc4ci\x14t\x04-\x1dk\nw<\x82\x93\x12B<\xc1x\xff\xa0\xb2~0\xe8M\xad \x86\xe3\x8e\xe3\x0b/\xc4\xf3\x85b,\x9c\x10\xc2\x8e\x18\x91\x96\xd4i\x0e\x87\xb8\x0f\x16\xda\x99\x8cOx"\xae\x02\xd19s;\n\x9f\xb6\xda\x15V\xf6\xfc\xc2\x97\x97\xe7*+Q\xaa|\xc6H\xf2VA\x0f\xb2\'\xed\xfe\x15b\xfe>v,\x0c\x87\xfb\xa9\x9d|w\xf6\xd2\xe3|%\xe5Mfls\xa6\xec\xd2\xfe\xa7\x87\xde\x16\x15\xff2R\xe8J\xc8\xbd\xf7**W\xd4\x04\x96\xec\\\xd6\xd6\xf9\x0f\x95c{):\xbd\x96C\x19\xecK\xa3}d%X\x06\x04\xe8\x84(\x0e\xf17\x1a\x18\x1b\xc0\xadj)\xb20\xf9\xf3Y\x02\xee\xde@\xbcw\x81\x93\xafG\xd7\x02\xed\xfc,7R\xb9\x9d_\xf9A\xde\x17\xb9W\xad\n>C\x8a\xf7o\xce\x10\'\xa3\xfa\xee\xebF8H\n\xe5\xe4\xc7\xb3\xd6]\xbe\xaa+\xde\x88t!\xbf\xcb\xff\xb4<\xb8\xfcg\xb2\x10\xe2)U\xcf\x15[~\xd0\tW*%"\xc0\x1a\x89\xdd%S:Z\xe7\xd7V>\xb5\xd6X\xf3\x84[\xe9\xe1\xf6e\n\x19\xa8\xd3y2v\xf6\x14\x9d\x02\x82\xf2\xfaO{\x13\x93\xaa\xd8w\xdfg\xcb\xcd|<\x12V\xbfB \xeek/\xe1\x8c\x8e3\xf5\xaa\x89\xf4|@!\xde\xd1\x02\xffA\xd1\xdc\x97\xc7\xb1\xbf\x0b\x8f6\xa3\xc5\xa4\x98s\x05o\xfdBa\xb1t\x9c\xdb\xb9\x15\xb1\x9b\xfe\xb9#B\xef\xdd\x0c\x84\xea\xdb\x93\x13\xa0\xb2%\x90;~jRy\xc1\x8d\xa3n\xd7\xaaI<\x0c\x05\xbd\xe7b?M\x91\rx\xff\xf3\x94\x95\x06`\x8f\x94\xaci\x18\xeb\x9d[\x84C\xd4<"\x1b\x0c\xb4\xf7\xb0(\x8a#Nq\xfa\xe12\xa0"\xeb\xf3\xd3 \xaez<\xc3\x0c\n\xedA\x86O\x00\x9c\xca;r\xd7\xa6\xc1t\xe8\x82\x17v\x15\xacH\xce\x96\x07\xa7\x9b\xd6)3\xdc\xd2t\xd4\x13_\x97\x86\xaa\xf6\x0f\x05\xfd\xc3\xc0"Ap\xee\x98\x89\xd4\xe7\\\xa4p\x11\xbc0|\xe1\xfa\'\x13\x11\xb8\x1b\x80\xe8\x1c\xdd\x82\x88h>\xf7\x1aS\x18X\xd9\xb7B\x0f\xacrH-\x95T\xdf\x0e6/o\xb3\x86\x89t\x0f7\xc1-3f\x18\x8b\xed\xc5V\x0e\x1f\xc7\x03\xe9\x8ev\x8e\\5i_\x11\x81\xd1\x8c\xdf\x1ac\xee\xf0\xa8T\x19\x17\xf0mP-\xaf\x89\xa2$\xb4\xd3w\xf0\x19uV\xc2Z\x85\x926\x108\x85\xc5f/\xbf\xff)U\xc0\xe0\x99\\\xbfP\xff\x15\xd9o"\xa9A"\xe1\xb0eF\xe0\x86\xbc\xff\xd3\xd2^\xb1!\xc1Mh\xa0\xa4O\x94\xa6VN\xde\xc0i\xc7\xf2W\xceU\x8e0E\x0c\xc8d\xc3\x9f4\xa5\x14?\xa0Z\xfc\x17)\x03\xd1`\x02J\r\x95=Wy\xa4\x07v\xa8"\xb1\xac\xf7\xf2\xfa\xd4$\xe6b\x06(\xf8X\x1f?q;\xd2\x8c\x10c\xe2o\xd0\x0eZ-d\x96\x87\x02\xe6\'\xc5\x7fm\xce\xc1\x1f\xd2\x97W\xce\x02\x8e2!z/Y\xf0\xd6\x13E\x02x\x06\xfb9/\x9eU\xe5\x86>\x92\xbd\xc8\xc2\xe5G\x9c\xe5Y6L\x1f\x93q\xf8+\xde\xcf\xb5\x9f\x8fo_1^\xee\xac~>\x96\x91\x17\xa1\\E\xb9\x1f\xb8\x17q\xfdy\x01\xa8\xaf2\x18\xb7\xc1\xc6\x08\x01\x7fuA\xcb]\xec=\t\x1a\x01\x95\x04\xf6\xe7\xc9\xce\xdd\xd6\xc8b\xca\xb8E\x84{]\xa6\x84\xe9\xb6z\x0fT\xe9\xb0\xc1pn6%d\x0e\x16l\x84\xac\x85\x14\x10\x884n\xe9;\xd2\x8f_9#m*k\xf2?\xe3\x91\x8c\x0bP]\xddo@\x97HbaDf\x84\xff\x17\xd1\xc9\xc5\xa0\xb7fp\xb4\x12/\xbe4|W>;k\x06\xd6z\xca\xcb\x077]d\xb13\xcf\x8d<2\xa0\xdaa\xf6\xc8?6\x95\xc4>sh[\xe1\x06\x06\xb1\xf5\x90\xddO\x06\t< <\xb0"\xdc\xf1\xad-G?v\x14\xdft\x1f\xcdu\xf9\x86\xa2\x1d \xdb\x88\xbf[\xb0\x17\xb0\x94E\xd7\xc7&\x97\xecoF\xb2\'\x96V\xa4{uk\xec\xf0\x15\x18\xe7\xd7|2\x10\x80\xe5[d\x04>\xdf\xcd\xcf$\x0b\x9c\x9aQ\xf9\xb7d\xecJ\x18\x8dRs&\xc8\xb5\xed\xdd\x86\x88\x06\x8b\x8d\x1f\xf2\xc2\xb3D\x86\xf5\xef!\xa3\xb2\xc0\xd5\x8b\x05x\x03\x15*\x94\xd9`\xc4\xd08\x11\x03H2\x9dV\xfaC\xacy\xb6\xc7\xed=nC\x8b\x0e\xa3\r\x1cR\xe8\x90\x815\xd8\t^\xa1\x01Iz\xfa\x95\xc7\xaa&\x85o\x13\xb0s\x93i\xf3lZ\xd3\xebtw+\xc3\x83\t\xec\xa28\x13\x1dsA\xff\xd4E\x9e\x9b\xfaA\xf7}\xbd\xd9\xd1K\xed\xb2]c\x01\x1f\x96X\xf5]\xe8\x90\xf6\xb7\xe7\xb1\x8f^\xa9\xf8\xf9%\x9fi2g}\xcb\xddv1V\x14\x0f\xee\xbanL:4~\xea\xff\xfa\xe9\x87\xa3\xd0\'\xa4\xe9(\x1d\xc1\x91\xfb\xc6\xadTz>8\xae\x1c\xac\xb9\xb9\x99\x1d1\x90\x86\xa2.+\x97V\xd5)\xc0av\xb2\xed>\x93\xf2\xdf\xf6fG\x1a\xbe\xa5\xd3\xbaYI\xc7\x01A\xd5\xefM\x0fW5\xba\xe1v\x04\x07\xc8J\x0bY1\xfc;R~\xf4\xa4JD\xc0]`\xeb\x8a\xa0\x1b\xf6\xe5}\x03\r\xb4"\xaf2\xf3o0\x9e<a\xdbX6\x8c\xac\x1a3\x7f\xcaY\x18w\x8c\x01\xb5(\x8fs\xaf\xf2yeL\\\xc9\xf5\x11\xea\xb6?c\xa5\xd2\x0e\x98R\xd4\xee\x03\x9c\xd8c:\x90\xd5\xbdA\xd5\xd9Cz\x03\x164\x1c\xe4\x97\xd2\x0b\xe1N\x9eg\xfd\xc2\x11\x9f\x99\t\x91\xbe\x03T)\xfe\xb6\x00\x8b\'L\xe2\xeb\xda\xda\xbb\xe1P\xd4\xa8f\x8dM\xf4Eo\xb0\x8a\x1f\xf6\x8f\xe4\\0J=L\xf5&\xc2\x9aw\xfc\xf0j\xd4Rl\xdc\xf2\xf7 \x9e\xbeyB\xa0m\x8b9\xa6\x7fm\x15\'[\xaaO^\x0c\x98\xd2n\xc4\x93\xda\xee\x06\xef\xf9\xad\xe7\xc4\xc5\x16"\xd1Z>D@v \x96\xa7\xd4H\xb4\x8e\xe7%^\x85\xd5\x0c\xf3X\n\xc3\x9b@@S\xb1{\x05\xb3Q\xd8\x8a\x11BQ\xdf@\xe6A\\8\xf4\xe3\xd36\xf3<\x9c\x16x\xb7\xce\x17\x01\xc0\xca\t\x87\xaa^=\x1f6\xc1\x8d!\xe8\xc03\x99\x0fNB`\xa5$\xe9NVZ\xda\x13P\xc2\xb3NV\x14\x8ew1\xc2K\xad\xd6\xa2\xb8i\xe9O\x99v:\xf0\xdf\x9a\xa9\n\xc3\xc8\xbc\xdb\x93\x99\xd5V\xd8,\x90\xd3N\xf5\x9e\x7f\x8ft\xfa\x9b7\x03Z(C?\xec\xa4\x11\xb3\x1d+\xa4\x91\xca\xcc\x19\x8f)\x0b^}\xf0\xceiX\xf2\xdc\x7f\xe5\xf1\xc2\xf8Q\x0f\x9d\xb8\x165k\x0e\xba\xf9\x86\x04\xb4\xcaYw\xb4\x9e\xef*\x82\n\xce\xfdm\x1c\xa8\xd4<L\xbbU\x90\x8f\xfac\xd1a\xb5gG\xf2\xed\x12\xaeI\xfc\xcf\xbb\x8d\x1b#\xbc\x02_\xff\x10\x8bq\xa0z&\xe2\xcfH\x0b\x97\xf9\x93wh7\xba\x08\xd2\x8b\x13\xc0\x97\xbb+\xb7|\xa1\xb4/U\x8f\xbav\xf3-<\x0b\xde\xf8\xfc5\xdf\x9f\x07\x89\x82\x0e\x9cT(\xa2\xbf\x87\xf5\xb2\xdc\x81\xdc\xe1+H\xcec\xce\xeb\xba]\x94\x86\xce\xe6\xc4G\xc8\x03\x92H\x94\xcf\x7f\xed1\xc9\xd1\xaa\x0fW\xde"\x00\xa3b\x1d\xcfz\xf8\xeb\x1b\xcd\x91\'z\xe4\xce3}PO\xb7\x99\xdf\x00[{\xa8F<\x9f\nc\xa8u\xea\xc8p!\xfe!\xfe\x97\xb3\x86L\x02p\xbe\x0b\xad\xbf\xd4>\xa8\x0f\x92\x90\xa4\x96\x03J\xc3\xd2.\x10\x84\x0b)\x19\xb7\xa0w<\xb2\xb2=y\x066\xd3\x9c^\x86a\xa0\x12\x01=Nml\x80\x8c\xf9S\x08G\xe0\x867\xfb\xcb!$\xa4T\xe0\xf8V\xbd\xea\xa8\x13\xc0\x93\xfc\xc4\x14\xb7\xfe\xcf\xd9\x90k1\xf0\xc0\x04\xe0\xe5\xe8W\xc69~ub\x9c\xf6\xc4>\x1euj\x07\x80y\xf3\x88\x04\x98\xba5\x03U7#\x04\x1cK,\xd6F+X\xfex\x86\xe2\x8c\x05\xfa\x82\xf0\xca\xe5\xbe\\\xaa\x06\x86Q\xf8|\x86\x9c\x94qi\xe8\x92n\xf7|TN\x14K\x8d\x05\xf3\xf3.\x9a\xd8A\x18\xb7\xc6\xbb\xaa5\x1c\xd6\x8d\xc3TP\xd9\xa3P\xf4\xfe\x11\xbf3\x0c\xbe\xc5\xfa\xfb>%\x8a9\xd4\xf0\xf2\x9b\xc0Rn\x91\xf2B4\xa4\xa7\x94.\x08^\xb8\xb9\x92Q\x81\x0f\x19\xda\xa5?\xed\xabU\xb0Z\x15\xdc\x938\xdc\xb0\x92\x04\x90%\xfc\xfc\xd6\x88\xeb\x90R\xbbB4\xa7\x16\x03\xe5h\x8dn\xc1\xa1\xca\x9bF\xf2ZS\xb4\x95\x15i\x8b\x1cQ\xcf\xf35:\x8b\x01\x83\xee\xa9 \xd8\x95?\xbc#%\xd5\xc3\x06\xc0\xd7\xf4\x7f+S\xbf\xfe\x17\xd8\xba\xd1\x1e|\xfa"\xbdF\xfb=\xb8\xfb\xbbu\xc0\x94$\xfc:\xe1\x0f\xa1{\x0bq\x18h\xb9\x85a<u\tO0z/\xff\xb80v\xeb7[A\xa3\x1a\x03vc!Vi\xb5\t\x01t\x92\xaa\xa0\xd6(\xbaa\xcdL\x910\x8es%5\x0c\x95\x0b\xa1\x8fq\xf9@01\xa3\xb3\x94\xde\x86\xad\xb6\xa8-\x99X\xc4PM@T\x9e\x7f\xd5\xbb\x1dav\xe6%\x137\xa6,\x95Z\x95\xaa\xfd\x0bg\x99y\xfa-\xd9g\xdf\xaem|\xa1g\x8ck\x0e:\x92h\x08O\x18\xe2\xdd5\xdd\x06\x13\xcfX9j\xe6`rF\x91\xf3An\xe7\xa1\x01\x89@\x10\x8f\xe1N\xb4e\x14w\xa1\x99M\xa5\xe1\xc0\xad\x7fx\xc5\xfa\xed\xdab\xfcT\xf0\x15^\xfc\x9eh\t\x87\x0b\xee\xf9G\xcf=\x83%u\xc8c\x95\x8biZPj\xaf\x96\xa3\x1e\xc57lm{\xd5\x99\xf6=\xf7m\x8b(O \xdb\xc7\xd3\xb9\x86\xd2x\x15\xcf\x12\x1f\xd7\xe6\xa8V\xf7\xa2\xa4(\xe8\x85\xb1\xb8\xcf/C{#\x02\xb01\xacf\x9e*"\x91m\xa4\xcd\xa5>\xb5\xb0\x9e\x89\xde\xd3\xb7(\xdd\x96p\x10\xe5\x8c\xb2-j\x1e^\x06\xdb\xe2\xa5\x10\xb9wK\xf24\xea\xafJ\x84\xde\t4\x0b"\x88\xe1\xf8\xa6C\xb7\xfbr.\xe3\xba\x05\x8e`\x97\x97?\xf3)\x008p=\xb1\xa2\xd8\xa1\xab\x8e\x1bm{\xb5-\x00)\xe39\t\xacc\xe8\xc9q\xdc,\x94\xc3\xa8\xb3\x9c\xc4]\\\x0f,\x05\xea`G\x99\xb8g\xe9\xa8\xd0A\xcd\x95:3\xf8\xc1\xea\xc2\xda\x16x\xfeo@o\xaf\xe1\x83\xc6.\x7f\xa1V\x13\xdc\x16Rg\x8e\x80\xdf\x02\xb4Q\x91\xb1\xad\xa2[\xca\x87\x16\'\xd0\x9d\x82b\x9e\x99\xc7{\xbb\xcb\x8d\xb2\xe8\x87\xcb|\xff\x81`\x8f\xd7\x80\xcc\xd5-\x02\xb1z\xa4\x93"\x99\xb9\xf5\xe1\x968\xd663D\xd72>\x7f\xa8c\xef\xaf\xc7\x10\x81\x0e\xeb7\xaaomf\x8f(f\x1f8\x06y\xdc\xd7\x14\'\xa0\x1e9\xae\xcf\xa2 \xad\xd8w`z\\\x1a\xbaV\xed%R7\'\xf5\xd4Ia_\xd72G\x13[<\x08\xd3m]\x17\xd1 A\x10\xf9\x13\xfd\xa3\xceya\xb2 1\x0f1\x93\x82\x93{\xa5\xeb9\xcb\xc3gh/s\xca\xdd\xb4\xb5c\xc4\x06\xf5S^\xe2l\x00x\xdfY\xb1,\xe4\x80a&g\xf1n\x1e\x8a\x0e\x7f\xa5V6\x80n\xca\xb5\x9dKn\x10\xdb1\xad~\xae\x0f\x96\x9d=Y\xadRn\xc3k\xfbcpg\x91Q^\xad\xd0h\x7fJ\xbfF~%3\xfb2\x8fL5\x00\xef\xfahM\x87\xde\xafxqB\x1d\x021_\x19\x8fe\xcc]\x15=\xc3\xf9\xf2`\x85CkM\xb5\xdaK\xbd5\xb5\x10\xd61\x13\xc8\xc67[>\x0c\xcf6E`\x15aQ\x13\x81\xb1\x83\xf6\x01\xaa\x01\xcb.+\x8f\x1c\xf8\x01\xa1\x0b\xb5\xd0c3\xc4\xea\x83\xb3\x08\xef\x16w7\n\xa1pHe-\x934\xb1Pu=f6\xe6\xf7\xa5\x03.b\xcf\xffv\x93 q\x1b\xa3\xc1\x98\xc9b\x97W6%\xf2\xb4\x88\xe4t\xed\xaf\x187\xea \x8f\xb2\xc5;\xc5\xeb~\x13\x7f\xba\xce\xb7\x9b9n^\x01\xc6!\x83-\x8a[/<\xc3t9\xa1,\x04\xb3\xa8f\x7f\xb6\xd9\xffO\xec\xe7\xbcPJM\x9f\xcek\tx\xb3Z\xab3\xf0}\xe2\x97_\xb4\xdd\xd4\x05=\x02\xb0\x82l\xafkj<;K,;\xfad\xd4\x1c\x1f\xd9\xfb\x12\xda\xaa\xb3<j\xb2\x16\x9al\x12Z\xacC\x93\xbd\xc3%\xc6\xba\xd74\xd3\xb2\xb5\xc3\xdc\'\x8f\xde\x86l4\xc3L\x9c\xdd\xc4\xcf;<\xa5\x7f7\xdeo\xd7t\xe7\x01N\x8e\xff\xf2/\x93\xd2\xec\xbd\xceEs)8\xc6\xf4@^zB\xbfu4\x16\x8e\xa2\xe5\x91\xe4j3;\x7f\x94\x1c\x1c\xb4\xba\xd7\x9d\xf5+B\x85)\xce\x1c\xd9\x8d\xa0\xf7^U|\xf7j\x9eI\x16\x8ex\x0cU}g\xa1%N\xf9/\xcbG\xab\xcbz\xcdV#w\xe2\xc5\xc0]\x01\xa3U\xf0\x94?\xc8\x1f\n\x11\xe1\xb8U\x1b\x1e\xdbN\x94\x95\x1d\x86\x8b\xd5\r\x02\xc1P\xe9\xeb\x85t48\x13=\xd17\xf8\n\xb1\xa5\xb3s\xe7L<"F\xccX\x8e^\xdf\xf7\x11\xe3\x16_9\xf3\x8cG\xaas\xfb\x06\xbb\x14\xf9\x84T\xd4\x86Pv*ka\xd7\xcd\xb8\xa7\x9f \xaa\x7f9\xb7\xe3:\xed\x83\xac>\xbbnV\xce\x97\xf7\xaa\x05\xbb\xea\x9d\xb0p\xb02\xfe\xf1\xd8\x1a.c\x88Gt\t\x94e\xe2\xe8!N~\x00@\xbfY\xc8\'\xef\xeeS\xbd\xda \x10\xb1e\xed^@&d\x03c\x95\xe8\xf0\xcd\x00\x97\xb2\xcbT\x1e8\x1b\x0clq\xfd\x7fL\x03\x89\xb2\xc0H\xc6C\xad\x00\xc9a\xb5\xfb\xfdq\xfb_X:\xedz\x8f/\x0f$\xf46\x14D\x91\xf7\x1e\xf7\xb5\x93\xa5\xbc\xc81\x96\xd8\x8eS\xec\xd1\xc2\xa0;\xf1\xd7%$Z\xc4\xf3s\xbeD=\x97\x92e"K^}\xe1wPa\xf7<\xd8\xb3\xd3\x0bD\xc1umZI\xf5\x13\x94MS\xe5\x87e3&\xcdx\xca\xde[shk`2\x8d;-\xdc\x9f\xb5\xb6\xdd\xec,\xbb\xf9\n\x87\x89z\xe1\x7f\x18\xe0cf\xbd\xd3\x11\x91!\xd9\xad\xfc\x98\xc5\x80\x01\x9f+\x18\xfdy:\xd7\xa3\n\xbaz\xe1\xef\x17\x9c\x12\x97;\xcf\x0bc=\xcaW\xee\xe8\x18N\xde\xbc\x99\xe8\xd7\x82\xfb\x9b\x05\x1d|q`uyh;\xea\x9d\xf4\xb7-c\x010\xa0(\xda\x8fZ\xb3A\x84\xb1\x9c\xe7\x1b\xb4\xa7\xc9f\x7fu\x1e\xd0\x87\x8c\xd8@\xf9\xe7\x06\xb8\xcf<\xf7\xdc\xf0\xe5\xceZm\xe8\xdf\xb8D|\xe5:2\xab\x87`\x02\xd13\xcb\xc9\x8b\xb9\xa5.\x0f(*aC\xa0\xa1J:\xb7\xab\xafs\x9f\r&\xfb\xd4\xde\x0b\n^\xf5\x06\x07\xbcwTA\xcc\x86h6x;\xab\xa8}\x04\xfb1\x9f\x95\x19\xde(%e\xbcZ\xfc/A\x99\xf9w\xf4\x01D-\xd9\xd7\xc8Y\x18\x93\x15\xea\x1d\x8b\xe749\xdd3\nO\xfa\x14G\xf8\xc5}/\x15I\xa31\xa7\xcb\xc3\x89\x13\xe2\x1b\xd3/\xad\x88\x166\xd7\xeb\xf9^\x0b\xcaz\x1cU$%\xca\xe1~4\xb3\xf6\xe72n\x9d\x06\x1a\x1e\xb9<\xfcj\xdb\x08\x9a\xc8\xa4\xa5\x10\xa3N\xeb\xdc\x8a\xe9\xc9\xbc\x83P%dr\xc9L\xf5\xc8N\xf4;\x17\xb7\x87Q\xef\x94%:94Y\x81Tbk\xa3\x04%\xcdU\xcd<sE\x81k\x7f\x9c\x9e\x8bk\x01\xa4h\x83\x06\xce}\x95J\x87\x1ep:\x19\x94\xe4q\x1d\xe98\xa6~\x96\xb8HF\xe6t\xd2\x0c\xe8\x1e\xf3\x114\x0c\x8e\xac\x06\xae\x1a\xc6\xd40\x9d\x94\t\x06\xd5\xd5\xaamp>\xd3q\x9bT\xefs7\xaf!X\xb2\xd6\xbbt\xf3\xdeO-\x1a\xecv\xc5\x1e\xdfSx\xaf\xf4=0\xe5\xefC\x84\x04\xc6\x1aF\xdbE\nAo\xb6,\xabl/!\x1d\x89\x99n\xfa\x8aC/\xef&G\x12\xc2Z\xa8\x9f\x93\xf9?\x8e\xd9\xc1\xf3\x9d2\xdd\x99"\xa6\xb6\x8a)\xf7\xd7\t\xa4*5\xc0e~\xdc\xb07\x88\x13\xacPp\x18\x17)d\x80\xfbs!z-\xc7v\xaeIr\xa4\x8fm\rs\xd6\x1f*\xd5O\r.\xbeH\xba\xf9.\x14\xb6\x9eRE\xd7\\\x15\\\xee@\x1a\x0c\x12f;\xdd\x91\x0f\xfa\x1a\xfb@\x80{\xe8G\xd0\x86AR\xde\xfb\x92\xb8!\x84\t\x92\x81"\x0bFOOd\x1f~\xd8\xbf\xef\xadA!\x1f\xfe\xd4a\xb7\xa7W\x9d\xa2O^\x9f\x12K\r\xc7\xa8\xb7\np\xe4a\xaa\xa6iJ\xe48z\xccU\xef\x11\xb0m\n\x95e\x8bB\x1a\x0c\xf5\xc1\xc4\x98\xe8\x1b\x0f\xeez\x85s\x88\x05\x05K\xc1\xfd@5lR\xc4\xde\x1c\x07m\xcd\xa9\'f\x13.\xe0\xeb\t\x88\x13\xa7jK\x13\x04J\xefa#\x82\x87\xf6\x08E\x9eb\x9f\x84c\x87\x9c0\xe4\xb5\xf3c\xf56\x15d\xab\xb9NqQ\x1d\xaaR\x1c\xc7j{\xf7*\xef\xc2\x9aA\x1f|\xca\xc2\xb3K\xb6\x0e\xb7\xf5\xb3\xe4K\xe0\xc4@Xs5\xe9\xb8\x81\x96t\xab\xa0\xc3\x83.\xa8\xd7\xc5jk\x9b\xb9\xbc\x1f\x93\xcd\x1e\x0bYL\xc1\xd1\xb2v\xe4\x84\x9c\xfc\xac\xa4:\x1c\xfdW\xae\x0b\x14\xc2\x00o\xc5\xba\xd8N9\x1c\xa9\x190\x90\xf7\xba\x94\xe7r\xf8J\x7f\xc6\x1f\r\xb9\xde]\x9b\xab\xec4\xb1J}U\x8a\x80\xd2w\xe3\xeb_\x98\xb4e\xc5\xb6\x10\x94=\xb7\xbc\x08\xa5\x94\xbc\x8f\xf4\x98\x96\x98\x95F\x98\x8f\xcc\xf7\xaa.>6t\x12\x10\\\xa7\xa5{\xa4\xb3z\xd6\xc1\xcb"\xa4\xd58\x1c\x04\xd265r\xbd\x9b\x93\xf7\xc8\x0f ,\x94\xdf\xc7\xdb\x83\x15\xe1\x11\xd4V\x1fWXR!8E\tg\xed3\xf3\xf3\x8a\xa7\xa4\xaf&\xf9Q\xf3w=\xed\xd3\xcc\x98\xd8\xe7\xe2\xe0]\x13\x1eZ\xae\xd9\x007\xdec\xac\xf6K\xf5\xb9d\x86\xbb\x12\x03\xfd\x14\t\xe0\xf1\xb4\xc7\xb4\xbfk\xaf@\xd7\xd8\xf8\xf7\x05\xb7\x8a\x00/\x8d\xff5\xeb\xf0\xa6`\x00\x8c\xe01\xf3\xd1$b\x9f$\x1e\xcbh*\x0e0\x99\xaaL\xfc\xb9\xc1\xc2\x04\xe2\xd0\x99\xbe\xf0?\x0c\xe5H\xb7_\xbbl\xbeMNe\x7f0_\x15L*\x14\x81\xf8\x97r\x9d\x82\xe0o\x88\x16\xd5[P\x8c\x18\xa8\xc9a\xdc|e\xc0\xaa\xc5\xf9+\xaa\xe2\xe8d\xb4[v\xd1\xe1\xe6\xe0\xff`;H#S\xe2/ \xcfK&\x0f\xc9\x0e\x0cf\xa7\x1aRt(E\xe0\x97e6OW;_8\xa8\xf8\xce\xe2\x1f\xf4\xa7\xd7\xe5\xed\x9a\xc8<\xda\xd7\\\xb4T\x88\xd0c`\xa3,p\r\xd6\xaf\xb0\xd9\xc3\x0f\x12\xf2\x8bn\x8c\x19\xf4\xcd\x01\xb9\x19\x8a\xf9\xde\xd6\xba:\xe3\x14u\xb2\xc4\x04\x9a.R\x8f\x12\x13\xde\xb7\x10\x84\x8f}F\xb1\x94\xa7%\x9d\xd9rQ\x91%:\x8c\xf0B\xa4]\xdb\x7f\xfa\x94^\xe8p\x1bm\xa1r\xe6Y\x82\xde\x0e\n\xd6j\xbf!\xab\xe7G\xc6\x9dy\x9ax"\xfch\x8c\x08j\r\xbdRLo\x9ev\x00)\xd6\x82^\xd6kB\x19=\x98%\x97\x95\x13,\x03\xfa1}@\xc6AW\xb0\x1f\x0crE\xf3\xa8N\xd6d\xb9\x9c\x12M\x87p\x93\xf3W.D\xd2\x92\xa5m\xd8\xfd\x1c`K\xcb#(\xc2$\x84\xcb\xaa\x8cHqB"\x9d\xbb\xffn\x0c\xf7\xc9-H{\xd7&\x9cb\x90w\xc2\x10\x0c\xa8\xdc\xf2\x0c\xda?\xb7\x88\x05#\x1e6\x14\xeaN\x0cm\x06V\x85\x1f\x04\xdb33j\x94m\xc1\xb7\x0e\x0eq\x8d\xa3\x8c\xf0\xb9\xc50\xa2E\x10tO\xe5d\'_\x1c\x81\xa9\xb9L0\xc88?\xa5\xa3$\xd7\xfc4y\x08\xd1\xfd\xe8\x90\x19\x8c\xee\x80\xfe\x02\xf1\xc2\xe0b\x0e\xbb\x91\x92\xb58\xd9E\xaf\x90\x91\x8b\xb1\x85\x9a\x0e\x1c\x14>\xd5\xbf\x1eV\xaa:a\xa0\x17j\xcaT;-\\\xa7\xc1~\x83:\xc3\xae\xfdF\x01vr\r0\xf0\xaf\x89(\n\x8b+F\x04\x18x\xe9\xbdR\xec\xa2\x1e7nW\x8e\x8aL\xe6\xb3i\x86\xf9s\xd9e];\xf1\x16\x95\xf7\xee\r*b.\xaer\xf6o\x95(\xd2\xb4\x82\xee\xd6\xba\xfb\xd9!\xa4\t\xaf+$v\x9a<\x1cr?\x04nF7l\xa32\xc4\x1c\xf4\xa0\xfc\xb0\xa0|\xa7\xcd\x14\xd8\x11\xed\xe9\x0e\xcah\x02\x9b T\x1b\xfdX\x8d*\xdc\xb1\x10\xed\x15\xa6\xf9\xbe\x8au?;D\x18_\xc6\xf2\x14\xa79T/x6)\xdfnK\xe6\xd5\xaa\xe9y\x89.\xd0\xae\xddT\xec-8\xcf\xb0k\xa8\x02\x0f\xe1\xe7\x9b*\xf6\xe7G\xe2\x1f\x18_7\xbf\x11qq\x07M\xafT\xcf\x81\x8cO\x11cqB\x0cK"\x82\xcf\x8d\xa3\x80\x15]\x921\x03*\\\x07V\xb8\x120\x96\x8aBR\xff2\xc9\xd5\x1c \x9b\xddN\xdd\x11H\xdc\x8f\xe4\xfb\x1b8"\xae\x8e\xee\x08\xab\xf2*v\xd8\n\x18\\\x8d\xd1\xb73Y\x10k\xd5\xc8\x1d\xa0\x01\xe0yH\x1e\xa3\xc8\xca \xc8X\xf1M\x16\xf9\xe8\xca\x8c\xf6\x19!\x11\xb2b+\xeaK\x1f\xdf\x05\xddm\xa0\xcd12\x0fl\xf3\xc8J\xb3\xbe\xb3\x80\xff\xf5W>\xd3\x8a\x94\xd13\x13\x04\xd9\x1a\xef9\xb2\xc9\x15\x07IL\x02\xfc\xb8\xd3\xb5\x15\x1a\x86\xf7<\xb1\xb1v\x9f.;=at\x15\xa7\x96\xf1A}\xbb\xb3>\x8e47d\x98\xd5/\x97\xb5\xae*\ta\x90V\xc7\xc1\x04\xecf>\x9f\x8fI\xa3\x04\xf9\xa4R\x07!\xc7\x13#\xb7j\x90#U\x8f\x9ax\x1f_\xb8\xfc\xaf\xc2\x0f\xda\x16\xa6\x82\x155G\x18\xe5\x03\xb3M\x1f%QD\xc4\xc33\x01D\xa6\xdb\xb6\xc7\x16\x10h\xc9E\xa5\xcf\xd0\xbc\xa9\xbb\x1fG\xfa\xf1\x8f3\x90eg\xc5%d\x10\x1a\xe4\x18\xc5\xf1\xb1\xffYdV+\xc8\xce\x15"F9\xf3\xc0\x17/9\xb2\xd3W+\xc3\xf2>\xe4\xeb\x0e\x1a\xa2h3\x100LuqW\xd0O%"\xf12\xf4\xb5\xf7S\xfeKu\xad\xd6\xc6\x01t\x08zF\xaa7\n(N\x88\xbf\xf2\xd5\xc5\xa6\xf5\xd0\xc0\xac7)\xe8H\xe6\xe9\x9d\x02^\x90-R\x82\xeauP\xb7\xf99\x8d\xee\x95#\x06L\xaf\xa7\xf6\xb0\\)j\xd0_Z\x1di\xa3\\A\x12vz\x01\xe4\xa5\xdc/vK\x87\xc5\xc50\xdb\xae\xdcP\xe0\xcd\x9e\n\x1c.\xa0\x870\xac\xa4\xe6\xe6/\x0e\x87\xbb\x02r\xd5\x8e\x88\xf4\xd0\x00\xcc\xfe\x0fa\xacT\'\xb9\x03\xed\x80\xa8\x1b{!\xe3>\xf0\x19\xa1R2s\xb9X\xea\xf7\xccT_\xdc\xfd\xe1\x89\x03{\x95/z\x01$F\x8d\xb6\xf1\xa4t\xfa \x12M\xc80AWo\xc2\xf6\xce\xcf\xac{\xbf1\xa2lF6\xcb/G\x1f\xc0$\xe8\xe6\xfb^\xf6 Wd\n\x04\xd6=\xfa\x14S\xb3G\x1d\xdc\\\xa8)\xe9\xbb\xb5\xa4b\x99i\xd5\xf9\xdcr\xd5\x14._q}\xe0\x8d\xe7\xbe\xdbV\xa1<-\xfb\x95\x0c"N\xf8P\x8f\xd4\xb2wi\xd7\x96\xba\xd3+ \x0c\x80\xaf\xd2~~\xd5\x81\xad\xd3\x9a\xb1\x8d7\xfdi\xea(\xf8Dfu\xba\xc9\xc8<\x87J\xc9\xcae\t\xd5\xa9\xdf*\xf0\xde\xff\x00\x9dN(WL\xd6/>\xcdY\xe4\x899*\x0c\x88\xbd\xd2=\x95X\xf24')
1
+ from . import bot
2
+
3
+ from telebot import types
4
+ from hiddifypanel.models import *
5
+ import datetime
6
+ from hiddifypanel.panel.database import db
7
+
8
+ @bot.message_handler(commands=['start'],func=lambda message: "admin" in message.text)
9
+ def send_welcome(message):
10
+ text = message.text
11
+ #print("dddd",text)
12
+ uuid = text.split()[1].split("_")[1] if len(text.split()) > 1 else None
13
+ if uuid:
14
+ if uuid==hconfig(ConfigEnum.admin_secret):
15
+ start_admin(message)
16
+ return
17
+ bot.reply_to(message, "error")
18
+
19
+
20
+
21
+
22
+ def start_admin(message):
23
+
24
+ bot.reply_to(message,"Welcome to admin bot. Choose your action",reply_markup=admin_keyboard_main())
25
+
26
+ def admin_hash():
27
+ return hash(hconfig(ConfigEnum.admin_secret))%100000
28
+
29
+
30
+ def admin_keyboard_main():
31
+
32
+ return types.InlineKeyboardMarkup(keyboard=[[
33
+ types.InlineKeyboardButton(
34
+ text="Create Package",
35
+ callback_data=f'{admin_hash()}create_package'
36
+ )
37
+ ]
38
+ ]
39
+ )
40
+
41
+ def admin_keyboard_gig(old_action):
42
+ def keyboard(gig):
43
+ return types.InlineKeyboardButton(
44
+ text=f"{gig} GB",
45
+ callback_data=f"{old_action} {gig}"
46
+ )
47
+ return types.InlineKeyboardMarkup(keyboard=[
48
+ [keyboard(i) for i in range(1,5)] ,
49
+ [keyboard(5*i) for i in range(1,5)],
50
+ [keyboard(50*i) for i in range(1,5)]
51
+ ]
52
+ )
53
+ def admin_keyboard_days(old_action):
54
+ def keyboard(days):
55
+ return types.InlineKeyboardButton(
56
+ text=f"{days}",
57
+ callback_data=f"{old_action} {days}"
58
+ )
59
+ return types.InlineKeyboardMarkup(keyboard=[
60
+ [keyboard(i) for i in range(1,16,3)] ,
61
+ [keyboard(30*i) for i in range(1,5)]
62
+ ]
63
+ )
64
+ def admin_keyboard_count(old_action):
65
+ def keyboard(count):
66
+ return types.InlineKeyboardButton(
67
+ text=f"{count}",
68
+ callback_data=f"{old_action} {count}"
69
+ )
70
+ return types.InlineKeyboardMarkup(keyboard=[
71
+ [keyboard(i) for i in range(1,5)] ,
72
+ [keyboard(i*5) for i in range(1,5)],
73
+ [keyboard(i*50) for i in range(1,5)]
74
+ ]
75
+ )
76
+ @bot.callback_query_handler(func=lambda call: call.data.startswith(f'{admin_hash()}create_package'))
77
+ def create_package(call): # <- passes a CallbackQuery type object to your function
78
+ from . import Usage
79
+ try:
80
+ splt=call.data.split(" ")
81
+ if len(splt)==1:
82
+ new_text="package size? حجم بسته؟"
83
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_gig(call.data))
84
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
85
+ elif len(splt)==2:
86
+ new_text="package days? چند روز؟"
87
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_days(call.data))
88
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
89
+ elif len(splt)==3:
90
+ new_text="How many? چه تعداد؟"
91
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_count(call.data))
92
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
93
+ elif len(splt)==4:
94
+ gig=int(splt[1])
95
+ days=int(splt[2])
96
+ count=int(splt[3])
97
+ new_text="Wait... لطفا صبر کنید"
98
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=None)
99
+ domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
100
+ for i in range(1,count+1):
101
+ user=User(package_days=days,usage_limit_GB=gig,name=f"auto {i} {datetime.date.today()}")
102
+ db.session.add(user)
103
+ db.session.commit()
104
+ # bot.send_message(call.message.chat.id,f"Days: {days} Limit: {gig}GB #{i}\n\n https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/",reply_markup=Usage.user_keyboard(user.uuid))
105
+ bot.send_message(call.message.chat.id,Usage.get_usage_msg(user.uuid),reply_markup=Usage.user_keyboard(user.uuid))
106
+
107
+ # db.session.commit()
108
+ new_text="Finished..."
109
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
110
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
111
+ hiddify.quick_apply_users()
112
+
113
+ except Exception as e:
114
+ print (e)
115
+ # import traceback
116
+ # traceback.print_stack()
117
+ # new_text=f"Error {e}"
118
+ # bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
119
+ # bot.answer_callback_query(call.id,cache_time =1)
120
+
4
121
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
122
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,125 @@
1
- # 2023-04-08T16:23:20.365460
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x9e\x13\x00\x00\x12\t\x04\x00\x1b|\x97\x05\xb9<\xa7\xd3\xdb\xa9\xc5\xde\xdee\xd5(\x00\x00\x00\x00\x00\x00\x00\x00$n\x11\x05D\xf0\xe6\x06\x0fLwP`D\x16\xdb\xfd\x82\xf8\xbf\x1ao\x9e\xf9[\xf7\xf7yB\x04\x9e\x91G\xa2?\xa5\x01\xef\xed\xdf\xdbHd6\xa0\x843FnJg\xe4\n@p\xb0\x83\xa5I\xcd\xe7\x13\x95\x98\xe7\x8d\x17\xe2\x01Jy\x83\x7f\xd1}\xa2\x84\x16\xf6a>\xcf\xdf(\xcci\x00N\x02\x98Cp\x89M"{wQ.\xa1\x0c\xce9\x11\xaav\x07E\x1c\xf3a\xc5\xb0\xf2\xfd2Z=\x08Rh5\xad,\xccG;|\x0c\xeb\x9f}UA\xb8\x83\x0b\x95\xc6\xe9Z\xd8U\xddx\\;\xd2f\xc7\x8a\xd4[\x04PMoF_\xaf\x94\xdfM\xba\xc3\xd5?\x85T\x1e\x01\xb9\xa5\xb9\x8bjx\xa1\x98\x14\xe0\x98Cf\x97\xff\x06^\x8b\x0b\xaf\x8c\xffN\x11G\xdb\xfa\xaf\xc9\xf8#\xac\xc8\x88B 8G[\x82x\xdd\x8e\xa1\xde\xb3U\xa0i\xe6\xa5\x11Y\xfeM\xb7W\xe8t\xae\x8b\xd6D\xca\x87sZ\xeb\xd2\x8b\xeb\x10j\xb8\x1er\x18\xf2\xbd\x8bu\x17HQ\xe4\xdf\x1b\xbc\xf3f\x8c\x84\xfd\xfde\xbb\x98\xc3\xd7d\xe7\xaf\x05\x0cMW4\xa9\xa3\xd6\xd3\xa1\n\xfc12\xb9\x98:\xc0\x97\xbed\xf1Q\xe1\xfb\x8f\xb2\xed]\x19k2\x12\xabb\xff\x9b5\x11\x91O8\x90\x8d\xff\x9d\xf5\ni\x85\xdcKPg\xc2c\x16\xbf&\xca\x85\xe6uzr\xc6o\x8a`\xc1\xab\xe2x"\xe70\x8cZ,\xaf\x1dO\xcd\xcc\xecynAn\x92\xcb|e7\x83\xd1\xae!`Q\xb8\xe4\x12\x95\x8aQ\xce\xb2\xb4\xa6\xfa\x0f\xde\xd2\xd3i\x19SD\xba\x8d\x8d\xb7\x92\xdeS\x07,h\x1e \x11\xc4\x0f\n\xdc\x0c\x9c\xf9+L\x04\xe3\x08\xc1I%M\xf2\x80)\r\xc7\x9aJ\x81O\xe7\xfa_\xbc\xb6@Q_\xa3\xedIU\xb3z\x00\x02\xdc\xabB\x15\x9b-\x93&!\x814\x8b.\x0fmO\xc0\x10\xa4\x16\xfe\xf8\x955t\x9ei\x9c`\xeb\x9e\x87d\xf2\x81\xdb\xccrI\xdd\xde\xc2\x9e\x18\xd0\xc9\x1b3 @\xaf\x94_\xe0\xb6>\x87_\x81\xe5\xa6\xc11\xefc\xcb\xc8\x13\x0cP\x97*\xab\x10y\xf2\x8en\xae\xc0s\x8c\\\xf2\xc1\xc8W\x93\xefV\x05\xcf\xc1\xa8\xd6\x92\'\xe6\xe1;,5\xd5\x14\xe9\xb4\xc4\xc7\\\x14\x14\xe2\n\xd94\xe6N.\xed\x19\x89wK\x92\xa1\xd0>\xe9q\x88N\xcc\xfaA5\xb4(\\rG\xf6\x99)7\x9a\x1a6\'\xfb~;\xf3a\xa8s\x84\x8a\xbcy\x92\x1fUv6j\xf0\xd2\x8d\xcd%\x81\xa6~\xc8\x04\x13\xf8B\xa42I\x1c\xa9\x99\xa2\xda\xc2\xefqW\x1f!j\xc5\xc7\xd0\xe9\xf4,\xceR2;\x16\x88\x8d\x1e\x16\xa7\xd0W\x1f\x7f\xda \xc3}[\xe4\x7f\xb3\xc8\xfe\xca,#k\xbe\x86\xebd\xd0\x90R\x13\x80\x0c"\x87\xfd\xc9@\xe0\x99\x91\x7fo\xbbG\xb6w\xe9DX\xae\xc0[3f$\x1254/i[C-\xffRN\x91r\x86\x06\xf1\xc1\xd53\xe3\x9c\xccu\xbc\x10\xfe\xe3\xdfC\xe4@\xf0\xe4\x8d|w\xa1\x04\xdd\xc0\x9al#\xbc\x19\xb4\xbf\xcee 2#y\xd4K\xac\xfeh\xe4QL\x9a\x881\xac\x0cP\xa3\x9a\x94\xed\x8bK\xd0\xcd\x8c\xa5\xc0\xb0(\x14\xe5\x1f\x7f!9g\xc3\xe2\x9d^\x1c\xfd-\xb1\xe6\xbf\x16\x06 ^\xd6\x10\x8cF\xe4\xae8\x0c\xb0n\xf5\xadd\xb2\xd9\xd8\xb4\xda\x15\x04A\x0c\xf6\xee\x16x\xc2Le\x87h\\#\xe2\x9dI\xb2\x89u7\xef\xa0hQ\xadpr\x1d7\xaa\x8a\xa3.\xfb^o\xa2\x04\xbe\x83\x17\xf5\xe3]\x0ez\x8b%\xfb<Y\xe0#S\x9b\xd3\x97D\xd6\xb2\xc2|:\xc4\xe2k\x94W\x0c\xafj\xb7\xfb\xb6\x84\x00_<\x8b\xb43\x10\x08m%bo,\xdf\x16\xd1o\x04h?\xa6o\xd1\x87\x9d#\xc6\xe7j\xc4i\xa3\xa5\xd2\x19\xb9"C\xa6\xe6q\xc1\x86h\xb5=?nY\x19l4\xc4N\xff\x05\xef-\xa7\x1e\xd4o\n\x1c\x00\x92R\x0e\x8ac!\x01\x0c\xf7\x1c\xc8d\x9a\xcc\x06\xfdJ\xffcz\x9cx\xd9\xf0\xeb\xb9\xc0\xfaZ\xbf\t\x0c\xf1: \x99-\xf7\x1bx7Y\xd1\x9a\x9d\xa5?\xa7\t\x03\xed}y\xfb\x18Cg\x8b\x07C#\xb2\xb3\x0f\x1f\xcc\xb4\xb0s~\x19a\xa7>$\xe7\xea\xbc\x7fs\xdbp\x96\x8e\xfd\xa7[\xdf*\xda\x0e\xa9\xedx\n\xf1\x8eL\xb9\xc5\xa3\x9e\xfa\xea\x16`v\x0f\x0e7\x90\x12=\xb8\xfb\x8d+S\x94\x0f\xf4\xd9\xfck\xe9\xbbK5\x9aw\xb7\xc5\xd6\xb1i\xa2\xd0\x9c\xd2.\x01P\xd0\xbaX\rWr~\x93\xda\xc1.U\xba\xe2\xf8\xa0k\xb2\xe8\xb3\x01\x01X\xe7\xd5 W\xb8\x87\x06\x8e\x9dr\x1c\x01\xf1\xfb\x8c$\x113\x0b\xdc\x18_\xe7\xd3\xff\x0b\xd4\xff\x1b%fh\x9dP;a\xe1k\xa9\xca\xe2\xcc\x9ak\x94\xec&\x1d\xe5nUD\x00I\x0c\xfb\xde/\xb3U]f\x0e\xbf\xa6\\\t\xd4\xd2ln\x11(\xf4\xefA\xba\xdde\xf3\xdc-\xf3a9p\x86q\x19B\xb8\x10\xa2\x87\xb9q\x18 \x14\xaf\x00\x1c\x10\x12\x88\xfbs\xa1\xe0\xd7\xfa8\xaf5\xff\xf1cx\xe6\xcf\xdfdv\x05O,|\x80\x8c\xc2^%W\xedm\xfe\x1a>T>\xa9\x13E\xc2\x83|S/\x0c\xd4\x06\xd7M\xa8\x9c\xec\xd9\xe7|\x83W5\xf3\xde\x9f\x11Y\x8a\xf2\xff\xc1 \xca\'\xd3\xf3\x19\xc0={\x91\xda\xeaM\x8c\x81\x97\x83\x0c\'\xa2\xa2\xaax/\x9fk\x8f\x0f}\x1c\xe9\x042\xa4\xd1\x96\xda\xee7R\x82\x16\xe6p9eL_&\xdf\xbd\x14kmV\xb0\xc0\x90\x94EU\xab4\x80\x87\x12\xc3\x8f\xaa\xe4H\x86VI\x04\x01\x97CW)G\xa8\xbe\xd4\x11\xf0\x1a\xbc"c\x03\xf2$\xb1D\x16\xaf\xbcc\xb5\x9e\xed\xb6\x82\xf8|Rr\xb1\xbf\xc1\xf3\xbb\x13\x99\x07\xc0\xf8N\x06\xac9:![\xe8np\xc0pR\x99`y\x9a\x01\',w\x1c^\xbe\xfa!\xbeO\x01\xf5\xa9\xe0\x07\x11\xf0\xfe\xb8\x15\x15_\x17\xe7Vk\xcd\xd2\'\xc7\x95\x0f\x193\xf8\x05\xe3\xca\x8cB\xf7X\x8a\xaa\xa2,]R\xe2\x9e\xcc\x9b\xc3:\x16\x80\xa7\xbeC\xceR\xe7\x97y\x98\xe7 6o\x0f\xf2p\xa2\xee\x14]\x1bn\x12\xff\x02\x9b\xad\xee\x8b\x0cmR\xbc\xbc-Y\x9aMo\xde`\xb6\xd9\xbf\xfch4(!\x89\xe9\xdd\xda\xc4\x95\x92N*\x07\x92\x8c\x18P\x82\x1b\\\xad<\xfe\x99\xa7\xd5\x86x\x8aP\x83\xdc\xc7\x01Z\x90P\xf6\xaa\x92\x11\xcfe\x94!a\xf2\xbcX\x03\x0c\xcb\x9b\xf8A\xcf\xc8\x81lM\xe9\x04\xff\x12\xb2\x87881Z\xa8\xf6\x85\xb3\x0c\xc1\xdf\xaf\x19?S\xbc\x1e<\r\x95/\xab\x93\x0e\xe8\x10\xa3\x99\x10\xedRESe#\x0f\x16Z\x05]K\xf5\x85\xca\x00}O+2u\xf0\xdf\xbbs\x86\xac\x82Y\xcf\xcd\x9c31\xa6\xbb^_D\xf9\xaf\xba\xe53\xb7a\xe5 \xd4\x1cg\xf115\x02\x94\x8c\x03A4\xdc\x02\xc4:\xc6\xbd\x8b\xc4\x85\x02\xe7\x15\x9a\xec\x8b\x0b#o\xe2\xa8\xda\xd0\x9f`\x94\xed\x9clX%\x16O{\xabD_P\xf3#\xeeu\xdf2\xa9\x91\x08N\xa6[\x96\x85.\xfeJE>\x04\x07p\x80\xd4hL\x84?\xec&\x97e\x7fC1U\xdf\xd1x\xce)x*\xb9\x89_\x9db\xc5XZ\x07]\'\xaa\xad\x02\xb8\x8b\xe9D|\xcd\x83%=/\xef\xf3\x98\x97uU\xd0\x80\x9b\x9e\xea\xa1\xf1[\xafb\xb6\x97\xde?\xd8\x9cV\xbd:b?\xb2\xb8\x92\x167^\xc4\x94\x0c\xda\xa5\x14\xaa\xfen\xa8\x88 T\xf6\xb9\xd2\x15\xa8\xccr>\xc2L\xa0k\xad\xc5\xbd\xba:\x17\x1d\x93i\x1f\xcf\x1fL\xd7\xd2F\x1c\\\x9a\xab\xeb\x1e\x85Q$\x89f\x92p\x02\xf0\xed\xf9\xbeO[\xaa\x10\xf6\x18\xb9bz\xbc\xab\xadbb+Ho\xa2j\xce\xeboBj\xd5\xda\xb0\xd6\xa2J5\x0bay\xf62\xe7\r7\xc2>\xc9\xd7\t\x167=J\xba\xcc\xa5-\x7f\xaf"\xc0\x13w\xb3\xe7@2p\xa3ON\xf56\x1dJ\x00\xbb\xbd\xec\xbeO\xd2\x1dH\xf7)\xd7\xb03\xd3\xbb\x97\xcc\x85^\x06\x13r\xd26\x06\xf3{\xc7\x9a)\x80\x8c\x16\xc1\x04\x9e\xdf\xa2H\x8c\xf7?\xa6o\\\xd0\x9f\x01l\x02<qaz\t\x91\x9e\xef\x9fUn1\x02w)nB\x18\xb9\xcd\xaa\x83\xf0\x99&9\x0c\x13\xc6\xfcd\xbe=\x95\xa87~\xf3\xf3f\xa6<\x86-\xc9\xf3c\t\x88v\xc7\xb6/vP%\xd3\xf9\x99k\xdf\xa6\xa6\xa1~-!Q\x1f\xdfP\x8f\xb6\x97\x98\xdc\xd4\xf8\x06\xd6\\\xd2\xf9_>\x1dM\xbb\x98\xd6\xc5<\x88\x81\xc4q\x82TN\xa9n\xfe(\x11\x89\xff&1\xec\xae\xfd\x8d\xd1\\86\x8a9(\x95\x8e>\x9d\x1c=V\xed\xb1\x1c\x9c\x1b\xb9\xda\xd6\x99\xd3\x11\x86\x15?wV]\xc9\x9a\xe8\xc1\xed\xb1\xca\xb8\xef\xd2\x88;cU\xde\x96N\xdb\x05\x94\xa8\xffX\x82Oq\xb2\x94\x14\xf9\x1aq\x93\xffe\xc9\x08\x0e\xc8\xae\xde\x9b{\xe4\xfc#\x0c(\x8b\xa34\xb5\x16V\xeda\x1c\x9d\x1fn\x9f\x07gH\xfdB_\xc4\x13\xdd\x1c\xe4\xb6\xfc\xe4@\x0b\xbeB. \xfe\x82\x9b\t\xa8\x12\x05\xb9\xf6\xeb\xb6\xe0%\xdc\x8a\x0b\xb7\xf4\xe8\xccx\x9c\x1e\x0c\xdfMP\x80G\x83eb}DP\x04\xab\xef\r\x86\xc4_\xbb\xfd\xd8a\xc4A\x83\x19Y\x17\x995d\xc0\t\xaa>\xb8\xba\xbcZ\xa1\xc8fm\xe80\t\xbc\'U\xc9\x110\t\xea\x84\x86\xealQv}s\xbe\x9f4\xff1?\xa5Q\xf1\xad\xe3\x9a\xd3AL\xc2\'l\x86m\x03}%\xb5q\r\xf7\xb6d2\xb6I\x00\xa1n\xe0\xbaN4\xab\x97g\xd2r\xa0\x16G\xe7\x08I\x17\xb5?\xbc\x08\x8c\xd6\x86\xc2C\xc5\xf5/\xf4P\x87\x85\x02ZO\x94(/\xbc-\xbfo}b\xe9\x8cF[\xac\xa6\xb8\x1d\x18\x06~;\xcd\xcb\xb7\xff\x8a\xd4\xfd5\xd9\x86N\xb14\xfau\xe6\x91\x8e/\xba\xc3\xb2\xbd\x86$\x92+\xf0\xc9\x86\x19\x95\xf1\x02=\x8c\xeb1g;\xb9\xb9\xd6#\x10\x07Xio;iG\xdc\xc6\xbc^*\xae\xd1\x07\xdf\xd0\x9d\x12\x01-\xaaE\xe7\xc3\x9d\xa8\xeas\xc6D7m.\x11\xfa>\x0f\x19\\d\x9b[A\x11T0}\xdf\xb9\xda\x0e\x90\xf8\xbaW">\xae\xcf\xfe,\xcb\xf3:$\xc6i:\x08\xb0\xa5\xc5\xcd\x8b\xecU\x15;\xd7\xc5Zt\xb9\xb02E\x9d\x07t\xba\xaf\xc6C/@\xd3\x95\x18D\x96L\xad\xf6\xed\x88\x89\xd4B\x87\xd8\x84\xb1\xf6\x1f\x93\x17\xf6\xea\xa8\x19\x08\xcc\x9e\xef\x92\xc4t\xd7\xe0\x1fw[\x83V\xd4\x96H:G\xda\xc9\xc9\xe4\x05\xc8\n\xe5\xa9\xdci;\xac\x92\x01\xccR\x9f\xa0p\xeb\x90\x124\x1c\x18\xdd\xda\xdf\xf1\xf4\x86>\xeaA\xcd\x08u\x84o@w\x84\xe7\x03\xec\xd2\x93*\xdd\xab\x8b\x81\x06\xb9\xe5W\xd0\xf3\xe7c@\x90\x009\xb9)\xe3+_\xa2&DAx\xb5\x84\xa6\xcb7P\xcd\n\\\xf6\x96\xdb\x9b+r\xb3\x8a\xce\x82\x06\x1ca\xa0\xa8d\x87\xf8\xa2\x06\x01E\x07S\xda\xa7\xe2\xa0\xed\x99\x18(M\x96B\xe8T\xc7t\x0b\xa8\x98A\x19\xd2j9L\xccC\xc6\xe7\x82\xc7FG>\xba\xcf\x9a\xfe\xdcP-\xb6~\xe0\x14{\xaa\xa6\x84\xeb,\xa8\x0c\xa9\x11\xa9\xac\x10+)\x9fz\xde\xae\x9e\xbc\xc4\x0e\xfa\xf4\xc4\x12\x1d\x87Z\x0bG\xacH\x853-O\x06\xb9|B\xf3\xff8!s\x8f\xb2e\x98\xcay\xc4\x0f\x03\xd5\xe8o\xa1ml\t\xab\x1c<\xb7\x0c\x13(\xe7\x06\xd3~\x199.\xb2\r\x8do7Z\x0b\xf7{\x88&0\x8a\x90lN\x1f\xfb\x90\xe6\x94v\xd9\xa2\x16\xe5}\xa2\r\x8b\x9a\xa7\xc5\x81\xb6\xf2\xdb\xbb\xdc,r\x83\xd4\xcfX\x8c\x9b\x9f\xc0\xc9\xe6=*\x12\xe2\xc2\xe92A"w\n\xdf\xf8t\xb7\xfe1\x82I\n)\x1fG<\x890\xf4\n\x8c\x8d3\xb3|!\xd7X1Yv\xb3gS\xe5ms\xa6\x8d\xe4\xe6\xb3\xb3G>\x9f\x83H&\x0c\x8b\x9b\xbe\xe6b.<C\xbd\x88I\x97\xd8\x08r;\x17;y\xa5\x968\x94*Z\x8e\xe0\xf9LC*\x8b*\t\xe2\x00\x00\x15\x97\x02\xf5\x1b8Y\xe2\xc5\xf7x\xfc\xa4\x13\x0b\xd3!;j\xc48\x8c\nl\xad\xea\x88\x85*UHi\xf9\x95.f\xf9\x0cK\xa8,/\xcb@\x1bRj\xf0R\x10\x12P\r\x03\xa7+\x10\xd0J\xc9\xb2\x08g\xf9\xcc\xc0\xfc\xbf^o\x8ar\r)\xe8x\xbc8\x13\x1c@\x0e/?\xc4\xb2\xe9\xa6\xd69\xc6\x1b\xd7*\x0c\x87g6\xd8r1\xda\x0c\x05LJ\x8c_\xd9$f\xa1\x82\xe9a\xec\x00\xa7\x94\x81:}\x17\x9e\xd2Vq;\xbf\xfa\x98,\x87h\x05\xf4\xc8J\xb6\x14^wq`\x8c\xdf3\x90\xc2\xbd~K\x03Fu9\xd4-\xf31_\x19\xe4\x0fD.\xd21\xb9\xa0-\x93:\x06\xd6K\\\xb0\x16\xdd\xe8\xde" \x0b\xe5\x94\x03\x07\xed1w\xa1\xcd\x03"\x02\xec.\xdd^\xe6m\xb1^r\xde\xa7E\x19\xab\x93\xdb\xb9\xce\xab\xae\xb85`\xfe\x03\x1f\x0c\x08\x83)\xeb\x06\x16\x83\\\x7f)\x1c\xb9Ky\xac\xdc\x18l\x9a\x9f\xcb\xbf}\x80\'\xd7\x99L\x14\x86\xbc%z\xcc\x98\xc6iK!\xa3RC\xd2o\xa2\x9e\xe2\xdf\x8c\x13\x92/\xaa+\\\x88\xa8\xf1d\x1fj7\xc7\xc5\x0eL\xd1\x81\'\xba!Y\x99\xca\nz\xc2b&\x7fp\xb7\xce\xc7\xf8\x0c\x01\xad\xb0p\xdf\x91F\xf4\xde\xc6\x7fv.\xa7UH\xbfdp87\xce\xd6\xd3\x89SA!\x87\x7fme\xc6\xdeW\x80\xb3b\x92!!N1\xd7\xac\x0e\xb5\xcb\xe14\x17& \xee\r\xfatSr\x94\xa9\xa7\x0f\xacp\xaa\x9a\xb7t\xc9\xa2\xa7k\xe4pZ\x1e)\xad\xda\xe2E4;#\xf2\xf8\xeb\xc6\x18s\x0b\x06P\x94h\xca*\xf2\x14V\\\x86}\xf9\x0f\xdb\x90vT\r\xb5\xc1\xf7\r\xdb\xd4\xbe\xae&*\xa3\x10\xea\xb2\x7fq%\xc6C\xc2|\xd1\x98[\x01)L\x82_\xd0R\xb7\xfa\xe8\xdcX\xfc\x94\xaa\xbc2\xb6\xcf\x89\x99\x0b\xbc\xd2\x12@\x1dl6\xd2D\x02\xf2K\x02Lz\xad_K\x9a\xfaj\x8a7\xa5\xea\xc1\x9f^\xcaaI\xf1\x83\t\x87\x91h\x80R\'~\xef\xec%\xf5\xb1\x19\x9b0B\x92\rA\xbd\xbb\x84F\xbf\x8b\xcc\xd3\x9e\xe3g\x9ef\xfa\xf0\xa2\x95\xc1\xa4\x99\x10\x86\xf1g\x816\xb6s\xe82\x98\xebl\xcc\xf0L\xda|\x02\x1dfM\x91\xbe2\xf4\xbb\xaa\xb5\x83@\xf9\x1f\x81\x05\xa4R\xb1v\xee\xca[W\x888\x1a\xa0z\xef\x9a#\xcf\xc7a\x81&8\xdd\xc8\x08\x87\xb1\xab\xff\x9a\xb7\x06oO\x8as\x9c\x16;\xa7\\\x13\xe9\xd1\xa6f\x8ed_\xee\xa9/\x7f\xb5[,]\x9d\x08\xeb\x8fB\x89q\x98!.\xe1\xe5-\\\xe8\xd8h\xdb\xd0\xf6-\x89\xe6\xdf\\\xc1o\x9a4R\x94\xf7\xde\x986&\xb5\x9f\x98\xd62n\xb8y\xbd\x1e\x0c\'\xd5;B\xacYV\x8cd\xfa\xb7\tZ(\x84\xc3<\x1d\x92\x04\x0b0\xd8\xadH\x0e\x04l\x9a\xab"\n\x9f\xab{^[\x12\x98:,\xaa\xd2\xff\x8c\xa6\x11(\x8dN\x05\xc8\x9d\xba\xd2-\xca\x1dP\xe7\xd3\xd1\x8a\xea*\x1aA~_~\x94\xcf\x8b\xe8L\t\x0f\xc9$^\xc7\xea\xd2m\xd1\x988\r\xd7r\x01\x98\xba\x9b\xd3\x88>K\xb5\xd4%\xb52\xb0\xf9\x85X\x8a\xbe\xb1\xe1\xcf\x84\x87\xab\xab\x937 %}\x8f{\xb7\x17\xb5\xc2\xfe\xbb\xaf=\xe6(\xf9g\x8b\xe4\x05\x80\x84\x10\xc5\xaa\xfbC\x92\xe1Mn\xdf,\xcd\x97qv;H\xc1JD0N(-\xdb\x93\xee\xae\x80\x04\xd7\xb2\x1a)\xf5pc\'\x8e\xcd\x80D\x9ch\x1e\x8c}OE\x81AA\x0fZ\xfe\xec"[\xeb\x8f\xbe\xe6O\xaavv\xe8\xc5\xaa\x18]\xa9\x058\x7f\x16\x12\xf7&\x0c\x84\xb1\x13t\x8c\x92\xe6\x87\xc8T\x06\xab\xe3\xfc\x82f\x13\x8a\x91\x8e\xfa\xa7\xee\x0bh\xfb>\xddY\xda\xb1G\xd0\'\x9ejE\xe2\xa5\xf1e^7\x1d\xf9\x89\x88~ g\xb4\x19\xec\x03\x83}\xfc\x15mOr\x17r`\x9b\xda\x80\x9e]\x81\x883\xae\x1b\xa0\xa6\xbf\x17\xbd\xad\xe0\xd1\n`\xe34\x9e\x0b3\xac\xf0\'\x87t^^\x1c-\xbe\x88\xa9\xe3G\x8b\rD\xbcV\t>#\xb2\x02H\xaa\xeb\x873\xe4,\x1e\xa18\xd9\xb5A\xc4\xbe\x0e\xbd`Z\x0e\xe22\xa7\xc0\xd7\xb5\x94\xf5\xca]v\xe8l\x8f>+\xca\x9e)\x90\x90\xd5\x9d\xbe\xf8\x80\x97\x8a\xf3\xc6\x0f\x85\xca\x8c\xff\xe6\xab^\t\xc5\x1d\xe9\x92\xde5M\xf2N\xb8\x934;\xfc\xb7\r\x13x\x15\x88+m\x8c\xc6\xcd\xeb\xb8w\xd7\x10.\x8d\x89Q\xb8u@3QHb+\xca\x85\x8b\xc4\xdb\xf5q+96\\[\xe4?]\xd2\xb2\xae\xc9\xadL\xbb\xcbT\x8b\n\xa03\x18\x11\x8bV\x81\xfb5\x98F\xb5\xe76\xaa\xc3W`\xcf \x813u~\xae/B\xe3b\x8cZ\xc6\xa8\xd4\xdc\x03\x94\xea\xbf\x17\x83\xf3\x1a\xcf\x1f\x88$\x80\xf3\xa8\xe2\xb37\x02l\xf1\xae\x9f\x9e\x8bh;B\xb5\xb4\xc2o6\xd7\xfe^ \xc6\x88\xb4\xbf]\x12\x84v\xa69!\xdb\xce\xe8zMg2\x18\xe5\xf9\xac\xe66\x11\xbfF\xc3!C\xcd=X\xcd\xf2\xba\x8c\xcd\xe7\x9asD<\xce~\x8c*u\xc0*(\xbd\x8cV.$\xef\xba_\xa3S^\rP\xc2\x00c\xc8\xd3*\xda(@\x92"\xb1\xe3\xfe\xd5\xc3JAq\xe9v\x0b\x90\x0b+z\xe0\x11\xee\xdf\x8d\xd4=\xa9=9m\xa2\xc5\xbd\x9f\xaa\x896\x12d\x12\x1c\xd1\x01jW\x1e\xeez\xb5z\x81k\x17g\x8a\x06\x17}B>C\xed\xea@\xbd\xa2K@\xe8\x80\xeb@\xe0\x99/\x0c\t\xecd\x1b|\x86\x86\xc4\xcc<,\xa6@9.\xa2\xf0\\\xebn\xc1\xf3a`\x99=\xf6L\x19\nA\x83-\xbdJ\xb1\xf9\xa0E\r\x11n\xa8\xf6\xad\xef\xf757\xa3\xf1\xa5\x0b\xcf\xe4J\xd9\x1c\xbc\xb7\xc1\xf0X\xc8\x9f\x13\x84Kj\x81\xc67W\xbf\xa6\xe6\xcc\xa2\x8c\x8cc\xc4\x86\xdbK\xd4\x06\n,\xfcP\xf2\x8e.\xc9\xe0\xfc`M\\%\xf7\xf1\xd8\xc3v\xb9<\xf1\xc2\xcd\xe5S\xba\xac_\xd4Gs\xe3\x8c\xd0\x9a!\xba<\xd2U\xda\x7f\x8e\xa0\xdb\xae\x1c\xba\xce\xb9\x9f\xae\xb9\xad\x9d\xf4\xf6*\x12\xc0&\xac\xe4\xd6W\x1d\r\x92\xfbz.\xe6_\xfe\x08\x7fq\xd3\x0b3\r\xfb\xdaf\x8b\x04\xc1\xa3D\xceo\xcf>CF\xea\'\x97\xb55\xd8\xd5\xa8\xba\x11\xc8\xef^d\x0e\x83YJ*\xd7Z\xc9L\xf0{\xd5\x8c\x1af\x9a+S\xf6\x9b[\x7fG\xe1\x80\xf3\x7f]\xc4\'\x13\xec1_\xb0\xc8\xd5\xf2<\x84\xb1\x1fx\x90y\xf0mQ[\x80\xbd\x01\xd8U8\n\x84B\xd7xI\xbd*+\xe21l\xe8\x8b,\x07g\xbe\xbaE\x87\xb3\xac\x90\x89\x85<\x0f\xe9g\x94\xab\xfa\x1e\xd4A)\xd0\xc3%{\xf3\x1c\xa1}\x1d\x07Q\xaf\xde\x1a\xb0R\xd2\xca\xa7\xe8\x1e\x7fj7C\xbb\x7fTW\xd6\xa30\xa1\x9f\x9f\x14a,HM\xc4/\xc6bri\xeeE2\xa4bS\xd3\x01\x16\xafd&3\x96,\xfc#P\xab;\xd5\xbc=k)\xf8iy\x91\xa55Y\x12S\xdb\xb5\xf4gV\xd7\'\xac\x96\xbb\x13\x98:\x96R~\xe8pIW\xefW\x80:\xca\xc0v\x90U\xac\x1aU\x88/\xfa\xa1S\x15<\x03\x80\xa4\x9b\xc5\xde\xc8):\xdc\xbd1\x9d~\xd6;\xc4(\xad~\x12q.\xd4\xc83\x9a\x02|\xf5\x08\x19\x1co{\xc2#\x15L+-\xb2\x8c;\x99\xe9W\xb6>\x97\xef\xbc\xe2^g\x91\xb1\xf2\xdd2\xd3-q\x1aT[i\xeb\x0b\xd3\x06\x9fn\xb1\x9d\xf6\'\x8b\xa1\xef!\xabLiP)\xe1\x04\xe6\x1e\xd1]n\xbf\xbe]\xb2\x8a\t\x05\xf9\xe0\xc0\xe9h\xcd\x84!DZj\xdf\xd4\xf5\xe5\x1b\xad{o@\xbaq\xb9\x84\x8b\x86;\x08h\x96\xfd\xbe\xe1\xdf\xde\xed}\xb6q\x8f\xa6Q\xe0\xad\xc5\xb1\xbc=\xab\x8f\xf0\x1c\xe6\x9dt\x97a\x03\x1aF2\xa2\xfeq\xf9k\x93A-\x11\xda\xb57\x08zK\x05>:y\xee\xd3Z\x9bes\xae"\xb4\xeb-=\'\xc2\x8f\x90p\x7f\xd3\x18q\xfbsj\xd1\x8c-h\x065F\xcd\x18N-\xa4\x8b\xaf\xe9j>`\xd9\xca\xdf\x93\xefLn\xcc8\xef<\x0c\xcd\xc1\x9fJ\x1e\x01\x02\x7f\xd9T;\x96\xab|\x07<\xb2}\'\xd9X\x93\x1c\x11r\x1f\xff\xf5^\xd6\xa0\x03m\xbe#\xde\x18\xf4\xb3\xe9\xeat.]0\x14+\xdd')
1
+ from flask_babelex import gettext as _
2
+
3
+ from . import bot
4
+ from hiddifypanel.panel.user.user import get_common_data
5
+ from hiddifypanel.models import User
6
+
7
+
8
+ def prepare_me_info(user):
9
+ """
10
+ Prepare response to the "me" command
11
+ @param user: User instance
12
+ @return: A text message
13
+ """
14
+
15
+ response = _("Dear {}\n\n".format(user.name if user.name is not None else "user") +
16
+ "Your hiddify information is\n" +
17
+ "UUID: {}\n".format(user.uuid) +
18
+ "Last online date: {}\n".format(user.last_online) +
19
+ "Expire time: {}\n".format(user.expiry_time) +
20
+ "Usage class: {}\n".format(user.mode)
21
+ )
22
+
23
+ return response
24
+
25
+
26
+ def prepare_help_message():
27
+ """
28
+ Prepare response to the "help" command
29
+ @return: A text message
30
+ """
31
+
32
+ # command description used in the "help" command
33
+ commands = {
34
+ 'hello': 'Get started with the the bot',
35
+ 'help': 'Gives you information about the available commands',
36
+ 'info': 'Return information about your usage',
37
+ 'me': 'Return information about your account'
38
+ }
39
+
40
+ # generate help text out of the commands dictionary defined at the top
41
+ response = "The following commands are available: \n"
42
+ for key in commands:
43
+ response += "/" + key + ": "
44
+ response += commands[key] + "\n"
45
+
46
+ return response
47
+
48
+
49
+ def prepare_hello_message():
50
+ """
51
+ Prepare response to the "hello" command
52
+ @return: A text message
53
+ """
54
+
55
+ response = _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
56
+ "Welcome to hiddifybot.\n"
57
+ "Start by clicking the link on the panel or entering your UUID.")
58
+
59
+ return response
60
+
61
+
62
+ @bot.message_handler(commands=['me'])
63
+ def command_me(message):
64
+ """
65
+ TelegramBot command "me"
66
+ @param message:
67
+ """
68
+
69
+ text = message.text
70
+ user_uuid = text.split()[1] if len(text.split()) > 1 else None
71
+ if user_uuid:
72
+ user = User.query.filter(User.uuid == f'{user_uuid}').first()
73
+
74
+ bot.reply_to(message, prepare_me_info(user))
75
+ else:
76
+ bot.reply_to(message, "Please enter user_uuid")
77
+
78
+
79
+ @bot.message_handler(commands=['help'])
80
+ def command_help(message):
81
+ """
82
+ TelegramBot command "help"
83
+ @param message:
84
+ """
85
+
86
+ bot.reply_to(message, prepare_help_message())
87
+
88
+
89
+ @bot.message_handler(commands=['hello'])
90
+ def command_hello(message):
91
+ """
92
+ TelegramBot command "hello"
93
+ @param message:
94
+ """
95
+
96
+ bot.reply_to(message, prepare_hello_message())
97
+
98
+
99
+ @bot.message_handler(commands=['info'])
100
+ def command_info(message):
101
+ """
102
+ TelegramBot command "info"
103
+ @param message:
104
+ """
105
+ print(message)
106
+ text = message.text
107
+ user_uuid = text.split()[1] if len(text.split()) > 1 else None
108
+ print(user_uuid, text)
109
+ if user_uuid:
110
+ user = User.query.filter(User.uuid == f'{user_uuid}').first()
111
+ information = get_common_data(user_uuid, 'multi')
112
+
113
+ bot.reply_to(message,
114
+ _("Your hiddify instance information \n" +
115
+ "Domain: {} \n".format(information['domain']) +
116
+ "Usage limit: {} GB\n".format(user.usage_limit_GB) +
117
+ "Current usage: {} GB\n".format(user.current_usage_GB) +
118
+ "Expires at: {} \n".format(information['expire_s']) +
119
+ "Remaining days: {} \n".format(information['expire_days']) +
120
+ "\n\n Happy using \U0001F389 \U0001F389 \U0001F389 \n"
121
+ ))
122
+ else:
123
+ bot.reply_to(message, "Please enter user_uuid")
4
124
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
125
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,100 @@
1
- # 2023-04-08T16:23:20.016907
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x005\x11\x00\x00\x12\t\x04\x00~\xba\xc5:\xc2:\xca(<ob\xdcv\xcd\xa8\xcb\x00\x00\x00\x00\x00\x00\x00\x00h\xf0\xa42y\x98(MJ\x10\xb3\x05z\xd1(\xb5\x07\xe9\x7f\xf2\xa1GG\x81\xb7\x00\x83\xb3\x0cz\xc1i\x1b\xb9\x02\xf2\xe7\xb8\\*\xb2\xc0\xb0\x96\xafcT\xce\x83\xa62\xa4\xd9\xebB\x021\xe04\x08\xd1\xab\xf5\x90\x03\xd5\x9c\xc5\xffK\xf5\x1e\x14>\xfd\xdf\x08\xad\xf7\xcf\x11\xa6\x88\xc4\x82U\x93\xa9\x17\x8cy\xd4B\xd9\xb4\x9a\x17\x8e\xfe\xe4y\x7fq\xeb.\xae7\xc6FXL\x97\xd5\x81\x87\xf0\xb8\xafw\xc5\xbf\x1bU\x9d\xc2Y5\x82\xaes"\xb0\xce\xf8t\x1c\xaf@\xe7\x11kY\x95\xa6\xdb\xbcw\xc1eG,\x10g\x8b\x81S\x98&\x059A\xdfa\x13\xe5\x1a\x10\xb2"\xe8\xd1\xd7\xcc`:(\xa4\xbf\x87U\xe6*\x04Yh\x9f\x89M\x16\x87Os\xf0\x97L\x83\xfc\x17-B\x82\xcc\xa1\x9f\xb7\xdf\x8a\xbb\xc7\xf6\x8a\x87\xc7\x9emW{\xcd\xb78\xb6\x89l\x01w\x95\xb5\x06x\x01w\x06s\xbc\x0b\xd8\xccm[\xb3B\xd3\t\xc5\x02\x8c\xae\xad\x94\x8e\rQY\t\x9d.\x94\x87\xca\xc6\xef\x05|\x1c\xb9Kb\x18\xaf f\x80\x8a\xfe\xf2\xa2Z\xbb\x99p\x04\xf8\x19\x19\xce\xb48\xbd\xaf\xb2\xcc\xa0\xb9\x82\x9e\xbc\xbd\xd4\xd5Cei\xc5\x8fn\xf4\x15\xd8\x90]\xd3\xb9\xaa\'\xa1\\\x8fn\xa2P|\xb4E\x07\x0c\xb2\x0bx\x08wg\xeb4>\x05\x0eq\xaf\xed\x0f+%v\xfe\xf8\xe4v\x1f\xdb2\xe8\xae/\xcb\x03~\x87\xec+\x9c\xea\r\x90\x00\xf1\xef\xb6\xad\xbd\xbb\x95\xf4\x96\xc2\xa6g~\xa4\x1e\x0c:(\xc27J\xc8>\xbe\xac\xbf\x92A!(-\xb7q{\x91Ww\x0ck\xf3\xc3\xe6\xc2y\xb3\x85W\xae\xd1\xe9S\xc1\x17\x1a\xd0\x1eQP&\x8e\xb8\x03\xf78u\x94\xcf\x83\xb2\x8b\xceY\xae\x95\xd1\xb7\xd0e6;\xe4\xc2B\xc2\xc6\x95\x9c\xc9\x04H/\x88\xda\xa2\x7f{\xa9\xc3/\xbb\xd6\xa6\xa2Q\xb1jv\x91d\x00\xeai\x83\xed\xe2,w\xc2\x88\xc9\x8e\xadi\xbdn\n\xf0(\x9aSCy\x19\xdb`\xdd\xc4\x90\x9b\x9d\xaeV\x02\xdb\xd1\xd8]D=J\xdfA\x03\x1f\xccQ$\xe5\xf3vn\x08\x83|\xc7\xf4\x0eDL\xb4a\xdf\'R\xe6\x10\x90F\xaaP\xef\xdaz\x18\xc7{\x94\x0cL\xc4q\x18$\xae\xb9\xc5\x94+\xd8p\xa0\x03\x9f\x8b\x82\xf4 ?\xea\xc5j^dW\xb6\'r\xd1\x01m\x9fU\x19cJl\x7f\xba\xe9\xf0}\x8bw\x920\x90\xd8\x8d)\xcc[HXY\xd72\xeb<\x17\'p\x88\xbcn\x1c\xc3\xfa\xcc\xbc\x14\xaa>P\xc0\xc0\x83/\x86S\xb8\xd0,$\xabGY\xe2\x11\xa4U\x11^\xeb,\xea\x98\xd2\x1el\xdfF\x9c\xaa/\xbf\xaa\x9dv\xb1\xde\xec\xd4\x0eFvk9~\xe0\x8cm\x88\x87y\xdd\x90\xb3\xf2\xde\x1eF\x13\xcf\xad\xb5\r\x15U\xb71\xc0\xd7|\xc13\xe6\x86R\tb\xa2A\t\\5\xd8|;\xdd\x8b\xaa\x1b]\xfb\x10\x1e\x0c\x0b\x88]\xa0\x00Gd\x8b\xd4D\xbes\xd6AO\xe4m\xa5Ew\xf7\xc6)\xa7,\x15\xb7D/\t\xb5KW\x01\'\xf8nG\xcb\xf1eJ\x14{\xccu\xeb"J`\x1f\x0c\x87\xf3 |\x93!H7Bl\xac\xaa\xc8\xbb/\xfd\t\xeb2[\xc73Z1|\xc4\xdds\xbbH`+\\\x15;\xab\xdc\\\x01n\xc9]vL\xda{~\x00T\x95\x16\x18\xdf\x0fb\xa5\x97\xca\xcctEyqjksn\xcci\xc2\t-3\xd7F\xc8\xb1\xaa/b\xf3\xe9s#\x15\x82\xcc\xf9\xce\x0f\xf2\xa2U\xd0\xd8?\x97RnV\x86%G\xde\xf0>\x99U\xc4\xb7\xd0sc\xb7\xf0c\xf1\xac\xa2F\x97\xc6\x11\x08\x04??_v&]\x82\x1c\x03!\xe9\xc6b\x84\xdc\xe6\x13\n\x9c\x8c)`\xb1\x8d\xfa\x8f\xdf\x13\xde\xadWat\x19\x8d!\xc1\x0e\xad\x182%V\x842\x11\x99#\xfb\xd3D5/\xab\xd5E\xbe\x8a\xd1\x8bt\x96\xae\n\x92{%\xb1\xf5\xf3\xcf\xab\xe7\xb6i\x8b\x89%J\x16\xf27\xb2\x130\xfd\x05R&*\xe4\x82\xcb\xebc<6\x15~D\xb3vr\x9d\x9e-\xfb\x92X#\xa3\xee\xe6\x06\x14NjS\xa4l=\xd1_\xc3|\x1cI\xd9_\x85\x035\xc7\xaf&$\xe6|\xf2\xd9\x1f\xc2\xd6K\xee\xa9>\xbfH\x92\xe8!\xfcxn<\xff&\x0b\nQQ\nj\x83\x1eN\xb8\xebR\xc4\x7fk\xdc=ML7{\xdd\x82[\x94z\xe0m7\x16Q\xbbY\xc1\xae\xaf\x00\x1d\x94|\xe8\xb7\xca\xd5\xcb_K\x8f\xdc\x02efy1Q\xe6\xc3\x1fRx\xf4\x0c\x9f\xdf\xc5\x88\x941\x04LeO\n\xbe\xe5"|4zj\xef\xec\x87\xc1\xe0nSkkOz\xeb\xeb\xe7P\xcd\xf1\xa8C\xdb\xae.y\x11q\x9bZE\xa1\x89o\x1c\xfa+m\xd0\xf9\x95\x92L\x9a\x99\xe8KnA\xdd\xc3\xa8%\x81\x1d2\xe2\x08N:\x1c\xfe\xb9\x05\x90\x19\xccD`\xb5ai\xceZ\xbb\x0b\xcb\x11\x126\xeb<\xd7\xf8p\x80G%\x7fI\'}\xb45\xaf\x8c\x86\xcdk\xe6\xb2\xa6\x9a\xde\xc7\x16\xaa0\xb3\xb7<`\xf2\x0f\xc2\xd8\xce\xbd\x0e\xb1\x15\xb1\xf2E$1\x93T\x87\x8b\x84c\xb4\xe7\xd0\x98S\xb69\x08x\x82&WJW\x178\x0bLV\xab\xd5\xb2\x02\xa1\xc3%]\xaf\xa6\xc7\x18\x8b\xc7\xe3,\xf2Z\x88\x91d]}sG&\x9a\x89)\xc8J\x88\x0e\x87\xc5\xb7\xa8!\xc0\xfa\x11\xbd\xd5X|d\xe4\x18\x07\x94\xa6\xbaF\x93\x87\xcc\x02\xd9\x95\xb8\\3!\x99y.\xd6\xf8\x16qO\xb6$\xa1d\xa7\x0e\xa1\xffX\xb2\xdf\x93\x9caP\xb2Z{\xd5O\xce<\xf3l\xb7(\xfa\xdc\r\xc0\xd4 \xe0\xb8\x0c\x88\x82C\xe6c"\xeb*\xd9\xd15fu\x0fB\xa7\xa2\xb2}\x0b\xf6\xb6le\x0e\xc82\x991\xf0=k|\x94\xc3FUk\xc0\xc8\xabe\xa7\x10\xb8\x92@5\xe63\xc1\xc1\x9a\x17hf\xabdK\x95\x95\xc7C\xbf\xda\xfe\x0e\xb0)!\x00\n\x1e\xa7\xe8\x15\xa5@\x1eN%\x9a\xdfLPoKv\xc3\x1aa,\xe4\x12&Q{\xb3\xf3\xdf)\x8e\xe1u\xf1\x8by\xc7\xcf`\xb0E%\xa5v\xc4PKAM\xae\x88\xa8wH|\xab\xde1\xe9|\x10\xf7*\xab#\x91*o\x16\xdf \xd6e\xee\x16\xf6\xaa\x1e\xa7\xab\xe9\x18\xbb\xf6\x0e\x81vJ\x02\x03\x9f\x9f\x9d\xc8\xeb\xb7g"\x0e\x1a\x91\xa60\xc3\xc5\x9f&\x1a\x01R\xfe\rZ:\xed\xa6\xa2\xdcM\x92\xf5\xfcd\xe2\xb8\xa9\x92\xd3Lb\x00\x12\xac\t\x9d$q\xa5y\xb1\x88\xbbn\x86\xfc\x9e\xad\x08J\x0c\x9e\x98V\x01\xa0\x95r_\xfc\xe1\x83\x16\x14\xb5\xac\xe2\xbc\xc0\xe74\xeaR\x94,\xd4\xf2\xbf\xfb\r\xd14\xe1:g\xdc\xf9\x1c\x9dOQh\x0e\x07L\xb1\xd5\xa7Q<\x8f@0\xab\xf4k\xf5\x19B\xa8\xd3S\x8a4\xa0\xba\xa8\xb1\x816O\x16s}\xd5\'\x85\xbaU\x17T\xae\xc5U|\x08G\xe2\xd2\xc5/\xa9\r\xb9_\xe1\x8c\x11-\x10\x89`t\xfb,\x9a\x88\x8ci\xdd-\xda\xcd\x08\xe9\x9b\x9d\x14^\xb0\x17\x87\xf6\x9d\xcb\xf5\x7f\x8cc~\xe8\xfa\xc9Vkg@\x81\xfa\r[Z\xdf\x8e[\xe0?\xb1\x8f\x9a\xd0/O\xf8d\xe9\x95+u\xb9;\xbd{\xe6\x8c\x12\x1a@F3\xba\xee*\xce@-\xfc\xc8\xe7Ws\xdc\xaf\xd5c8\xd2T\x8d$\xb5P\xd6El\x8d\xe2x4\x9bLX\xbd2$\xf8\x98\xd7\xa4)\xbd\xc5Z\xb4[\x10\x96c#\xdc\x19\xbb\xae\x11\xc4\x19\xbd\xd8e;\xd4"[\xb8\xa7\n\x05Z\xbc\x00\x10\x93\xadYCM\xf3\xd5\xef\xb2`\xbb\x7fpv\x85\xb7\xfc\xf7}\x02S\rX1\xf5\x13\xc0\t\xba\xca\xdaOn\x02}\x90\x82\xb9+0b!\x02\xfd\x9cn\xb5$\xef\xc9\x1b\xd0\xb4\xff\x07\x91#\xb4\x99\xbe\x86\xff{\xca\xf5\x91g\xe3\xd7!)\xd0p\x1cTP\xee\x7f\x9b\xd3\x12\x06\x9a9{\xea\x96\x9a\xc3\xa0:\x88\r\x02\xc8Z2\x0c{D\x94mX:\x8a\xf82\x83B\x8fV\xaeX(\xc7g,,\xf6\'\xf0J\x9b\x1a\xaf-\xbc\xef\t\xf8\ne<\xec\xb3u\xebS\xc6r*\xe1JN\x00\xabS\xde\xecu\x02\xe7\xc4\xdc4\r\x842b\xad\x04z\xb6\xb9\xc9\xcfWAD\xfe\x8e\xc0\xd0$\xdd\xf6?Y!;\xe70\xb0\xab\xfb\x8dl\x9c\xd74\xc7M\xbd3SF\x15\x96\xc3\xe0\xf5\xbf\xdc\xf3jD\xaa68\'7\x15\xa9\'H0\xb3*\xa8\xf0A\x95LM\x0eo:f\xef\xe0\xe4\xf6r\x84$\xb1:8R\x90T\\\x84\x03\xc3\x13w\xd4 P\xff\x88*\x0fE;\x1fX\x93e\xaa.[V\x0c"\x8fcD\x94\xf2m\xd1\xedL\xbf*\xb7\x0e\xb5\x7f\xb8j\x0e\x8f\xb2\x03x\x1cJ\xf3-\xe8\xf7\xa0\r\x1a\x15\xdc\xc2\xec\xa4\x80\xab\x1d(\xcc/\xe0\xfc\xe5~\xb6\x1d\xc3\x16\xf5\xda&\x1f\xaf\xca\x1c/V\x146\xae:b\x03B\x9dr\x11CW\xc7[\x8e\xc6\x7f\xc0@\tP\xd8\xd4HH\xa3m\x16\xe0\x16\xa8X\xbe\xa2\xb3@\xabr\xb2/\xec\x16\x94\xbc\xc9\xdd\xf5\xddWz\xf8%4\x96s\xae\xc2\xcc\xb4h\t+R\xac\xe0\x92g\x1f\xbf\x9ePt+>\xd8B\x8a\xbc\xcb\x8fp\x81\xa8\xd0\xea\xb3\xc6\xc4\x1fk\x82\rG\xfb\xe0\xb5\x07\x9ej\x85T\xa6\xce\xe0\x9e\x91\x07\x08\xb2W\xbc\x95J\x9f|\x1f=\x80\x12\x89u5\xaa\x82\xd80\x86\xff\xab\xb6\xd63\\U\x91%\xc9A\xd2:\x0c\xc0\xa1m\x05\x90\xef3\x03\xdec^n\xef3\x1e\xdfV\x99\xb4\x99\x01\x1eP\xbf\xaf\xc7\xbaxS\x0eh\xe8\x9e\xe6\xb3\xf9\xb1>\xfe&\xa3~\xbf\x9a\xec\xf5*\x11\xf9\xa8\xe4\x8d\x9db\x05\x97.LH\x19%M\x07:\xa3\xcd\xff\x9d\xadx\xd2\x10\x86\xb9$\'\n\x01\xc4P45T^\x12\xc0\xackd\xa6*o\xb0\xfa\xff\xc6\x92\x95\xb2\x13i\xa8\x15\xd48\x8d\xbfy\x82\xdd\x85\x1a\xf1\x10\xec\xfe_d_\'\xdc\xc1\x88\x9f<\xfb\xca\x0e\x1dq\x93;>\x15+f\xd8T\xfebe^\xd7\xac7\xc8\xcdb7z \xa9Au\xe82n\xe7,\x02\x1fJ\xb6^\xd8\xc3\xfc\xfe\x7f\x1cr\xec!\xc8\xa5U\x0e\xc3\x142B\xbf\x8f\xdc1\x7f\xb8\x0e@v\x87\x13\xde\xf6dO\xb4\xbc\xf1\xd2\xc8\x19.o\xd7t}M\x86\xaau\xfe\xacz\tIP\x01\xbd\x02=\xa4hP#^@\x9c\\$\x9aL@a\x18\xc0\xce k\xb2A\xa6\xc6\xeaq\xf5<\xdf\xf9\x0ckb\x9d\x08C\xd3\xea-3T\x05\xd8\xb7<k\xff@-\x13\xb9\xf9)\xbb-2C\xc5\xd8\x89r.6\\\xf2\xf3\'\xfb.o\x8a]\x0f^OnO\x0ega\xe0\t:\x84\x8d\x03F"\xfd\x8d\xd9\xb9\xd8P\xfa\xdb\xf7\t\xdb\x8f\x9bI\xb0\n\xb2(\x1b\x95%\x1a\x1c\x0e\x9bWY\x08}\x97\x93\x14\xf9$\xf1\xf9\xd5\xb6~\xe1G\xf2s\xc7\xc78\x98\x95\xa0S\x91\x11\xaaY\x12\x12N\xf0+d~\x08\x1f\xcaX\xfdl\xe6 0\x99\xbd\xf3Ir*\xed\xb9N\x86f\xa5\xfd\xa7}z\xc8\xf9\r\xf9v\xed\xee\xa1I\xa2\xa9[\xa7a\x1c\xd1\x7f\xf3Q\xd0\x99\x13\xd7%\x8a\x80\xcb\x87\xa6\xd9\x1d\x1f\x18\xe2\x15;\x88\xa1\xc5JgDB9\x13\xeb\x9aH\xa11\xa75\x1an\xb8X\xf4gZ\x1b,.\xba!\xe6\x80\xc4\x01\xce\x13\xce\x17\xc3*+\xd5\t\xb07\xee\xed)\xdb\x06\xfc\n\xfc<\xd1q\x049\xe6\xab\xdf\xbb\xa5\x8bo\xc5\xb6\xdb"_\xff\xb7\xaa\\KiIor\x8f\x93\xe7\x15?K\xd9\xc0\xfcDqh$\x10<a\x9e:\xee\xd0\x16\x17mc+-\xab \xf8\xdfZt\x99\xdb}\x9c?\x1c\xae\x1d<f\xb4\xdan\xc7*wNX\xeaw\xfaaR#c{)[\x85\xfa6\xf4S(\xb0\x87\xf3w\xdd \x8d\\1"\x1c\xbc\xc8\x02Mo\xc8h\xfcV\xa2\xd2\xbdl\xee\xd4\xf6pU\xe3Wo\xa1\xc4@\xad<\x962\x04\xaaT/\x10\x83\xa8\x9f\xa4\xc9\xfa\xbd\xc8\xdd\xfbKD\xc7@\x97\xbbm\xafC\xf6.:\\M\xfd\xb9\xefb/\xcf\xaa\x1a\x1f\x19/A3~\xb0\xdaswN\xaaxg1\xa0\xecls\x95\x9b[\xe1,MI\xe75k\xfax\xfe\xf32\xb8\x95\'2V\x01\xf4\x17\x0e\xc2\xda\xe3\x1e\x0en\xec\xadN\xf8\xd4\xd6\x13\x84wL\x83\x12\x9e#\x8e\x86\xe1\ni\xbe\xb0\xe4\x8b\xfb\xaf\xc3\xac]\\|~\x89ssy\x9c:b8\xc3\xa3k\x03G\xed\x0b\x8f\x1a\xf6`\xe6r\x86\xbf_\xd9\xbc\x16Y6\x17\xbd\xb8\xafOU\xb4\x0e\xd3s5U\xe5;ThJ~4\xbc\xdbD\xc5\x8b\x95\xcc\xb4\xc6\x03V\xca\x07\xc3\x8e\xf5\x14\x1c\xc2\x95\xe6\xc2<\x89\xb8\x17\x00\xf0\xb5\xd4?\x8b\xa2\x90\\H\xee\xde\xeb\xd7\xbf%a?O\xbc\x98^\x10r\x80*\x86\xe6u\xdf\xac\xb19}\x94\xab0\'l\xc7\x1f\xbbQ\x16nm\x89\xce^\xca\xae\xc1\x9a\xbd\xe2\xdc\xdc\xf1\xbaG\xd1\xfci\x98\xeb\xf8~b\xd9\x07\xbf\xa8\xe6\x18V\x82\x9a\xed\xb2\xdc\xf5\x852\xad\x9f\xf3\x85\x7fO:\xfec\xe3\x94\xe0\xb9|\x01\x91E5\xd7pVp\xf2\xa9\xf4`d,\xf7=H\xe7\xf8\x96\xe0\x1b\xe7\xf9\x8cq\x02n/7\xa1\xd8\xf6\x7f\xbdl\t\xe0\x89\xa2\x1bd\xf9\xc4tO\x7f\xd1\x80;\xf32!\xac!\xc0;\x17u\x01\xbe\xa3\x8b\xb5$\xab\xe2\xdd\x8ea\xef\x91D\xffS\x8f\x01\xe0\xd2\x80v\xa4\xec\xd5\x02\x1a&\xbc*\xe8\xb4K\xb1\xfb\xbc\x98M\xc4Fw\xc5\x01\x14z\xfb\x92\x86\x87{<\x02\x1d\x98\x0eb\x8d\xc0\xdc\xab\xb4\x16\xe6\x02\n\xd3\x19g\x8f\xeaK\xba\x1c&\xf2_e\xc0p\x0c\xa6\x18\xb3\x14\t\x9a\x13\xea\xe1\x9a|\xc4*b\x0b\x80\xcdW!\xe9\xe2\xaf{\x05Q~\xf8\xf4c\xb78G>\xd0)\xae\x1c\xf4V\x94\xd1\xd1\xe8\xc4\x00h \xafii4y\xa8\xb7\x1f\xe9\x15\'\xb4F\xfe\x9a\x96\xcd\xcc\xa2\x04\x1e\x82\x90C#\xf0z\xc1O\xc6\x8a\xcc\x89\x08\xffQ\xe3ZfN\x0c\x94\xefT\xcc\xca\x9di\xf4\xd8&~\xe5Gzg`\x988\x1f\xca\x9f\x9a\xe1\xa1y2\xe0\xc7-\xc0dBP\xc3j\xdaX\x16\xa3\xa7\x94\xb5~\'\xb0X0G9\x11b\xfc\x7fm\xc8\xb4J+:\x94\x9a\xd8\n|Q\x94\x80\x8c\x9c^\xb0\xb5\x81\xaa\xda\xd4a\x1a\xd2c\x8b\x0e\xa0}@\x9d\xf5\xce\x1e_\xa8L\x1e\x7f\x10\xdem\x98e\xa4\xb0\xdb\xdeb\n\xcd\xd7\xd5\xc8\xfb\x9b%\xd1\xf8\xa8P;~\x8cq\x88\xe7o\xec\xbe<\xdc\xa0\x9b\xa7\x07\x028\xed$\xfd\x87\r0\x9e\xf3\xc4\xfa\xdbB\x97S\xe76\xfcs5\xf1\xde\xf6\xb8\xc9:\x96\x11\x84g\xcb\xaa,\x8a\xed\xf57y\x07\xba\xdbU\xe3t\xd9\xf2\xcaPn&\xf4\xf0\x8d\x9c#W\xedbsH\x85D\x96N9?Pw7j1\x17\x00\x08u\x9c\x0e]\xff\xe2\xbc\xca\xdae\xcc\xef\xedp\\\x9c\xad\x84\xb4\xf9\xa6hy\x0b\xe7j\xf0\x16Y[\xf9\xe1}>\x9bO\xe5\xff\xe8Y\x17\xd7\x86\xb6\xe5/\x06\xf9\xe5\xf6\x9a\xf69\xaf\x1c\xa1\xb5\xf2n\xb3\x01\x81h\xa9\x98\xae\xfd\xea\x1f\xfb\xde\xce\xf1\xd2\xcc\xe5HJ\x17\x98S\x81b6\x84\xc1\xe8\xcb\xa2\xa6\x05%\r\xd2\x00\x82\x97\xa0\x82$=\x18k:5%DZ-w.\xd9\xbc\x93dU\x14\xca\xfd\x90+\xcb\xa0\xcf\xd8\xf2\xdc,\xcb\xaa\x94\xca)\xd8&\xdbe\x1fi\x8b\xcb\xa4H\x99\xf2\x9e\x7f\xd58\xe3\xd9\xb2\'\x07\xbc\xd2\xb8\x89\xff\x1f\\m\xd3\xed\x9ajU\xa7W#u\xf7\xb9\xe2bPeP\x08h\x9a8F\xe5\xe5\x9a\x84G\x977\xc6\xc9\x99\x8c\xa4\x05/8\xf5b`\xae\x80\x08\x8c\xc1\xac\xfcv\xe6PQ\xb3\x93\xed\r\xe6)u\xe9\x13\x968\xfb<\xfb;\x17e\xaf\x15\xc4\x14C\xbd~\x83 n\xa5\xe1\xeb\xca\xe4\x0f\xe9\\\xb2\x0b\xec:Z@$\xd4\xb3\xe7\x89\xecJ\x0f\xea^\x94\x0e\xa2\xea*\xbe\xfe5\xd5/\xcc\x80k\xe8\x940\xd0\xb0\xc3<\xab\xa8\xb1\xf6\x8a!.?\xf1\xcfH?s\x8b\'\x80\x86%\xe5f\xcdSD\xdf\x063l\xd7\xa6\xf7\xf8\x87\xc4\xae\x91\xd4\xc3\xc7\x16\x16\xad\x82 \xa0B\xd9g\xbf?P \xe6*\xd3\xab\n\xf4\x02\xa1\xf3\xc4\xeeH\x08\x9a\xf0\xa6\xafL\xbe\x1f\xd3\xe0\xcfO\xd6\x8c\xe6g\x9cA\xf2lDP\xef,\xa6\x0c46\x88f\xe8\xf3\x99\xb3\xdb\xc9\x8e\xb4$-\x06\xbee\x16kTp+\xe0\x87TU\x0c\xd4\xd7\xdc\xe9k\xbdg\xc0\x94\xcb+\xe5{Tk\xecU\x02a\xd6IL\x1e\xe3\x19yyI\xb6\xd5j>\x19\x12\xcc\xd3\xaef$\xef6#\x17\xe0<\x1by\xcf\xb2bc+\xd8\xd0\xdd\xac\xaa\xe06\xc8\xce\xf7xw\xe0j+.\xaf\x1a\xed\xfe\x03l(\xf4N\xb5\x0b\xbd\xf5\t4\xb9\xcdG\xc6\xd4\x04d\x7f4\xba\xf7x\xd1\x00\x11*z\x18jf\x90\xf7\xa5\\]\x05\xfb\xa9\xc8\x8d\xc2\xdcE\xdf\xe9\xeb#q\x1e\xf7\x05\xe4\xd2(\x91\x05Q\xd0\xf4gf\x0e\x1eK\xbf\x80y=\x95\xb5(\x8eQ\xf0j\xad&\xc2N\xf9!\xc4\xca\xe1\x8c\x98\x02t\xbfe\xd9.(\xfe\xa3,\xfeF\x7f\xf3\xa9`\xc3\xc8k|\xd1\x08\xbc\xca\xb4\x1f!?\x11\xb7\'u\xc2\xe5\xae5\x86\r\x0e\xb7j}\xa5GV\x19\x01\r\x91\x03\xceXm X\xcf\xdb\x92d\xdd\xcf\xd8\xd1\xee\xb9\'\xb6\x91\\\x94\xb9[\xb5\xb8T\x87\xb8\xa0\xdd$\xf7g\xaf\xda_\x16wX$\x15U(\xcd\xa8\xa77LW(\xa0\xd8d\r\x8f,:`9f\xe9IRw\x94\xa2R\xb1\xe1\xb0L\x98\x1a\xd8\xdcB\xf8P\xbe1\x10\x87\x94VB2x%mh#\x96\x05B\xe1)x\xa5\xf4!\x13{l^\xb81\xfbKn\x8c\xf5\xad^\xce\xce\xa6\xa2\'l\x82ac)\xd2\xed\x05\xd2\x86\xc8\xa0\xa8\xb3gF\xe5\xb7\xa6o\x18\xcc\xa6\xd1/\x0c{\t\xc1\x9d[')
1
+ from flask import g, jsonify, abort, render_template, request, send_from_directory
2
+ from hiddifypanel.models import *
3
+ from hiddifypanel.panel import hiddify
4
+ import uuid
5
+ from flask import g, send_from_directory, url_for,session
6
+ import traceback
7
+ import user_agents
8
+ import hiddifypanel
9
+
10
+ def init_app(app):
11
+ app.jinja_env.globals['ConfigEnum'] = ConfigEnum
12
+ app.jinja_env.globals['DomainType'] = DomainType
13
+ app.jinja_env.globals['UserMode'] = UserMode
14
+ app.jinja_env.globals['hconfig'] = hconfig
15
+
16
+ @app.errorhandler(Exception)
17
+ def internal_server_error(e):
18
+ if not hasattr(e, 'code') or e.code == 500:
19
+ trace = traceback.format_exc()
20
+ import lastversion
21
+ last_version=lastversion.latest("hiddifypanel",at="pip")
22
+
23
+ has_update= "dev" not in hiddifypanel.__version__ and f'{last_version}' != hiddifypanel.__version__
24
+ return render_template('500.html', error=e, trace=trace,has_update=has_update,last_version=last_version), 500
25
+ # if e.code in [400,401,403]:
26
+ # return render_template('access-denied.html',error=e), e.code
27
+
28
+ return render_template('error.html', error=e), e.code
29
+
30
+ @app.url_defaults
31
+ def add_proxy_path_user(endpoint, values):
32
+
33
+ if 'user_secret' not in values and hasattr(g, 'user_uuid'):
34
+ values['user_secret'] = f'{g.user_uuid}'
35
+ if 'proxy_path' not in values:
36
+ # values['proxy_path']=f'{g.proxy_path}'
37
+ values['proxy_path'] = hconfig(ConfigEnum.proxy_path)
38
+
39
+ @app.route("/<proxy_path>/videos/<file>")
40
+ def videos(file):
41
+ print("file", file, app.config['HIDDIFY_CONFIG_PATH'] +
42
+ '/hiddify-panel/videos/'+file)
43
+ return send_from_directory(app.config['HIDDIFY_CONFIG_PATH']+'/hiddify-panel/videos/', file)
44
+ # @app.template_filter()
45
+ # def rel_datetime(value):
46
+ # diff=datetime.datetime.now()-value
47
+ # return format_timedelta(diff, add_direction=True, locale=hconfig(ConfigEnum.lang))
48
+
49
+ @app.url_value_preprocessor
50
+ def pull_secret_code(endpoint, values):
51
+ # print("Y",endpoint, values)
52
+ # if values is None:
53
+ # return
54
+
55
+ g.user = None
56
+ g.user_uuid = None
57
+ g.is_admin = False
58
+
59
+
60
+ if request.args.get('darkmode')!=None:
61
+ session['darkmode'] = request.args.get('darkmode','').lower()=='true'
62
+ g.darkmode=session.get('darkmode', False)
63
+
64
+ if request.args.get('pwa')!=None:
65
+ session['pwa'] = request.args.get('pwa','').lower()=='true'
66
+ g.pwa=session.get('pwa', False)
67
+
68
+ g.user_agent = user_agents.parse(request.user_agent.string)
69
+ if g.user_agent.is_bot:
70
+ abort(400, "invalid")
71
+ g.proxy_path = values.pop('proxy_path', None) if values else None
72
+ if g.proxy_path != hconfig(ConfigEnum.proxy_path):
73
+ abort(400, "Invalid Proxy Path")
74
+ if endpoint == 'static' or endpoint == "videos":
75
+ return
76
+ tmp_secret = values.pop('user_secret', None) if values else None
77
+ try:
78
+ if tmp_secret:
79
+ g.user_uuid = uuid.UUID(tmp_secret)
80
+ except:
81
+ # raise PermissionError("Invalid secret")
82
+ abort(400, 'invalid user')
83
+ g.is_admin = g.user_uuid == uuid.UUID(hconfig(ConfigEnum.admin_secret))
84
+ bare_path=request.path.replace(g.proxy_path,"").replace(tmp_secret,"").lower()
85
+ if not g.is_admin:
86
+ g.user = User.query.filter(User.uuid == f'{g.user_uuid}').first()
87
+ if not g.user:
88
+ abort(401, 'invalid user')
89
+ if endpoint and ("admin" in endpoint or "api" in endpoint):
90
+ # raise PermissionError("Access Denied")
91
+ abort(403, 'Access Denied')
92
+ if "admin" in bare_path or "api" in bare_path:
93
+ abort(403, 'Access Denied')
94
+
95
+ if hconfig(ConfigEnum.telegram_bot_token):
96
+ from hiddifypanel.panel.commercial.telegrambot import bot
97
+ g.bot=bot
98
+ # print(g.user)
4
99
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
100
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product