hiddifypanel 3.0.0.dev64__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev66__cp39-cp39-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,226 @@
1
- # 2023-04-08T16:23:20.708027
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00^*\x00\x00\x12\t\x04\x00\xa4\xbc\xc1\x9foLM5I\xfc-\xb7\x1f\xdd\xecB\x00\x00\x00\x00\x00\x00\x00\x00Q\xad9\xd1\xd8\xb1\x18\x03\xa2\xcb9(\x06\xd2\xd2\x93\xbf\xdbn/M\x8c\xab\xe4\xacf\x84\xce\x18\n\xde\xd6\xfe2\xce\xc1"\x82\xe6\x97\xbd\x8eP\xfa\x19|\x9d\xb7@\x95\x94\xc4n\xea\xbd\xf5\xec\xa2\x89\x9a\xf1\x1a\x8aI\x84c\x13}\xec\xbfJ\xc7%T\x11\xd8WFF\xed\xcd\x10n\x18\xef\x8a3\xfdA\n\x8a9\xc6\xcb\x1fY\x13\xc1U\x03\x15\xb5g\x82\x16\xa0FR\\\xe1\xfc\x1e\xa5\xea\x07\x9b\xdb\x9c\x95\xb9m\xc5\x07\xb2\xc5z\xf3Q\xa5~\x0c`e\x11\xde|\x98!\xf5wV\xee!q\xe4,\xd2\x0f\xe6\xb0\x88\xf4\xf9\x89\xe4;\xe6\xc9h\x9f\xcd\x1d\xc3L\x9e\xda1R\xc8\xf1\xeb\x9a\xf9\xf7\x1b[\xd8\x91_\xe0\xc7\xec\t\xb9\r\xb4e`\x92\xc1\t4\xf2\xbf\x98\xf4\xbe\xd9\x96e\x7fI\x82\xf4\xe2\xa8{\xe9V\xeb\xda\x88@\xfen\xa7>?9K\xe1\xacy\xb9-\xf7l~c\xe9\x06\x85\xc5[K\xa3\xa4\x81\xbc*%\xc5a\xaf\xa3\x84\x18\xc0\\=\xcf\ni|\xd0\xb1{\xcdZ\x06\xf4\x05\xb5:?#\xc6\x16\xb9\x8b=\xd7(H\x1c\x94\x92\xb1\xb6\x97\x19W\xd1\x85NfB\xa4{\x01\x0e\x92\xfdOs\xca\x04\xaf\xc4\x98\xfa\x98\x8bl\xc5\xf2\xcf\xac\xd7\xc6\xa6\xdb\x8d\xfdE\xbdt\x8fj\n\xa1\x101\xb6\x85&\x84\x17\x11\x04w\x97DVG!M\xdeX\xc3\x0e\xf3\x1c\xf4\xbf"q0?\xca_\xa9\x05\xe7\x96\x7f\xcc\xa64[\xa6\xcc`M\xf7\xda\x10\nd\x8c\xd3+\xc9C\xb2|i\xdf+\x04\xc8x\xa5\xd4\xa0`/w\x81}\xa2\xca\xe9\xf0^\x15\xcdw@\x9dW\xc2\xaa\x8eO%\x9e\xb7p\xd3L8\xb5\x96\xea\x8a;"\xc8\xc7]Vo.\xc5}\xddphn\x0f\xfc?\x18\x1a\x1fm\xce\xf3\xf5\x8a\x08\x0f\xd9\xc70\xd7\xff\xe2\xb2\x13\x1ec0;\xd0\x95\xfeY\xd9P\xfd\xd9c&\xe3z\x07-\x8d\x1b\x868\x9a\xa4\t!8\xd4\xef\xf2\x0bI\x80\x1fUP\x15\x99\x92\xb5#\x13U%J\xe8\xec+\xf0X"\x15\xee~\xd4\xf59\xa5\xd2\xbdc\xd2\xbd\x01\xf2}j\x90\xaeH\x11U\xb3E\x1a\x7f}\x80\xd9\x82\xdc/\xf2\x10A$\x86\x10(P0zF\xe7Q\xdeS\xfe\xf2\xe77X\xe6*\xcfM\xbaoE\x8f\xbcAXZ\xf7\xeev\x99\xfe\x99\x9f\xac\x97\xba\xa6j\x0f\x8eWS.5k\xee\x80p\xbd\x10d\x93\x00\xb2\xe7\x14\x04\x7f\'\x9c\x0b\xfe\xd1\\\x0c\xea\xde\xe2\xd5\xe7uE\\U\x07\x9b\x19V-\x9e.8\x0eHD\xb02\x14D0\x14\xcbe\x08\xe7\x80{Vd\xec\x17f \xd9\x06\x17E\xe7\xb1\xbfa\xf8!D\xfb*XL\xf3\t\xe8!h\xcc+\x97O\x98\xae\x9c\xe86\x9a\xe1\xdb\x00C\xbbi`,\x80\x8b\xc4I?\xd8;\x94\xabi\x86^\xaa\x04\xc3u\x99\xa3[\xda\x8e\xcbO[I\xf5\xb2\x96\xcetm\xa0\xec\xfa\x1a\x8d\xf8\xb5\x02\x00\\\xa2\xbc\x1d#\x9b\x02\xf4\xc9\x9f=C\x98\xef)+\xdfQ\xc0)\x84\xce\xd3\xd8\xf0\x83\x91\xbb\x81\xce:\xf0\xb3\xcfR\xcf\x16_\x12\xd5U\x82o*/\x93\xad\x956\x1d\x17\xe9\xb7\x8e\x01\x93\xf1\x9dfk\xd3\x1c\xa2\x03\xe3\xc4x\'J\x17\xb4\x80\x94\x19\x0e\xbe]\x0cwV\xda\xd0\x0f\xce\xc2\xd5FIHv.`\xb1r\x0c\xd0\x00.\xf7\xf1FQ\xb7\xb3#\x10\xfd)\x16\x8e(\x9a\xbb\xa16\xce>M\xaf\xf7YY\xcc\r0\xb0\x97\x19\x99\x9a\xe6\xab\x9b\xc8\xcb\x96Ld8L\x05\xfe`\xdc\xd4\xd5\x0c\x18\xac\xa3r\x9a\x86A\xffr\x88\xdf\x95\xdf\xbc\xe5`\xb5$\xf0~\xd8\x18d\x83\xb5\xe3\x9a\x80]d\xff\x0c\x05\x89g\xdb\xff\x82\xf8E\x8f5\xb5\xeb\xbe\x81\x1c}\xbb\xe6\xa5N\xa7\x18\xc3\xba.v\x07\x87\xcd\x7f|w\x7f\x86\xfa#\x9f\x02\xc3\xc8\xd44^\xe0\xe0 \xff$j\xaci\xfb\x8d\xe2\xb3\xf3\xea"\x9a\x14\xbc\x83N/\xf8K\xae5\x1f/^\xae\x90e\x11"^\xb1\x06?\x89\x198\xec\xbb\x8b\x1f\x99\x9d\x86\x1et\xf4e;\xe6\x99\xdc4\xba\x80o\xd6\xbc6\xda\xee\x07T\xc7\xadY\x8bx\xe1\x8cx8|\x88\xd4.\xfc\x04\xac%\xe0\xf5\xf7\xc3V\x11\xb8\x00\x811sc?5\x97?\xf2{\xfa\t$0!\xef\xf6\xcc\x8f\xe4s\x1c\x16\xae\x9c\xfe*$\xffm\x04\x9dt\r\xb5\xe5z\x88\x96,iU\xd8\x8e$\x07\xad\n?\x93)\x8ep\xc9l\xd2l\x81t\x12\x81h0\xe8\xa5$m\xa1\xd4\x8a\xd9\r\xa0\xa9\xd0,\xd8\xf0Mz\xcb,K%\xe7/\xbb\x84\xf5{\xdc\x8c\x1c\xfa\xaeN\xe6\x95h\x039\xd9\xe9|\xff\x90\xd9\x91\xfa\xce&jcv3\xb5G8\x03\x91\xf5\x7f\x95\x9b-\xfb\xe3\xa5\x16u\x9d\x86\xdc\xbb\x9c\x8d\xc2j\x90\xfa\x94\x02]\xb8\xd7d\xab!W\xf8\xed/\x87tD\x9ef\xc0K"\x14\\\xa1!\xe9\x0c\xe6\xc7\x9b\x0cV\x0f\xb1F\x12\x85\xb3I\xa0\xc41\x0bh\xe3O\x1c\xb5\xe2\x1d\xe3\xf9\xbe\xa0\xcb\x8c0v%\xf4\x0e\xfbSo\x10\x05FE\xe8X\x14L\xd9\xb9V\xe5\xac<\x1d\x03qfPaj\xcd\xd3\x87\x08\xaf\x19\xe6\xd1\xbd\xeaVj\xb4g\'y_\x97\x1f\xfa?\xb9r\xfb\xfb\x91z\x90{\xea_\x84_:\'\xb8O7M\xef\xd8 \xcb\xe5\x84\xee"\x8fb\xc9@\tYz\x11\x9c\xb98\xf6\x86\x88\x9dNl#\xb2\xda5\xba\x8c\x17o\xd1\x042@b!:\x03\xc0\xfe\xb8\xc2\xd5\xecn\x99\xe1:\xb8\xff\x93P\xad\x19\xd8\x030\xbc]\x95\x94\x96\x8e\xa7J\x9c6\xeeuT\x0f,c\xaeR\x81\xe7\xc3;|\xee\x1c$\xa3;0\x85\xd8,\xd8}f\x88\x82\xbcT\x02\xf2qq\x95\x8d, _\xe5\x83\x96|Pb\xba@5\xef\x8d\xfa\xe1v\xd5\xe8\x1f)\xca\x1f\xbda\'\x99\xae\xfc\xcf\x8a\r-\x0b\x84\xc7\xa3\x0fi\x13\xe6\xa3\xb4\x9f\x19\x83\xe8P\x965\x85I\xf9u\t\xe3\x8e\xcf\xd1{\xb2\xaa\xaa\xef\xab,\x18\x08\x180\'\\\xc4\x02\xe2\x93\xaa\xc4\xa1\x89\x1b\xf5@@d\x8d\x1b\xf8\xad\xa5Z\xc4xZ\xf7\xad\xbe\x83g\r\x87\xf5\x12\x077\xff\xa07\x94\x10\xcd%\xd0\x99\nzl\xb9\xa2\x800\x1b?\xd9$!B\x98\x85.RAu \x12\xe3\x8cYFC\n`\xba\x06@c_\x92\x8f\x06\xe7\x92\xbb\x05\xb9<y5]r%\xe5\xa3\xdd\xb3..\xb6cy=XW\x15U\x9a\x91\xe2b\x1f\tZ\x14\xb2h\xf8]\x82=SbZ\x04\x920\'\t\xff\xac\xcah\x9b\x88\r\x10wF\xa14\x82\x95\n\xc1\xcb]\'\x03l9\xc6\xe9\xad@\x8aY\x1e\xbbD\x8b\x80O\x10\xc4\xeb~\xe4EOmg\xf9\xcc\x98R\x92\xaa*"D5\x15#\xf2\r\xa9\xb1\xd2\xd7"\xd5\xe57\xf2\x12\t\x95\x9560N\x85Z\x8aq<\xd4\xdf[2\xca\xe8X\xcf\xb72\xb2N<\xa1\x9e\xde\x8fN\x13\x0b,\t\xff\xa9\xbb\xcf\xf4j\xd2\xba\xab\x18\xd6\xfd\xcbgz\xf7B\x97\x81\x1e(\xe5\x8d\x9c&\xe6\x96}\xeb_\xa1\x0c\x91w\xbd\x95\x84E\x92r\x84\x11P\x08\x90\xcdmY\xa4M\xcc\x89\x8a\x95\xaab!%I\xaeY\xcc\x01\x16\x90\xfbz\\f\x81,3\xa7\xd8\x1c\x91\xbd]=\x80\x84\x8b\x1e\x1a\xf1\x80\xb2\xfa\r\x8c]M\xad\x8b}\xb6\xbf,p\xf9\xa7YbJQ\x99n\xd4\xc8\x8f\xe3(\x03\xef\xfc\x9b\x1e\xc9e\xa3#\x1845:\toZ\xdc\xe5z7C\xca\xe4\xeb;\xfd\xb2\xfaP\x1aU\x98F_\xf4\xcb\x8e\\\x8a\x12\x7f\xb3a"p\xbcj\xebA\xcb\x13G\xee\xbdA\xb3\xb9>I\xca$\xbc\xb5\xbba\xeb\x8c\xcb\xa95#\x0c\x96y0\xbfxv\xba\xc9\x91\x08\x8fjxt@\x02\x8f\x16\xd3\x88\x1e\xc1\x95f=\xae\xb5\xd0 \xe4\xf8\xa5\xa5\xb8\xb2Z8\xd1\xad\xa7\x9f\xe4S\xda\xaa\xb8<\xe6\xfd\x1f\xb2\xb1Vf\x13\'\x943\xdd\x122N\x9a\x82)\xeb8\xaa\x0b\x9a\xe7+\xb4\x16;\xdb\xace\xd7\xf0\x12Qc\xc5\xf8\xfe\xc7\xe5\xf7\rC\xca\xa2\x82\xa0\xc9A\xca<\xa0\x1a\xd7\x955\r\xb1I\x901\xb8g\xc3\x0f-Z\x1dM(m\x8b\xb7G&g\'\x8d1\xdeE\xe3\xd4\x98\xa1\'\x1b\xa6\xcb1\xf0\x8d$!\xdd\x92J\x14\xf5<\xeb\xb8\x8b\x88\xec\xf3~38rc\x07\xe3z`\xd4\xa5F\xb0\x13\xd2\xc7w\x93\xd5\x12\x05\xed\x15\xda\x12\x18"\xc8\x08\x9b\xe2I\xfe\x10r\xed\x00\x02y\xa9\x16 \x9cXT\xc0\x9fK\n\x0b\xaa\x93\x9f7\xf7\xb0\xf7\xdfYG\xa4\x01\xcf|\x81Yv\x8ch\xf2\xf7\xcc\xdf\xca\x84\xc7M\x08!\x9b#\xc3\xfd\xc2!\xc5\x91\xfa\xee5\xf0\xac\xe8\x15\x9ab\x88\x04Mv\x858\xd5^F\xdb\xb4-j\x19\xeb\xda\xe0\x7f\xca\xad\xc5\xb4\xa8/\xb9\xa7\x7f/\x128q\x8d\x0b\x00u\xd7\x80\x80\xbc\x13V\xd2\xe9\x81\xa3\x9c\xd2\xef\xecC}\x99\'\xea`\xc72\xb1\xb3}\x19B\xcf\xbe\xcc\xb5\x81\xdb\x86\xf7\x8c\xafJ7\xbc\xb8\r\x82\x8f\x17\xa6\x94\xb0\xef[_\x14U\x19\x98Z\xec\xbb%\x1d-\x96\xa7\x15\xe9O\xb6\x87\xc07#\x01\x85%\xd5\xb2\xaf0`e\x06\xf6\x97\xc9\x93\x16o\x1dUKA\x89\xf5\x8as\xa0\x02\xad\x9a7\xfdi\xca\xbcy\x9fi\xbe\xe8\x7f\xb3\xbf\xe3\x16\x8d\xc3[\xefq^\x1d\xddGL\x80\xbe\xe8><I+\xf2\xbbl\x1e\x95T\xc7o\x95D\x14JI\x87+&\xe6\\Gl\xfa \xce\xf1\xd5\xde\x16\xe1\xf9x\xd1/\x7f\xfbCX[\xd67d\xd6:R*\xb0\x07q\'\xb5\x1b]d\x1f_\x8cK\xdc\x90h\x81\x13c\xb5\xf7\xcc\x13>y\xcc2\xad\xfd\xa6\xb7\xe1\xbf\xacSiM\xec\xee\x9fHQ\xa6c\xba\xf5~\xbc.\xfe\xe1\xcb\x7fBn-\xf5~\xafK\xc0k\x8fCP\x96\x1b#\xc4\xd2\x82a\x17\x86\xe5\xe4d#\x83\x803\x87U\xd2\x9c_\xdd\x92/(\x0b.\xc3|e\x01Q\xfdE\xf7\xfb\xc3\xaa\xd6\x17\x07Q\xa4\x10A-\xdc\xa0\xe5u\xba\x15\xee\xbd\x0f\x1d\xfbOsb\x88H\xb2*K\x0e\xab\xa7\xb0m\xd9\x8c@xs\xe6)\xc2\x1d\xd3\xe7\x12\xc7eY\x01\x86O\x82V\xa0\xbb \xd4J\xb2\xe7\x0e\x048\x8f/\xcd\xbaR\x02\x13\xad\xa0S*`\xd2\xdbC\x06CF\xd4\t\xd8\xa0\xaea\xc30\xbc.\x93"yp\x03\xb6\x10\x0b\x8f\xb4\xcdzs\xe0\xc8\xac\xd7Z\xb5\xf4\x10\xaa\xde\xcb8(\xdbo\xbf\x18\xb8\xcb*\xb8d`j\xe2\xfdT2C$\xff\x8b\x0b\x01z\x99\xf9\xa7\xb4J\xb5\xc4\xfe\x8fV\xbf\x02\xaa\xe4\xb8H\xdf\xbe\xf3s\x19\xbdO\x90D\xddR\x89y\x19\x97\xc3Z\xfe:\x8b\x86\xbd\xfa{*\xb5KzM\x8f\xcd\x0f\x15\x1b\x11\x876\x17\x9a\xef\x13\'\x96\r\x9c\th\x0e\x03\xcb(X\x9a\xa2\xbdf.\xd7\xd1O\xa5\xc0f\x89s\xa2\'\x8b\xe4\x1dK\xe7k\xa3\x16!\xe0<\x10\x0evL\xd8\xfe\xea\xa0\xdd\x08pRy\xcb\t)\x1b\x0fl\xa5\x1c\xeb\xd3~\x9bh\x8az\xa5*\xe8\xbf\xf1#!v\x0f\xbc\x0f\x17\xc5f]\xbd\x06\x06\x9c\xc8\xfe\n\xe57\x87xc7YoC\xa4\xee\xa8\xd3\x89\xd6\xef\xfby\xe6\x90j\xed\x89`Y\xdb1$\xab\x94\x1cI\xca\xbdJtw\xb0f~R\x04S\x1dL]\x06\x8f\x1f\x91\x80mvN4\xe9NH\xc7n\xc0\xf2\x9c\xdc\xf2\x9b\x16n\xd6\x8c\xf7H\xa8\x16\x1c\x01\x82\x01a\xaa\xef\xc8\xa5\x8d\'\xe7\xd0\xb8;\xd2\x84d"\xf5\xba\xb2\xd6\xf4u\x87\x94\xfd~$c\xb7\xff\xad\x9a\xf7\x12-\xff\xb4\x92\xa7\xed\x90\x10\xd89\x13\x0f\xd5k\x13\xc5\xe1\xcb\xbd\xdf\xaa\x9bUj\x8f\xecn\x02C\x1fbY}\xa6\xbf\x0f`\xc5\xfe(\xb7\xe0;V%?F\xae\xc6=\xadf#k\xa8_^\x1d\xf3\xa71W(\x1d\x1e\x89\xdd\xaf\x8cg,\xe6\xb6\x8f\x08*\xe4\xc8CWHm\x82\x87\x93\xce\x00\xc83\xd0\x98\xbd\xa5\xc8\x00\xeaz#\r\xa5=\x96_)n\xffih\xc8\x02\xc7,\xca22\x1f]\x1b\x1f\xb3\xa2\x8f\xf4\x14\x99\xf2\xe8\x8a\xb9\xac.\xf0|\x91\x1di\xfaqe\xea\x03v-\xb2\x9f\xac5\xdc\x89v\x06\xa9m\x7f}r\x07\xc6\xa4\x80\x86j\xe2L|N3\xe6ln\x00\xcc\xe6\xfe~\xb8\xee\xd0\xady\x16\xdb\xfc@\x0ec\xdd\xb9\xa6]W\xc9\x89\xe2\xdd\x82\xe0\xfb\x91\x12Q\xe5g~\xf9v\xafw\x10=\xae\xfc\x03dn\x99\xf9\x16\x0e\xf6G\x90\t\x91\xe3\x86sk&\x17\x06\xf9\x02}\xe9\x14G\xd0{{\x01.\xd3+\x92(S\x17>\x90\xfa\xa5j\xae\xc1\x959XF1\xa4\xf7\x8az\xca\x13\x17\x898O\x11(\xe5\xb9N\xdbfe\x130\xe1\x90\xb3!\xf5\x89\xd8L1&\xc4\xb0\xda\xd6\xff8\xd9\xfc`=\xbe\x9fG\x9d\'\xa3G\x83Z\xbf n\xd2\xb0\xf9$\xab\xd5\'\x7f\xa1\xdd4 \xb9\x1b*oDE\xbf\xed\x97\x86r\xd22}\xf9\xba\xf2R\xf2\xbd\x942P\xd8\x91\xb1\xc9v}\xe9\x98M4.\xad\xbek\xeca\xa7\xd8\x95n\xdf\x0c\xa6z\xea\xed\xeb\xafM\xb5/r\x11\r6\x8f\x96\xac\xac\xf8\x9b\x0f\xae\x1d\x14tO\xa3\xe9.\xcep\x87\x0eC\x97\x18\xe5H\x9ap\x1f\xebE\xf4\x05\xa5\x0f\xba\xb6G\xa5a\xf8\xc8i\xab\x00\xe2\xf8\xc9H\xf6\xcc\xa8\x8e\x86Kx\x02\x93\xad~-\x190\x99|h\xf8\xe9\xfe\xd7Y\xc8(PEHAk\xef\x1f\x83\xaf?u\xf6\xdfnWI\xf0\xb2\xbd\x93\x8b\xcc\xa9\x9f\xc5j\n\xe1\xe7\xf8z\xd0\x8d2\xacrg\x08\xdf\xf5t\x07\xec\xf9[\xea\xd6c\xf5\x1f\xa5\xef\xfa\xef%wZ\xf4\x1d\xb2\x17k\xcd\x8bK:\xd3\xc8o\xd1\x81w\xc1U\x04\xcc\x00\xc2\xfa,\xab\x92y\\*\x96QE\xb7\xa1\xcf\xc9\xf0\xda]\x10\x15\xcb\x9d\xe3&\x9c\xcaX\xd2\xf5lrtH4\xcbI6TBz/\xe0\xf1\x08:F\xf3\xfa\xd3R?F+\xcd\xe7-"\x9a+*\xca\xed)9\x9d!\xb1F\x85\xcb&\xc8\x1d_M08w\xbbS\xea\xb9TGM\r\x18\xa6\xc6\x0cI\x00\x1f\x00LH\x15\xfbL|_r\x85F~\x06\xf6oe~\xc9=\xf0\xa9\xa8:\x87\xdf`]\xd75>\xd6\x92V"\xc3\xc4EA\xdd\xf8\xbay1\xe2\xa5A\xddK\xc8\xc9u\xef\x92\xd5\xc2)\xe7\x1fBk\xedc\xd5<\xf82\xa8-\xbd\xc3\xa1\xceq(\x85\xbd\xab\x97Wi\xd5Q\x19\ty\xf9\xb4\x8a\xa5\xe8\x02\xc5\r\x05z\xcc\xd8\xda\xc6\x98\x06\xcdq\xda\x9e\x9f\xfa,\xde\x17\x97\x10\xa7}H\xf3\xb9\xc2\xa8\xba\x82\xc6\xaa\xbd\x8c=\xf8rl\xca\x1a\xa5\xed\xeewD\x00\x9d!\x1d\xef\xfb\x05\xf4u\x85\xf6\x98w\r\xc6|\x0f:\x18\xcd\xcd^\x83\xbb\x14\xd4\xde\xe6\xa7\xd9\x1d\x19\\\x07\xa7\x1f6\xba]$\r\x86\xdaM\x15\xcc\xe9\xcf?\n\xd1r;\r~\xd7\x04\x04\xb2k\xeb\xfc\xdb\xfd\xcaL\xf4\xfb\x08\xbf\x840@\x03y\x8f\x9e":\xc8\x8dG\xdd\xf8\x1b\xfb\x1e\xd5\x9d\x97\xbb\xb6@\x0ffV\xcc/\xaa\xff\x90&\x919\x00k\xb6\x03\xbfw\xe3w|$\xf6\xd1w\xbc]\xbbp{\xeby\x80\xcb6Q\x9a\x93kV(\xa6)\x8c\xb8\x1b\xf3\xafp\x1db\x01\xb7\x9e\xfb^\x1f\xab\xd2b\no\x1a\xc0@biD\x16L\xc5\xedo|\xf6[UP\xf5\xeb\xec\xe4\xac\x98\x177lE\x1e\xb0\xf9\xcd\xc4i\x10\x92\xa8\xf8\xfeA\x130\x89A\xf6\x046\x00\x97k \xb4}\x0f\x08\xae\xdd\xe1\xfch@2\xbc>\xcf\x01\x96j\x8fu\xc4\x1aF\xa9\x86\xb4O\xca,?\xd4\xa6\x0f\xcfu+\xd0w\xca\xaf\xc6<\xd4\x04\xdd\x9b\xf1\x966.\x9f\xc0<&\xbb\x07\x01\xfa\x16\x95\x87;9\xf2\xaa\xb4\xe0x\xdc#5\xe9e\n\xb9\x06\x15\xc0T#\xe4\x1ba}8\xc0*\xa9\x83\xe0r\xb5Y\xc1\xdd-}C@>:\xe8P\xee[x\x8el\xd5\x89\xa57\x9e\xe1 \xcc\xe9\xfaOn"o^gV\xaboEl\xfc\xdb\xear\'\x08\xedF\xb9**\x0e\xf8tV\xa5H\xc12\x89d\xa2~\x19\xde\xc5\x14\x0e"\t\x1b\x87uuX\xe5\xca\xfep@\x16y\xe2p,\xa96\xdf\x95\xea$\xa5\xc1\x92\xe9\xa4\x98\xa3\x8c\x16/\\\xe1\xe7z\x1a\xbd\xf0Q\x04,,k\xbb<f\xf2\x7f\xc4k2T\x9a\x8b+\xe6\xbf\xf1 \xc12\x9a\xdc.(\xc8\xd8Q\xaa\x1d\x03E\xe4\\\xcf\xe7$7c\xa1\xa7\x10\xbfp\x9b\x16\xb8\xa4.\x93l\xe1\x90\xca[\x9c\xd4\xe5o\x17\xf5\xa52\x9c\x06\xa03\xddU\xd5\x8cJ\xda\x1dg\xbb\x04\xdc\xbc8_:R\x17\xbc\xefh\xffyl\xfc\xb5\xa0L\x00\xd2\xb3;\xbe\xea\n\xfd)\xb2\xd0\xcbJ)\x90\xcfw\x9e\xfc\x00\x89\xa6\xfb\xd4:b`\x17\xe30\xbc\xa4]\xd8G5\xbe\xb7<\xb59\xe3\xbbw\x87q\xca\x95/\xfc\xfcJ\xc7\xd7Q\x85\x02K\xef\xa4\x92vn+\x81\x1b\xbb;\x12\xf5Em\x1e\xae\x8aB\x1e\xab\xc13\xc3"\xcb\xda\xaaT\xb0,\xb4n\xec\x9c\x19J\xe1I\xd7Gy7s[&[pu&[\x1bt\xcdy\xb0A\x97\xe0\xab\x86\x89\xf9^\x15\xe4\xb2%\x8f\xcf\x16\x9b\xbd\x8c\x0f|_{\xce\xcdw\xe5\xd2\xee\x0b*\xbe\xea\xdf\xa3\xcf\xe9/\xa9\xad\x08=\x12\x06;\x9e}U*z\x1c\xad\xeaG\xc3\t\x93\x95\xbc\x08X\x00\xed\xf0\x19_\xe3q\xda3q\x92\xf7\x0f\xfe\xb6\xad\xe8\x9b\x0b\xe2\xdf\xe1\x1e\xc2\xb9\xdfv\xdfR\xc1\xf4\x92:\xd2\x8f\x19\xa7m\x9cN_8M-\x17\xc8;\xf6i\x19\xb1\xb1\x87\x01S7K\xb4\xfc\x18\xe2\xf6{"\x98\xeb\xdaNz\x02}-ni$\x96\\\xdaP-@\xd7\xe8\x115\x05#\x98f[\xeec\x9c\xb9\xfd\xd1+\xb5+qj\xfa?PIS\x8a\x8aW\xa9`9\xe5\xc5;\x9c\x9f\x10<\xebB;Q?\r\xdf6\xe1\xa7#\x10\x19\x9f\xd2\xf9\xd7Y6cr\xe7\xa6<E\x06\x07\x9d\x85\n3\x8b)\xce\x96\x18s\xeb;e\x8bR\x0ci\x12Y\xd6\xac\xcd\x81;\xe8\xb4\xbe"+\xf8\x10_\xd4\x13z\xaa\xf4e-\xd7h\xef\x9e\x0c\x8d\xb8\x1c\xdfJ\x0c]\x1c\xb7|\xe9_\xd8\xcc,\xab\x135RR[\x0c^\xf5\xf2CS\xa1\xd5\x1b\x89\x13C\xcc\xae\xf2\xd5\x1cm\xfb\xa5Z\x10G\xc2!_\x10\x05\x96Q\xee\x03\xdcu\xf0Q8\x0f~E\x9a\xbf\xef\x02\xe0[l\x8d\xabK\\[\xe3\xf8\xe0\x1a\x81\x9f\x85\x99\x1d\xb2\x05b\x9c\xad\x12\xaf[x\xb6\xeb\x06\xd5oT\\J#j\x12\xdb\xdc_\xfd\x02K_\xe3\xe8\xde\x93\xca\xbdl-W\x1a=G\x1a\xe7\n\x10GZrX\x83\r7\xcc[G4\x9a\xc6\xd8\x02%\xf3-\xa1\xc4\xdfLq\xc5\x8f\x82\x0b\x0c@\x94W\x9c\r\xb7a\xb0\x18\xaf\x8b\xf7\xa4N\x90y\xe4l\xe2\xbf1\xfe\xa9\xf9\xf5\xf6\xfc4\xad\xfc\xdbP\xd8\xeb*7\xdf\xceF\xf0"\x13\x05\x95\xf5\x06r\xc7WJ\x07\x8f\x89\xfc\x05\xf9\x1b\x9cH\xcd\xbe\xa3\xc7\x07\xc0\xd7\x0fs\x8b\x10\xd3\xb6?\xe5)\xa3\x96\x92\xfb\x93\x0eVk\xcf[\xc1~\xc0\xcfp\xc5\xf6\xc8j\xc5\x81""\x96\x88Sm\xdd\x14@\x7f\xb9\xaa\xbb\xfd\\\xd9\x99\x16\xaeO\xc5\x1b\xf7%!\xff\xa6\xfd\xe1\x80,\xe5\x95\xfan~\x8d{\xd1-\x1da\x8a\xed\x13y\xb12\xdc@l\xa7\x96\xbc\x19\xb7W\x98\xcb)\xe6\x1e\xfb\xc1\x95\x81\xc9\x9f,\xa1\xe2\xdf\x83a\x15\xb7\x08\x886\xf2\xd61\xeb\x8a\xa4\xce\xbey\x99\xde\xf2\x02/N_1\xbc\x10\x81\x00QwS\xc5e\xe7\xfbn\xe7\xdc\xca\x8b\x02j`\xa8\xf9\xd4\xb4\x8c\x03\xe6\x13T\x1c\xec\x97\xda\xc2QXC|\xcb\r\x84\xffX\xfazv\r\xcd\xd0n\xdcZ\xc3\xca\xd0\x89\xadq&\xc8\xfd\x17\x87\x8e\x18\xd0M\x95\xaa\xfeqs)*\xc9\xc2\xb9\xa6%\xde\x16<T\xa3\x05V\x01\x874\xabf\xf1\xc6B\x0f\xa1\xcfeW\xa9\x12\xc8\x96\xe4\xad\xed\xf10\xe0=|\xc41l\xd9E\x04\x8c\x8b\x90\x97\xa1\xc8\xb4\x0c\xbc\\\x14\xe9\x12\x0f*\xf86\xc2S\xaau\xa0\x08C\xd4\xce\x850\xaf\x8b\xd2a\xabF\x86\xf2\x82\x07\xcci\x87E=\xfb/\x04]w\xa1\x1f\xca\xd0\xd8\x87"r\x1a}n\x86\xa2Fg>\x0c\xc7\x9c\x84#\x00\xad\xd5\xc8\xc6\xc0\xfa\x8d\x91\xcb\t\xe6nCnb\'\xa7j\xee\xcd\x10m\xbcDQ6\xfb\xce=\xb2Uca\xac\xb44\xc7\xce~q\xbd\xa4Z\x1f\xa3\xc5\xc6\xf4\xcf(\x9d\xee\xf6sC\x92\xd3\x11\xc2\xf7\xda\xa5+\xd3u\x8e\x00N\xbb^\xe9\xdf\x1e\xbe \xd7\xb0Y\x95\x0c\xb9W!\xa8\x81\xf7\x8evyI\xcb\x1e\xad\x98\xaaL(\xaa\x9a\xe6\xe3s\xecw\x11\xf1\x9e$\xc7?\xb3g\xe5eZ#\x8a\x97\xe6OBF\x0eu\x9a#\xf9~US\xe2\xcb\xebO\x87\xe6%\xf0"8\xa8\xeay\xa2%B7.e~\xd6\x03\x1brt\xf5\xb5\x96@\x95\x93\x86\xf5\xc5\\\x02\xbb\xf3\xeazw\x80\xdd\xa7D\xeb\xee\x93\x9b\xec\x9d\x0c\xa7\r63>YE\x88T\xd85 \x17\xe2 \xc5..{\x9f\x84j\x91a5<;$\xa6nP+\x1b\x84;FpL2O\xc4<\xd0\xa3\xa7\xa4Z0\x9f\xa3\xefCcTL\x04\xfbBZZ\xb3.j\x1b\xf9\xbb}e\x18r\xf7\xe3\xdf\xa0\xa9\xc9\xac\xa4jdF6\xb1w(\x06\xd1\x9d \xf3\xe7VT2v\x9eVK\x9b\x0f\xd93\x16\x87\xc1c\x02@\xed\xc9\x8e\xa4\xf6wP\x93\xed\xf5\xf1\xc5\x06Lz\xa1l<\xb4M\xd8jn\n\xb5z\xc0j\xe0e\xd9\xd88\xa0\xd8 [\xafV$@zr\xec\xbe\xc3\xf7\x19\xba\xa6\x1ewC\xd0\x1a\xad\x89Fj\xf8 \xf1\xfe\x94\xb6\xc4;\xe3T\xf3+E4\xac\xaf\xbe\xe2\xd2\xd6 :\x8c\xd1\xfb~\xc9\\\x9b/lcq\xa3:\xc5\'\x0cV [\xe2\xb8\xbf\x0b\x84\x1dn\xbd\x9d\xc0\xef\x17#K\xbb\x82\x05}2Be\x17\xc3m\x87\xc7\xd6\xa7\xcfB;\xc8\xe4\x8a\xc2\xf3\'9\xd7\xf5\xd7\xa4H\x0b\x99\xea\xe3\xcb\xbdt\xc7\xd2Gvc\xc2\x95Y\xaf\\\x04f\\\xbd\xc9m$\xed\x07G\xf1\xd8\rDd\xf6\xe3g\xfc\x9f\x81\x94Q\x9a\xd9\xc7\xae\xd2\x80\x19!\x00o\xde#\xfb\x06\xd9\x8c\xdf\x7f\xea\x97\x1d\x82-\xef\r\x8b\x13\xab\xb2W\x9f6\x98\x95q\xa7\x10C1\t\xb9\xea\xa2x8\t\x1a6\x19\xc5}\xe4\xef`\x8d\xa9\xcc\xeb+[\xc5\xd5\'\x8a_\xcf\x97Db{\x1a\xc2*\xdd\x83\x12_\xe8\xde\xe5^\xa0\xfd\x06\xe1-[\x86u\x9f\xee\xb2vM\x88b\xd6\x83Q\xcc\xb8\x01\xc6-\x04\xd0\xf8\x13\xd8\x9a\x10mq\x16[\x0b\x10\xa8\xca\x81\xdb\xe0\x9cB\x0c\xa9Yi\x0c#\xf8\xde\x9a\xca\x90}\x8d#)\xbc1\xa89\xda\xfc\x96\x92\x8c\x00\x16\xecL~y"\x19\x93\'\xa5:\x12N\xf0\xbfn\x0511\xe4|\xa1EQ\xa5\x16\xfb\x94\xdf\xc4\xb0\xda2\x15\xd9B!\x04\x87\n\xe2\n\xfe\xaf\xec\xca\x02C\xed\xa2\xd8\x80\x8f\x9a\xe2\x95\x87(\xe4\x06\xdfW\xb2\x81\xad\xb3\x1d\x1c\xdd\xfd\xd2N\xa1\xd8\r\xcd&\xfa\x13g\xe3\xe9\x82h-$\xc1\x98\xf6\xd61\xa2\x88\x8ciP\x086w\xb5jP\x01\x9b\xf1\xa3\x0e\x1f\x0f\x17\tOy\xe3\xf1\xaf\x94\n%\xda\xf8jm1Z\x10I\xd8\xb7\x19\x16\x13\x1fl\xc9\xa1\x80.\x1b\xe5l`#\xa0p\xe1^\xbf\x18\x8e\x14\r\xdb\xb4\xa4u\xa4\xee\xb0\x91\xa5[\x85\x7fvN\t\x80\x17\xe3\xaf\x16\xf9\xea\xef\xe3\xd0\x1b\xb4\xcb%\x7f\xd0\xd3<m\xc9\xd3\x88\t\x9b\xe2\x9f\x18\xa7V\xe0\xcc\xa0\xb5Wp\x1eK $R\xba\xf8Uh\xd29\xcd\x85~\x80\x13}P4\xe6\xccNF0\x96\xd1\xce\x04\xed\xd8\x961\xfa{{\xce/\xb7"&\xa1IF\xc8R\xf4\xc4\x96#\xd7\x80E\x94\x06\xdd\xa8\x02\x1d%o\xc5&\x9f\x88\xe4\t-0\x93W\xf2/\xc1\xd2\x02\xcd\x0f+\xf6\xe5e]\xb6\xb6\xef\xc6\x00)\x17\xda\xa5\xbe\xa2\xc2\xc3\'\xaf\xd7:gX\x15\x80\xc1h\xde8\xe8\xc7\\\xb9~\xd2\x05\xda\n:L\xd6SO\x06\xfa\x93*,\\\xa5\xcaW\xca?_\x9a{H*\x17\xf1\xdb\x03\x0b\xa8\xa1\xe0\xdd\x1dqg\xfb\x15R\x17\xfbi5y\t\xb8\x18 \xbd\x7f@\x08\xb7(1\xad\xc7\xd0\xa7J\x0c\x12\xdb8\xb2\x0cT\xf2\x8f\xbat\xeeD\xd9iZ\x87\xbb\xdc\x9f,>\x0b\xf9hV=4\xca\xbf\x94\xe3\x1d\xd9@O.\x0cN@\x1f]\xeam\xb8\xad\xd6\x8d.DBP\x0c7\x9f\x0e\xb0h\xc0\xb5>\x96\xf8\x08\xc2J\xb1\xf4N3\xbeXk\xe6\x93N\xaaz\xe0`\xa7\xf1\x1a@\xbe\x94\x0eq\x8by ,1\xe9{\xc2\xfb^\x17\x884\xe6t\'\x96\xe9b*\x04\xaf\x95+\x07{\xf4\x89*\x8bp\xf4\xac>\xf6\xebC\xee\xb5\x94s\xe0\xa1\x0e\xefv\x90\x0bMg\xa1\xc9\x7f\xf0\xbd\x196.\x0c>\x16_r\xd4\xdc\xdf\x17\x8a\xa5\xc3\xc6m\xfc\x1f\xd5U>IX8\xdb,\x8a\xd0%V\x17\xa8\x9e\x02|\x84i\x16\x92\x02\xc7\x10\x86\x17\xd3\x7fj\xda_l\xcao\xf8\x94)\x86\xa1\x01\x93\xba\xa9cl\xeft \xf1\xfa\xf6\x85\x9d\xd3\xd0k6\xe7\xe3\x86\xfdi\xe1D\x15#\xf4\xd8l\'\x91\xc3\xce[\xcc-;\xa0\xf8k#+@\x0c\xc5m\x1f\x16\x1e\xde&k\xaa]\xf1\x01\xe3\x8b^y\xa8\x1a\xcfp\xd1<\xad\xc4\xeb$F2t\xa0\x9b\x17\x80`-[\xb2\xd3\xa92J\x11,\xea\x1f+\xff\xf9\xaeX\xaf\x0e\x1c\x03\xe7\xfb\xd3\xe0\xaf\xdc\xc4Z\x821K\x0b\x93\xad\x82`z\xef\x02\xd6/a:\xaaa\xa2\xf7\xa8X\xd8\xc1-\x1b\xfb\xf4|\r\xd0\xb4g\x8d\x14\x8f\xd0=\xb1\xf4if\'\xd1\x0b\x1c\xda\x14\xb35A\x9f\xe9.\xcf\x07\x18\x88\xac\x90K.R\xbd\n\xcc\xf3\xfc\x1d1 \xfc\xbc\x0b#\xd7\x8a\xe4\xf61M\n\xb1\xfd5\xc5\xbe\x80\xc2\x02?A\xc7+\xac\xd4\x94-#\x95\xc8H\x852\x9ee\x82n\xb0\xf3\xb3\x8d\x8b\x0b\x87vx\xdc\xb3\xb0\xf3\xaa\x11\x82e\x05\x88\xf6\x93\xc6Y\x99\xff\xc2\xb5HR\x8fh<\xb5\xb5\xc7\x9b\x91\xb3\xe2\x9d\xf8$\xf5\xfe\xdeF\x1c\xc2\x1fi\x17\x0eT\x0c[\x0e.\\\xb6\x93E\xd8#\xca\xd2\xd9\x8b\n\x16\x90\xe9\xaa6\x98c\xb2\x02W\xdb1\xbc\xab\xff\x0e\x95"\xa7\x86\xde*:X;\x10\xd5\xc5\xf7\x95\x8d\xd5\x1d\x9c\xdd\xf7\x8f\xfe\x14q\xd7#\xf1\xcbx\x1c\xab\x0e\x15\xf2\xbeM\xd2\x17\x9a:~\xa4$1\xab\xa9,\xbc:(\xd9\x0b\xad\xf4\x07\xc5\x02\xcca\xedF\x9e\xfbt\xa7\x92\xb9\xaa\xe5\xcf\x12\xf0\xf2\xac\x11:\x99@e\x0e \xa9\x85\xa40x\xb4D\xc8\xb5\x913\x8a\xfe\x1c\xa4\xfa\x1aX!75\xd0_\xafGvk\xe4v\xdcIDju\xac\x8b\x9c\xa5\x98;\x9c\x1d\x82:\xd5\xdc\xc9:\xf0\x86\xa1\x9a\xd4\xb8\x0f\xb2\xe5\xbd\xdaA\xa3ssg\xf1\xa9\xed\x89\x1b$u\xc8\xdb0\xe5\xa0\x13j$a\x07\'\xc2\xb5;\xf2\xa4\x94\xae"\xfc\xcc\xd4\x00<-\xd1-\xb8\xbf\xb3\xa0-L\xa7\xd6o@\xbf\x7f\xa6,\x04\xb6.\xe8\xbcS\x87\x88v\xd4\xd1!\xb1\x9a\xfe\xffU(\xa9b\xb3\xce\x1b\x86\xd9Sb\xf7\xef0\x85\xaeP\xf4dK\xb0\x92\xab\x97\xa4\x1c\xf7\xf1\xeaA\xbb_\xa0\xa5\xd8\x12a\x9e\x9dhl\\X\xdb!\x01N\x99\xf43%U?I\xcd\xc3%\xd9\xc8\x93B\x1f\x9a8\xfax\xe9\xd0N/?>\xf2u\x1c\rZ\xc7\x0c\x0b\x0e\xd5\x90Ferp]\x06\x10\x9aP\x01\x81{\xac\x8e\x82cG\x1dq\xc3\xe5wNIZ\x89\xf4\x8eRZ\x96J\x14\xb3\xd1\xc1\xcah\xf7(@9\x89\x94\xc5\x98\xfe\xd0\x9b\x18\x04\xbch\x1d)\xa3\xe1\xfe\x9btM\xf1\xd5\x11/\xcc`q\x14wk\xcd\x86\xc5\xd2\xd5?g\xcf-P1\x01\x83\xa9.\x02\xdbK\x8e)g\xe3\xff\xa8\xe0A \xfb\x16\x08\x9e=\x02q\x1f\xb8\xde\x84\x1d\xd5\x13\xf8\xa0\x87t\xbf=NU#\xaa\xb9\x8f\xdeJY\x8c\x13\xa3A\x17\xd5\xd4\xcf\x86\xbc&\xa1k\x9av_\xe5\x7f\x84\x1a\xc0#\x86T\xbb\xe6\x92C\x0c\xa8p\xff\xd8"[\xb5\x96\x83@\x0306ZU\xa1PR\x99;\x15\xd2\xddY4\xed\xf0\xa2Zxh\x82tH\xc2\xf3\xfbL\xce\x7fryq\xf1\xe9\xb8\xc0\x90\x1db\x18~\xad\r\xcc\x1e\xc4\x10\xf3\x0b\xbaS\x10M=\xce\xd5+\xc2:w\x8f\xdeC\x0b\x823\xbaP\xbbs\x14\x9f\xe2Y\x95\x82\x8d~\x94>f\x96\xc8\xbe\xebH:\x933\xaeKo"\xa9mx\x87 y\t\xd7\x0e\xf3\xd0]q\x10@\x0b\x04\xdab\xc6\x98DrW\xd66\x97y|\xee\xb2O*\xf3\xaf\xbf \xf1@\xb54\xf7k\xa8\xe7Qq%h\xe1\xf5n\x9e\xb5\'\xbc~\xe8\x00h\xcb\xa4\xf0^\x9fN\t\xac\x0b\x9f?r/\xd1\x84\xcc*\x10q\xf1vn\x85\x0f;\xc5\x05\x9c\xd2\xc2\xca*P|\xea\xc4\x06I\xbc\xd2"\xcf\xc7\x9b\xb9\x87\xfb\x81\xf8\xdbZ\xc7\x08\xec_\xa9\xdb.\xb8\x98\xc2\x1a\x1d\xe10UT\\\xcc\xb5\x90\xaf\xe4\xb4u\x93^\x14\xd5\xba\xee~\t\x0f\xech6<0\xe3\xe6\r\xfe;\xc6\x14\xf0\xf7\xc1\xb6\xd2\xb5\xaa\xe9\'\x9d\r#\xd4\xfb\xbe~R\xd0:x\xcf\xc2B\xd1\x89\xb3w\x1d\xb3\xd8\xcb\xa5g\x86\xd1\x18FT9O\t@\x92\x98\t}\xd2\x15\xfe\xb2=v;\xf5l\xcdM6orr\xbdoJ~\xec\xb0\x11\xb6\'\x84oR6\x97\xeb\xc0\xb3\x8c\x9a\xf4\x00\xf7\x0c\x98d\x9aZ\xc5\x84`p\x8c\xf14\xe4Ww\xd0T\xd44\x97|\xec/\xe5\x04y+\x8cq\x80\x97-Q|Y]\xc9\xcc\x0cz\xfa\x12\xb4\x1bHI\x1c\x00\xf3\x91\x13\x1c\x8aes\xb97x\xc7\x82\xe6k7z\x968\x8aI\xad|Sw0\xce\xb2\xe2\xb6\xea\xca\x0e\x94\xf8\x15\'"T\xb5\x1d\x9bv\x92\x8d\xe2(\xbet)\x9d\x90\x9dF\x07\xa8\x07\x07D\xd1\xe8O$3\xe4\xb4\xe0\xe9\xf4\x93sp\n)x\xd5\x05c\xf9R\x1a\xb3\xf2\xbd\x0c\xd7;\x93\x99\x10V\xb0R\x10\x1e\xf1u\x12L\x86\xf09\xa5\xbfG\x15\x89~\xd4\x01\x137\x0b\x1eH\xcb\xf0\x88\xf9R\xd7E\xe7\x8f\xc9\xc9+(R\xe7\x99\x7fk\xa5\xf4$\x18j\xbcZE\xd2K\x8dH?\xdc\xbe\x81h\x92y\xc1q\xf3@!i\x83\x08\xd1\xd9\xec\xe8\xc7\xdd\xa1\xff}\x1e\x9b9\xeaz\x90\xe1\x12\x99\xdc\xdbH\xcaS\xc8\x9fa\x9e\xa6\xcfN\x87\x95\x10\xc7\x8e\x0c\x13;\xfb\xceDG~#\x8b$8v\xbd}\xe2&\x93Q3\x1d\x87fOMZ\x8b\xb1\xb9\xe5\xff\xcb\x9b\x85\xab\x1a\xc2<nF5\x1cM\xbc\x88\xd5\xba\xc2\xcb\x1c\xd4d`\xf3s\x16\xb2C<jJ\x98\xe8\x90n\x84I\x95\xa9,\x16a\x9ep\xab\x94\xc7\x929\xb1\xd2\x97\x94\xee\xc4SH9tn\x82\x9b\x0b\xf5nv"k\xf3\xd7\xc4eP$\xfd\xc2\xa6?\x0bC\x95\xda@d\x14+\xcd\xc2\xe7\xe8`Le\x9d\xd7\xbbi}\xc92\x86\xc5E\xd7\xa1 \x990\x1e/m1\xb9\x88\xd9\xcd\xa7\n\x81_\xd0\x9b\xc0\xac \xdc:\x04,R\xaf\xacn\x0f\xfc\x83\x92U\xa1\xf5\xbcY\xb0h\x8e\x87U\x0f\xc6\xa8\xb5~\x9f\xff\xbcS\x90\x89\x0ci\x1d\x8a9\r\xce\x01\x97\x92I\x95:6]\x18\xc0b\x19\xd6\xec\x8c@\x11\xbd\x13\x90\xd0`\xeb%\xed#\x8b\xbah%\x96\xc6V\x92,w\xee\x87\x89@\x96\x81\x9e\xd0]~\xa7w\x1d\xc6\x90\x95\xf3m\xb1\xdc0\xcdQ\xc8,&\xc3A\xaeC\x14*UX\xd8\xea\x1b\xcb\xe5\xa7\xca\xf6@\x04\xc9\xc3H\xeb^\x05u\x1e\xd7\x9c\xe5t\xeb>\xc1\x97i\x05\xa3\xa2\xb5<\xfa\xa3\x18 \xdc\x8e\xd6\xa9\xd0\xad\xb2\x7f\xe5\xc1\xbfw\xc1\xee\xb1\xc3\x84\xe0\x05\xe2\x10\xf0\xd3\x8e\xd4\xeb\x0b\xe4\xe9\x03)\xed\xb7Xo\xfa\xebN\x86\x14\xef\xda\x07\xdd\xdf%y\xc9GI\x1c\xcd\\!6\xd0\xf0\x8c\x8d3A\x0b\x82\xbf<s>h\x81x9y\xf0\xb7\x8c*\xd7b\xc3\xfc\'\x7fP\xd2\xefD\xfb\xff\x8e\x88\xa6\x84\xbd\xc0\xd7\xb8\xc4|\x01\xd8\x11}\x9a\x8b&\x92\xe5\x98U\x01\xf6\xd15\xca\x92\xd7\xec\x8e\xefA:`\x94d\xe7:\x8e^\xa4\xc6\x85\x01i\xf5$\xf2i\x86\xf8\xe7\xbb]g\xc9l!\xe2\xaf\xbd\xd9\x80\xbf\xfe\xf9X\xb7V\x1a\x15\xa5S\xfd\x19N.\x10\x0b\xe4\x8b\x0bz\xe8\x8fD\xe0\xf9\xae\x89\xd2~\x1f\xabk\xbf\xee\xd0\x7f)\xa0ofB\x1cCT\xd0\x8c\xdb\xb3\x1b\xed\xd9\x15\x9e\x885\xec\x8cxj{\xbb8\x00\xc3K\xba\x04\x85Jm\x16\x87\x1a]\xd1\xd1\xdd\xe8\xfe\xf8\x9fWg\xc7\xcb\xf1\x9e\xd1\x91xO4\x97\x8cP\xd7\xe1\xccK\x8f\xf4\xcc\xc3\xa0\xbb\xe6\xefx\x8c\xb0\xbc\x87\xb8\xf6A\xd0\xca\x9a\x92\x13F\x97\xef\x1e4;\x06\xb8\x81\x99\x10\xe8\x1e\x034i\x8f\x1a\x13\xd4\x92\xb7\x98 \xad\x14\xfd\xd9\xdf\x1e?\xcfq\xab\xce\xfdX\xeb\xa0\xca\xa8~1\xd7wh\xa0\xc5\xaf\xe8o;+H\x01\x938\xbc%\t\xb8_\x046\x0e\xebh\x8a158z\xacd\x8fD)\xe7[\x1a\x19K\xc9\x87{\x1f\xf2f8\xf1\xcb\xb6\xd6\x90X_\xe6"R\x83\x16\xe4h~\xe6I\x80\xccg\x9d\x08\x13\xda\x0b\x13\xf8\x80diQ\xe74P.\xfd\xf5?9&\x04\xe0\xd8U\x83\xca*\xf3\xe8\xbf\x8f\xc6\x9a\x9d\xafC.\r\x97&2Z\xf9\x9ci\xac\x8f\x8a\xa9w\xbf\x88\'2S\xd4\x071\x15\xcf\x92&\xeb\x03\x05d\xff\x02M\x98\n\xd9\x86\xf1\x85"!\x97\x96;\xd6l=\xe5\x18\x05\xf2\xa8H\x00\x8a\x8a\xab\xc598\xd0\xac\xb6b\xb7c\xf2\x9cex\xce\xb2\xac\x8b\x0c \x92\'HGb\x80]\xb3\x7f\x9fh\x95\x81A\xaaR\xb6pyR\xd9\xc4\xc3\xf8\x12\xf9\xea$\xe2\xbd\xbdLR\xc9\xdc\xaf\xd2\xd4\xed,#\xfa\xeb1\x9f\xe2\x816\x961\x8a\xb8TM\xac\xb0\xa8R\x8e\xc7;\xf1\x05\xae\xfe\xce\x14\xfa\xab\xcb\xd0\xa3{\xb3A\x8dP|"\xbcd5\xb8\n)\xfaZ\xec\x94\x16<\xd5Rg\xc5_\xcd@\x1d\xd1\xed\x13~[\xc0\xbf7\xa6~$\xa0\xa3\xfc\t\xd1\x9d\x81\x9eS>7\xddd<\xc8A\x05\xab\xd6\xc4?\xf7ANg\xc4Y\x01{\xa7 p7f\x18\n\x104_\xa6\xe9\x96\xc0\xb4]\xaeaZ\xa4\xdb\\w\x9e\xc3\x13\xa3.\x0b\xfe\xbfc\xeb\xdf\x0f\xb5VR\x8c-j\x9f\x0cW@\x83\x9b\xbc(\xb7\xf7\x14\r\x94\xbf\xb3Wd\x89)\x8a\xd4dv3k\x16\xdb\xc17ehx\xee\x9a\x9c\x87\xc4\xc3{h~#\xbb[\xffv\xb5f\xc5\xe0\xf6\xc8\xc9\xa3r+\xaa\x1a}0\x1c\xa7\xb4\x0f\rh`\xadp\xfdG!\xad\xad\\B\xcaC\xde\x98\x99y\x068?&\xa4KY\x8a\xc34`\xe3\x03!>}\xf6\x88\x99B\xa0\x95\xf3n{\x1fS[.5$\xd7\x1bo\xc8\xb0\x0b\xf7)\xb0O\xd4\'\xe17\x96\xefx:p\xd5a\x9dN\xd4\xba\xe7(\xb4\x9fx\xeef\x1b\xb2\xe2\x8a0\x8b\x88\xcczW5Nck\xd4\x1c\'MuE@\x8fx\xe58\xe2\x0c\xd7f\xfa\x9eI\xea\x0e*@\xec\xc9\x14\xca.\xfc\x92\x96\xf2\x99\xc5\xe6MR)F\x88\x96\xcdF\x9c\x9e\x93B\xb8\x86\xd6\x1b\xfb\xc5+\x03\xabTnyO\xa3\xf6\xbc\xd9\x1dH_u\x93\xb2K\xfc\xfb2\x9c\xb4R\x0c\x1c\x85\x02\xb6=\x0f\x1d\xe4:\x83\xee{\xe0L\x9f&3ka\xab\xac\xdd\xc0\xc7\xb0\xbdt\x90\x8f\xa0\x06\x9e\xdc\xde1d\x9d\x18y\x0f\xa2\xc0\xc3T\x0b<\rs+\xa4\xe2\xea>\x9f\xe6M\x06\xd1\xecb\xe0G\x7f\x94\xb9R\x00M@\xf5\xf8\xfeq\xbe\xc2\x04(\xdc\xd1\x18S\xb7\x8cc\x825A\xb6\xbc\xd5`0\xf3G\xd2\n\n\xa9\xd5V-\xd8\xd7KU\x12\xbf\x10\x16\x08\x1a\x03\xce\\\x82\x079_ck@z\x87T\x9a\x87\xe6\x1c\x18\xc5\xc4}^\xf71\xe5\\\xa2\x0fx\x80@t\x05\xa9\xff\x93\xa01{=\xa2PC\xcc\xe0\xd0vq}]v\r\xa4\xfd\x0f\'\xf0{\x1a\xa1\xe4\xa8O\xa2\xceynt\xc8D\x99\x02\xd1@\x98h\rx\xaf6\x08\xc9v\x1b+_\xa3\xc9\xfd\x7f\x802\xaeC\xa6$\xe9!\xfc2\x1b+\xf83\x95/@aI\x80_\xeendB&bX]\x98\xbe\xac\x16\xad\xb5\x08U_\x83\xeab \xfe\x95\xae\x02\x91\xc1L#\xfd\xf4d\x83<\x88\x83@<>\x0f\xad:@\xb4_\xc6\x84f\xe5 \x1dl[8\x15\x1dd\x0b\x0b4\xc0f\x01_\x10\x04\x02\xcc\x1f\xb9\xb2\xd1\xf1$\x9e\x84\x95\xfa\xe7\'\x88k]S\xe9\x8fP\x8a\x1f\xf6?\x10\xa2\xdd\xd3s\xdc\xd7\xafZ\x19U\xe6\xd0`\x1b\xabE\x1d4\x1c1\x15V\xde\xe3h\x9f<\'\xa6%\x99\xb1\x0e\x7f\xf4\xc2\x8b\xb1\xdb\x99\xc8\x1a\xc8\xf8\x95\x8b1\x1c\xd9H\xb0^\xf6\xbf\xd0d,\x81\xa4\xcfZ~j\xf2{n"\xbbu\xc5I\xb2\x86o\xef\xdd\xa1\xcf\xe2\xbd yaY^\xed\x81S\x8c\xd9j\x7f(}d\xd3\x82\xfb\xdf\xc8\x12\xfc\xc6Xb9\xdf\xe6*\xac\x1b \x89\xfa\x9bu xH\xd9(\xb7\xdfy[\xb1\x82=\xdf\xa9\xf7\x95\xadw\x9a8\xa4\xec\xfb\xbe\xbc\xbd\x0bX\x91%M\x91XL\xef5\x1bmEa\xa6\x85s\xc4OE\xd9\'\xca\x06\x8d\xd3\x90E\xb1\x89~(:\x97k&\x04\xdd\x9a\'_A\xbf|\x14\x00\xb5k_\x0b\xd8\xab\xac\xc7\xdd\xb9\xeb\xd5_\xe6\x82\n\xd1\x96\xc6#\x1b\x1b\xa7\xadq-B\r\xda\xcb\xefhs\xc7T\xb7\xdd\xfc\xd7\xea7k$\xb7{,7\xc5\xd5tC\xba:\xc9J\xc6^w\xd6\xc0Ak\xbbm{lf1\xd8*\xb1\xfc\xbe\xea\xf1\xe3\x99\x9d\xf9\x1d)\xdb\xa5\x83nj\xad\xdb\x8c\xd8\xbe6\x10\xceP\xca\x18\x92\x18\xee\xda\x004\xc8]:\x97\xf5z\x82\x81\xef\xc1\x1e\xcd\xb8s\xc0\xf8\x08PPa\x8dV\xd092\x83\t\xecS?\xde!\xf6Ml\x9eg\x86\xe4\xb3\xc2W\xf8\xe0\xea]^\xa4\x9e\xadS\xa8\x9b\x7f\x11\xe7)/\x85)\xa7t\xd1\xf3\xb9\r\xdf\xbd.\x1f\xe8\xe4v\xfc\x00\xee\xb0\xd9w\x8e\t\xab\x14 Xa\xab)\x976\xeb\x17\x1cB\xed\x9a}\xbf+Y\x7fvd\xa3\x02B\x10\xa1U\xd0\xfa\x0f\x18\x84\xb5\xc0\xb2\x00yS\xd1&\xb9\x81\xc4\xf3\x1eDn\xae\xdf)k\xfaI\xd1YH.\x17\x1cJm\xb5b\xbb\xab\x13\xbbo@\xf0\xcf\x9cf\xd9p\x19\x9e\xe0\xd2\xe5\xd2d\xdc@"\xf6\xef \xd2\xd7\xfb\xbfKc\x8e\xfc\x11\x98\x9fO7\xfb\'r\xe1$\n\x8b\xdas{\x88\x17\xe1\xab\x115z/\xf0J0\xf8{Q%\xde\xa8\xf6\x12\xc0d\x1d\x83\x17\xffuv-\x93WM\x15?ePoZ\xa9\xae2\xe3\xc7\xccPE\x9b\x8e\n\xde>\xeb\xb1\x1b\xbc\xf4\xb9l\xec\x84\xfc\x97AOZ\xc9i\xbat.\xd2\x01O\x80"eq\xd7\xbb^T"\x92_c\xbbAt\xfcR\xec\x132^\xe4\xde\xf0\xbe\x82z \x93Ep\xae\x8bGC\x9e\xe9\xb9\xba|e\xdbn\xb1Z\x82\x90\xe4\xeae\xa9\x88{E3\xf0"\x01\xb7&\xeb\x82\xc8hK\xbb\xc0\xbfE\x8e\xcc\x82`\xbc\x11\xecrN\xb7\xcd\xb8\xbd\xec=g\xb1s\x94\xd9\';9\xb6\xdbR\x9f\x91[\xaeq\x9f(\x0f\x15\x94\xb1\xdd\xad\x11\xcd5\xe3\xd7_\x87w\xfa\x9a\xe9\xb9k\x07+:\r\x80\n\x83\xf9\xdb0C"\xf5\xfa\xb0\xde@\x1ew\x06?\xbd\xd8\x03DK\x8f,\x05\xb5\xef\xd2\xe6\x90\xd5[\x99\xa2\x946#\xfa\x84~\xf0J\xaa?\xa963eF\xe7\x9d\xb4\xb8\xf7;\xf7h\xf5\x9fW\xdcv\xed*\x81/\x17\x98\x82+\x86O\xb6a~=\x95s\xb8\x83\xe3\xc5\xf2\xce7S\x9f\xc9\x84\xb4\x88\xfbkyn\xeb\xec2S\xe8\xda>W\xfbn\xb5%\xcc~\xbe\xe8\x8a\xdd\xca\x98C\xa9\x87$-\x04\x94\xa6\x08\xba7p\xe9\x15\x049[`\x8e,\xaf\x1d\xcf\xf2\xd6;I\x05\x81\xab>\x87\xac\xc9\x97\xbb\x85\xe4Fp\x122\x86k/j\xa1x\x8d\xd5ES\x1e\x87\xf9\x92\xa3\xb8\x13\xa8t\x1f\xbd,\xedk\x90b\xd7\xae\xb5\xc94\xca\xfc\xc7\xec\xdc5z\x10\xd6\xf4E\xdfH\xf8OU\x8d\xd5O#,<\xd5X\xd1\x19\x05\x03\x7f\x89y+\x98\t\x1dvS\xc6\xecd\x08\xcco\xef\x9f\xb1!\x0b\xb9\r\x8f\xb6F\t\xca\xeb\xae1\xd2\xa0\xb2uT\xfe\xccC\x9e@]7#\xbf\xfa63-/\xd0\xa0\xd2\x92"\xd1\x03r\xce\x1f\x10i\x041\x1a\x0b\x13\xe3_\xd35Tz\x1a\xc8\x01\x8b\xdd\x7f]}\xff\xd0\x9e\xab\xb9\xab\x85\xe3@\xce)\x1c\xbd\x04!\xd5Qu\xaa\xf8\xf2:\x81\x14:\xa1\xd3\xa94H\xdf:\xd1\xd4\x13\xa0-\xc0\x89S\xbd\xcf\xd8\xe0@\xdb\xca\xfe\x7f\x18BF\xc3\xc5$\x85;\xbc\xd7\xb0\xe9/\x9dAp\xb5>\x14i\xd2\x8b$1\xc8\xd5v\xb3\xfapm\xba\x91~\xfa\xae\x1cR\xc2\x93\xfaT\xf9\xc4\xcbD2\x1f\xe1\xa3\xa0\xff\x94G\x0f\xff\xe8t\x19(\x86\xc5\x94\xb0:F\xd8`\x8b\x96\xd4\xda\xa7\xb6;\xc4\xd0apK3\x9e\x14]\xa2\xfbm\xd1\'\xe3$n\xb0\x933A\xa2\x8a\xf6\x95N"\xcfW\x81\xdb\xc9\xc6jk\x0e\xad\xee\xe9\xca\x04\x15oB~\x8eH`R\xe2[#\x02\x17<\xa4\x8f\x13\xf7\xd9|\x9d\x84\xe6\x04_#Y4q;9\x0f\x90\xac\xf5Xl\xca\xfd\xc1\x85Jj\x98\xea\xa8\xac\xa9dg\xb8\x85\\\x8e*\xe9$K\xc7\xa8?\xa7"\x83c\x82j\xaen\xbbe\xd6\xd3\xe1\th-\xdc\x15\xda\xa7\x15j\xa4v\xa9m\x9e\x89\xf6E$/-\xf9\xbf\x9a\\y\x0fF\xde\x1dLZ\x96 \xcc\xa0\x19&\x1f\x82\x0ec\xb7\xd0\xb7\xadX(<)\xce\xfa\xae\x90\x02\xe5M\xdf\xe9\'\xa3?\xb8\xa7\xb4\xf4d\x1c\x19\xe0\xc7F\xa3\xdf\xcc_Q\x99\x88\x94\xac\xd2\x01V\xab\xe4\xc4Y\xd3\xcf\xabZ\x13hL?\xd3\xa6c:\xc8[Q\xef\xb5vG\xae\xdf\x16\x1e|\xd9x\xf4y+\xe9\xb3YN\xca\xfc\xa3\x9f%j\x83*fSA\xfdo\xe3V_A\x0f3\x90}\xe9\xd7\xe2\xca\x12:d*\x8fp\x13v\x8d\xdb\xe1\xfa\x15`\xe6\xcb\x83\x850\xd7W\xff\xaa=\xaea\x03\xc4K\xf4\xffh\xb8\xd6!=\xa9]\x9a\x1d\xbf@\xfc\x0eGQ\x1d]\x8a\x19a\x94^lxd\xe2*c\x9d\xe1\xaa\x82\x18\xfd\xb7{\xfb\xe2\x91\xc5\xb9\x12^\xd8\x97kF\xdc\x99\xfb\x16:\xcb\xfc#\x9bT\xa8\xc0}\xc7\xdb2\xafW\x19c\xc5\xfcx\xf5\xa2\x9a\x1f\xfd\x0c/\xf9\xc0\x94\xf9\xce\x89\xef\x85P\x96\xf4\xc9Bl\xfa\x80\x9a\xdb\xd0\x81\x03PH\x88\xd6L\x06\xcf\x9a\x1a\xf0\x15h\xa4@\x19\x02\x8f%\xc1\xd1O\x965\'\x84\x81J\xddx-\xefD\x9a\xa3\'\xed\x1f\x02\x0f*D*\xed&\x8f\xab\x0c(\x1dc7b\x0f\xe52\xee\x91\x0f\xcf\xc9\xbdT\xe1\xea\xfaj\xd5\xd4T\xa9\xe7\xe6\x96#\t\x8cv5R\xf0D=\xc0\xa0O\x82\xba\xbd<\xe4u\xd5\xbf\x07\xec\x1b\r\xc6E\x03\xfc\xda>\x9cu\x9c\\lW\xee\x12\xc7ncu3\xff\xfb\xfa\x13\xf5\x11\x17\x17\xddh\xc1\x99s\xb8\x153|\xb8\x00o\xc5\x96\x9e\xa9zPK\x17\x04\x07\xb3e*\xeaB\xc4wV\xfa\xe9\xf9\x19Bqpu\xf6 \x01B\xdb\xe3\x92\x8c\xd2\x18\xef\xec\xb9lY$\xc10k\xa9\xcc\x15\x80%\xaf\xb5Y\xff\x8e\xc43i\x1b\xf4h\x07\x11(\xa2r\x1a)\xfc*\xdf\x86\xfb\xc0\xb9\x8e\xc0\x04\x14\x0f\xbf\x94\xf9v\xd4\x16\x8c\x93\xa4h\x02\x04\xb7\x02\xf5j\xa7\xfe\xa4\x85|\x03\x821\xeen\x99K\\\xb0\x9f\xaf\xecs\x1c0\x0b\x8c0\xfa\xb2b\x1eR\xbb,\xd5\x9e\xaflB\xb78\xe8\xc9\xe7\xd6N<\x94y,\xe6nB\xc0_\x12CDs\xb6\t\\\xda\x15\x8c\x16\xfa\xf4\xe1\xc1\xcc\xa6b\xbf/\x96\x94L\x8a\xb7F\x86J\x913\xd82-\x7f\xe9\xb4')
1
+ import flask_babel,flask_babelex
2
+ from hiddifypanel.models import BoolConfig,StrConfig,ConfigEnum,hconfig,ConfigCategory
3
+ from wtforms.validators import Regexp, ValidationError
4
+ from flask_babelex import lazy_gettext as _
5
+ # from flask_babelex import gettext as _
6
+ import wtforms as wtf
7
+ from flask_wtf import FlaskForm, CSRFProtect
8
+ from flask_bootstrap import SwitchField
9
+
10
+ from flask_admin.base import expose
11
+ # from gettext import gettext as _
12
+
13
+
14
+ import re
15
+ from flask import render_template,current_app, Markup,url_for
16
+ from hiddifypanel.panel.hiddify import flash
17
+ from hiddifypanel.models import *
18
+ from hiddifypanel.panel.database import db
19
+ from wtforms.fields import *
20
+ from flask_classful import FlaskView
21
+ from hiddifypanel.panel import hiddify,hiddify_api,custom_widgets
22
+
23
+ class CommercialSettings(FlaskView):
24
+
25
+
26
+
27
+ def index(self):
28
+ form=get_config_form()
29
+ return render_template('config.html',form=form)
30
+
31
+
32
+ def post(self):
33
+ form=get_config_form()
34
+ if form.validate_on_submit():
35
+
36
+
37
+ boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
38
+ bool_types={c.key:'bool' for c in boolconfigs}
39
+ old_configs=get_hconfigs()
40
+ for cat,vs in form.data.items():#[c for c in ConfigEnum]:
41
+
42
+ if type(vs) is dict:
43
+ for k,v in vs.items():
44
+
45
+ if k in [c for c in ConfigEnum]:
46
+ #if not k.commercial():continue
47
+ if k in bool_types:
48
+ BoolConfig.query.filter(BoolConfig.key==k,BoolConfig.child_id==0).first().value=v
49
+ else:
50
+ if "_domain" in k or k in [ConfigEnum.admin_secret]:
51
+ v=v.lower()
52
+ if "port" in k:
53
+ for p in v.split(","):
54
+ for k2,v2 in vs.items():
55
+ if "port" in k2 and k!=k2 and p in v2:
56
+ flash(_("Port is already used! in")+f" {k2} {k}",'error')
57
+ return render_template('config.html', form=form)
58
+ if k == ConfigEnum.parent_panel and v!='':
59
+ # v=(v+"/").replace("/admin",'')
60
+ v=re.sub("(/admin/.*)","/",v)
61
+
62
+ try:
63
+ if hiddify_api.sync_child_to_parent(v)['status']!=200:
64
+ flash(_("Can not connect to parent panel!"),'error')
65
+ return render_template('config.html', form=form)
66
+ except:
67
+ flash(_("Can not connect to parent panel!"),'error')
68
+ return render_template('config.html', form=form)
69
+ StrConfig.query.filter(StrConfig.key==k,StrConfig.child_id==0).first().value=v
70
+
71
+ # print(cat,vs)
72
+
73
+ db.session.commit()
74
+ flask_babel.refresh()
75
+ flask_babelex.refresh()
76
+
77
+
78
+ from hiddifypanel.panel.commercial.telegrambot import register_bot
79
+ register_bot()
80
+ if hconfig(ConfigEnum.parent_panel):
81
+ hiddify_api.sync_child_to_parent()
82
+ reset_action=hiddify.check_need_reset(old_configs)
83
+ if reset_action:
84
+ return reset_action
85
+
86
+ if old_configs[ConfigEnum.admin_lang]!=hconfig(ConfigEnum.admin_lang):
87
+ form=get_config_form()
88
+ return render_template('config.html', form=form)
89
+ flash(_('config.validation-error'), 'danger')
90
+ return render_template('config.html', form=form)
91
+
92
+
93
+
94
+
95
+
96
+ # form=HelloForm()
97
+ # # return render('config.html',form=form)
98
+ # return render_template('config.html',form=HelloForm())
99
+ form=get_config_form()
100
+ return render_template('config.html',form=form)
101
+
102
+ def get_babel_string(self):
103
+ res=""
104
+ strconfigs=StrConfig.query.all()
105
+ boolconfigs=BoolConfig.query.all()
106
+ bool_types={c.key:'bool' for c in boolconfigs}
107
+
108
+ configs=[*boolconfigs,*strconfigs]
109
+ for cat in ConfigCategory:
110
+ if cat=='hidden':continue
111
+
112
+ cat_configs=[c for c in configs if c.key.category()==cat]
113
+
114
+ for c in cat_configs:
115
+ res+=f'{{{{_("config.{c.key}.label")}}}} {{{{_("config.{c.key}.description")}}}}'
116
+
117
+
118
+ res+=f'{{{{_("config.{cat}.label")}}}}{{{{_("config.{cat}.description")}}}}'
119
+ for c in ConfigEnum:
120
+ res+=f'{{{{_("config.{c}.label")}}}} {{{{_("config.{c}.description")}}}}'
121
+ return res
122
+
123
+
124
+ def get_config_form():
125
+
126
+
127
+ strconfigs=StrConfig.query.filter(StrConfig.child_id==0).all()
128
+ boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
129
+ bool_types={c.key:'bool' for c in boolconfigs}
130
+
131
+ configs=[*boolconfigs,*strconfigs]
132
+ # categories=sorted([ c for c in {c.key.category():1 for c in configs}])
133
+ # dict_configs={cat:[c for c in configs if c.category==cat] for cat in categories}
134
+ class DynamicForm(FlaskForm):
135
+ pass
136
+ is_parent=hconfig(ConfigEnum.is_parent)
137
+ for cat in ConfigCategory:
138
+ if cat=='hidden':continue
139
+
140
+ cat_configs=[c for c in configs if c.key.category()==cat and c.key.commercial() and (not is_parent or c.key.show_in_parent()) ]
141
+ print(cat,cat_configs)
142
+ if len(cat_configs)==0:continue
143
+
144
+ class CategoryForm(FlaskForm):
145
+ description_for_fieldset=wtf.fields.TextAreaField("",description=_(f'config.{cat}.description'),render_kw={"class":"d-none"})
146
+ for c in cat_configs:
147
+ if c.key in bool_types:
148
+ field= SwitchField(_(f'config.{c.key}.label'), default=c.value,description=_(f'config.{c.key}.description'))
149
+ elif c.key==ConfigEnum.lang or c.key==ConfigEnum.admin_lang:
150
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("en",_("lang.en")),("fa",_("lang.fa")),("zh",_("lang.zh"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
151
+ elif c.key==ConfigEnum.country :
152
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("ir",_("Iran")),("zh",_("China"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
153
+ elif c.key==ConfigEnum.package_mode:
154
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("release",_("Release")),("develop",_("Develop"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
155
+ elif c.key==ConfigEnum.utls:
156
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("none","None"),("chrome","Chrome"),("edge","Edge"),("ios","iOS"),("android","Android"),("safari","Safari"),("firefox","Firefox"),('random','random'),('randomized','randomized')],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
157
+ elif c.key==ConfigEnum.telegram_lib:
158
+ # if hconfig(ConfigEnum.telegram_lib)=='python':
159
+ # continue6
160
+ libs=[("python",_("lib.telegram.python")),("tgo",_("lib.telegram.go")),("orig",_("lib.telegram.orignal")),("erlang",_("lib.telegram.erlang"))]
161
+ field=wtf.fields.SelectField(_("config.telegram_lib.label"),choices=libs,description=_("config.telegram_lib.description"),default=hconfig(ConfigEnum.telegram_lib))
162
+ elif c.key==ConfigEnum.branding_freetext:
163
+ validators=[wtf.validators.Length(max=2048)]
164
+ render_kw={'class':"ltr",'maxlength':2048}
165
+ field= custom_widgets.CKTextAreaField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
166
+ else:
167
+ render_kw={'class':"ltr"}
168
+ validators=[]
169
+ if c.key==ConfigEnum.domain_fronting_domain:
170
+ validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})|$",re.IGNORECASE,_("config.Invalid domain")))
171
+ validators.append(hiddify.validate_domain_exist)
172
+ elif '_domain' in c.key:
173
+ validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})$",re.IGNORECASE,_("config.Invalid domain")))
174
+ validators.append(hiddify.validate_domain_exist)
175
+
176
+ if c.key!=ConfigEnum.decoy_domain:
177
+ validators.append(wtf.validators.NoneOf([d.domain.lower() for d in Domain.query.all()],_("config.Domain already used")))
178
+ validators.append(wtf.validators.NoneOf([cc.value.lower() for cc in StrConfig.query.filter(StrConfig.child_id==0).all() if cc.key!=c.key and "fakedomain" in cc.key and cc.key!=ConfigEnum.decoy_domain],_("config.Domain already used")))
179
+ render_kw['required']=""
180
+
181
+ if c.key ==ConfigEnum.parent_panel:
182
+ validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/.*)",re.IGNORECASE,_("Invalid admin link")))
183
+ if c.key == ConfigEnum.telegram_bot_token:
184
+ validators.append(wtf.validators.Regexp("()|^([0-9]{8,12}:[a-zA-Z0-9_-]{30,40})|$",re.IGNORECASE,_("config.Invalid telegram bot token")))
185
+ if c.key==ConfigEnum.branding_site :
186
+ validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/?.*)",re.IGNORECASE,_("config.Invalid brand link")))
187
+ # render_kw['required']=""
188
+
189
+ if 'secret' in c.key:
190
+ validators.append(wtf.validators.Regexp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",re.IGNORECASE,_('config.invalid uuid')))
191
+ render_kw['required']=""
192
+
193
+ if c.key==ConfigEnum.proxy_path:
194
+ validators.append(wtf.validators.Regexp("^[a-zA-Z0-9]*$",re.IGNORECASE,_("config.Invalid proxy path")))
195
+ render_kw['required']=""
196
+
197
+ if 'port' in c.key:
198
+ if c.key in [ConfigEnum.http_ports,ConfigEnum.tls_ports]:
199
+ validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.Invalid port")))
200
+ render_kw['required']=""
201
+ else:
202
+ validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$|^$",re.IGNORECASE,_("config.Invalid port")))
203
+
204
+
205
+ # validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.port is required")))
206
+
207
+ for val in validators:
208
+ if hasattr(val,"regex"):
209
+ render_kw['pattern']=val.regex.pattern
210
+ render_kw['title']=val.message
211
+ field= wtf.fields.StringField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
212
+ setattr(CategoryForm,c.key , field)
213
+
214
+ multifield=wtf.fields.FormField(CategoryForm,Markup('<i class="fa-solid fa-plus"></i>&nbsp'+_(f'config.{cat}.label')))
215
+
216
+ setattr(DynamicForm, cat, multifield)
217
+
218
+ setattr(DynamicForm,"submit",wtf.fields.SubmitField(_('Submit')))
219
+
220
+
221
+ return DynamicForm()
222
+
223
+
224
+
4
225
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
226
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,39 @@
1
- # 2023-04-08T16:23:20.732145
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xe2\n\x00\x00\x12\t\x04\x00\xfc\xd8\xbe^\xc1\xc61\xd3\xa9V\xee\xd9P\xef\xcb\xac\x00\x00\x00\x00\x00\x00\x00\x00\xb0E\xa73\x99\xd0\xdd\xfcK\xa7_\x8c\x9e\\\x04\x1bsB\x1dv\x91UA`\x11}}\xa6:\x7fC\xc1:~\xce\x97\x8c`Z\xeb\x171\x8f_\x87\xe6\x12Lr*\xa6\xcb\xd0o\xaa\x95\x81H2Lq\xb6\xb1\xcf]`\xce\x08z\x0f\xcf\xf6\xbd@\x12B\xab\xab\x00\x1a(\xd6\x12\xdbV63u\xb3\xf3\x17_\t1\x93q1o\\\x8a\x93F\x1a\xea\x95\xb7\xf7\x95\x82\xef\xb1`\x1c\xd2\x041\xd6;\x18\x90\x87-(X\x8b\x1c\xa5\x1b\x17\xfd\x84\x1eJ)m\x84\x9b\x05&\xdc\xae\x7f\xb7\xb1~;\x89\xd0\x083\xe8\x17\xbd\x18\xdc_KI\xd99\x83\x13\x7f:\x80\xdb\xf5\x93\xe9u\x1c\xf9\x84\xc7\xcf\xfc\xbcB\xbb\xbe\xc9k\xa6\x18J\xeb.\x19\x89pe\x8c\xd9=\xb3\xab\xef\x96\xe2y*^\xd2\xa4\x10bE\xcc\xb3*\xa0\xa3\xc0^e3v\x8a\xe30\xa7T\xd1\xec%\xfe\xcd\xf3\xd9\xb7ub\x1e\xf6o"\x81\x97\x9d\xd6\x0b\xcdn\xa1\nz\x10"\xc3,\xecx\xf4\xa7H\x96\xcb\xb0\x86Q$\x18J\xcf\x07\xf7d\xdd\x8e%K\xc5\xcf\xdc|Gb\xc0X\xbe\xf7\xad\xedk4\x1dq\x04\xa2^\x12.\xba\xb4*\xbd\xa3\xcd\x1d\xcd{\xe9ts\xf7\x8d\xe8D\xad\x9dn\xe3\xfd\x00V\xf3_\xccaB\x8cP\xc1\xec\xa0\xfc\xdf#\x98\xc0e|\xbc\xad\xe7\xa4\x91\tR\xf7\x85F\xe50\xbb\xfcm\xbf\xc6\xd61jy>:LU\xb8\xdab\xa2\xac\xeb\x94]\x96d\xa5\x0b\xab@\x11\xa8$\x8a\xf7\xd9\xfe\xfd\xea\x99\xde\xdb1\xae\xbf{C5\x05\x90%t\xea\xa7%wQ\xf8?/\x96\xa5\xb8\x92u\x93\xf1#\x80\xe2\x86\x16!\xfcR\x14\xa2\xe6\x95=\x05\xdf\x85x] \xa9\xa7\x02{Y\xae b5\x1d6\xd5d\xe9%\xb4\xe9\x00\xdb\x17\xe3\xacIS\x9c\\\xf3}3\xd3R-LAl\xb7C*\xd4|?)0\xb5\xab\xdc.k\t\xb7\xe7\n\x04\xc2.\xa6\xac51\xcb\x17\xfe`&\x89QQ(\xbdR\xa2i\xaf\xd3\xa6M\xe1Qgw\x05\x1c\x82\x98*\xdc\xe4v\xfe\xda#`\xb1\xfb|\xdeM\xe5\xc7\x17\xc9\xdd\x857\x01\xd3\x87\xa2\x15\xe7\xc1[\xdb\xd6\xd6Z\x17\xeb\x1eq\xf8\x805#\xe8\xae\xe9\xb8\xaf\x9e\xe4\xec\xa0\xf77\xc7\xa8\xf1\x98\xa5\xd0\xadC\xba\xa0W)\xf8\xeeF\xb9\xef>vb\xf2\xbb1\xb1\xd8\x02\xe4/H\xa9\xe9/\xc1f\xb9z\x9a<8\x93Jo\xf8\xbd\x0fx\x08\x8d\xdf\x0e\x06\xf7\x8b5\xbax\xbccM\x03\x84Zu_3\x02\t\tN\xdd4\x9353\x05\x06\xa2\xf6R\xbd\x1e\x03n\x17\xa2\xe8\xed1{n\xdc\xb4\x1fN\x05j\xa6\xc9\x16\xd5\xce6<\xcb\x9c\xad\x95}\xc3Q\xc6\xca\xcf:\x1b<\xadM\xda\xa9t\xa1\x9f\xee\xfc\xbb\x86\xfb\xd3b\xdd\r\x8fbm\xe29e&r,!\xcc\x92\xb0\x1cG\xeeA2:\xf8E\xd1u\x8b\xbe]\xd5\x88\xcb\x08\x99K\x9c\xf2\xe4\x92\xe4+\xf0\xee\x9b\x19}\xc5\xd9/\xf4\xfa\x84\xe1x\xa0\x15\xf28R<$\x16(\x0c\x9c\x13\xe5\xad\x93\nj\xbb\x1b\x83\x03w\xad\xdb\xa1\xba\xc4\xed\xa3,(;`@e\xba\xae\xe6\xe9\xbd6+\xdf\x0e\x8bR7)+\xdf\xde\xe1<]\x8fj\xb3\xec<%\x82\xeeST\xd37\xde\xc1E*\x8bdDu-\xa7\xeb\xe5\xdb\x1b\x98\xd8|\x19q\xf0\xbf\x9d\x8a\xe3\x87)>.\xde\x17\xe4\xaag\xccwBq\xd8\xf1\xa1C\x88ZT\xfd\x8e\x91+\xbc\xf7\x03!@\xce\xf8\xf7\xf3\x82\x1a\x8d(\xd8?\xfaV\xc1dU\xe7g\x06\xe7\x10-\xeb\xbcf\xaa\xdc\xd2\xcdC%\x1cv\x1a\x1d(\x98\xdc\x0b\ru\xf9\xa1e\xb0\xb5a \x03\xc0\x1d\xd7\x00Y\xa5\xb2\x9co\xe6W\xf8\xf2\xd4{\xad\x16>f\x89\xf7\xc1\xc4\xcf\xfe\x14o\x05z\xb5\x1e\xd2|\xad^\xab\xf6\xdc\x19\x86\x8f5P_\xd63S\x0b\xe7\xa5\xcdL\xc5+x)\xf3v^\x1e\x94u\xa6\xd4\xc4sX\'&\xe79\xe2U\xe9\x8a!"\xbe\xbbGx\x98K|\x01\xcbn\x03n\xe7)\xa0\x97h8\x87X\xea\x1cC\xd2\x96{\xd9\xf9\xf7\x8b\xdci\xf5\x00uP\xf1\xd1\x16\xb2\x1eJ\xdd\xa5.\xcb\x7f\xf55\x9e\xa0\x85\xac2V4\xd3\xec\xa7e\xfeU\x0b\xab\xbdo\xe4~<d\x1f\xdd7\x7f[#\xb6\xb3\x1f|hN\xa8\xa4\x12]\xc8i\xdf\ttk\x7f\xd7\x1b\x81\x81\xb6`wF\x11\x90u\xda\x9eFI\x1a\x9f\xea\x04\xba\xe1\xf0G\xa2#j:\r\x0e\x01\\K\x01\xdaQ6G\x8a\x8f\x87\xa9a4\x93Ni;G\x9c\x91\xf2\xadE\xcd\x1f\xdfI\xee\x8a\xdfl\x9a\xf4\x1f\xf5\xed\xf3\x03\xc8\x02\xed\xd6\x8er\x0e\xd0\xcbP\xf4\xea5\xa1\x02g\xf6\xdf{\xca$\xcb\xc6\xda\xf4K\x00\xd9\xf3\x87\xb2\x99o\x8f\xfeFx\xe1\x00\xbc\x05\xba\x04\x80\xa2\xc0\xd0\x1e\xccb&\xe4Wj\xce\xf8\x1cQ=\x04\x8d\x93\xa6j-\xb4\xc2u\xe9\xb0b\x98"W\x19\x98\xdb\xc7\xb4\xba\x91QQ\x19k\xcbr\x9c\xa1\x02\xed\x93:)\x8eL\ns[\xfb\x96\xd9\x07\xb5\xbd\xcfD\xf7\xf2\xa6\xe7\xcb\xb7x\n\x10\x91)^\xd6\r\xbe\x80\x0c\x1a3v\x9e8\xd61\x9fA\x16`\xcb\x8a\xa4i~]\xb8\x8bY\x8f\xc8d&"\xae\xbcJ7\x17;\x7f\xd0$%\x95r@T\xf5yb\xfb\xb0\xfe }R\xf4\xecv\xc4\x8e+!\xbb\x12M\xbb7\x97\xa6\xe1\xaf<\xa0\x97\xa7\x10A\xdb\x84\x94\xdc\x9e\xd6\xa2\x86\xf3hs\x9a\x98\xa1/_*\x96":R\x89\x8azlP\xfb\xe1\nZ\xdb\x81\x14\xdd\xa9\xa9I\x9d\xe6\xe7\x8b\xac\x16A\xde\x91\xd6\xdf\xdb\x90\xc5]<Xo\xc5\xcbh\xb4\x1eJG"@\xa1bq\xea\xda\xc98\xaa\x92\rw\xf0\xcc\xd8WZ\xf2VP\xdd\x84\xc4sm\xfe\x1e\x81\xf3m\xa6y"8\x8f\rF\xcc\x9c+\xa5\xeb<c\xf46k4\x92@u\x87D\xf4\x0eEx\x18\xa8\xbdQ\x02\xaah\x83\xf5\xf3\xa4\xfc\xc1\x8a\x82\xcba\xe0\xef\xb5\xc1\xe4\x03\x89\xc2\x817\x15\xc5\xe5\xf4\'\xf6i=\t\xd0\xd9\x89\x86\x92\nw\x18\x05\x00\xae*\x15\xd8\xbe9\xd0\x19 \xa6o\x86\xd8\x0cJ r8\xf0\x86U\xaf\x1de\xb5\x8bRe>\xfdkDf\xb2\x93T\xedF\x8b\x0c\xc3\x04\x8c\xb1a\xb6V\xe8%\x84\xdc\xfa\xbe.\x808\xef+D\xa4\x13\x98\xa5iu\x9d|T\xea2}\x97-\xb9\xd5\x01\xfaK\xef\x84\x84\x06\x18\x93.\xd3\xc5\x92\xf7\xb0\xf4\x15\xf1{\x9c\xf0L\xe9\x02\xe5\x9c4\xbfD\xb1\x13\xce\xe2_t\x8f`\xe7\x08w\xff\xc7\xfd\x0e\xb5\xa9\xd7\xad\xe1\xe6\x81BR\xfc\xcc\xbf\xd7w~0-\xd7\x7f\x1d\xa7\x97\xb0\xc9\xf4\xde|\xd3z\xe4O\x95\xc0>\xf2\x11W\xa09\x84/[\xfb`\x9d8\xb7\x0c\xf1bR\xe4\x04\x94&\xa2eO\xcbG\xb9:\xff\x8a\xfd\xb2\x11Y\x8d3\x1ds\x03l\xe0\xb9\x8a\xeb\xe2\xab\xdf\x1d\xfd]\xaa4\x02\xba\x8eks\xde\xc6\x81\x05<MZy\x05.7]0\xe3\xd3Z\x8b.\xfd[\xe2\x9fR\xcfk\x83\xc9l\xdb6Z\xde9)\xadq\xc6\xc1Q\xaa\x85\x8cA\xd7\x8a\xef\x05\xff\x0f\xf8\x9ey\xa3\xd1\xe2G\xe5\x05E\xa5.\x12\x03\xcfDF\xd1\x88\xc2\xb5R\x90\xae\xf8P~\x16\xf8,\x11\x8bGV\x12}\r\xcd^\xd7\xed\x85\x15\xdb<\x1dc\\\xb6\xb5\x99\xfa_\x9a\xb1`\xc5\xec\xe0\xdch\xfah&qVn\x18\xf7\xe22\xca\xf2\xd7u\xc5z\xa3\xfc\xae\x9f\xc55;\xab\x9ayN\xa4\xf5dQ\x03\xfd$\x12\xd1Y\'x~{l\xb9\x1c)\x0f\x053\xc7\xb36\x19\x890a\x1b;\r\xb4`E\xd2O\xc7\x92\x0b\x82H\xb5\xe3\xff(W\xd3\x91\x06\x84\x06\xbb{\xf5\xdb\xce\x8b\xcbK\xd1\xe8\n\xf7MSX\x93\x89[\x91\x845\xb5p\xb4\xf54\xf9"\x8d\x9fKr\xa8\x8a\xfa\x11\xf2\x17XF\x03\x87\xa0-\xd5H\xa9\xbdE\xb0a\xdb\xfb\x94\x96\xac\xbf\x19\xb8\xc4y\x8f`\x7f\xb2K\n\x15\xe7Ri\x19X\xfe\xe8O\x04\xec\xc5\xbc\x9b\x96\xbc\x06\x88\x8b\xf1Y\x02\xea\xf3\tJ\xf0w8\xacl\xb2\xc5\x08\xddo\xd9\xda\x9a\xc3(0\xc9\xc2\xcei\xca\x98\x9bP3\x98o\x7f\xa1\x98f\xab\x11\xebTW/s^\xd8\x8c\xa2\x07\xf6_\xfe\xce\xef\xa7/\xc8q;L0Nr3j!+\xad5.%So\xc5\xb3\x140\x94\xc1\x8a\x0c\x18\x02\xb8\n\xf2\x8f\xb5\xec\x04+\xb50{\x8b\x9d\x00\xa0%\x98\xa4\xe4D\x0c\x88W\xb2\xfc\xcb\xcf\xe9\xf3\xb5\x01W&\xaeeNfo\x93\x18Lb\xa9\x92(u\xf4/e~\xb0\xe7\xf6\xef\x84d\x84\xc6\x9d\x88C\xbf\xb4/aX\x9eK\xc3\x130\xda\x81,\xd3\x1a`W\xe2\xa1\x91\xb1\x0c+\x93\xee0\x9f\xaf\xd67\x8f\xed\x9a\xb6\x02\xa2\xe7\xcf\xe0\x82\x19}l\xb1@\xb1\x10YC\xeb&+/\xf7\xfd\\\xb8\x13\xaf\xda\x0ba\xae\xf33\xd4\x9ac3\xb1\x0ex\xbfB4\xcb\xa81\xfe/(8\xcd\xc0\x1d\xb7\xa9C~\xaa\xb4\x05\x8c\x1b\x01\x14t\xf2\xc8\x83\xe3H)XD0 \xb1\x02\xc8\xc3>I\x07\x97E\xab\xd1O\x7f\xb7$\xad\x83! R(e\xa8\xfd\xd1(P5ZJ\x1aTI\x7f\xa9\xc7\xafva\x81\xa0\x81\xca\xfds\x83f\x9fg\xf1\xcd\x99=\x89\x0e\x10\xb1\x98\x13\x83uIN\xd3\xde\xf2kI@\xd3\xea\xce\x9c}\xcav\x01\x94\xb8}\xb8\xe1\xfb\xa7{\xa0\x1d]\x83\x95Dx\xa9M]G\x88\xea\xca\xceZi\x12\xde\x07\xdf\xe6\x96\x9f\xe20\xdf+\x05\xdf\x88p\x0bE\x13L\xfc\xb2\x10\xe9N\x03\x80y\x1dO\xba\x1e$\xb9\x17\x98\xd8\x92a\x8a,\xf6o5\xf3\r\xaa\xdd\xf8\x01\x03\xd3\xec\xa6\xfe\x01H\xf089\xd7\x88\x8eK\xab\x8d\xbcqV\x08\xb6\x88\xf2\x82\xf6\xa4\x10\x9c\x1a\r\x05\xc7N\x0e\x90\xd4\x9a\xc4\x07\x9e1\xca6\x05\x99D\xe9\xa8\xaa\xcea\xf5\xb9h6\xd65o\x8c\xc8\xe7\xf4\xb5w\xff1?\x16\xe9\x03{\x04\xf1\xae\xfd\x86\xa1\xa7["\x04\x10\x0b\xb0\x1d\x0cR\xe2\x89\xa6\x0bo\xb6\xb6\xb4e\xea_|\x96}\xc3\xee\x866\x1b\x94\x86\x96\xdd\xe6\xfe\xd9\xda8n;\xfe\xae\xd5I\xd6A\x99T/.\xf7`\xd6\xe8*b\'\xb4\x19\xacx\xe1\x83\xbaX\xf9\xd5\xf7t\x01\xea\xcfF,\xbc\xe5\xb7\xfe\x83\xa2x\xe1gM\x13n\xcf+\x9f\x95\xd2\x89\xdd\xc5\xc2+d\xb5G\xca\xe1\xcf0\x02 \xd6\x83h@-\xfeV\xdd\x13Yq\xce\x01I\xde\xb5X?\xeb@s\xdd|\x0e\x8dB%\xa69\xb2r\xd2\xd0U\x8c\xefdj\xc06\xbd\xca\x8c{E\x0by\x1c>\xb3vR\xd2\xa2\xf7@\xf5\xe2\x8a\xaa\x10\xbd\xb7i#\x0b\xe9\xcb\xd1eJ\xe7\xe1G<\x94\xd4\xe2\x89H\xa1\x16\x9f\x05l\x08W\xe8R\xe8\x80\x97\x02p\x1bB+sOU\x1dE\x81\xdfXv\x90\xbdZ\x14\x0e\xf4\x8f\xf17\xa46\xa7\x91B)V \xd3\x8b\x91\xc8\xa5\x89\xaaJ2\x94*\x1a\x1bz<S\xa6\xdbq\xbc\x8a\x91\xb5R\xea\x9e\n\xad\xe66tb\n`\xde\xf78E5\x99\xc3\xbdH\x0b\xdd\x9b\xa5\xb4A\xc2\xeao&\xd4\x11\x03\t\xc0Xw\xc8\xe3F\xca\xb9\x870\xc0\xbf\xf4_$5f\xa2V)1\xe5{ \x9fk\x87')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from flask_admin.contrib import sqla
2
+ from hiddifypanel.panel.database import db
3
+ from wtforms.validators import Regexp
4
+ from hiddifypanel.models import User, Domain, DomainType, StrConfig, ConfigEnum, get_hconfigs,ShowDomain,hconfig
5
+ from wtforms.validators import Regexp, ValidationError
6
+ from hiddifypanel.panel.admin.adminlte import AdminLTEModelView
7
+ from flask_babelex import gettext as __
8
+ from flask_babelex import lazy_gettext as _
9
+ from hiddifypanel.panel import hiddify,hiddify_api
10
+ from flask import Markup
11
+ from flask import Flask
12
+ from flask_sqlalchemy import SQLAlchemy
13
+ from flask_admin import Admin
14
+ from flask_admin.contrib.sqla import ModelView
15
+ from wtforms import SelectMultipleField
16
+
17
+
18
+ from wtforms.widgets import ListWidget, CheckboxInput
19
+ from sqlalchemy.orm import backref
20
+ # Define a custom field type for the related domains
21
+ from flask_admin.form.fields import Select2TagsField,Select2Field
22
+
23
+
24
+
25
+ class ProxyDetailsAdmin(AdminLTEModelView):
26
+ column_hide_backrefs = True
27
+ form_excluded_columns=['child']
28
+ column_exclude_list =['child']
29
+ # list_template = 'model/domain_list.html'
30
+ # edit_modal = True
31
+ # form_overrides = {'work_with': Select2Field}
32
+
33
+ def after_model_change(self, form, model, is_created):
34
+ if hconfig(ConfigEnum.parent_panel):
35
+ hiddify_api.sync_child_to_parent()
36
+ def after_model_delete(self, model):
37
+ if hconfig(ConfigEnum.parent_panel):
38
+ hiddify_api.sync_child_to_parent()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
39
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,51 @@
1
- # 2023-04-08T16:23:20.724982
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x1d\x08\x00\x00\x12\t\x04\x00\x8e\xb6\xfe^\x15\xac\x86\x16H\xb4\xb1+_\xaeK\x95\x00\x00\x00\x00\x00\x00\x00\x00BC\xf9\xa9>\x96\x1fI\xf8\x01\xc5*\x12\x81o\xb2\xc2%\x01\x9c\xe7\x8e\xad>\xf6\x80[\xac\xa7\xee\x89K\x9e\xb2\x94\xfcv\x84\x98\x8d)dF\xae6Q\xc6\xe2T\xa7\xd2\x91$\xab\x9e\xc6_\x80##\xe2\xb5\xf0^\x8bt\xac\x02\xbfu\xc0\xd5\x01\x92D\xf3\x9c\x02\xfc^\x9d?OP\xd2\xc0\x12N\t\xfa.*!$\xef7!}\x01g\xf18\xc7\x0e|\xa8\xd5I /\xb5\xb9\x05\xe5\xc1\x8a\x86?\xe0\x08\xb5\xda\x90\xba\xd8\x05\x9a\xa9\x9f\xc9\xfaj\x15\xfe\x02\xfa>=8V\xa2\x9ag\x18F9|\x96\x9b\xe2e\x04>\xf7\x99\x826\xf5\x87\xc50\xc8J\xc0\x07V\xebda\xf8m\xb1\xae^\xbb\x99\xc1-\xc0\xd6\x89\xcfNW\xc1\xde\xa0\xcd~$\x87\xf9\r\x99g.\xce\xe8R\xa3p<\xad\xc7[\x14v\x9fG\xd0L\x18J\xb6\r\xd7\xc6\x1c\xfb\xfcz\xcf\xc1<k\xb8\'\xb4\xefy\x16n\xdf\xaa^\xf57\xed\xe5\x83\x9bM\x17\xe9\xdc\x14\xae\xd4Mk\xc8\x12\x10y]\x9c\xc4l\x93D\xf4\xa7[\xf7\xfey\x15sw\x11I}\x0f\xd7\x9f\x18\xd3\xf9/\x90zD(8\xc3E\xdf\\\x10\xd2\xef\x0f\xd1\x11N@\x18\xba\xf8\xe9\xe8\x88\t\x11k\xda\x92V\xb4\xe5~\xed9\xe3\xc0Ae\x15)\xa6\xdf\x14ck\xc4\xbc\\\xbd\'L\xb9\x07<\x9e\xda\x91H\x08\x1a5\xeaY\x1f4z\x0b \xba2\xb7\x1cyw\xa5\x05]\xf5\x8cx96\x18\x80\xb4\xf0\xccB\xd5(/7\xbfj\x82\xe0\xd1U\x1fk\xdd\xed\xa1[\xb1\xcbO\x8f\x03CU\xc2!\x1e(S\xae\xab#\x9eO\xbbY\x92\xc1\xcd\xa8\xf3\xc4\xa9\xa4\xde\x96\xc6\xf3p\x8a\xac\x87\x81\x1ep\x8b25\xf5?\xaf\xa7\xc7\\\xcb\xb0\x052\x99\xf5sD\x0c\xf8\x0cN\xf9\xe8\xb2\xa2QT\xe8+\x07bPN\\ob\xcf\xe14\x95\x0c\xde\x0b\x9a7\x82\x0e\xceA\x12\xd5BA\xfc\xef`\x8b\xf9\xf0]3\xfbQ%\xc9\x97Lk\xdb\xdf)\xd6\x91\xaa\xda\xde@G\xe2\x00<;\x80\xad~\x95c\xdc\xbe\x96\xfay\x10\xe6\xbbD\xbb\x96\x97UV\xb9\xef\xf4J\xc7\x08J\xdd\x86\xa1]\xb6\xf9}\xee\x14H\x9a\xf9\xa0\x08\x0be\xa8\x82\xa0kH?\xabG\xe5\x11M3\x81m\xd8\xce\x02X\x0cI\xd4\xa8`\xdc\xdeH\xff\x94m\xd3*\x13\x1e\xeep\xfa\x94\xaf\xb9\x8b\x7f\x9b\xb6e?V\x8f\x0eq\xc5qm\xb7\xe641n\xcf\xd0N&g\xa4\xf9\xd6\xe8\xe64\xaa."^\x1a\xc5]\xadt\x92\x0b\x0e\xeb7\x8a\xdeb\xb5E\x07\n\x9b\xf2E\xc9N^\xc2StB1\x0f\xdeS\xe9\x92\\\xb0\x87\xbab(-\xae0Mk)\xae"u\xaf\xb2\t7\x96\xbd\x90;\x98\x00/\xd4\x88\x06\xbc\x02\x97\x12\x01\x86eo\xe9\x91WE\xb2\xa6\xa2\x99\r*\x93\xfa`\xb5\xfa\xb9\xee\xed\xa4<Z\xda|\xa0\xf9:\x86\x9aY,|:\x00\xa7\x1e\xc8\xa3i\x82Q\xb43\x19d\x9aOs\xe4\xdcz\xf6\xff\xd6\xcbT.D\xb06E\xd34\xea^\xee\xa2|\x13\xec\xaa\xcc\x05\xdd\xc2\xbc<\x83%\x91\xda<D\xf6\x12\x11\xdb\xdc\xa3\x9dQ\xeb\xb0\x10\xde^\xfa"\x92\x81\x99\'\xb7e\xea\xe2\x91\xe7]jSm-\x07\xaf\xbd\x9e\x05\xe8l\x8cW&\xfc3\xcfx\x03\xdcLQ\xc4F\xe7X\xa3\xd9\x06\xd5b}C&\xce\xb0\x89jg\xd0\x05z\x07\x86\x15T\xee\ti8\x8b\xf5x\xa7\xab-\x9e\x15UQS\xfb\x00\x81\\\x84\xdc\x05Y\x9e\x1d\x92\xcf\x8c\xfd\x82\xdb\x0c\x1a\x94\xbdH8\x9e\xbd\xfe\xc4^\x8e\x9a\x98!\x9a\xe0\xeco\xb2f\x82\x89|\x8e\x1a0\xed\xc7\xf36;\xeb\xc1,\x8e\x042`ui\x1a_\xc7\x1c\xf5Z9q8\x89Wg\x1d1D\xe5\xec\xf2\xb9\xad\xe3\x8d\x9ae.\x1b\x95J\x9a\xaa\xbe\x9f\r\xbf\x1c\x7f\\\xe6\xdd\x88\r"\x86\x92:\xca\x1f3l\xa0*\xb7\xb2;\xf9B\xd0\xa2\x85\xd7d@\xbc\x110\xe4\x14"w\x17\xf6 8\xeev\xe3+&{\xcd\xba\xd1\xd3=:8\x9deq!\x17\xc2\xbf\x06\xaf\xcd\x1c9\xd9\xa9\x85\xb4\xf3\x96\xdcS\xd3\x10\x01\xe7\xdb\xd2E\x9dr\x00\xb8p\xd0\xbb(\x0f\x15UI5[7S\x12+_\x00\xd5\x12H\x08~8kH\xd8A\x80\xec\xd8\x06k\xf0\xfdz@\x89\xcf\x14\xad\xb9\x1b\x83\x109\xf7\xd3\xc4\x10kmy\x88NTc&\xc7\xef\x1a;\xefS\xd1\xed\x8bf\x04\xc7\x8bZl\xb8\x1b\x16p\xeb)I\xb42a=~#dc\xb1k\xc7\xff\'\xf8\x02\xe7\x12\xf6:]\x11d\xc0\xd3\xe6\xba}y%\xd4\x1b\xff\x12\x9f\x84\xad\x14\xb7\xe4\xcf\x1e;\xd5\xad\xb6\xf8o\x04\xfe+O\xeb$\x92p\x97\x16+\xf8\x8f\xd0F\xc0\xe2\x88\x7f\xf9\x91\xe5j\xd2\x05\x8eE\xb2\x99\xfa\xb2\xe4\x8d\xd5\xba\xe4n\x04&\x82\x84O\xd8\xea\xeb\xb8lw\xcb\xbe\xd7\xe1\xed\x17B\x98\x1d<\xae\xee\x978\xf5t\xfb\x13\x00\xec\xc6\xe5\xfe{\xeb\xdb\xdc\x95\xd9:\x15\x151*\xb1|\xe9\xec`\x0b\xf0o@\xacp\xc9\xfb\x10\xab!\x02\x93\xed@\xfa\t[\x96z\x83\xec\xef}\r\x1fg@PL\xee?d\xd3Ze,7;\xf4\xd7\xd9<\xd3\xb8\xb7*\xad\x0e.\xe4\x02\x1422\x1d\x03\x86\xe7\xa9I1\x80\x9b\x14\xfe\xad$\xc7\x80\xc0gR\xd8<\xde\xbe^\xa3\xb9\xdc\xe7\x03\xdeu\x0b\x01V`U\x96lL\x1b\xff\xcd#\xa6\xda\x0bw\xbd%9\xa7\r\x96\xa3&\xf8\xc07\x03\x01\x1fC\x9b\xfe\xc3\xb6\x8e\x8f\xeaf\x81\x91\xc2\xa8K~\x19\xb1\xe5\xbe\xb4\xbf\xf3\xe6\x9a\xef)\xe2\xafHbq\x86\xd7\x17\x12\xbb\x98\x07xW\xfar\xc9\xc2\x05\xfc\xba\xf5~\n\x8e\xab\x07\x06\xde*;5<V\xafGG\x8a \x03\xae:(C\xf4B\x8a\x04q=\xc1\xfa\xc2\xe04\xc3l\x1dHo\x8b\x8eulBI\x8e\x93B\xa0\x03\xea\xed\xc3\x0c\xf3z\xb1$\xe7e\xf27\xc6w0\x92U(\xbe$\xc9dZ8\xdf\x96\x9c\x0bJo\xfa\xcf\xe4!c\xf4\x1cbB\xef\r|\xf3\xd7i\xb8\x81d\xac=\x01\xeb\xa6j<S;\xd9q\x9c\xd7\xbec\xb0\xf6\xd6\xcf%\x86\xef\xa2\xea\xa5\x0ei\x08\x02I4\x98\xda\xb3\xab/\x1fj\xa5q\xa0~\x8b\xc1\xdc\xb9I\x1b\x8d\xfcIo\x9d\xb2q\x92,\xf1qY\xb7\xf2B\xf5`\xae\t\xfc\xb3\xd4\xc3\xb0\xe4\xb5\xe9\x83\xc5\x14\xb6N\xce\x81\xc4\x10\x88\xa1\xae\xd40v\xba\x98\xfe.\x0f\x94y! \xa7`:\xc0\xdcx\xff\xfaFqZ\xaa*\x81v\x84\xaaq\x14\x0e3i. \xfa\xc3\xc1\xef\x9a\xeb\xfb\x12\xdd\x1f\xc4\x0b\xf8ku\x8a\xd6]z\x0e\x7f\xdc\n\xa7#b\x88\xedFZ\x928:\x90\x1b\x1f\xb5sY\xb7\xbc\xc6\xe4\xdb\x08;6~K\x13\xc6\xf5blGmLz2\x08\xbe\xf7\x9d\x160o\xd8\x04BY\xb1\x83\xac\xd3\x93a\xd8\x90\xf9|{\x12 \xb7\xa5r\xae\xe7\xdf\x05c@\xb8\x8e\xc2ol\x87\x9fj\xf7Dh\x0bJfn\xd8\x04QQmr7\r%\xe9x\x7f\xd1pq\x08\xe8z\x04\xf7\x85\xd2\xda\xa7\xcd\xea\xaa\x8b2oQ\xf2\x0e\x0f\x85\x90,p&\xdd\xe8\xecD\xf6\xee\x94|T.\xe0Q\xd9\x0c{!\xe4t\x8a\xac\xf6G\xd9U\x8d\x0b\x9d\xc1\x1e\x07q\xb9O\xb2\xfa\xe2\xe7\xda"(\xd7\xb9\x92\xcd\t8\xc5\xdd+9\xe1u\x94ws\xcf\x1bL\xf6j\x1eK\xa1\xd8=Z!\xb7\xd4\xee\xe8\xdb\xbah\xf5\x89$SH\xa2\xf1@\\u[\xb4\x82\xca\xec\xce=\xdb\xac\x0f\xa9\xf1Ej\x01gPv\x15w\x14GhN\xe4a\xc5D\x8f\x1c\xa0\xd0\xdfF\xd99\x0c\xe3+\xc9\xc8\xabb\x05\xa8\x0f"$\x1a\xcf\x06\xdb\xf5\xc9\xac\xbf]\xd3v@=\xb5\'\x16%\xe3%\xc9\xa8\x9b\x94H;\xf6R=<\xca9\xf8\x9c\xff\x8f\xc3q\x00^\x91\x81\x17\x1b|w\xd3\x18\xa4\x14Xww\x01C\x18\x9bkm\x9f\x1e\xeadu\x9a\xe1\x8c\xae\x1b\x94L=\xb1U\xbc\x0c>\xa7\x13\xc7,\xe25\x90\xf2\xd4\xbb\x97\xbc\xec]\x849\x96\x82-\x13\x8ba\xd4\xdcF\xeaUW\x15\xba\x06xp0V\xa4\xbb\xff\xba\xab!\x8e\xdf\xe7\x87a\xf9\x1e\xc2\x8f\xcc\xff\x0e7P\xc2\x88\x8e\xd0\x0cQ\x0c\xea\x8e\xf1\xa8\x8a+\xda\xadp1\xa6\x83\x164\x05\x1f\x00\x1b\xbb\xa0ld\x19\x82%\xe5\xa9\xe3sO\t\x1e\xd8ZA\xa8')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from .ProxyDetailsAdmin import ProxyDetailsAdmin
2
+ from .CommercialSettings import CommercialSettings
3
+ from hiddifypanel.panel import hiddify
4
+ from hiddifypanel.models import *
5
+ from hiddifypanel.panel.database import db
6
+ from hiddifypanel import Events
7
+
8
+ commercial=False
9
+ def init_app(app):
10
+ from . import restapi
11
+ restapi.init_app(app)
12
+ return
13
+
14
+
15
+
16
+
17
+ def config_changed_event(conf,old_value):
18
+
19
+
20
+ if conf.key==ConfigEnum.is_parent:
21
+ if conf.value and not is_valid():
22
+ set_hconfig(ConfigEnum.is_parent,False)
23
+ if not old_value and conf.value:
24
+ Domain.query.delete()
25
+ db.session.commit()
26
+ db.session.add(ParentDomain(domain=hiddify.get_ip(4)+".sslip.io"))
27
+ db.session.commit()
28
+
29
+ Events.config_changed.subscribe(config_changed_event)
30
+
31
+
32
+
33
+ # def db_init_event(db_version):
34
+ # if not is_valid():
35
+ # db.add(BoolConfig(ConfigEnum.db_version,10,child_id=0))
36
+ # db.add(BoolConfig(ConfigEnum.db_version,11,child_id=0))
37
+ # return
38
+ # # if hconfig(ConfigEnum.is_parent) and ParentDomain.query.count()==0:
39
+ # # external_ip=hiddify.get_ip(4)
40
+ # # db.session.add(ParentDomain(domain=f"{external_ip}.sslip.io",show_domains=[]))
41
+ # Events.db_init_event.subscribe(db_init_event)
42
+
43
+
44
+
45
+ def admin_prehook(flaskadmin,admin_bp):
46
+ # flaskadmin.add_view(ParentDomainAdmin(ParentDomain, db.session))
47
+ flaskadmin.add_view(ProxyDetailsAdmin(Proxy, db.session))
48
+ CommercialSettings.register(admin_bp)
49
+
50
+ Events.admin_prehook.subscribe(admin_prehook)#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
51
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,16 @@
1
- # 2023-04-08T16:23:20.784884
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00)\x04\x00\x00\x12\t\x04\x00g\xcd\xb2i\xce\x90\x10or\xee\xef\x86^\xb1\x83{\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x10\x91\xd5_Y\xbd\'-\x1e\x9e\x88GcZ\xb7\x8a\xbbgH\xf6*\xa4\xda\xb2\x19`\xab\xc4K_2\xdb\x7f\xa8.\xb8\x88\xe9\xfd/\xce\xc2>\xa2\x82\xc7t\x85\xc0\x86\xbe\xe0\xfeX\xed,\xb3\xc5$8\x82\x1bT1B\xd7\xd5W\x99\xbd\xc8\xa7\x99\xde\xb6c\x15pr#.\x07c\x0es\xe4\x9f\x85\x8f\xc6\xba?0\xbaT\xd4\xd5\x97R\x9e-\xa2\x9bce\xd6\x9f\x80\x02\xc4\xd8y\x0fZZ\xaaV\x9c\xc4\xe6N\xbef\xa5\xa1\xb8\x0b\xd7X\xe4\xfaW\xd5!\xfb\x96j\xb4\x19l`Y\x95p\x04$Q\xb4\xdb*\xbc\xc1\x86\x0e\xd8q\x89\xec\xb8\xf8\xf5n_vd\xe8\xcbD\xe7\x9f\xa673\x05\xbe\xefyq\xfcl\xcc\xbd\x9c\x96\xd9M\xe0\x185\xa6x\r\x01{d?-\x8e\x9f\xb9\x10+]\x9f:\x80\xa5\x807:K\xa2\xa1$V*\xb07\x13\xb59\xcbYC?\x84\xefcf\xfdU6\x11\xa2\xe7\n\xd8|\xd6\xd9\xf6\\nnd\x18<Fn\xaa\x13\xcb\x04\x83\x01\'\x99\xaa\x91\xa8k\xcfd\xc4\x8e\x05_\x0b\xbe\xe13`E\xa9\xc4@\x9cW\xed\xaa\xb11\xa9V\xcb\x05P&\xedg5\x9e\xfd\xfc \xb5\xb7\xd8\r\xfa\xef\xa0u\x02\xf0\xcc\xc1QMX[\xb7\x1a6\xb3\xd2\xa1b\xe1\x07\xa5\x9e\xd7\xa2;\x05m\xba\xb1\xf2\xd5!\x88\xc1\xf1\xe2/\xd0x\x8d\xf6r\x83\x0e2\xe1\xe7\xd4\x9d^\x8fi\xd95[Y\x0fz\xd5\x93B\xe7]\xf3\x8fl5\xa6G\xf4\xad\xd6R\xad\xfa3\xc6\xc3\x10\xc4\xea\x89\x9f\xa1-\x93\xe4\xb7\x92\xf9&\x14\xe6&\xcb\xe2\xe4\x1b\x85\xa1}\x11\xac\xcdS\x1d\x8b\x08\x82&%)#\x8au\xc8\x83\x7f\x9e\xa5*7\xe9\rW\x82Z"\x99\xe3\xee\xd4\xc3H\xe6\x86\xb9v\xf0=i\xcb\xd5y\xe0al.\x1b\xeer\xac\x9c\xc3YLw\x81+\x13=q\xdaTe\xc1:\xbf\xbez\x93\x9a\xe4\xb8Dp<\x01U\xe0\x1fv.\xb8Z\x89\xcb\xe9?\x805x\xcb7S\x9e\xf6\x16\xa5\xab\xfd\x15\n\xe7\xa4\xa3Y\xd1oS\t\x12\xdf\x9b\x03%\xcdI\xfbB\xbb+?\xec\xb6\xfa\x1bX\x03\x7f\x96\x1ac\xe4[Q\x90jC\xc1\x9d,wjt\x1bP\xf1MF/\xf8I.]+1[MKw\x04\xea\x023!*\xad\xb8L\xec{B\xebqZr\xab\x9a\x95\xa1E?\xe2e\xc6\x83\xcey\xf0\xc7\x15\xaf\xab$\xbf\xdek\xbd\x10\x91\x80QU\x12J\xa2p\xc7\xf6\xec\xe0\x1bL\x03\x13Y\xf8\x94\x0e\xc5\x81\xe3\x8d\x0c\xbd0\xb1\xd4\x8e\xba\xcb\xc5\x14\x96Q\xfd\xed2;{\x9bt\x93\x93~T\xaa_4\xb9\x9f\xb8\xb0\xa9R`\xa2\x00\xdeY\xbf\x12\x92D\x1f\xfc\x10Y6b\x9e\xc3/\x1a\x1b_\xf6W\xca\xd1\xcb\x0c\xe2M[\xd5\x16]\xfeJ\xdehX\xd3t\x85$\xc0\x80X\xf3\xae\x8b>\xbe\xb4\x88\xb2p8\xc7\xdaN\x04|`1R\xdb\xc8\xd8\xfaX\xbc\xe83\x90\xf1s\xba\x00\xb2m\x18?I\t_\xaf\xa7\xe9>\xc8&\xb7A&7zg\\\xa0AF[\xaa\xfe\x7f\xe1&\xdb\xf8\x94,=\xdf`S\xbb\xe0D\xbeC\xeek+]S4\xf18\x8d\x9b@\x97\xc9$`\x9dG\x8a\x87\x1b\x08\xd3`\xe3\xe2C\x1e\xd1\x00\xdf\x8d\xeb\xf5u\xbd\xe2P\xfb\x13\xdf\x0f-\x84\x9a\xb9\xcb\x9e\xceM\x0e\x95\xb0\x8a\x85\xaf\xe2\n\xb5\x19\x1bIsM\'\x0f\x9e;1\xe1q;V\x88\xd1\x92\xfe\x08\xbb\xa9!\x9a\xd3\xcc\xf3\x81<e\x11R\xbf2/\xa3\x8a\x98\x0fb\xdb\x19A\xa4V\x15\xb9\x03p\xffj\xb8D\x04c\xb4k\xf9\xfc\x0f<\xf0\xfd97\x90\xe4\xfb\xc5jxz\xcc\xdf\x0f\xf1Q\xa6\xf5\xd5\x1f\xc4\x19\xa1\x07\xe8\xb4\xe0\xde-\xb6*\x8c\x08\xd6\xca$\xc8e\xd1\xe2\xf9\xcb2A\n\x0cz\xc2\xf3\x01\\\xc0\xc1\x1b\x89y\xfc\x9dRN\xd0\xb4tix-(\x1e\x0c\\\xf7b\xe8C\xa7j\xd4CV\x88M\x98\n\xa9\x00\xbco>9\xce\x90!\xfaM2m\xf8\xfb\xc6\xaa\x81q\xaa\xa2\xf2)\x81\xe4\x93\x01\x037\xfd\x1f\xe9V\xc3\xa4\x85nS\xe1S\xa4\x0c\xc0V\xa7\xbfp\xa7&+\xa5\xc6\x0c\x80\xd9\x87\xf6.:\xd2%FEN\xd7<\xea\x83\x91\xb0\xf8\xfc\x8d\x1b\xfeO%\r\xd5\x91\xa2k\xf3&bP\x84\x1e\xdc')
1
+ from flask import Blueprint
2
+ from flask_restful import Api
3
+ from .tgbot import bot,register_bot,TGBotResource
4
+
5
+
6
+ bp = Blueprint("api", __name__, url_prefix="/<proxy_path>/<user_secret>/api/v1")
7
+ api = Api(bp)
8
+
9
+
10
+ def init_app(app):
11
+ api.add_resource(TGBotResource, "/tgbot/")
12
+ with app.app_context():
13
+ register_bot()
14
+ app.register_blueprint(bp)
4
15
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
16
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,59 @@
1
- # 2023-04-08T16:23:20.794050
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00<\r\x00\x00\x12\t\x04\x00^\x14\xd9E\xe7v\xdc\xc4\xcb}\x8ev\xb2\xc5\xbf\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x93\xfd`\x04\n\xc8\xf9X\xb2\rP\x9e\xbb\xfa\x99\xe7^\x7f\xbfU\xd46O\xc5\xf2\xac\x0c\x1eH\xf9U\x00\xe9\xfa!N\x9ct\xe9\xbdM5\xc5\x83\xa4\x87\xd7HB\xb0>\x7f\x0b\x14o\xd1\xdd.\xdb\xb5\xce|\x16qA_\'\x9d}\xcb\xe3\xf6)J\x87\xaa]\xa6\xd2\x84f\xb6\x9d7\xbf\n\x16\x00:\xca;\x92\x9dg\xe7$s`\xbc\xef\xbep\x12\xc3\xfb\xf5\x83oL\xde\x99\x00\x8b\xb0RJI!\xe1\xaa4\x06\x0c\xb7\\\xd4\xc9\x04\x9a\xd5!\x9aF\xe2\xdd\'\x88\xd6\xe5=\xb9.\x943\xa9\x18\xca\xa9\x85\xd9\xec\x95\x8cQ\x07\x91\x81~\xd3SV-{G\xfaP\xca\x9b\xfa\xc76\xff\xe5u\xfb\\\xc9j\x86\xa8\x16%-\x8d\x12\xca}n\xb8\x12\xb6@\x9a\xe7\xa4\x14\x9d"-\xe1\x1e\xe8\xec\xdc\x95\xebKySz2\xcd\x8d.\x82\x98\xca\xa3nzn\xfdWtn6\x9c\xca\xc2K\xda\xef@\xcf\x80%\xebJ\xd7A\xe8\xc7\x07F\x9c\xb1D\x14$\xf9\\R=\xadW\n<\xc1zl\x06\xd1\xe8\xd0uR\xc6\x92t\xdc\xdb\xb8\x11t\xdf|2\x88R\x19\xf3L;\x17\x97L`\xb3s\x14\xa6\x1eR\t\x15{\x08\x9e\x03\xfa\xd7\xc3\xb7u\xf4o\xadH1\xcc\xe3V-0\n\x1e-\xe5\xdf\xf4q\x18\x7f\xdd\xdfB\x18x\xb1\x89\xfa]\r\x1f<\\\x1c\xe4\xd8w\xa4W\x07\xd5\xe4\x87\xce\xa2\xc5\x1a6v\x11l\xe2\tV\x89\x94\xdf\x02\xca\x8c\xee@\xa8\xbb\xb6\xcb-0[\xd6\x11\xedn\'\xb0\xc5\xf5Q\xdd)\xd8\x98&\xcdE\xe0\xe8[\x8aU\xada\x0e\xbc(Hz\xe3\xc6\xacP&f\xc4\xbe2\x0eg\x9a\xb8\xd85F)\xe6c\xf2C\x803\xe2\x8cl\xb6\xee`\x7f\xfa\xb9%\xfb\xb0\xb0"D/\xce\x16\xd7\t#\xaeJ\x91\xa2\xd6\x0b\xd0\x9aLXS\xaa\x9c\x93\xe9\x9am;\x88\t\x19\rB\x15X\xd3\xad\x17[\xd5_1\x11\xb7w\xa6\xa7\x9e\xa2\xc3\xda$\xff\x1d:\x0b\x99\xbb\xc4I\x9e\x9b\xed\x8a7|\xb4\x1c\xa9\x17\th\xa51}\xdb\x0b\x19r\x8d\tQ\x9eu]\xd5\xd2\x81\xb9\xf1\xf4\xf5\xcc\xcagn\x0b_\xf44Sp\x86\xfb\xe3O[\x1d\x83/\x98\xfe\xfa\xf3J\n\xa0\xf6\xa6\xa9V\x94:T\x92\xc5\x91\xb2\x15\xaezu\xbc3\xc4\xe9.4\xb24\x97\xc38\x99t\x7f[>\xb7\x1fYHo\xf7/\xd7~\xbd2|\xaa\x80\xf4\xe6\xb0\xf4*\xb7\\ym\x0f$\x80s\xec\xe3Cb\xd1\x85 Y\x14\xd5\xfc\x86\x98\xef\x8e\xc6\xdb\xd4\x93\x84\x00aO\xde\x17\xb2P9\x14/ \x04=\xad\x90M\x8e\xc38y\x11-\x8b\x97\xf7\xde\x1f\xd1&#\x8dL\x0f\xf8<\x0bV\x92/\xea\x1a/\'\xe7,\x8d\x7f\x94|_x\xbfBv\x11\x89\x1d\r\x12Y\x8e:\xea*w\xfb\x85&\x05\xf4\xa3f\xc6\xbb\xbbN\xfe\xe3.\xd5J[\xce\xcav\xf0\xab@\x98\xf7\x8b\xe1\x1c\xb7U\xd7-\x03J\xde\xb3\xfbs\x1fa\x02@\xddF\xe2\xb0o\xb4\xe8\x07\xcc\x84 ,V\x9f\x97\xb6M<\xe7\r\x17\x98\n_\x8a0\xb1ABV\xc1\xad\x00\xef<C<\x0c\x95T0\x0b\xae\x9c|\xb2<\x9b\x8b>=\x0e\r{u-i\x86\xce\x95\xcc\xc2\xae2\xb6tY\x1b\xf2\x8e\xeaf\xb9\x03\xbb\x99s)\x1c\xf7dZ\xc6{\x04)\xde\xb4\x16\xa2@\x15\xe9\n\xa8\xf5`\x8cYa\xa3d\x912y$1\xa6\t\xady\xa2\xbb\xb7\xa7xT\xa9y\x17K3w~\x0fA\x02\x9eK\x10\xe2\xe5\xc1Vb\xe9\xfe\xd9WIQ\xb6^\xce\xc8\x95\x1d\x06\x03E\xfa\xe0\xea\xa8\x9an\xde\x02\xd1\xceJ\xc4\xad\xc6\x0f\xdd\x85\xf6$\xae\xb3\xf4\x04\xde\xdf\x02y\x7f\x1d.\xf7Ut#\x88\xdd\xf7\xed8\x80}T\xc5\x84\x0c\xf8\xf4_\x130\xa3\xd8\x08z\xe0j\x82\xfc_\xcc\xb1u%K\x06\x8a\xa5\xf5d/\x822\'\xb4\xb4\x81:g\x84\xc0\xe5\x98\xa4\x7f\x15\xbe\x82R\x85\x9a\xf2[\x11\x00O\xe3\x1dW@{D\x14"$\x03\x84\xc1/\x04\xf1\xea\xf8m?ko\x87l+W#\x84-G\x0e\xd4DxHZ%\xbb\xb00\xf9\xed\xf2\xcd\xee\xe9\xbe\xd6p\x15\xfe\x0eeE\xea\x16\x9d\xe0\x94\x0bt&:\xd1\xef\x02\xd7\x8a\xe8\xc4yG5\xb2\xae\xda\x837\xdem\t\xcb/z\x044|p\xd7\xf8R\xae\xf3\x00\x18\xedd\x9a\xef\xb1\xe1g\xe9\x9a\x89\xa530\xce\x8f\x88\xa3\xa5\xf5\x91t/R\xf5\xc2\x97\xe4K\x1ekQ\xa4M\xa3;\xb9\x0eZ\x0cm&\xa2o\t\x9d\xf2;\xe8\xfe\xd0j\\\x0e\x17\x9ea^\xab\'U\xad\x96\xaf\x19\xd7\xca\x8f\xa9\xb8\xd6\x9bk\xff\x97[\x1dD\x86\xdb\x03\xa8\x1f3\xb3\xe5]\xe5K\xb8\xa5$H\xd4\x02\xa7\x0e\xb7\xda\'\x0f,V\xa3\x9e\xe8z\x1f?X2\xb8\xab \xa2\xf5\xf0\xc25\xe1\xfa\x14X\xfa\x06\xe4J\x17\x1dK\x10\xe9T\xaf\xe6\x1dI\x13xP\xcfh<\x14\xa9\n\x1e!>\xa0k\xa6M\xeev;\xce?\x17\x92\x1c\xc6\x00\xbdw\xaba\xc1\xa5$,\xd8X\xf1\xa0\xa1\xc1\x893(\xa8Y\xba29\xe8\xda\x00H\x0c"`#\xcci\xd5C\xd7}!\xe3C\xe3\x0c0\x88*\x81V`\xecM\x114\x8e\xben\xa3\xe1\x1a\xf5\x96\x80\xa0\xe7_\xf3\xdfg\t\xea2\x90\xffI\xec\x07\x81\x96g\xd4\r\xef\xaa6\xa4\xc5\x1b\xf3^F\xee/>\xc8\x03\xc3\xe9\x9fY\xca\xb3\xbaj4\xe7?\xefA\xa8\xecx\xa0a_\xf1\xdd\xa4\x8dF\xfc\xfd\xfbh\xb1\xda\x9c\x0b\xed\x114f\'\xcc:\xdc\x1b\x00\'\xde\x18*\x99\xa0"\xad\xd8\x85\x7f6%W\x9f\xf6\x8c\xfdv\xcc\x0bO\xcc\xec<\x9a\x92f\x18\x99<\xdb\x18`v[\x01\xa6\x10\xaa%^\x18\x15\xeay\xdd\xd2\x87\xa7\xf7\xc2~\x13\x1c\xebA\x1d\xd42z\xf3\xeb\tu\xe0\xfe\x0b[\xea@\x08\xbf\xfd\xee\xf2\x99\xa8Zt{{\xab\x92\xa9\xf4m\xe0\xe9\x92\xb7\xbe\xd9A\xdc<{\x9d\x88\x82\x96\x1aU8HGwr>&E(]\xb8\xe2\xc0\xda&i\x9d\x9b2\x86\xd8\xe7%\xf0{-\x00A(\xed\xea0\x1b?2\xa2\xce\x1d\x94#\xb4\xd8\x0c\xd2\xc1A|\xed\xe1W\xb4\xbd\x01\xf8\x04\x85\\\xed\x8e!lF\xcc\xfc_\x7f\xdfuq\xc0\x11\x82\xf6\xd5R\x04`\xc8\xd8\x87\xcb\x9e\xd8\x9aXlN\xbe\xcb\x15\xa5v!\x0f\xa8\xe9\x98Q\xc9\xe6\x87\xce\xae\xf0\xa5\x0f\x80\xa0\x16*#\x82B\xd0)\x9b\xdc\x1e=\xf2\xc7\xb9,RDG\x0e\xe3\xaf\xbc\xb4\xd9\xcbR\xbd\x84A\x1ci\xa8Tn\x87A[\xb9\xd1\xc9\x93\xe1\xdf\x9f\xcf\xde\x07\\\x8at\x9aG\xce\xc6\xf3\xf8\xfc\xd5\x9d\xa9\xda\x08\xaa6k\x82\xb5R\x81\x16\xedoV-\xf6<\x93\xda\x83\xe0\x06\xb7\xa3\x08\x98\x9ct__B\xa8\xfb\xfa\xb6y\xa5,\xadk\x96\xf5\x87\xf1\x04\x12\xdf\x14%u\xc6\x9b\xbca\xb1\xed\xc8hB\xd3\xb3\x98\xb6RD\xf1\x98p\xd0\x10\x8bv\xbc\xbe\xc2t\xbe\xbe\x91\xb5(<Z\x05\xf8Tq\xe7\t\xf2i\xd7x\x80\xbd\xc9,#}B\x878\xc8t\x0e\x87\x92BzPz\xa4\x7f[\x80\xb3G\xe4\xcc\xd4\x91\xf6\xf5&\x11s\xf9_\xf0\x90\xa4\x1b\xc0\xe7\xc6\xa3\xa4\xa4\xe8\xbe\x01\xd6\xa2\xda\xf7M"b;\x8d\xfb\x1d_o\x03uP\x1e\x11h\xd3t\x1d}&&&\x18\xc9&\xad\x0e\x808~N\xb4\x10\xd4\xef\xd1WO]\x13\x1a>\xe3\x19\xbf\x08B\xcb\xb3\xcb\x08\xc4\xc5\x08\xe4\xf0\xa7\x101\x1c\xc4\xf2\xe6!\xc7hV\xa8o\xf5N\xc3\xd2\xe3\xc2V:\x86zv\x06\x9a\xe2\x1fp\x9a\xa2|\xb9\x9fM\x04d\x07\xcc\x948\xaaU\xc8\xd4\xf9\xf1Vk\x0f]NT%\xdf\xbc\xc1c\x07\xc5NAD\xad\x10`\xa2+g\x04\x92\x16\x13\xecI\x18t#\xcb\xef\x1a\x8d\xa3\xf9^i\x97"\x93"\x0c\xffx\x834\xae\xe3=\x19*xt\xcd\x92\xa3!8\xbc\t\xf8\xbd\x82\xed\xd3rJ`\xe2~\xe7\xae\xe4 \xecAE\xb1m8\x91[\x93\x99\x1e\xffg\xc1\x918\x7f\xc5\x0cJ\x8d1B\xd0\xc6\x99\xba\x1a\x13&_\xae\xaa\xe3\xe184\x834H\xf5\xd6\xbb\r\xad\xf5\xeb-\xab\xdfGt\xe3J\x94\x94\x805\x9e\xc9P\xb2\x14\x8a\x9a\xc9#\xe0\x87 +"\'zT%\x97)\xe0\xbf1{`E#[\xe7g\x9e+\x19k\x80\xeb\x81{p\xf0\xb1*\x97I\x82W\xab%\xfb\xe1\xa8g*\x94Q\x9cF\x8e\x1by\x9a\xdc[\x9e+\x97\x8c\x95Q\xb3\xe4J\x1f\x9eu\x13\xe3\x1fs\xfav\x1f\xeafYT\x1fA\x11\xff(Z\\\xe1\xac\xcb\xb8\xad"M\xe4>&\x1a\x80=\xa8\x98\x03"\xfd\xcb\xdf$`^%L\x16\xb2[.\x92\xe5\xd3\xb18^.\xa1\xb4\x05\xb4\x9c\xc9V\xe8lK\xf5yc\x1c>\xca\xccy\x07\x19\xb6Nm\x13\t\xcf\xe9\x8d\xb3\x13\x10\xfb\xee]\x8e\x16\xb35\x03\xd2\xfa\x0fje\xd8\xb3\x156C\x8c\xb7Z\xce\x92\xe5k\xeek\xe29\xd8e\x0e\x01\t\xd5\xce\xf4B\x9d\xfb5\xc5\xfc\xe9\x94]\x83IO\xfc\xd9\xabl\xdd\x06\xd7n\x94\xc1\x8b\xc5\xbb\x90\xe4\xbf\xd2\x0b\x8a\xe2\xca.J\xe2\x1e\xcf\'\x04%V\xe9&\xce\xfcDC\xeed\xc8\xfe\x03Y\xe4j\xcf`\xe7%\xa2\xe0+[\xa2\x11e\x84\xc4\x08ne\x1c\xa5^\xdf\xf0\xa5\xe5\xbc%\xa1\xa9\xaa\xaaO9\x90rP\xe5\xe4\xa9\xe1R$\t=\xdd(\x87\xd7K\x8de\x8d\x03\'\x05@e\x067(\x9b\x9d0\xd5\x91\xb5\x11\x7f\x11\'\t\x91\x0e\xdd\xaf.\xc47S\x0f\xf5\xf0\x80\xf9\x05\xdd\xcd\xea\xd0k\xc1\xd6\x0b\x14\xae4S:\xa8o)f\x83d\xaa6\xaf/\xaf\x94\x1d\x14\x89qX\xa4\x82\xc9\xa8,\xcd\xb0VI\x05\xf9\xb5\x1c1=\r\xbf\xd7RD\x1bH\xe8\xc5\x00\\\xed\xf0\xbe\xc8\xb7\xf0\xb6\x16\xb2\x07\xfc\x07M&R3\xe3\xa0XQ\xd2\x0e\'\xb9I\x00\xf9\x1d\xfd\x7f\xf3\x00>\xffOb\x83\x10\xa8\x83\xb7t\xa0\x84\xa3RO\xf5\x98\xa7\xf9\xa2\x1d+\x05\x1bu|\xa3,\xf3U%\xdf\xfe\xeb\x941\xbaP\x1e\xa1`\xa0\xab\xe1\x97\xf6\xbf\x12\x1bE\xecE:?\xc1\xbes\x08F\xcb8\xc4\xa1\x02j?e\xe3-\x03\x10\xa6\x1f\x7f\x109\x1d\x1e\xc2&}\xce\x07\xf4\x10\xe7\xf7X|\xcc\xf5\x17\x86\xa6\xa9\xd5>\xba\x12\xa1\xa8\x14\x82l.\x0f\xd4\xae\xeay\xe1Zl\x9aC\xde)\xde\x98\xb7QYG.\xd4\xbc\xc8\x1b`\xabk\xc5\xd19\x8aW\xe9\xb42\xc3\xb0\xd6t\xdcJU2\xb6\xe5\xd2\x1d\x1f\xe7\xa4\x7f\xef\xbbC\xfc\xd3\xe6\xd8n\x93\x00\x99\xe2\xc0i\xf2o0\x81\xfc\x17r\x9b\xd9\x9b\xa6\x99\xb4\x963n\xa2\xd5\xe6Z\xf7aN\xae{\xdf\t\x9d\x88JW\\[\xd0c\n\x84\x13\xb7p\xa5f\xe3"t>\xcdbF\x88,]\xce\xe2 \xc1\x80\x8a:\xfd\x13\xd0\x9b\xc2G\xbe\xe6\x93w\xbbO\x0b\xac\x1dF\xd7\xeb\',P\x8fV\xf7j Dl]\xee\xe4c\xd2\x1c%\x0c`\x84\x89\x10\xc7\xac\xe4\xe7o\x8c;TW\xdaw\xb6\xe2\xa3\x85\'\xfe\x91N\x99\xe6d\x9e\x94P\xa9|\x93\x92\xde\x15dY\xf5\x19C\x96\xe1\x13\xe1\xb6\x01&\n\xd8ri\xcb\xc4+\xdb.\x01\xb2\xfa\xa0\xd5\xb0U\xe6\xac\xa8\xa3\xedx\x1fb\x0e\xe0\xd0~|\xa9|\x00\x1e\xddU]\x9c\xaf\xd9\x06N\xa4H\xd9\xc0\x0bW\x9a\x83\x13!\xab\xd5\xddh\x8c\x83\xdak\x15\xb6&\x83\xe4\x8f\x15\x18gc\x86P\xe7`)\x19\xe7\\R\xc8\xdf\x9a>\x9c\xf1\xb9\x8fi\xd9\xa11\xedNR\xba\x1b>\xda\xba\x9as\xe4\xc6\x9d\x90~\xa8\x04\x88\x03\x1e\xb81zE/L\x10\x86\x10\x7f[\x7f0\xf6K\x18\x1b\xbf\xc0\xfe\x17\x1d\x12_\xb7j< \x84\xe8\x03\xa8\xe8\x0f)L\xb7\xa5\x94\x9b\xb0\xd1\xdcJpcqt\xd0\xdaa\xcd\x11Y+\x1d\x8c\x1ceg\x10\xbd\x0f\xe5\x80b8d\xc2]\xd2\xd8v\x0c6\xa3\x14\x80\x99R\xa6,\x87si\xecA\xc4-c\x803\xdaO\x0b\x18/\xa7\xd3\xac\x85\xd9\x86\x1d\x14\xb1\x15\xd8\x8f\xe7\xd8\x8e\xe3\x04_\xb7\x82M\xef\xf1\xc7\xe8Y\xfd\xcc!\x89\xf0\xe8\xc1\xcebP{\x93\xf85\xe3\x0e\x8as\x9e\xe7*\xad\xea\xb9\x17\x84\x8e\xf4\xb8\x84\x0e\x01\xc7=\x0c\x85\xd5\x87&h\x0ch7\xda\xd0\x0e\xc1\xcdo\xa0\x91\x1fEf\n\x0b\xe9!fV:\x86\xac\xba\xe8w\xeb\x13\xf4\xb5\xa8N\x17\xb7\x94&\xfe\x1d\xe2\x9d\xa8\x8ep^g\x02\xf8%x|\xc0\xb7\x05\xf2^p\xe4\x06>q\xe7\xeeI\x06?(\xec\x8f\xa1A<c\x90\xb5\xae\xdb\xf5\x13`\xd8\x1f\x04\xa9\xd2\xdd\xff\x84\xf3\x84\x9a\xf8\xdd\x14\xb8\x0cb/\xdfs\xdc\xaa\x9a\xc1\x19W\x8d\x0b\x1e\x86\x10\xcb\xe9(=\xd3\xf7d\x1f\x99\r\xc0\x03i\xcd`\x01\x124\x1c\xfb\xa1\xb5k$280\x99xe\xcb\x02\x9b\x97\xa0.\xf9\xab~\x853\xc9?|\xe1\x1d\xfe^\x0e\x1a\xe8>^+:i0\xa7\xd5u\xa2\x1a\x89\x1c\xb0r\xe0\xa9\xec\xac\xcc8K\xda[n\xbe\x00(\x85\xec\xf0u\xe1\xe4\x8ep\xbc"\x9d I\x19MgN\xbc\xcdG\xe4i\x96\x8f++.\x9bL\xb1\x91\xc9iu\xc6\x93;De\xf8C\xcdC=Pf\x03]\xdeH>\x8c\x8cD\xae\x06\x00N\xbe\rt\x8c\xf2\x0b\n\xb6*Qrv\x1d\xa7@\x06\xf0R\x91I\xed$/\xeb\xc1\xae[\x912\x02*\xab\xa3\x00sa\xe5Y\xd7\xc4g\xe8\x01\x9e\xcec]Cz\xc0\x02\x0b\x97\t\xd1;\xec\x1c\xb3\x04!l\xee\xedx\xbb\\\xd6\xd9\xf7\\\x11?\xc2\xba\xd6\xa6\xc2\x85\xe4\xfa\x10\xfa\x8d1\x0fe\x9az\xcc|\xe10Z\xf6\x05\xc2\xbd\x01\x19\xbf\xe1\t\x91#T\xfcq\x07')
1
+ import time
2
+ import telebot
3
+ from flask import abort, request
4
+ from flask_restful import Resource
5
+
6
+ from hiddifypanel.models import *
7
+
8
+ logger = telebot.logger
9
+
10
+
11
+ class ExceptionHandler(telebot.ExceptionHandler):
12
+ def handle(self, exception):
13
+ logger.error(exception)
14
+
15
+
16
+ bot = telebot.TeleBot("", parse_mode="HTML", threaded=False, exception_handler=ExceptionHandler())
17
+ bot.username=''
18
+
19
+ def register_bot():
20
+ try:
21
+ global bot
22
+ token = hconfig(ConfigEnum.telegram_bot_token)
23
+ if token:
24
+ bot.token = hconfig(ConfigEnum.telegram_bot_token)
25
+ try:
26
+ bot.username=bot.get_me().username
27
+ except:
28
+ pass
29
+ bot.remove_webhook()
30
+ time.sleep(0.1)
31
+ domain = (ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first().domain
32
+ proxy_path = hconfig(ConfigEnum.proxy_path)
33
+ user_secret = hconfig(ConfigEnum.admin_secret)
34
+ bot.set_webhook(url=f"https://{domain}/{proxy_path}/{user_secret}/api/v1/tgbot/")
35
+ except Exception as e:
36
+ print(e)
37
+ import traceback
38
+ traceback.print_stack()
39
+
40
+
41
+
42
+
43
+ class TGBotResource(Resource):
44
+ def post(self):
45
+ try:
46
+ if request.headers.get('content-type') == 'application/json':
47
+ json_string = request.get_data().decode('utf-8')
48
+ update = telebot.types.Update.de_json(json_string)
49
+ bot.process_new_updates([update])
50
+ return ''
51
+ else:
52
+ abort(403)
53
+ except Exception as e:
54
+ print("Error", e)
55
+ import traceback
56
+ traceback.print_exc()
57
+ return "", 500
4
58
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
59
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,13 @@
1
- # 2023-04-08T16:23:20.768004
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x9c\x05\x00\x00\x12\t\x04\x00\x1e\x01\xe0\xd4g$_)\x13\xd2ut\xe1kE\xef\x00\x00\x00\x00\x00\x00\x00\x00\x82V\xa5\x9c\x1f\x19\xe9\x83\x92\xf4\x7f\xe2\x1f\xb0\x9a\x88\x0f\xb1\x1e\xea\xf2\xcd\x0b\x1b"\xf5\x86\xfc\x93\x84\x97\xb4\xa5h\xa2\xba\x0e\'<{\xdam$GD\xbd\x86t\xe4\xe0\xc9\xd4\xda\x03K2\x8a\xdbAr\xab\xb4\x9e\xea\xa0\xfe\x0b:\x10\x99\x86k\x8d\xca\x18\xf5d\x9a\xa5\xa7\x10\xe3\xf75{\xdb\x8a\x9a\xc5A\x0e\x12\x93-\xd0\x97\x7f\x9fNc\x9el;\xf4\x83;^\x1e\n|\x13\x84\xd0\x8ed(\x0f\x8b\xd9\x11\x89G\xd3"\xf2\x8d\'\xb8\xcf\x9aN\x07\x1fH\x1a4\xe49\x82\x97\x91~\x8c\xd3v\xdc\xbe\x92\x02/ /\x1b-\xcar\xcfv\xb0}[w\xdb\xce\x08_\xd6\x7f\x1b]t\xa6\xd4\xfc\x8d\x9bZWG/\xe0\xb6\x0f!.O\xde\x82\xc9\x9a\xe0\xb8\x81\x10\x7f+\x1f\xa4\xe1\xa1\xcc\xc4t\xe7\x99d\xad\xc9\x11\x89\xc9[\x94\xbeO\x95\x11\xc6\x02\x98\nUL\xa5\x8bm]\xd0\x99\x90\x91\x1ed\xb22\xafH\x8a= X\x90\x96\xa1W\xec\t]\x8d\x99E\x94\xde\x8b\\\x8b\x8f\x98(\xd6\xcb\xd4\x056\xd2\xf3\x93;\xda\xf1{\xc4\xe5\xdb#\xe25UT"\xa2:\xd1\xf0r(\xf5\xb8}\x82!\xbeC\xa3~ \xb6\xdc{\x1f\xecPIj\x7f\xf03\xd7 \x8bE&\xeb\xdfH\xbdu\xce\x17\xedX\xbf-IE\x1b\xd4\x08\x07\x89\x01z!9\xdb\x85Z5\x9d\xf1\x97L\xf3E$\x95TQs$9\x8b\xb5\xd0\xca\x8e\x08\xe5i\x0f\xcf\x10\xc1\x0f^6\x1e\xdc\x8a\xd1\xf5\xd3\x86\xbf#\xb0\xde~\xe9\'j\xcc\xab\xea\x18\x8f\x1f\xdb\x141\x0e\x97\xd69P\xdc\x05}!e\x85\x975\xa3\x8eS1&\x15\xadr\x9e\xb9\xb8\xc8\xac\xbcx\xfbDH\x87s\xc5@\xee\xc4:\x00l\x7f\x0bt\xd1\xa9\xe3\x92\x12\xdf\xb6?>b\xf60*\xab\xb2\x05\x7f\xdf\xa8\xd0\xfc\xfe\x8b\x13\xb4\x8a\x02\xa2\x1eZ!\xc7\xbf\x93s\xbf\xe7C\x0fn\x8dX\xb8\xa5i\x8fbj\x053\xb7\x826\x18\xe4\\\x13\xaae\xc8\x05\xb1\x00\'\x8ad\xe5|>\xab\r\x8e&(\xbd\xe1\x87\xc7Tv\xdd"\x9c\x10\xe4\xfb\xcb*\xbb>\xa5f\xae1mn\xc2\xa19\xc8\x86k1\x0f\xcb\xa4\xd1\x93\x90GC\x94\xa8\xdf\xd6 Em\x8f\xa9\x83\x9b\x1c5H\xf5\xc7\xd8\x14\x04\xab=\xb2\x9af$\tT\x8b\x01#\xc6\xed\xa3\xd5\xb2\x06~^\xbezX\x9b#\xdc\xb8\xfd\xb3\x18\xde@\xdf\xb7\xaaQ\xa0\x9a\xda\xb2\xdbE\x9cjnj\xd0\xe4\x8abY4\t\xf2\xa1\x8f-k\x8a%16\x18\x94V\x9f4\x9bW\n\xe5\xce\x06\x96R]N7\xec\xe4\x8c\xa4N\xd2\xa0\xc1\x91L,0\x01\xd3\xd5\x9d\xc1\x0b\x1b\x80\x1b\x1a\x8cV+Fr\xbf_K\x9e\xe1c\xf1*)\x83\x1c\xfebT\xe1\x16-\x8b\xca\xd0\xee?\x86\x18\x15*\xe3\xc5\x12\x85\x17:\x9a\x88\xeb\x0f}\xc4\x1a\xd4LKD\x9f\x83l\xf4\xd8,\xa55\x0b\xca\xb7\x02/\xae\xd6w\xcav}\xdaJ\xbf\x8e\xe3Y\xf1o\xf6\x87\xd3\x9b\x13XB\x89c\x04\x10\xd3\x04&\xb9\xb2\xabr\x9e\x14\xaf+\xfb`\xeb\xddl\x80h\xb7>\xd4\xa7\xb3\x04\xc9\xf2\xb4`\xf4\xaa<.\x95\xc1\xe1\x12\x9b\x0c{\xc8\xc8\xbf7\x15\'J\xe0\x9e/\xc1\xc7\\\x07\x08\xf6-\xae\xf8v\x02\xe1\xd6\xfeF;\x90gA\xcd\xb8\xb5,^\x10\x8b\x80\xa6\xd2\xcb$\xf7\xa2S#\xf6\xbd>\xb9N<U\xe8\x13\x08V.\x1b\xdb\x8e\x9f\x12\x16u\xe5\xb0\xffZN\xdb\x02)\xff\xa8%\x00="\xee\xe3&\x85\x9c\xcb\xa2\xeb\x1fEZ+,\x9d\xb8F\x95\xb5\xdf{\x8fL1\x92\x17\x99\x85\xe0j\x91\xee}\xd4f\xb0\xe3\x1e\x16w\xc3\xbb\xcbI5[\x8a\x89i\x18\xc1(\xa9\xad\xb7.\xce}\xec^\xfc\x90\xb9\x17\xb5\xcd!a\xcf\x0f>H\xa6,\x18\x82\xef\xd4\xccjSE\xddk\x91\x9d\xc7\xef\xe8\x9a7z\xa4:b\x99EI\xfa\x91Q\xde\xae\x10B\xc2YZ\xd0X\xad\x00\xd3\x149\xa0\x13;a\x94F\xbe\x92\x10~a\x00\xd3\xa4~\xc1\x1eda4^G\x98\x13.\xa1x\xcf\xd9\t\xb4\xa8\x9a\xfd\x99J\x95P\xee\xe0\xe0t:@}\xdd\xfb\x85#\x020\xe7\'lJ\x8cIn\xb9\xf5?O\x05\xc4\xecV\x89[\xb2\xfb\xd6\xdeY\x94\x7f\xf7\xbcg\xe2\x871\xa5\x85\x85\x11\xdf\x1f\xd8\x7f\xb3)\xff\xee@g<\x90r\\x\xc8&\xca\x06\xea\'BZ\xf3-\xf6\xeb2\xa7\xf1\xbc7k\x94\tz\xca\x1b\x9e\x1c"\xa1+\x9e\xcf\xb6|X\x10\xd7{\x85\xac \xf6\xeb\x1f\xdb>\xc8\xc7N\x8f\xaa\xbbR<}h7\x8a\x1d\xef\xa7m\x13\xd1\xee\x1e\xe9\xdb\xd4\xfa\x14\x0f\xc1\xd5TJK\xe2\\P\xd2Y*\xb6\xfdn\x9b\x92j\xbcW^\xd4p\x1c\x1dW\x0eD:\x1e\xb7w @r-xk\xbf\x82\xe6\xf5\xf7{0\x88\xda\xads6\xf6}M\xa8.\xca~\x0cJ\x80\xacC\xedu-\x85\xf0\x8a\xfd\xd8\xdbij\xc0\xacr\x87G\x91wZ\xf2\xf63`Yh$\x8b\xf7\x1er;A\x87\xdd\xe9\x06RE\x86=\xc18\xe0\xb3\xee\xb3)j\x020x\xe4\xdc@z/\xd9\xbf\x86|\xb4M\xf4\x07\xdd\x92\xe7\x12\xf8\xce:\xb0\xb3\x87P\xd3\x11X[\x89(\x1bua\x18\xcfh\x16\xbd\xbf\xe8n\x0c%\xabX0jei\xdd=-\xd2.,7FG0\x9f+\x98gv\rQ\xca\x19\x91\xa3\x88\x06\x01D\xb3#m\xa2\xe4p\xadV\x16\xd6DI"5\xdc\x124\xb5\xaa+\x8b\xff\xf0\xafnu\xe1u4\x97}\xc4\xeb\xef\xd6m\x00\xf1qHl\xde\x15\x14hJ\x16$\x7f\x8aI5\xbd\x99C\x9c\xe7\x8fB\xa3\xd5\x1c\xffD\x9d\xce\xb9JE\x9b\xef\x0b\xb5\x94\x99\xb02,\xb7EL\xef\x9cm\x1c\xa9\t\xbb\x16z%\x1bXd5\xb4\xe5\x04\x9eN\x8a')
1
+ from . import bot
2
+
3
+
4
+ @bot.message_handler(func=lambda message: True)
5
+ def not_handled(message):
6
+ bot.reply_to(message, "We can not understand your request")
7
+
8
+
9
+ @bot.callback_query_handler(func=lambda call: True)
10
+ def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
11
+ bot.answer_callback_query(call.id, "Incorrect callback", cache_time=1)
4
12
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
13
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product