hiddifypanel 3.0.0.dev63__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev65__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 (72) 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/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
hiddifypanel/Events.py CHANGED
@@ -1,5 +1,28 @@
1
- # 2023-04-08T15:11:13.568460
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\xea\x08\x00\x00\x12\t\x04\x00\xc2\xaf7\xd2\xfb\x0b\xa80\xc39\x13v\xf6e\xf4K\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xc1\x0c\x0fA}\xbd\x95=\xee\xe1\x91\x16\xbf\xce\xbc\xb8)\x1f\xab5\xd0\xe9P\x10\xc3\xbe\xfc\xcb\xea#\x11wLu\xb3o\xd4\x9b\xe9\xc7y+\x8bf\x92\xa0\xc2F\xa0\xd1\xda^59\x8c\x00\xb8\x06\x9f]\r2\x95\xb2\xbf\x03gLh\x84lt\xbf\x88\x98wq-\x17Qo\xb2\x9e\x13#D\xf6\xb5s\xa4\x0b\x90^\xfb\xbe\x88\xbe\x83\xa5\xed\xc8\xed\xe7\xa4*z@\x9cT\xc5CLn\xa3\xd6~\xc2\xa9\x16\tI\x1f\xce[\\G@\xc1L\xd5\xf1\\\xec\xf2\xcfF\xd4<\xf6\x1e\xc3?\xa3\xb8\xe5\x03k\xe2\x8e\xe4V\xae\x95\xf7d\r\xfb}\xf5tZ678\x96\\\xc7\x8a@Wlj\x9e\xfd\xbd0L\xd2\xbdR\x041\x10QQ\xf6\xc4\xe1\xe5\x9b\xe1\xb8\xe2\xdf9B\xb2\xff\xcf\xe7\xca\x85\xb7Q\xbd!\x15\x1d\xe3\x8a\x0f\xa2\xd4\x0c\x02\xff\xdbL\x90\xd9E\xa5wj\xadjU2\xea@\x91\xcb\x10\xa5\x10\xa9Y\x83\xd0|\xf9\xc9nT\xd4\xc7\xfcl\xdbJ\xaa\xb8W\xc1\x95\xcf\xcb\x82\xd5\x9bp\x80\x0e\xf5\xdf.n\xdf9t\x07\xca\xb1\xb1\xf5\xdf\x01Pc\x1f8A\xdb|\xd3\xcc&\x8d.\xb40\xd7\xd2\x9d\xe6%\x08\xe3-$N\x91d\xfex\xeag\xe8\xd5My\xfc\xf6C\xd4ef3X_q\xaa\xb7\xdb\x83H\xdb\xc6\x1b\x1e\xf3k V\xfb\x88\x1b\xd2F\xa44oO\xaa\'0#\xfc@\x85%\xf9\xd5\xe0\x8e2\xb5\xa1I\x91\t\xd9P\x19\xdf\x99\xae\xf8;\xbeL\xc3\xf6\xa17\x1bF\xeb \x8a\x14\xc60s\x84d\xb5x\xe4\xbd\x0fD\n.@v\x0b_9\x9eo\xea]\x91\x9bA\xe5epTh\xdb\xd3\xf3\xee\x80\x12,\xb7k\x13\xdf\xd3\xcd\x11\xdaVnt"\xc8\xa5Y\xda\x9c\x19q*\x94b\x92\x06E\x83\x97\x13U(\xa8\xfe\x01\x03\x10\x13;I\xa5\xf5\xd3tt\x84\xdc\x19+\xeb\xca\x02,\xa8\xb2\xb0\x97&\xb7\x9e$\xda\t%Vb\\\xc6d\xf4!ikN-(\xd7\xf4\x82\xff\xe4\x80%\x1ck\xd8\xc4O\\\x0b\x84}\xe9\xc7`\xc5DM\xba[\x0c\xb3Ij\xa4\xf7\xd6\xdf\xd7]\xc0\xebL\xef_\x93\x988\'m\x97\xc2\x98!vOK)\xe2\xcblO\xc5\xc1\r\xe4\xd4\xfe\xf9\xfa\xd7\x15\x809\xe4\xc1N\xf0gIb\xa9\xd5w\xaf\xc4\xbf]`\x1f\xc6\'\x92\x93\xceC-\x82#\xe1\xd1\xce\x07vk\xf5\x03~\xcf\xaf\xab\xec\x93\xce\xf6+\xb3\x83E\x91\xb1:\xa4\x0c\xeb\xfe\xa0\xa7F^o\xec\xe5\xaf\x82\x1d\x86\xa4\xfb\xe6g\x9a\xaf\xd2\x9e\xbcl?\xb8a\xa9\x88\x87oHm\xd1\x9ds.\xb2\xde\x9e\x7fr\t\xc3\x03\x9c\x89,mG6\x12\xcd\xd6\x03\x1f\xd8\xe5\x05\x01\xd6\x1b\xd5\xae_7L\xaaG#\x11\xdcu\t\xd1\x82\xf3\x9f1\xd2\x14\xea/\xa5J\x85ofb\xeez3`\xb6\xbf\xfdz\xff\x9c\x85\xf5\xc8>*u\x9f\xa3\xb3\xb0\x05\x99|z\xc8\x98@\x83PC\xb0\x92\ns\xc9\xdd\x9a\x07d\x8e\xfb\x06s:\xbcR\xac{A\xcdM\xf6_ \x8a\xe3\xb5\x926\x06-\xb4\xbd\x94\x10\\K\x05\xba\xcb7\x08\xf8g\xceF\x020#F\x1b\xa4\xa5\xaf\x91-4\x813,\x86\x1c\x88\xe4\xfa0P\xa4Uh\xdbhk]C\xff\xcc\xe2\x1e\xb7\xc8\xfcf\xf0u\xd1\r#\xb9D\x8d\xbe2W*\xac^L\xa2\xde\xdek\xca]\xb3\xe0{\xe1;\xebb\x1a\xc3f\xd1\xb1 \xf5OJ\x95\x19\x9b\x98\xd6\x02\xda/\xb6\xfb\x85^\xb1\xf0\x8aQ<H\x89\x80:/\x93\t\xc2\xa8\xc9R\x8e\xaf\x0c\x00\x83\xbeQ\xe7\xd9\xfa\xa53\x9f1\xc8H\xb3\x19\xe7}]\xe0\xa5\xb1}\x929\xad\xa6\xf6\x1fZ\xcf\xecIG\xa6\xce\xec\xd0\x0b\xb7\xcd\x84r\xc9\xfe\x02|\xd2@\xfe\\tN\x98<\xd9\xb8\xdb\x1b\x8fa\xb8?\xa1z\xe8\xee\xda8\xe2\xbf\xe3\xb7\xed\x9a\x0b\'\xa6=\x06\x80\x87e\xa3\xd7Z\xdd\x0c\xear\x97\xdbr8m<\xfeQi\xdf=[\x82I%\t\x90kWz\xb6\xcd\x95\xd4#\x9d\xbcC\xa8\xe5\xf5\xe4f\x86I\xd7\xe7\xd7\xa7\xcb\x8ab\x93\x84\\"\x0e\xa1\xc4\t\xea\xff/\x0f\x9dD5\x85Jz\x8b\x9ca*AP) \xf19vy}\xa6,\x93\x16\x17p\xc9\x97\xc5\xcf\x15\x82u\xdc|\xb5\xc2b\n\xdeS\xbe9\xad\x95\x07\xa6]\x1d\xbc\x8a\xc2\x05y\xdb\x053"\xc1\x9d\xd4\x8a\x82\x00`!P\xa2-\x03H\x97#\xa1\xc1j\xe5)\x01\x90BX\x1e\x18Jf\x11|\x13\xf5y\xe2DP\xba\xbd\x90\xabz\x08+\xac\xcf\x7f?\x1b\xea{\xb8u\xa0\x04\xba\x9f\xbd\xa4\xd4\xa0\xca{\xbdv\x0b\x82X\xfd,u2/\xa4u\x8et\xf3\x06\x11\xa1osO\xfbm\x1fj\xfe\xe6n\xd2Y\x99\xa3\xc0\xca\xf9\xea\xb4\xdf\x9e<\xfb\x08\xc2\xaf\x99\xa0\xbd\x93\x82&x0\xdcz\xd2\x0b&\x01\xf7\x82\x85\xcf\x01\x0e\xe9\xd4\xf8mU\xe74\xac\xc3\xdd9\xa1%\xe8\x97xq\x06\xa1t\xcb\xcf\x82a0H:\x9b\xbe\xeft\x13,\x82\xaf\xc3~\x10\x99F\xe1[Q"\x92\x16\xd2\xd6\x17\xd0\x1a\xc9\xd77\x89\xdf%\x8aN\xb09\xaf~\xc9\xc8\xb6\xed#\xbb\x89S\x97\x19@c\xd97Q\xec\x9e\xc5N2\x9cp\xec\xbb\xd5\x95\x91\xc2\xb4\xadV\xa8\xabb=^8Lf\x13\xf7\xfc8\xa8\xd8_\xd7\xa7d\x80\xf3\xe2\xb1\x1a\xb8\xaa\x02\x14\xae\xc0\x1d\xe4\xa3\x15\xfdbc\x81\x1e\xabj"P2Sp\x96S\x1f\x9d\x7f\x8c\x82s\xdf\x9a.\xcf>t[g\x90\xc0w\x90\xb4e\xed\x18\xc7\xd2\xcd\'\xe3\xa6\xd6\x99\xf6\xf5f\x96\xb3mi\xf0\x00\xc3\xbb\xa8_\x00P\x16\xafe\x1f\xe9\xbd\x818\x1d0\xff\xbaZ\xf0i}fO\xeb\x95\t\xee\xf2@5\xe2\xec\x05\xc1\x08bc6\x90\xa1R\xaad-O\xdf|6*\xb2\xde\x95\xf42\x01\xef#\x9a\xcd\x81\x89r\x15\xfd\x99,\xae\x17\xed\x8b\xe5o\x0b\xd2\xc5Z\xa3\\M\x04{\xce\xff\xa1\xcf,!\xa7)\xa8n\x07!\xca\xbd\x9b]W\x87\xa6\xf7\xcc\xa0.\x07\x86\xba\x15\x9f\xb7\xa9\xba\xfeA\x85\xd3\xe7Z\xcb\x98ol\xba=\x95Z\xe3\xaa\xa7\x87n\xed[(\xc4\x96k\x93\xb3\xeaj\xb3\xfbY\xf5`I\xb5\xc8\x08Z\xdfe\xdb\x8d\x05\xb4\xa3M\x03\x9dZ\x14\x97\x96\xb4\xa5\x05PA)\x18i\xe5\xc3\x92\x18\x8cDO\xa3\x15\x93p\xbc\xfclvj8P)\xf3\x12t\xb2^\x10\xfa\xee\xfe`\xa2Ql\\\x81\x85\xc3\x9d<\xfei\x8a\x12\x1e\x03\xd7\x11"\xe3\xf1S\x93\r\x8dp\x99\xc7$_su\xfdZfI\xfd\x99\xb0"\xf2~\t\x99\x9cb\xd3\xfd\x8ed5f\x17y\x01\x93\x83Q\xae@6\xa3\x8b\xa9sf\xf5\x90\xbb\xab9\xe65\x04,\xec\xf6\x98\x18A\xcc\x9b\xb0\' *\xb9\xdf\x05\xec\x82\xe2}\xb1r\xe1\x87\x19\xdb\x92t\xac\x06$\x8c\x0f`\x91a3\x88=g\xe1\xd4\x1c|\x9b\xfe\x922\xa4\x8b\x0c-\x0eS-\x12\x9e\x19\x9f\x02\xb1\xdc\xeeB\xbc\xc9\x0f\xfeH\x8c\x88~\xfe\xea~2\x1dq\xf5#\xba8\xed\xf3y_}\x9e\x1a\xab#fu\xd6\xa5!c\x13\xc9\x14\xb1\x1d\xf7K\x96\x1di\xc7\xcd\xce\x1b3\x8e\xdc\x03?^\xee\xdaE\x9fU\xa6D\xd8G\x1f\xf3\xedoo\x1b\xf6n\x18{\x8e\xde\x8e\xce^\xb8P\x0b-\x98\xde1\xc3\xc7\x1b\x90\x91\x9c\x8a\xa0%\x9e\x00\x1e\xb3G\xa5D\xd0.#8\xb3\xdf\x07\x90\x0f\xb9\x85\x9f\xa2\\sQ\x9bF"\\\x14\xd4\x16c\xe9u\xf9U4\xc9\x81\xed\xd8v\x1a\x04R\xdb\xf4\xb1\\\x02\x8c\xb2O\xe4\xfco\xcc\x19mtF\xf5\xbd\x0f\xb69N\x86)\x1a\x7f\xc4L\xac5\xef\xc0\x17\x99\xefJ\xd2\x9e\x83Q\r\xaa\xba\xb9$f{Q\x15\x04>%\xbf\x08\xefGw\xf0\x89$\x19\x1ffl\xafU\xe0\xaa\x9diH\x90\x85:\x19\xf7\x00\n\xcavP\xe1T\xd7\xd3\x16}\x11\x11\xf4\xbd\x0c\xae\xbe\x9a\xb8\x15\x8b\x86r\xa1V;\xef\x8d\x80\xdd\x98Fv\x16\xfa(\xf3^mI4D3\xb5\r%\x86\x8a\x08)\x13\x1aC0\x88\xd6\x8f?jl\x0frr\xbd7\xd5R\x04\x0c\x81\xdc\x81\xd2\xa2\xad\x97W\xde\xdb\xbag\x08E\xa1\x90\x89\x93\x04\xcb\xfb-J\xe6\x8e>P\xb2\x02\x0c\xf5\xdb\xf0\x05\xa5Q^\x1f\xa5\xcc\xa2\x9c[\xa8\xbb\xcd\x14\xe2\xc2\n\xdb@\x11\x81\xac\xafO\x17\xf4Y8\x0br}\x9d=5#\\e\t \xf6\xe5:\xd8\xe7\x8bv\xe9I\xd7\xf4\xb0h\x8b\xaa\x196;\xe9\x9e\xf7~eA\x89\xabN\xe3\xa4\xf4\x8c\xb3\x8f\x037\x9a\x08\r<\x80\xba\xac5\x89,\x89\x88D\x8f\x90\xf7\xb1\xb9\'\xfa\xda\xa0\xef\xbfa\x96}\x89\xabk\x03\xa9\xe9\xf3V\x89E\xcd\x16OK\xedx\xedu\xd7{j0\xf7,\x9d{\x17[&`\xea\x01ii\x14\xbbc\xe5\x81\x93g\xb5\x0e\x10~\xb8\x8f\xbc@\xce{\xb1\x05\x9e$\x14\x8dp\xf6B\x0e\x1eI|\xf1^\x9c\xe23\x8f9}\x07\xc8\x96-NF\x01\xde\x08WQZ\x9f\xc6\xd4\xb0}\x08\xec_\xed-N"\xad\xaah\xb6\xc2\x02n\xa1\xf7\xd9\x1aN\xd1\xa2\xde\xe3\xbb\x94c\x85\xd3\xbdr\xf0\xc8$\xac\xea\xce-\xedw\xf6\xc7q\xe1=\xea\xc3\xc8\xb0DI\xef')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ class Event:
2
+ def __init__(self, name):
3
+ self.name = name
4
+ self.callbacks = []
5
+
6
+ def subscribe(self, callback):
7
+ self.callbacks.append(callback)
8
+
9
+ def unsubscribe(self, callback):
10
+ self.callbacks.remove(callback)
11
+
12
+ def notify(self, **data):
13
+ for callback in self.callbacks:
14
+ if type(data)==dict:
15
+ callback(**data)
16
+ else:
17
+ callback(data)
18
+
19
+
20
+ config_changed=Event('config_changed')
21
+ user_changed=Event('user_changed')
22
+ domain_changed=Event('domain_changed')
23
+ parentdomain_changed=Event('parentdomain_changed')
24
+ admin_prehook=Event('admin_prehook')
25
+
26
+
27
+ db_init_event=Event('db_init')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
28
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0.dev63
1
+ 3.0.0.dev65
hiddifypanel/VERSION.py CHANGED
@@ -1,5 +1,3 @@
1
- # 2023-04-08T15:11:13.555620
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\x00b\x01\x00\x00\x12\t\x04\x00\x9de\xee\xe1=\x85\x82\xb6\xeb\x94\xcf`\xbc\x153\x91\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa5\xf6\xf0\xa1fy)\x91\x0eiW\xdf\xc8\xda\xc2\xd8\xa0*e\x92\xac\x00C\x04I\xe7{gXbR\x865-\x89\xbbEI\xa1\xde\x03\xf3\x91\xba\xbbi\xcf\xb6uW\x16w8\x99\x13\xbdf{\xeb6\x89\xc9\xd7\xae\x8an\xe7\x8f\xcd\xd8\x17\x9b\xca\xf54\xc5\xd919T|\xe7\x18G\x14\x0fU>l\xf2>a\xf8\xfc\xdb\x04\xd5/z\x83`\xd8\x84H&\xbd\xf5\xf7\x93#j\xce\xb2P(\xdf\xa9\xeaEu\x93\xc4m\xfb\x1fA\xb1s\xf8\xe0\x14y\xd8\x16\xa2\xfa\xd9U\xd8\x91\x83\xb9/\xf0]\xe5>|\x00\xf3\x0b\xac\x12J\xd6\t\xcc\x8a\xe3\x87\xae\xf7\xfa^\x152\xbc\xda\xa3\xb3l\xc0\x9cX\x956k\xd0?Cd\xdc\xa4\xbb\x99\xc8\xbd\xb8\\\x11\xffW\xc5\x1e/X\x83\x88\tz1\x0e06\\\xd6P\xe8V\xee\xffOp\xe1\xbb\xe8_\xdb\xe7\xedf\xa5\x1c\xac\x88U\xad\xb7\x0fu\x93 X\x8d\xdd="\xed\x1e\xe9\xcf\xf91\x10Q\xce\x88\xfd\x80\xd0\xd1}\xab8,B\xbb\x0cV\x9cwo\x8b\x99]\x84\xf5\xcb\xce\x88f\xf6j\xcfRo\x87\xcb\xd6\x12\xc2\x19\xfa\x05BYP7\xf7\'j,\xf1\x06n\xc8}\x1b\x87QZ\xab\xed\xb4N[\'\xea\x14\xf8\x89\xdd\x83\xbal\xb2-2\x9d\x8c\xb3S\xfb\xeb\xff\x05\xc1\xec\x16C\xcaW\xed\xe5\xa6?\xaa\xd4\x12\x8d\xfe\xf2@\xf8<\xc5U\xcd\xf4\xfe\x13\xd3\xfb')
1
+ __version__='3.0.0.dev65'
4
2
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
3
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__init__.py CHANGED
@@ -1,5 +1,9 @@
1
- # 2023-04-08T15:11:13.557931
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\x15\x02\x00\x00\x12\t\x04\x00\x81L_\xab\xfd\xbe\xad\xe9\xbb\x8eZMX\xf4\xc3(\x00\x00\x00\x00\x00\x00\x00\x00<\xc5|\x80AA\x8cN\xd7\x9b\xa7b@fP\xad\xe9\x8e\x84\xf5\xa8\x17\xef\xdbO\xcfdN-\xfe\x1b\x84\x85C\xf9\x80\x97\xc9M\r\x9a\r\x8f\x87\xb0\xe3\x94\xc4\x91\xaf\xf3n\xb6-\x07\xf2\x94\xae\n)\xa0<\x16\x06\xcd\xf68I$\xdf<\x88\xa5\x9ey\xf1q\x1e\x05\x1a\xfe\xea\xfb\xca\xeb\xc2\xd0\xcep\xc7\xa4\x12i\xac\x95o\xe6\xba)uO7\xe5!\xb2\xe7\xe7H>\x10]~\xf5\xd5\xbbv\x1f^c\xb6i\x8e\xaf\xe8\xe2\xf0h5\x11\xb6\xc3\xc2b7\xcf\xce\x8a\xd8\xb5D\xae\xb6\xfc\x10\x8acE@\xfeJ]\xf3y\xf2\x03s\xe4\x97\x85\\\xe7\xe40eQ\xebP\xb4\xfd\x05\rK0\n\xdf\x08\xc7f\xef\x9aJ\xd4\xfc>o#\xfb\xe4\x16\xe7I\xce\xd0\xae-T6s\xa8mR\x1d\xa8\n6\xd7\x0c\xd5\xa1lr\x0b9[4\x111\xc764Z\xfe\xf6IE\xbd\xa06\xae4~%\x84i\x15\x13\x15\xb0\xea.\xdb\n\x17\xacA\xec\xcc\xd3 \xc2\x9f\xed\x89\x88\xb1\xb0\x1e\xf5 C\xf5:\x12l \xa3\x9b\x0f"c\x9d\x9de\x16Ug\xaa\xd2K\x94~[G\\\xf1=\xe0\xc95\xc1\xf8B\xbb\xd9F\xbb%\xd5\xc8\xedJ*\xf0l\xe5f\x8b\xd61\xa4\x1eU,\x0c\xe7uQ\xc5S\xe5\xb1\xef\xd9\x86\xa4\xd0H\x01~\xc2\xa2)\xc6\x0c_k\xbd;\xe3\xd2\x83\xc5(\xc7\xa4\xcb\x94\x18\xe0Q"\xe8\x7f\xa1\xfb\xeb\xa8@\xb3-\'\xe2\xa4\x7fJE\x9d\xd0\xa8\xa0 \xd7u\x97\xb6{I\x19\x17u\xab\x9e\xf1\xe0\xb3\xeb\x94\xe9\xe9\x97\x0f[\x04C\x9c$m;\'F\xeb\xba\xc6\xbel\xc4\x1c\xa1\x15\x18@7\xcf%\xda\x11\xa0$\x8e7\x92\xe1\xf2*\xb9"v@\xfaFQn\x8f\x93\xd9\xc2\xc1\x95\xd9H\xdb-N6\xdc\xee\xb205\xcc\xd5\x07\xcd<\xd0\x82\xbc\xbf\xa4)\xec\x87\x96U\xa2Y\xb4\xfc\x1d9\x04\xe8q\xde|\\_\x9d\xcc\x91\xee\xa9\xb3vT\xc2/\x7f\x19^vs\xcem<n\xa66;\xa8\xbd\xc75H\xd6~\xd2\xe5\xbfB\xd9`\x11\x0e\xff\xed\x80G.\x07\xb8\xa0\xa5,:\xa2\xa4\xd4s\xb2(\x1e\r')
1
+ from .VERSION import __version__
2
+ from . import Events
3
+ from .base import create_app, create_app_wsgi
4
+ from . import panel
5
+ __all__ = ["create_app", "create_app_wsgi","create_cli_app"]
6
+
7
+ # application = create_app_wsgi()
4
8
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
9
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__main__.py CHANGED
@@ -1,5 +1,15 @@
1
- # 2023-04-08T15:11:13.562175
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\x9a\x02\x00\x00\x12\t\x04\x00\xc8\xf6o~N\x87t\x13\xc1\xb31\xe9\xc3\xce\xe8k\x00\x00\x00\x00\x00\x00\x00\x00$Z\xf3}\x1e1\xe4\xed\x9d\xf3\x0b\xe0\xa4\xb4R\x8a\xde7Q\xe6\x0f\x07\xe3\x07\t\xa5\xbfpY\xd6\xaf\x11\x192aZ\x11\xb9\xc85\x8fB\x85\xb1NBk*}\xaan\xca\xd8\x1b\x1e\xc0&\xfc\xd1\xc7\x90\xaey\xf2E\xe8w\x06~\x84E\x05\x97\x92E\xa9G!h\x08\x8f\xcbE\xfb\xe2:\x84 \x81j\xe2Qh\x11\xe6~\x145\x93\x9f\x95T\x12\x19\xdb(\x91\xb6?d\xc40H\xf5_\xb4\xb0\xfd\x92%.\xe5\xe8k\xa9\xa6\xb3\x88W.\x04\xb3\x87cG4\x9f\\\xd4HFsb\xd3\x92\xdaN\xf2;S\x92\x89m\x17\x13\x82\x12\x9c\xb7Q\x82\x0e\x9e\xedAA0~\xad\xe7\x03\\}\x0c\xfc\xdf\xc5e\x8b\x7fK*-\x14\xfa\xaa\xe5\x0e\xaaU)\xb0\x94\x96 v6\xf2GFB\x06$\xa8W2\x93\xeb\x98c \xca]\xe6\xaaU\xe5\xcfV\xe9+\xc6\xdf,iR)\x97HY\xd0\x91\x9b\x01\x9b\xfb\xf1^{\xc9\xa9\x99\xe6\xad;D\xcc\x13\xbcZ\x89^\xcer\x01] \x97\xa7\xaf\x8fy\x18v\xd0\x01\xcf<\xaa\x05\x1e\xf1\xb5\xd1\xf54x\xec\x80\x97\x1f\x94\x84I\xe8\xa5y\xd3\xb6\x0e\xdfk#\x0b\x9b\xcf\x13#\xa8\xf7\xb7\xd7\xe2\x97\x81\xa9^r(R/9\xbc\x17O\x05b\xae-\xc4!(\xf7\x97\xab\x0f\xcd6:\x11!\xbd\x81=\xd2P(\x03\xbd\xe87\x91\x02\xfc\x05\x94a\xae\xe5tJ\x8d\xaa\xa6\x96^\x85\x16\xe3=O\xc1\x10\xbd\x1cFc"\xe7<v>\xe5\xdc7\x83\x1d\x1f\xb9\n\xcd\x80\x81\xaf\x12\xa6\xf8F\x91z\xc9\xc8\xcc%H\x1f{"\xd7\xe2`\xd7\xd8\xb6\xe5k\xb2\xd3\x07\xaaxII\xb6\xcc\xf9\x1fS\xa6\x1c\xaeA\x00\xc8\xac\x04Kr3\x19\xc7\xd8\x86\xa7\xddt\x11\xbd\x8eU\xe6\xab\xa5\x99\x80-\xb3\xbe\xb6 \x0e9U.\x19\x81Z\xba\x01\xc7\xa4\x13~\xac\x84\x97\x90H\xa7\xe59\x98y9\xd0\x88D\xa0\xc9\x8f\xb8<\x99\xbd\xe4?\x16\xcfS\xd2\xf3u\x9f\xcc\xcfWk\x8b\x9b\xda\xac\x0c\xeb\xe4\xeb\xbaU\\\x7f,?\xd6Q\x8d\xe9\xe5\xfa\x045~T\x18n\x04\x8dD11#\xc2\xef\xbdH\x87pE\xee\x84\xd6\x0eo\x9b\x03n\xa7\xd1\xd8\xfa\xf6\xc6t\x82\xde\x07\x01&\xc4\x1f\xa4\x88MT\x99\xfb\x1c-\xf9\x8b\xaavv\xef\x1ei\xae\xd4\xbfW\xe8\xb4\xe4\x80@\xb4@\x84\xcd\x89c\x1e\xff\xca\xa4S\x05n\xa4$\x82\n\x00\x1bS=:\x01W\xf2\xa28\xf9\xf3\xd1\x9f1?\nK\xa4\xe4E8!\xb8\xc6o\xf9\xa6\xc4\xab\xc4\xf5\xe6\x10h\xe9\x0c\x99wt\n13\xb3\x17\xbf!N\xac\xc4\xf1bw\\\x8d\xbf\xd3\x86\x90#|\xfdu\xb3\x10e')
1
+ import click
2
+ from flask.cli import FlaskGroup
3
+
4
+ from . import create_app_wsgi
5
+
6
+
7
+ @click.group(cls=FlaskGroup, create_app=create_app_wsgi)
8
+ def main():
9
+ """Management script for the hiddifypanel application."""
10
+
11
+
12
+ if __name__ == "__main__": # pragma: no cover
13
+ main()
4
14
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
15
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base.py CHANGED
@@ -1,5 +1,90 @@
1
- # 2023-04-08T15:11:13.578449
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\x00O\x0e\x00\x00\x12\t\x04\x00\xf6`)\xa8\x8b\x04(\xfa\xe6\xaa^\xb4M\xcb\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x17?\xd9A\xf5La\xb8\x83\x85\x11\xb7d\xb3}gm\xf7\xab\x01,\xe40\xcc\xday\xb8\xc4\x86\x83q\xc4\xd5\xfa\xe0\xa2\xadn\x98\x8d5\xeb<4\xb0\x1b\xb4\xe6\x04X\xaf\xc7\xb2bkB\xe4\x19Tt\x06\x81\x18\xd1\xab\xafa82\x87\xc54M\xc0#P\xba\x96\xe5\xa9\xd2A\xc6\x95s-\xed[\xa6o\xb2\x85\x9d\xaa/\xf4_-\x0c;\xa3\xc4\x8b\xc1\x03\x8c\xa3dX74\xc4\x0b \x03\x90p\xca\xefI*\x86 \xcfA\x8b \x82mV\xf3\x8e\xbfj7\xe8\xa3g\xfdK\x1a\x98\xe1u\xebf\xcd\xc4\x8d\x861\x07W\xe9!(\xd54\x8b\xb1\xa0\xf3\x9a\x9c\xcd\xb2&i\xc1\xbb\x9d\xd3\x1d\x88\xc5\xc71\x19\xda\xe6+\x97\xce\xae\x1c\x85N/\xc7~\xdb\x0f\xdd]t\x1dh\xd5X\xcc< x\x19\xf3\xb4\xd7\xc9W\n\x06\xed`\x00\xf7\x06\xf4\xc5s\x94\xe91oo\xbe\x9a]\xb4\x13y\xf6\xfe.q2\xfa\xd6r\xad\x8f\xa2\xc3\x82\xa6\\\xc0\xd7\x04#\xb0?\xb0c$o\x08\xe2=q\xd4\xd2*s\x8a\x1eL\xb6{mD\x1b\xcbt\x83,\x05\x06\xc4I@\xd8\x0b\xe4\x1e\x84\xfe\x7fD\xd6M\x8f\x00C\xc1\x89\xd6E\\h\xcfi\xbc|\xac\xff\x18,\xef\xa6\x801:2\x96S+\xe1\xe4\x1c\x93\xee\xff\xc1\x87d\x0f;dq\x7f\xaa\x88\xc6\xbfN\x8c\xe9\xbf\xea[\x15\x01\x88<\xbf\xf7\xf9\x08N\xe4a\xfb\x8f\x072U\xde>D\xad\xb6\xb5\x99\x18\x13\xeb\xbem\x9e0i\t\xe6\xba\xe0\xb6\x1d\x05\x00\x1e\xa9\x85\x04\x17\xdc\x06[\x85\x8e8\xdfO\xbd\x05\xdf\xc7\xbcO\xf2\xf3\xb9\xb3\xe0q\xba\x91B\xc3\xe7(\x94\xe6\x01/t\x1a|[\xc7\xf5\x0f\x95\xea\x0e\xfc\x9e\x85s\x102\xc9\x8c\xcc[\x94\xd3-\x9a\xa4\ne\xfcRst]\xb3\x08\x17\x9c$\x12\x92Z\xb3k\x80U\x0b\x8f\xd6\x02\x99\x00?E\x814\x11\xae\xd0"\nM\x84\x81\xb2\x98\xc3\xf7(\xf4l\x9a\xba=\x0b%\x15\x0b\xe7?\x90\\v\xc6\x19\xc7J\xb2\xbc\x11\xb2\x03\x9b(b\xcf\x04Mwx\xed\xa2\xadu\x85\xa3\xfb\x0e!\xffe)\xb4I\xa3q*\xf0\xdd\xa71H\x11:\xe1\xcbB\x82\xf6O\xcf\x95\xf7S\x8cc\x1cS\xe0\xbd\xc8\xd9\xd3\xc9\x1f\x95\x13\x82x\x98.qc\x92\xd1\xc8$\x9f\\+\xd0\x8f\xc8\xd2\xccK\xda\t\xca\xf2\xa1\x80\x05\xc1\xd3\x1c\xc2\xd5gl\xea\xf8\xddFh\xbb\xf4\xce\xcc\x1f\xa0vu\xf2M\xc4#\xeb\xc0\x7f.\xb9\n\xc4\n>\x05\x05\x82\x03\xcd0\x81\x116*)RT@G8s6(\xd6P\x9d\xe2\xb5\xc4\x0b\xe5q\x98%Y\xde\xac*\xe1d\x90\xe92\\\xb1\xa73A\xd0\xc7\xfd\xcabd,0\x8b0j\x10E\x87\xa5\xb0\x93\xd0\xda\xdd\xe6m\x9d=)*\xe5w\xb7\x9f5\xd8A\x8cxI\xc3t\x0b\\\x91\xf9\x8f+"O\x07\\\x9e\x9fi\xe2\x8dz\x01\xc3\xe9\xe3:#\xd7\x8b\xf0\xe0\xdb\xdb\x9b\xd5\x03}\xd7\x12AD\xed\xf5\x02\xe9:\xd8&\xa3\x8b\\xLS4\xd8\n\xfe%\xdbB\xc9\x9a\x84\xabaz!U\xc9\xa1;\x8b\xa1io\xdf\x17\x8b\x94\xda\xe8\xce\xe7\xbd\x19\x05\xe4\x15\\}\xcd\xdd\xe1\xb1\x8dn\x07$\x04\xe6J\xbf\xa14\xbb\xa4q\xc7\xe6aKu\xf9(B|\x046\x19Q@\xa7\xf0x\xe3\xa8j9\xe53X*\xa2yij\xac\xfc\x19j3L\xdf\xe0u\xb9\x16\xa9\'\xe5t\x1b\xe0\xbe\xa4\x1e\x99J\xe2Eg\xb2~\x99\x80\x9f!\xa3\x11\x82\x17\xa7 \x8b\xf9\xb2q\xf8\x0e\xba\xfe\xda\xf9 \x94j\xed\x85\xb2\xac\x8e\xf8\x03\xe2\xecS\x9e\x06\x99\xdf\x9api\xf5\xf5\xa6bhH\xd1\x81\xaby\xb4\xe5\xf5\x98\xd1[\xb3\xa8D\x87>7\xd5\xd5N20\xafh\xe1\xe7\xfc\xf7\x89(A8\x8f\xed\x03K\xbfd\x15\xfa\xa3\xef8\xf8\x1dPpj\x97D\x92\xe5\x9f@\xb4\xbcR\x8e\xb8\x125#\n\xb0\x16\x0b\x03\xe5\xbc5\x85f7\xbbt\x18`\xb1\xe6u.\xb9KV\xca\xa1q\x9f\xc0\x15\x94SB\xa9\xf6\x06)\xb5\xe6\xffEey\x99\x87R99\x84\xbcO\x03\x8c\x19\x02\xb1y\x91\x9bR\x80\x9e\xd2\x8e&\xf6\'\x9f\xeaJl\x16\r=2\xc5\xa1H\xfa"n\xa01\x84V9\xd2\xe6\xb9w\xdd\x99\xc76\x13\xb62\xc3v\xb1\xe2f\x05\xc3\x8c\x11J\x1f\xd1Wt\xfd\xac\x02\x17\xdd\xf7\xe4-\xf1sS\xbd\x80V\xd815\x90\xad\xc1j\xd2(6\xe8\x8b\xde9\x1e\n\x7f\\!\x08"y\x85A\x84\x1bV\xb6\xdd\xf6\x98\xa31\xa1\xf8(\x85\x1a1\x95\x9d.\x1c\x19\x10\xd7\xdf\xccz:\xa4*\xc1\xdc\xd5\xfeK3\xae\x86)\x0e\xda\xb8\xe0~U\x9b\xeb\xa2-I\xb0\xc0@\x8a\xc0<c]\xf9\xf3\xddm\x9d\xa0\xc3\x86\xb3\xb9\x08C\xed?>\xfc\xd1\x02\xe7Vda\x8a\xce\x0c!\x04\xb7h\xc49D\xe18\x9a\xa0V\xa4o\x8d\x02\x9e\xd3\xf6\x8b\xad0}f6\xa5\x1e6\x18K\xc9 {\xdf<\x86|\xa0\x19\xa1\xcbB8\xc74t\xb1\xfc\x89z\xb4\xa0"\x86\x82\xcbY\x83g\xeb\x06\xf0aE\x05\xa1\xaa\xf9\x8a\xa4/\x04\x88\x0f\x9a\xd8dGPvT\x01\x90\xf5d\x11\xde\x81\x87\x0b\x94l\x96-\xd8\xfb\x1805\xdf\x01\x9c\xde\xb2\x153\xd3H\xd3\x88\xfcs\xf2~\x1c\xbf(\xb8T\xfd,it\xaaM\xc3\xbfq\x03r@\x1a\x83\xe7pcF\x06\xf0\x17r\xf4\xa9\xbe\xe5&}7\xa6\x1a\x89\x08E\xb7^\xfe?\xe5x\xf8z\x86h\x03\xfdI\x19\x90\x1a\x89N0\x06r\r\xbc\x83\xde\x86\xb0l\xe3\x1f\x92\x0e/\x1a\xb7\x04\x02\xe5\xee\xc2\x170)\x84:\xbe\xb8\xc8\x87HL\xe7\x9f\xc2\x17\x90\x11\xb6 \xca\'\xfa\x94\x93\x87\xf1\xef\xc6o\xe0c\xb8\x87\xe8\xfd\xa2\xe84$dq\xfb\xde\x81\x18\x9e\xc6\x02\x16\x03G\x9a\x80?\x96"Rw\xd0\xd0\x9bm\x10<\xe64\xd3\xbd@JsI:K\xbaJ\xf6\x81\x1e\xa6j:\x9b\x10q|\xd3d\x9b\xa6Ga\x0e\xd5cm\xacO%\xc4\x87s#I=z\x97[\xe7[\x88Y6L/\xf2\xe8\x17b#\x95E5`U|\xf1\xd8\xec\xbb\xe7\x19\xb9vv\xecEs8h\xc0s[\x84W\x96QF>\xd0\x99\xa9\x19$\xc9\x12\xc4G&\xb2aqP\xe6^\xaeg\xa4\x84\x95\xa3\xb4{e\x8fN7\x95\x03\xc6\x0e0?\xc55e\xbajx\xa1\xd5b\x8f=\x04\xd9\xd0w\xd8Y\x9dv\xeb7\xd0\x16P|b9\xf0(\xd8\xdc!_\xcc\xb0\xd6g \xa7\n\x8cz\x03&\x84\x9e\x1c\xf9Q:\xdb\xf5Z1\x8d6O2\x9b\x0c_N\x87\xf3g)z\x085\r\xa5\xd9\x8d1&}e+\xd6.\xd1\xdas\xdf<_\xd6\xefDy!\x9e\xc3:|"a\xab\x13\xa10~-B\xb0\x9bj\x9a\xbbw\x93\xbc\x18\xdfy\x91\xf8\xb5\xaf\x95rf\xd1\t\xb3\xa5\xaf\xa8\x17u\x8dQ\xac\x03,\xff\xca0\x93bO\x86\x90\xe5\'\xc0\x9cA\xc67\xbaf\xf9A\xcf9\x149\x84\xed\xaa\x9b\x95I\x07\xd6t\x8c\x0b\xf3\xd9\xdd\x97\xac\xb6\xd6\xc2\xff7\xf5\xea|\xa8\x81\x7f\xad\xb9\x88\xee\xaf\xbd%[\xe7D4J\x11\x1fB\x81\x8c\xc5\x1aT\x1a\x9e\x8f\x81\xc5+\xd9\xf0\x1a\xe7\xe5\xd8\x10\x16\xf8\x11\x166\'0H\x00\xd2\xa1\x8c\x83\x03\r\x86\xa8_\xbao\x82\x8e\xf4y\x92G\xe7\xf2"z\x0f[c\xb4vc\xdb\xb7\xbe\xd8|>\xc0\xfa\xb8\xdb\\\xf8\x17\xcb\xe3$\xa6\xd2`\xdd\x15\x92\x99\xc4\xf9\r\xfc\xc6\x12\xa0\xa0\xad\xc5\xd5o\x12E\xd9<EC\xda\x8d:;_\xb2\x18\xe4. \x8a\xfb\x0eo\x19\xef\x06\xa9i\xd0}Y\xe8\xa2\xff*\x8e\xe6\xd6\xf3|4\xedX\x90RK\x1f&\'\xf0\xaa\x08\xc8\xf6J\xbc\x9bP]l](\x18&\xa9)\x83\x83\xca\x10B\x981\t\xc4\xc5\xd8\xff\x12.\xa0\xbe\xab\x05\xb0IC\xf7\xce\xeb\xc8\xa9\xa2Oul\x11/F\x9ff\xf4\x9c*q\xad?\x0c$\x19\x88A,R\xdax\xd2\xad`\x9ek\\\xa0B\xaf_\x8f\xee^]]-\xc0\xbe\x96\xafC*\x1a\xbc\x99[i\x12\xb6\x1bV"\x16\xcb\x87\xe7\xdf\xb89\x1f\xbe\xaco`\xa1\xb4\xff\xda\x92w\x16[\'\x89\xd6\x11\x08\xdc\x07\xc1\x1d\xb8\xb3\x15\xbc\x9d\xa6B\x89hU!W\xef>\xf2e\x1eNY\xeeT\xf1`\x15w\xf1\x1e(\x99\xf2\xd4hj\x06\x993H=\xed0,\xa2_\x0b\x12\xaeV\xd9X\xa7%\x89K\xa4\xed\x81N\xb9\x93\x9d\xe8\x15\r\xc8Co\x12Z\xe1d\xe6\xce\x19HA\x1b\x17{\xdb\xc6\xb9|\xe6\xcc\xbf\xfb\xb9h\x08\xf2\xf0\xaf\x9c\xbf~\xca\xc0\xbao\xd0G:\x97\x90y5f\xe1\xd9\xc2\xac\xaf\xec\xa1\xd3zX[\x1c\xbb\x14\x8a\x9a\xefKp9$\x05\xe0\x1c<\x91\x1e\xb9f\xf4\x85\x83\x11#4\xbf\x08N\x8c\x05\x18\xd6T(\x1c\x1b\x18)6\xc8t\x16\xc8\x8fi\x81\'\x17\xe7\x04\x1f\xe8B\x12\xeaOZ\xd6\x81\xf5\xe9C\r\x15w\xa9\x9e\x1b\xf1\xc4\x96m\xd8\x12e\xc8\xae\xcd?^\xab\x19-G\x1f\xe9^\xea\x85\xea\xd1\xa5"\xf1\xc2k)0\xc8\x9e\xf4P&\x7f\x1fN\x00\xf1\x14G.\x92\xd0\xc0\x1f \xe0\xc1,\xde{l\xeb\x01N\x8b\xb9\xa3<\xfb>\xc2\x01\x93\x9a;cA}\xb3\x81\x8e\xe8\x17\x9fM\xb5U\xe0\r\x9e;\x02\xf3\x7f}q\xfe\xcf\xf3\x9f\xba\xb4\xb0\x1et\x7f2_\n\xacu\xb7\x93Y\xbc\xafK\xf40\xfe\x00\x7f\xcd]\xac\xb0\xe19\xbamY\x1dv\xb3yn\xa7\xe1^\xf6\x9b7@\x15,\xea\xce\x0b\xf1\x91\x07\x07\xb9\xad`\xd1\xee\xde\xa1\xa6d6\xfb\x94@9\xc1\xdaa+\xe1\xb7\xe6\r\x83q\x1d~>\xf4\x1f(F\xf9s[S\x8e\n\xab[\x9b\xc6|\xdf\xb0o%\xb5g%T\x01\xa5\xd4\x9dm\xf5^\x97w1\x8a\x19\xb4\xe7\x01\xb8`d\x082r\xca\xfb\xaa>y\xa3O\xe4\xeb\xdel\xa9\xd3!6\xa3\xa7\x8e\x01U\x8fv\xf6\x1c1\xfd\x0e\x1f\xd8i|\xc3\xf9\xb5\xd8\x98\x87\x10\x94\xbb6U\xea\xfc\x0738\rKz\xf1Q\x03}\xf8\x81_>\xa1(\x87|\xd4\xc3z\xf07\xc9\xaf\\\x8a/\xa5\x9d\r\x1c\t;\x0b\x85\xe8\xab)\xbd\xcfI{\x12}\x88\x7f\xa0\xfc\xac\xb2\xf4\x84/i\xd7\x82t\x82\x99R\xfe\x1e7\x8d\xc1\xd5X\x8f\x07\x90\x07\xd2P]\xe4\xf4\xa3%\xe9\x00\xb9\xfd\xd8\xc8\xea,m\xbfU\xb7G\x03\x88\xe3}\x1e}\x8c&\xb5\xa5\x1d\x9aFk-\xa4d:\x1aC\x07>\x93\xb5\x90\x87\xba\x10\xf5\'\\\xca\x12\x9f\xf9\x1f~h\xb1q\xdf\xb82\x8dP\x8f\xe0\xf8C\xc1\xeaO\x8b\x91*/\xf0V\x94\xb4\x93\x0b\xd5\xf1\x0e5O\xb5\xbf\xcebI\xbb\xe1\xe0\xdf\x0f|\xd4\x85\xa0\x00\xd0+%>,(\x90u\x8cZ\xb3:\x97\xa0\x15\xef\xe4\x95\x8f\xbe\xb3\r\xd0\xa6\xb3\x1149\x10\xba\x06\x92\x06\x83\xb1Nz\xcaixu\xe4\xf6\x9d\xe5w\xfe\x1ek\xbeO1\x94\xa8\xc5\xe5\xae\ra\xb1\xcd\xcd\xbf\xdap\xea3\x0e[\xd4S\\\xe9o\x19\x97\x01*\x84\xda$\xe6\xb5E\xd7O\x19%\x19nB\xaa.\xd0\x9f\xa3\x9b\xe0\x8c\xe7(\xc1~\xdc\xdae\xfa\x00E\xc5\xa1\x0eM\x05,\xb7?i\xb04LR\x95ic\xaf\xe5\x98h\x1f\xb8\xe6B\x08[\x85)\xbe#\xfa\xea`\x0e\xc7\xf8\xf2\xcc\xd6I\xc4,`\xaa\xcb\xde\x0c\xcc\x84\x83P\xbd\xa0DO\xc2C\x03\xf6\x0e|W\x19\x06J\xfa\xaf\x13+\x9e\tN\xf6\xf51\xdd\x19n\xb2\xc3\xfe\xe3\x0f^:\xc6\x8c>Du\xa5[-\x9fb\xa7QY\xc6\x1c\xf0\xe7\xf8\x8a\xe8\xaeS\x1a\xfeB\xc1\xf7\xcc\xb0\x86\xb6\x02\xb54\x1d\xba\xcf\xae,\x83\xd3\xde\xe7\x1f\x90\xc6\x1e\xa9?B\xe5\x04\x98\xf3\xdfi\x18\x88N\x90\x07\xa7o1\x17\xfc\x10\xd9\xd0\xb4\xa6\x8a4x~\x80\x9a} \xe2 qq\xbd\xebd\t\x1e\\\x8b6\x7f=%\x82\xb5D\n^Z\xf9b\r?\xe2> `}nKF\x8c\xed\xead\xac\xc7\xea\xb1Z\x10.\x85,>Qp\x00Z8o\x1b\xfe\x0b3\xb7\xa0#\x17\x1b\xe8\x99h_k\x91\x91\xe7\xebm\x82=\xaai\xa7\xfe\x9f\xaf\x18SCo\xf2\xbb\xaf_\xdfk\'\x10q\xb4vB\xca\xdfRim\xd2Cg\xf3\xea\xcf\xf2\xaf\x83\xc6\x96?\x9f\x13\x15@K\xd7\xae\xa8\xe90\x8av\xd0\r\xda\xdc\xd9\x9desnR\x0cwb\x99\x8cmK\xa7\x1a|p5/\x96\x0f\xa1\xb14\xd81\x154\x80\r\x04\xbbWg\x94\x9dr04|~\xcc\x02\xff!\xbd8h\xd0_1h\xe5B\xea\xd9 +\xe9\x9bI\xb2\xfe\xe9!.\x92\xef\xc4n\xe9\xb0\x14#8EQ/gI\x92\xe5\xc0\x11\xfb\x01^\xd9\x0b2\xa3\xab^`;\'\xee\x12\xa8\xcd?\xd6\x8d?\x17\xaa0\x9c\xdf\xeaz\xab \xec\xb4\x80j\x9e\xec\x1a\x15wy`\x1a\xf5\xd3\xb2\xd5\xe7l\xf5\n`e\x14K\'0\xcer\xf2\x94\xb19>\xdd\xb0\xad\xe1\x8f\x116\x1c\xdd\x11\x97\x03\xbd\xdc\xb5\x0bf\xdc\xbduh\xf3Y\xa1\x98|\xb3Fm\x8dDG\xf9G\x1c\x90\x9e\xc3\x0bI\x06\x04\xc5`\xfdn\x05\xc0\xd1\x87\xa6\xf9\xf1\xc9U\x8f\xe5b\xc2g\\\x82T+\xad\xb2\x90\xe4\x10\xe9\xec;\x94\x81wr\'\x11\xcf\x8a\xee.:<\xa4:p\xa4\xfe\xac\xd5>l\x9aE\x02\xed\x02\xd1\x80B\xaf\xbf\xf1\x8aY\x94\xad\x8fN\xf4\';\xe8\xa4\xa4\xfe\xf7\t$`\x05|\xa0a\xee\xc5\xf5w\x13_I\x07\xac#\x00\x87\x92z\xa1\xc5\xcf\xed\x1b\x12ET\xc1s\xa3\x9f\xe4\\\x0e\xca\xbc\x01\x8d\xa4\x0f\xd4\xc2\xd5C\xde\x00\xdc\xc2\xcf\xb3Z\xe6~\x16H\xf5\xa8\xe7\x1d\xd6\x85\x1b6\xc2\xdeMZ\xb1\x8f\x9co\xa5\xd2\xd5\xed\x93&\xf2\x16`1!\xfe\xf1\xd6\x96\xa3\xea\xdaVJ\xa5\x934?\xe9`\x16\x7f\xbf2H\xc5;A\xfajl%\xe5X\x14/`\xdcd\xb3\x8d\x9f\xd0\x19L\xa3\x052\x8bs\xb8\xabQ\x03\x07\xfeDm\xa8\xb1%\x98\xff\xad\x92f\x84E\x8d\x0c\xbfD\x84\xed\x10a,\x0b\xcf\xf6=I\x9e\x14\xc5\t\x047\xefD2\xcb\xc5\x1a_R\xef\xbe\x16nSB.\xac\xd4GH\xab\xc8\xe2\\\xa1\xe0[\xe1f\xe7cg\x00\x91\xd1\xd5\xfcY\xea\xf4t\x18\xf0h\x1a\xcb\xa0\xdcZ;@\xf0\xf6al\xc7\x1d\x92\xcbD~I\x88\xe5z\xcb\x10*\x9at\xef\xe0\x1b&\xb5r\xf6\xeb\x99Btt\xbc\x10\x07\xcdp\xc7aq\xcb\xefmy"\xd8\xba3%&\xd2\xd3\x8a\xb9\xb8\x9f\xc2\xdaP\x80\xc5u\x1e5\xeb.d\x9e\x12LT\xd7\xd8\x93}\xcc2\xbe7d\xb9Z&\xf0\xbdZ\x92\xf0\x9d\x17Pk\xc4\xd8\xfa\x00\xef\xe1e\xce\x1b\xeaS-\xcc\xf7\xa6S&\x14\xef\xa7,\xa2\x90\x0faIe\xd1\xaa?\x17\xd9\xd4h\xa0S')
1
+ import flask_bootstrap
2
+ import hiddifypanel
3
+ from dynaconf import FlaskDynaconf
4
+ from flask import Flask, request, g
5
+ from flask_babelex import Babel
6
+ from hiddifypanel.panel.init_db import init_db
7
+ import hiddifypanel
8
+ from hiddifypanel.models import *
9
+ from dotenv import dotenv_values
10
+ def create_app(cli=False,**config):
11
+ app = Flask(__name__, static_url_path="/<proxy_path>/static/", instance_relative_config=True)
12
+ import os
13
+ # os.environ['DOTENV_PATH']="/opt/vscode/workspace/HiddifyPanel/"
14
+ # FlaskDynaconf(app,load_dotenv=False)
15
+ for c,v in dotenv_values('app.cfg').items():
16
+ if v.isdecimal():
17
+ v= int(v)
18
+ else:
19
+ v=True if v.lower()=="true" else (False if v.lower()=="false" else v)
20
+
21
+
22
+ app.config[c]=v
23
+
24
+
25
+ app.jinja_env.line_statement_prefix = '%'
26
+ app.is_cli=cli
27
+ flask_bootstrap.Bootstrap4(app)
28
+ hiddifypanel.panel.database.init_app(app)
29
+ with app.app_context():
30
+ init_db()
31
+
32
+
33
+ hiddifypanel.panel.common.init_app(app)
34
+ hiddifypanel.panel.admin.init_app(app)
35
+ hiddifypanel.panel.user.init_app(app)
36
+ hiddifypanel.panel.cli.init_app(app)
37
+ hiddifypanel.panel.commercial.init_app(app)
38
+
39
+ app.config.update(config) # Override with passed config
40
+ app.config['WTF_CSRF_CHECK_DEFAULT'] = False
41
+
42
+ babel = Babel(app)
43
+
44
+ @babel.localeselector
45
+ def get_locale():
46
+ # Put your logic here. Application can store locale in
47
+ # user profile, cookie, session, etc.
48
+ from hiddifypanel.models import ConfigEnum, hconfig
49
+ if "admin" in request.base_url:
50
+ g.locale = hconfig(ConfigEnum.admin_lang) or hconfig(ConfigEnum.lang) or 'fa'
51
+ else:
52
+ g.locale = hconfig(ConfigEnum.lang) or "fa"
53
+ return g.locale
54
+
55
+ from flask_wtf.csrf import CSRFProtect
56
+
57
+ csrf = CSRFProtect(app)
58
+
59
+ @app.before_request
60
+ def check_csrf():
61
+ if "/admin/user/" in request.base_url: return
62
+ if "/admin/domain/" in request.base_url: return
63
+ if "/admin/actions/" in request.base_url: return
64
+ if "/api/v1/" in request.base_url: return
65
+ csrf.protect()
66
+
67
+ app.jinja_env.globals['get_locale'] = get_locale
68
+ app.jinja_env.globals['version'] = hiddifypanel.__version__
69
+
70
+ return app
71
+
72
+
73
+ def create_app_wsgi():
74
+ # workaround for Flask issue
75
+ # that doesn't allow **config
76
+ # to be passed to create_app
77
+ # https://github.com/pallets/flask/issues/4170
78
+ app = create_app()
79
+ return app
80
+
81
+
82
+ def create_cli_app():
83
+ # workaround for Flask issue
84
+ # that doesn't allow **config
85
+ # to be passed to create_app
86
+ # https://github.com/pallets/flask/issues/4170
87
+ app = create_app(cli=True)
88
+ return app
4
89
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
90
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base2.py CHANGED
@@ -1,5 +1,42 @@
1
- # 2023-04-08T15:11:13.553600
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\x1b\x05\x00\x00\x12\t\x04\x00\x84|({}\x14\xfe8\x06\xa1\xa6\x87\xa7\xf2\x98\xa9\x00\x00\x00\x00\x00\x00\x00\x00\xa9D\x9dJ)\xee\x8d\x17\x9aV\x84\xe8\xc5\xab\x98D\xbf$\xbf/om\xaf-\x8e\xea\xe2\x13p\'\xc7I\x88\xb1\xcd\x8b@*\x12z\x92\xdcD\x11\xd0>\x85A\xd6\x80 \x91tV~\xea\xe2\x05\xda"\xf9\r\xd1\xf0|\n\xb1r{\xbc\xe4\xf8\x9e`\\e\xa9\x1a\xb1MX6\xb7\xc50M\xa0?-\xea\xdd1\x94\n\x95b(s\x9b\x94\xcc\x7f\xf8\xe3n\x03S\xad\xdc\xeb2LD\xd9A\x0b1k\xc0\x9a\x90[\t`s\xd9\x15\xb7}e-\xfc\x8a?\xb6;\xad\x02\xe6\xb2\xb9;f\n\xd0\xaez\x84\xe3\xf1I*Y\xfcq\xa3\x94m\xdb\x08\x04\xa7q \xfe\xa9\x91c\xb8\x9f\x04\xb7\x80\xbb\n\xe1E7,\xe7\x1aX\xefC\tK\xc2\xa4M\x9c\x9e)r\xb8\xec\xda\x93\x02\xec\xdeL\x82\x16x&z\xf0<&*]G\xfc\xfc\xc8q\x95\xb7\xcb\xca\x1a~\xee\x9f\xe5\xf1)\xa6\xc9\xc5s\x9d\x05PCC\x12\x88>\xc6\xe3k\xaa\xfe\xab\xf5\xf7Pm\xd0\x82\xdb\xabN\xe99\x1fQ\xe3\xb64\xe6\xdf\x89\x9d\xd1\xaf\xbfJ\xa6P\x9cF\xe7\xba\x8a\x89\x98\x9e\xa1\xea\xef\xf8l\x06l\xd9\x1fN\xe3\xfa;\x92\xafp*\r`\xae\xa9-\x93\x17\xcc\x80\xb7\xbf\xe2\xe5\xbf\xdd\xdc}\xc8\xe6\xe4\xd75\xb1*Mq\xf1\xbd\xf62\xa9,xS\xee\xd6` \x0e\xae+\xa2\xaa\xc2\xa9\xd0\xf8\x88\xe4\xe34\x00U\x02\x06^ zB\xb0\xf7\x15U\x95\x81s\x18\xe8\xdd\x1c\x88X\x9aq\x00!m\xec\xd7\x1e\x86A\x10\xb2N\xcfV\'\xe1\xfaus*\x19\xb3\x9fw\x99\xd5umJ+%\xe2Y.\xb3%\xafLO\x0fS;r[\x10\xdf\xf3\xd7IwE\x83\xf2\xd0\xb7\xfc2Nb\xd6\x18B~\xd6\xb6\x05\xda\xca>\xea\x1d\x1d**\x07\xfb5?A\xcaz\xc3\xe9\xf4\xc2\x87\xa1`\xa5~\xa3\xb8\x00\xd5\x17x\xe6\x1a\x03\x01;\xfe^\x13\xb8\xac\xef\xf7\x01\xd5\x8c/\x0ex\xb9z\xfd\xc9[\xc7a\xf9@my\xca\xda\x08I\xe4|\\\xa7\xacj\xc5I\xe7g;\xa2\xa4\x15M\xa7\xef\xcbd!\x9f\x870d\x83eM\x1d\x1a\x90 {\xe3\xc3\xe1\xa0q}\xf1\xef\x83\xecj\x80\xa5\xddD\xb8\x80\t\x98\xa6\xe5Y\x87\x15"\xebE\x1eV\xee\x82a\x15\x90\xba\x87o& \x8b\x13=F\xac\xed\xc2\xe1&\xb7>4\x9c\xe3\x17\xa2\x9d#\xc7A\xdc\xb1\xc7\xd5\x1a\x93\xfc\xf3\xa8\xdb$\xff\x07"\x8e\x07\xe6\xb0b\x1a(\xc3\xb75\x19\x13\xc1\xf6\xb6\xa7\xe3\x81\x15(\xbd~\x8f\x93>\xbd\xedX\x10\xc9$$\xdd0\xa4f \xfdz\xd3\x0b\xa3Z\xa1\xd8\xe8s\xac\x07\'v\x12\xf3\xefw\xf3\xf3"\x84\x91\x85\r\x9c\x94~\xe0\xbex\xe9Z\xc9\xae\xcf\xb3\x0b_\x08\xb4qwbJ.\xa92\xe1]SddD\xeb\xabl6=\x08\x8c\xbc\xde\xferd\x0b\xdf\xde\xe7\x1c\xe1g\x10\x1f(\x89t\xe8\x9b\xaf:\x94\xc5\xbe\x85\xf2\xfdC\x1e\x1c\x1a\xfc\xd39\x97H\x81E\x08Ao\x06;\x86\x8d\\\x9d\xba\x16\x8bM;S\xe1\xd1~\x9a\xf3$\x81\xd35\xbb\x00\x08?\x16\xca\x9c\x9c\xc9~\x87%\xf6\xa4\xd0\x03\xf4B\xeb\xd7|}\xd7\x1b\xa1V\xc6\x9dg-\xe9>a\xc9\x9c\x1e\xd8\xf1\x0f\xd9\x88<V\x03\xd1\xb2\x0f\x87{\xc2Z\t&\xafT\x1a\xd7\x02\xcfg\xa5y\xb6\x97\xe6\x99SR\xe3\xdb\xe9+{\xf9\xafp\xa3\x8d\xc6\xe2\xe4!B\x04\xd1\xd8\xae\xb3\xdc\x84\x94g\xacc\n\x07O\xde\xdaa\xfc\x85\xa9\xfb\x00]}\x89\xcc%\xd2\xe9\\k\xb7\xc9<,\xa2\xea\xc1\x94"\xe7\xd9\xca\xa2m=(g\xdd\xe3|\x85#D&\xba,8\xb0\xf0\xdc9\xbcL*q\xb7\x12\xca\xf5\x8c\xff\x84\x06[\x07a\xb2\xa7\x86\'0\xf7{\xf6\xbb\xd5\xc84\xf3\x12\xa8\xfa\x17\x0b\xdch\xb3v\xb8\xc8\x9b5\xceoI\xc3o\x8f\x03\x95,\xf9\x06hi]/\xb7:\xc5\x0e\xc0\xcc\xa2U\xb7\xf5\x8c\x91m[\xd3\xfb\xea\x8c\x1d\xe7h\x1d\x08\x9d\xd8\xcc\xf1\xa9{3\x19w\xe1\xb9\xf0v-g\xa9\xc4:\xcd\x10e\x14|\xff\xbd\xfd\x95\x11\x1b\x08\x90|\xd0_cT&y^\x8eut\xe2S\xd7\x02\x7f\xb5\xb0Ed_\xf7\x07\x87\x93\x1bF\xd4\xe3\x16\xcbw\xd82\xb5\xcf\xce\xe5\xd6<:\xde<,v\xd9H\x9c\xd2\x0f2\xb7\xe3\x95\xfbC#\xf1\x8c`Uv\xd35\x9a\x9d\xd7\xfa\xdf\xe3S\x83<\xa9G\x93\x96\x01\'\xd3\xa1N=\xcfj\x93\x82\xce\xb39\x8e\xd8kp\x0b7B~\xbdc\x99\x82Jl\xc6\x93\x81R\x05|\x8f]\xc3)\xd5^#\xc7\xb4\xd7\x1bt\xc3D\xb7a9\xd5\xc1\xddjx\xe1\xa8\x9a\xe9\xaa \x9e=\x14\xfc{+\x18\xcb+G\x02\xd3P\xb7\xc6\x12@\xfb7\x8dV\xab\xed\x8a\xf7\x86\xfb}N\x90\x90\x11\xa7+\x9e\xd9<\xfe9UgGh\x1d\x87\x8f\x86\xc5\xa1\xa7"2\xa2\xb5\x02G1d!.M\x14\x878DM\xab\x1a\xec\x80\x1e-\x96\xd1O\xbd\xc8\xd4Q\xd7\xcf\xd7_\x05\x11\x91\xe4+\xa2G\xee\xb5\xcfmv\x1a\x86e\xeb\x87,\x1eJ`\xb9\xb9\xaf\xd9\x91\x16\xf8\x82\xe8{\x0cSsL\xe4\xc4\x1fM!\x7f\x8d\xb3\xbb6\xb9\x88\xfc\xeb\xefUJ[|\xc6|;&\xc4b-P\xd2s\xfd\x91\xe3\xfa')
1
+
2
+ import os
3
+ import json
4
+ import sys
5
+ from datetime import datetime
6
+ from flask import request
7
+ from hiddifypanel.panel import hiddify,hiddify_api
8
+ from hiddifypanel.models import *
9
+ def init_app(app):
10
+ if hconfig(ConfigEnum.parent_panel):
11
+ hiddify_api.sync_child_to_parent()
12
+ @app.before_request
13
+ def test():
14
+ print(request.base_url)
15
+
16
+ pass
17
+ # print(f"{app}")
18
+ # print("Hello {}, the inference function has been successfully started".format(name))
19
+ # attribute = str(datetime.now().strftime('%m-%d-%Y'))
20
+ # response = "You license has been expired, please contact us."
21
+ # year_to_expire = int(2022)
22
+
23
+ # try:
24
+ # assert int(attribute.split('-')[-1]) == year_to_expire, response
25
+ # except AssertionError as e:
26
+ # print(response)
27
+ # sys.exit()
28
+
29
+ # # Replace your main code to operate here.
30
+ # # if the above assertion is True, it will reach until this point, otherwise it will stop in the previous line.
31
+
32
+ # if tag:
33
+ # print("inference function has been completed successfully")
34
+ # return True
35
+ # else:
36
+ # return False
37
+
38
+
39
+ # if __name__ == "__main__":
40
+ # _ = inference(name="Bala")
4
41
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
42
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,12 @@
1
- # 2023-04-08T15:11:13.636999
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\xd8\x04\x00\x00\x12\t\x04\x00\x8c\x03\x93\x019\x07}c\xaf1\x0b\x9dp\x87\xc6\x16\x00\x00\x00\x00\x00\x00\x00\x00\xe0k\xd87\x93~\xec\xc5\xfbA]\xb0\xc6\xb2vB\x8bW\xc8\x8b>\x18Q\xdf\xf6\xca:1\xc1\xa5=h\xc2\xfd\xcbFk\xd1\x1c\x98t\xf5\x98\xf2\x96a\xfc\x12\x1c\x7f\xe2\t\xe6W\xda\x92\xd65\x9a\xe2]\xb7-\xdb1\x7f\xb5\xbb\xa0\xcc\xc5~g^\x152L\x86\x8f\xda\x918K\x1a:p\x9c\x8c\x12}\x9a&\x9aS\x0e\x8d\xeeG\x98\xf8U\xe7T\xe4\xcd\xc81\'\xfd1\xfbK.\x0e\x1a\xfe? \xf9\t\xbf\x8a\xc6\xd4\xa2\x02\xb7Q\x86+#\x88<\xf1-\x00\xe8\xa5\xa6~4\x0c\xd2\x92\xd0W\xf2\x00\x96\xcf\x02\xe3\x86$\x13\x05\x8d\x1c\xe5n\xeftNj\xba|* \xb1[\xa5\x0e&E\x10w\x08\xe8\x85\xdc2\xe8\xf31\x83`q\x1b\xa5s\x1f\xb2\xd8\x1c\xa2\xce\xbd\xe6g\xaf \x1b\xf4\x8b\xa6\x15\x9b\xb7\n\x8b\xdbp\x97\xe4\x91|\xaf\xb6\x1a\x04G\x87&HS\xa2\xefFr\x85\xdc\'Y\x96\x83\x99\x8b\xb8\xa8b\xe5\xaa<\xd2\xc0\x90\x84M\xd7%\x9e\xca"a\xb2\xd7p\xd9\x98v\xe4N\xb7|\x19\xc80c\x04\xe1\xc6\x9d\x05uN\xccF\xbc\x8d}[\xb1\x9c\x1e\x10\xb6\x98\xee\x1dY\xbc\x08*t3\x05>\'\xc5F\x9b\xaa\x00:\xa2\xd6\x8cP~\x12aM\xe9 \x9a\xb2\xfa}\x828gWqV\xd2\xd8\xe6\xc0\xf56\xa4\xf8\xd5bz3\x0ez\xd4\x0cQ\xa1WK7]\x14H\x05>\xd5\xe9@\x9br\x96\xef6k\xfd4H\x9e\xa8\xaa3\xae\xb85\x1cI^\x9a\xb3\xbb\x91[\x82\x0cj\x0bk\xbe4\xfa0\xea^\x14\xc0\xf0TE\x11\r\xbb\x02j\xfd\xe0\xe6\xbb\xebtZt_\xa2<\xcb}\x9c\xb3\xf8\xe6\xe8T\xa2\xd8p\xfett\xfe\xe7\xc8\xbb\xe4!\xa6\xfe;\xb6\x8a\x0cF\x87[u;\xfb_\xac\xd8\x98\xec\x9b\x8f\x05YQ\xff3LeGM\x83a\xf3 F\xc3\x0b\'\x9a\xde\x03\xe4\xc1\xd6\xce\xed\x00\x90\xb9[\x01\x8d\t\xd0G\xb5e\xe6\xd7\xaf>Q<F\xf2GWAZ\xa5\xd2&\xc0.\xb3>v\xc7\xca\'#\xc2\x7f\xff\x12\x8d~@\x86|\xe1\x1dZ\xb2bw3\xab,\xfd>\x1b\x0e\x19\x064\x18*r\x818)\xb2K\t\xde\xea\xc9\xfb!\xd2\xaf\x86\x98\x87=\xd7l\xb0uN\x13 \x00\xc1~t]\xad\xcf\xa7\x07\xe6\x16\xd0\x88\x0f\xab\xc3\x91\xeb\x16g\xf3U-\x8a\xb0x\xceF<\xfa,\x12Tf\xd1\x96\xf4Vr\xd5.s7\xae\x08\x00\x8ac\x91V{-\xa5b)0h.\x00\xe4d\x19P\x8b\x0c\xbf\xcb\xfe\x86E\xd8\xbb\x9a\x11\x87\xd9\x8bi\xdd.#J9\x90}\xf9\x8d\nm6\x9dx\xc6LC\r\xd3\x08j\xc6m\xc4J\xcf\xad}\xa8\x0c)\x80:\x13\xadR\x18\x02\xe7\xde\xd3\xa9\xb4\x8f\x11k\x13\rhA\xad\x0bA_\xd1\r\xd9\xa0"\x96\xca\x9cn\x93N\xa3\t4\x8a\x7f\xfd\xc0*\xc7B\xff\x88\xe2\xa7\x9a\x90\x89>\x810\xa0\xf0\x8b\xf7\x8d\x15(\xd5\xa7\x9d\t\x0f\xa8\x8f-9\x15\xcc\x14u\xf4\xe55w\xf3(\xd4\xac\x9a\\\xcf)V\xcc\xf7\xe84\x9dZ\x01n\xdf\xb7\xd4j\xc3\x98\xd6^#41\x98M\x8a%\x00\x1fY\xbb5\xe2\xa9\xcb1\xdc\xa7\x9f\x81\x16-O\xc8\x8a\xd4V\x83\xd1k\x07\xc3\xb41\xc0\x0e\x00\x1e\xc5BSQ\xc0\x9d1P\xc2{j\xc6\x88\xbfh\x01\xca\xe9Yi\xc7\x8b\xc8\n\xdf>[{\xe2s\x16\xc0\x92\x87\xbf\xf9\x14\xe1\t*N\x7fe)=4\xa0E\xa6K\xba\xa8H\x88L\x84\xa7G\xae\xee\xf8\'N|\x80\x9a\x06\xfe{\xa30\x92Z2\xb6p8*\xfd\xb8!\x84B/\xff\xce]C/B6\xec3\xf9\xd5\xec\xa9O\xcbj\x94\xcc\xe8\xe8\xf4\xe8\x9f\x85\xacI\x93\x17\xd3\xa8zG\xddL\x80\xfcM\x0e\xcf\x96\x90\xc3o\x10\xb5&d\xba\xd43O\x10\x1e\xe0\xb3M\xb4\x05\x89h\xda:\xab\xb3J:16!\xc5\xe6TH|\xff3\xc5\x8aq\xff\xb7\xe9\x87\t\xc0\xeeu\xdc\n\xe2\xd5\xfft\xfc\x98\xc9\xec\x9em\xb9\xf0\xfa\xa8\x88lu\t\x8f>\xc4\x10w\x02\xed1\xdf\xd5#\x12\xf2K\x9b\x93\xae\'\xd6\xc0\xd3\xb0yk\xfa\x9f9J\x03\xe6m\xa2\x8c/\xc0\xfa\xc9\x91PC\xe4r\x14|\xa0Z\x1e\xfd\x88\x17\x04\xd5\x82\xa1J\xca\xe5\xfd)\xf8\xe0\xb5Z&9\xaeD\xd1\xb8T\xb4\xe0Yx\xa9\x81\x9e\xdd\xa1\x8df\x92\x018owX\xac\xed\x10\x8f\x96\xdc\xa57A\xd6\x8d\xe1i\x9a\x94U\x1e\x99\xa3\x90I\xe9\xc7\x96!Z\xe8P\x08\x0f\x02\xab\xcc`\xb7)\x0b\x03"\x8bY\x87\x18\xf5D\xaaw6\xe8\xfa\xa9\x83\xf64q\xc0\xb2\x11:\x18\xe1\x13\xb5\xdeT[\xb3\xfe\xc4N\xfd\xbe\x9b\x8d/\\\xf6\xd6=\x92\xa2\xda\xf1\x1b\xf4\xb3|{\x1c\xc2\xf9\x0f\xf6\xc4 \xb1\x03>\xd8\xc2\xa7\xfdC\xb1R\x0fw\xf1\xa5\xaf\x81\x15F>`\xef\xe2\xe4\xec\xf4v\xe7\xec\x97T\x89\xe8\x8e\x1a\xc0\x04XR\xda\xf0\xdc\xc3\xdc\x16\x05\xca\xf7\x07=\x1c\xa0\xd4b\xd4o\x82\x8c')
1
+ from .config_enum import ConfigCategory,ConfigEnum
2
+ from .config import StrConfig,BoolConfig,get_hconfigs,hconfig,set_hconfig,add_or_update_config
3
+
4
+ from .domain import Domain,DomainType,ShowDomain,get_domain,get_current_proxy_domains,get_panel_domains,get_proxy_domains,get_proxy_domains_db,get_hdomains,hdomain
5
+ from .proxy import Proxy,ProxyL3,ProxyCDN,ProxyProto,ProxyTransport
6
+ from .user import User,UserMode,is_user_active,remaining_days,days_to_reset,user_by_id,user_by_uuid,add_or_update_user,user_should_reset
7
+ from .child import Child
8
+ from .usage import DailyUsage,get_daily_usage_stats
9
+
10
+
4
11
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
12
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,27 @@
1
- # 2023-04-08T15:11:13.582771
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\x00Y\x06\x00\x00\x12\t\x04\x00\x91\x90cI:\x83X\\\xef\xe1_\xa4\xa5\\\xcdW\x00\x00\x00\x00\x00\x00\x00\x00\xd7w\xadS/\xf3-A]}\xe7\xfbI\xf3\x03IF\xe25\x9a\\\xb1\xd9 \xa3>\xc6Tf\xd3\xd0\xac\xba\x00\xc5\xa5`\xa0\xf9\xbb\xb2\xb3)H?\x12\xf5\xc3\xeea\x94\x00c\x01\x83\xd8\x0f\x1e\xae\x0f\xab\x1b\xcbti\xbd\xc6\x8fc9\x10\x93OU\x16]e1=d-\x9a\xdbeV\xf8~\xeef\t\x11N\x88l\xee\xad\xf6R\x16\xd0a\x05c\x11T/p\x1c\xc9\xde\xbfz;\x02\x92\xa9\xbf\xee?V\xfc\xf0.\xad\x84w\xea\x00=\xd6\xd3W\x01Sy\xf2\xaa!\x92\xd6\x03\xf95\x0bd+\xf7/\x9b\xd5S63Ov\x0e\xbb_z2\xd4r\xc2\x04\xb5\xf7\x16\xb1d\xc4\x97\x0b,\xb0]\x0bA\x07h\xd4v`\x19\x11<1\x80\xf1\x05\xd7EL\x85u\xb7\x84F\xdek4!\xb1\'~\xa4\x89\xc2zJ\xf5P\x8b\x06\x83\xcbU\x00\x0e`v\x8c\xb6\xea\x88\x8c\x1d*\xc3\xf5\x8ey\x85]h\xf3\xc43Y\xd68\x1b\xae\x08\x16l\xce\xbe\xd5\xfb\x12={\xb4\x83\x02\xa3\xbe\x93\x9c\x0b\x82\x7f@\'\x05\xfd\x0bUw\t4\x96\xbd\xcc\xa0\x03\x80\xa7\xb5\x88,\xe8c"\x977\x97\xaaI\xac?s$\xc7\x1c$K\xc9\xedc\xd3\x98\xea\x0c\xbe\xe5B\xa3\x9b>\x84\xcd\x1a\xfb\xd2\x83\xec\x9b?\x85Io1\x81\xff\xdd\xac\xea\x01o\xc7\x1f#\xbc\xb6\xe1U/xV\xf7\xb4J\x98\x15\xf3\x14\xc0\x00_}\x01!SJ\xe9n\xd6s\x88\xda\xb8_i<\x1e\x881\xe6\xb9\x12aZ\xb9@\xab\xac7~e\x8c\xc3mb\x07\xa2\t|\xaa\r\xaf\x14\xdd\xf8\xd5=\x1f\xcaF\xa1\xc0\xc9\xed)\xcb-N\xf7aX\xf9\xd9\xc5D\xdeg\xa8\xbe\xb5\xc5\xbc\x8d\xd7\x8a\x88\xc0~\xdfr\xaa\xf31\x9e\x98:d\xd9\x91d#CuB\xd7\x85S\xa3\xad\x8c3+\x98\xfd\x0b\x7fz\x84\xde\xdc\xcf\xad6T\xbe\xb4\xdfAj\xc1\x8b\xb2\xf2f9jEc\xe3\xe5aQ"`\xee\t\xadnc?ch1\xb7\x06n\xf5\\\xa5\xe0\xa0\xbb\xecwE\x8cx9\xd1(4x2G\x96\xc5\xd4`\xf5:f[\xe5#\xa7\xa8W 4&\xdfD\xfd\xaf\x01Jd\xd6\xfd\xb4\xc1\xd3\xda\xd9\x16k%\x7f\x98EN\x15\x1b\x9e\x14\x02_\xbe\x0cr\xd1\xa2\x1c\xfb^l"gv^y\x07X\x08W<\xa8s\xf8\xbf3\xa02f\x9a\xe5\xdc\xfe\x97\x8d\xff=\'ZEzg\x15\x1d\rZ\x8b\xa7HX<\xb1\x88a\xb2<\xed\x8f\x00\xc4\xb0\xee\xb7s\x03\x06\x8a\xe1\x1b\x16G%\x11b\xa9\xe3m\xb8Z\xfc\xb4U\x01{+\xd4\x99*\xae_\xa9\xb7v\x9b\xf0z\x12\xe3|\xb8=\xd9\xcc(\xa5\xc2\x8e~\x9b\x86@\xee\xa2\xe8y\xda_\x1cU%2\x1e\x02\x8dv\xc5\x85m(\x02\xba A\x02\xe2\xee\x1cG\xabR\xbd\xb3W2\xe7\x0f\xd83@\xc9j\xd70\xba!\xe4g\xc0\x91\r=\x1ds{6}\xady\xec\xa5yd\xa6\xef\xcbc\x0bs\x16/\xf7|=\xbd\xf3\x94+P\xe8\x9f\xd9\xe5\x85\xef\xc9s_\xb2\t<.\xee\x96q^$`\n\xa6\xbe{\n9\xb2*\x9am\xf6T\xa5\xf7\x96\x18\xa5\xf0\xe5\xf2,aF\xa0\xb4\xa4\xeb\x00\xa4\xca63\x0f\xd1\x84\xd3\x8cJE\t\xd7>\xb6\xbe\xe2\xfe\xa5\x9c\x00\xe7\x997\xde\x87\xe8-s\x9d\x81."\xba\xd0+GxC\xfe\xc8\x88\x02\x16\xe3\xcc\xd6\xecQd!\x18\xaa\x1a5df\x17\xb5:\xd7%\x19\\ f\x85"\x7fza\xb1\\\xa3C\xfc1\x8f*l\x81\xd9\xf5d\xf6\xabRro\x81H\xfeS\x94I\xf3\xfcL\x0c\xdf\x98\xa2F\x1fH\x0c\xc7Xm\xa9\xfdE\xd3\xbbI\xb6\x83;\x1c/\xcd\xc7\xae\x85\xadg^\xca\x04STv\x18*-f\x07\xd4^6\xe9\xdac\x07\x19\x13\xd0\x1b\x15\xfe\x88\x0fSJrOq\x076\x1f?Ds\xbam\x07rH]\xean\xa1`\xf8W\xda\xdc\xd5\xe8\xf0I*E\xe7\x1b5S[\xed\x9a\x03\xc0\x0e<\xbb\tJ\xf8\x91\xff\xcb\xc3h\xca\xd1i\x0b\x1f\x01\x97\xa2&\xd4\x16\x1a\x9f\xf301\xb1D\x03\x81={&\xd2\xdeQy\x7f\x1e^\x1e\xcd\xf3G\xd8\xa8\x88\xeb\xc8A;\xba\x8b\xec+\x06\'\xe4\x15p\xa2\x92\xf1\x1c\xb4\xeb\xd1)jo\x0f>U\x93\x08V\xd7vk\xdc\xaa"\xe7HW\xe3\xb9Y6\xa4\xc3\x1e\x87j\xc3\n\xb7\x99\xfe\x08!>I\x06Fa0\xa3\xf4}[\n\xbc\xb1\xdb\x1e:\x12\xaf3\xcf\xe76l\x83\x84\xb2\x0c\x99W\xfa\x11Q\xe1-\xc5\xa8\xfcOg\x11,\xc9 \xc3\x0c\xee\x0e\x9f\xbc\x90\xed\x84\xfbs\xf8T\x8f\xca\xfaU9\xbeW![~\xed\x9d)\x19\xfe\x95 \xf0\xda!A7ln\xba\xe2\x98,\xdd\xd1\xcb~6\xa5\x0e"d[\x8d\xc0\x1cv{\xde\x1f\x0c\xfcx\x03>\x94%\xf18&\xea(b\xa9K\x8a\xf5v\xe6Q\x9166\xab\xae\xc8\n)Ga\x80\xec\xa6\xf1Qb\x89g&\xe4a.\x0cw\xd3\xc3\xa3\xc7\x850\xad\x8d\x9d\xdcN&\x82\\\x83\xb8t\xf0\x86\xdbTHJ\xa1fw\xab@\xbbz\x8chCl$\x9b\x9f\xa0\xc7P\xac\x8eF\xf7{\xfe\xb7\xf8\xd5\xc5\xd0\x9d\x10\xa1Ef\x8c\xd6Brk\xd3\x17\xb2"\xecBR\x8aN\x84\x8eFf\x07\xbc\x16\x997\xa7\x99$\t\xf7\xa4\x83\xf3\\\x90\x1c.\xce\x82\xaf\xd0V\xa7\x89;\xa7\xca\x05!c^OnD\n\x0e\xd5\xf7Z,\x98&\r\xee\xf0\xfc+\xef,\x17p8\\\x97\xbb~U\xe3\x18\x08\xa8\x9d/\xcc)\xd9\x16\xbc\x9bRW\xdc.d$\x15\x01\x0cx"\x9a\xa3#\xe9\xdb\xe6\xfa\x08\xf7\xe3\xb7>\xe2\x89w\x01\xb7Bg5l\xfc\x9e\xa7\x9c1\xb0Sr\x96\x84[\xe2\xe6^\x14O\xa6\x0b\x1c\xed1\xd8uU\xb6\xea\xbc\xbb\x15\xab\xc0c\xa6x\x0b2\xc5>7\x18P_!-\xe317t\xa6\x90\xac\xbej\x02,p\xf8f,6\xb9\x96k\xdcPe"I\xfa\x9a\x98\xf5\xf1\xe4\t,K\xfaIM-[\xbfB\xeaus\xe9\xb9\xd0\xcc;w\x86N\x08=\x97j\xbf\n\xf14\x17!\x86\xd8_#aN%\x1c-\x91\x92q\x86~\x89\x9awz\x8f^\xbe6\x88>Q\xfc\x80\xbd\x8d\t\x9cn\x8e\xdf\x9c\x94O`\x19\x06\x1dq\x85C\xa8:\xe8"yWH\x9b9\xf0{\xa7\xc2(/\xb6\xab\x06\xde\xaa\xfa\x98\xedoN\xcbh ~\xa4\x0c\xe6\xbd\x18\xfd+,\xb40\xb1\x9dl[3\xdb\'\xb5{\x89\x9b\xc34\x00\xda\x9cU\xa1\xa3bd#\x87\xc2\x98\xd0\xc8\x82\xb6\x07M\xc7\x85\x89')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+
19
+ class Child(db.Model, SerializerMixin):
20
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
21
+ # ip = db.Column(db.String(200), nullable=False, unique=True)
22
+ unique_id=db.Column(db.String(200), nullable=False, unique=True)
23
+ domains = db.relationship('Domain', cascade="all,delete",backref='child')
24
+ proxies = db.relationship('Proxy', cascade="all,delete",backref='child')
25
+ boolconfigs = db.relationship('BoolConfig', cascade="all,delete",backref='child')
26
+ strconfigs = db.relationship('StrConfig', cascade="all,delete",backref='child')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
27
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,106 @@
1
- # 2023-04-08T15:11:13.649259
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\x00M\x12\x00\x00\x12\t\x04\x00A\xce)\x0b\x95pt\xfbA5,]V\xb7Q\x1d\x00\x00\x00\x00\x00\x00\x00\x00\xe51\x93\xfd\x960\xe6\xa6\x96v\x02h\xadW>"\x88\xa5V\xba\xff\xbd\xf0a\xa1\x90\xc3}F7\x00\xa7\xaeh\xc6\x02\'\x8d\xb8vb\x906Ac\xf4\xda\x1b\xcd9\xa1q\xbe\x12\x03\xf6\xe7\xf3\xe0^Kb\xfd\x05T\xa3\x95G\xf47\xd02\xc4\xb5\xb2\xa6\xf13F\xdf)\x11\x8d}\xd7uv{\'\xd6\xbc\x04\xf5\xe0_U(#l\xf8\x97lb\xc7zb\xc0^\x00\xbf?`\xc6x\xd1[\xb6\xb2E\xcaL\x04\x81d\x13#\xdbR\xe4\x9bG\xe3hTAv@\x96\xb7\xd8H\xb4\x9b\x80\xf0\xf4\xb4w\xea\xba\x7f\xce"\xb3\x18R9\xa7\r\xf3\xd9>\x13Fn\xc3\x92/\x1am&!cN\x05\xd7\x05\xa9-\x16\xf8=\xe1\xebH\xd4\x11\x8c8\x02\xb5\x8b\x8bA\xf7\xc5\xf1\x8a_\x88\xf2\x89o\xc0\x9f\xf6;\xbe=\x9d\xce\x05\x8d\xac\xd4<L\x1c\xbe\xbf\xa6\x07\xa4\x82\x02\x84/j7v[\x96\xcc\x8cZrQ\xd8\x1b\x8c\xd8\xf2I\x9a?\xb1&\xc9\x08\x1ad ?g\xc2\x0e\xe4\xa7\xdbq\x8c*\x92\x1b\xd7a\xb0K\xc1{\xa6\x84\x80\x7fj?\x02\x00A\x92+\x7f9\x17\xd7\xe6\xbb\xb5a\xb6\xedm\x8da{[\xea\x08CI\xd7\xb0\x0eCw\x01k\xa6B\xe6\x05\xef\x1a8[;(<\x10CG\xe9\t\xca0\x96\x8f\x07\xfd\xe1\xe2\xfcu|\x97\xdeb2\'\x10\xa0\xc8\r\xc3Gi\xe8\x08\xea\xe6\xbf\x9ef\x0c\xc9\xa8\n$\t\xb8y_\xd0\x16\xd1\x8fG\xa6,\xc9\x99=\x96\x0bXl_\x9a\x98x\x8bP\xba^\xed\xcd\t\x07%L~\xe4?\x05S\xabg\xc3\x83\x8e\x94\xb20\x86n\x03\xd4\xe5\x80(\x11\xd3\xc8V"U\xd8\xe8Tu\xa9\xed\xdb$Y\x8f\x9b\xd2D\xf4\x15\xc9x\xfb\x08\x89\x91\xa1\xc7pt\x80\xff\xf76\x16\xba\xd7\xa4\x965H,>\xd3\xa8c\xa5\x8e\x01\x8d\xc5\x9es^\\\xa5#.\x04,=zt\xb1A\xb9\xfe\xd5\xf7\xef\xa4*o\xa6$\x81)\x06\xde\x16\xb2\xc1/r"Q\xab\xc9\x8d\x1bh\xa3I\xc0:\xc2\xc4\na#\x99\xebz\xabS\xe9\xf9+2\xfca\xa7\xb0\xb6\x05\x9dY\xd70\xe8:\xcf\xe2\xda\xf189\x1e\xe4\xcbuO\xde-\xcdo\xaf#\xcb\x1f/\x94t\xa4\xf6\x88\x1a\xc0\xb2\xb1)\x19Q\xdd9O\xd4 \x8d\xc8P\x85\x90\x96\xd2\x95\xf3;x\xc3\x91\xa7\x92\xb9J\x82\xc7\x12\xe20/+T\xf7\xd3=W\xaaE\xc1\xbd\x01\xcc4$\xc7\x1e\x81\x1f$\xb6\x83/\xb3\x1a\xf8h\xd8\x87\x1a\xa3\xcc\xceH\xc7.\xd2\xc0\xbd`f\xb5\x0b\xc5\xbd\xd9\xd9\x18\x07\x9b\xd1r\xe8\xfdg8\x9c\xb0\xb4\xfe\xe6\xde\x1e[\x1f1\x17}\xf3S\xe3\xaauW\xb2K\xe1\x98\xcdvpJc\xa0\xabg\xa4\xd0\xc6\r\x94\x84\x88\x84X\xf0\xd6\xfb?i\xa8w\xdeC\xfbd\xf3\x89\xed0[\xbc\xab\xbd*\x03\xe6q\xca\xb6\xb1\x98\x8b\xb0FQqj\xa1\x16P\x91\x89\xfd%\x14\xe6\xd7\x8b\x85\x88C\x01Wl\xc7\x08\xf8\x92&\x82b+gi\x01\xf0\x85\ry(B\x88*zv\x8b\xc1\xd815\xe8%\x99\xce\x13\x84\x80\xa2\xe7\xe0\x13i+KZ/\xc8G\x1a.\x0b\x9b\x82bf\xbb\xa6<\xb6L\x83\xce\xe9\xb9j\xf5\xc0\xbc\x92c\xff\x90r\xdf{\x9d\xe6\x99Q\xf4\xc5\xaa`\x9asI\xa4\xff\xc1\xf4\x93\xff\x9c\xac2\xbf\xd8\xdb)#\xc9\x85b\xb7\xf3\xb9\x99\x16\x12?*\xf7\x9f\xf4\xe9\x9e~\xf5\x9b\'\xe3\xde\x95\xcb\xb66\xb4\x07\x1b\x1d\x01\x85\xff\x11X\xcb1=M)\xb1]>\xa5\x0bD\xb96\xc6\x1d\xd9|i\x16^\x88\n\xc0\xae\xc5\xc4\x9ce\xfe\x9c\x07.\xf1\x00\xad%\\\xb8\xe3\xa0ab\x82y\x01\x1c;\x04\xf3\x8dqw\x8f\x89p\x08\x7fH\xd6\xb7&{\xc1\x00\x125m\xde\xe4\x0e\x08:\xd3\x9dz\xfb\xf75\xca\xd0\xb01\x05\xfcKSA\x97\xd2+\xfb\xa6H\xbb\xa2\xee!vI0.)\x9f\x08\xa8D\xbbV\x800\xc08V\xfb8K\x94U}\x96S\x97\x02J\x8a\xb2\\5\x80%)\xed\x1b\xdf3\x0e\xbf\xf1\r\xe9\xe46Ni \x1d\xcd\xe9\xf3?Oj.\xc0\x9dw\x84x?\xbal\xf3\x8e\xf0\x96\x1f\xce\x8a\xae(\x0c\xda\xa5\xc1\xd3\xc4\xa2\xea\xa4\xaaha\x14\xe8Mr\x866y\xd8\xc4\xfc\xf7o\x02\x1e*\x8e!\xe2\x92\xa0\x13\x05@\xae\xf2s\xbb\xfa\xb8\xc5(I\xda\x92\xa5\xa7o\xde\x0eR\xcb\x14\x01\x97\x1b\xe7g\x8f\xd1`\n\xee\xb8~<\x99|\xb25\x02\xae\x86\xb7\xd6\xee\x01[\x93\x07H\xda\x00\xd0\xd3\xab\xa3t\x10x@%\x9aU\xeb\x04\xb9sJ\x91%x\xbe\x0e\x02R\x93\xd3\xa3r\xb6?Oda6\xcfms\xf8\x05\xfc\xd9\x91(=\x1br1\xf4}\x8f"2\xc9\xbd\x04:7\xeb9@\x12\xdb\xae^[&\xd7\xfbPsj\xcf\xfb`(]\x9e\xe4,^\xda\x95\xeb@yP\xf2\x95r\xb6\x8a\xde\xed\xf7PvYC~\xb2\xe3\xf4\x11\xbf\xe0I\x8dG\x99\x94\xceN,_x\x90\xc6\'h\r\xd2G]\xe6b\x1c\xc6H\xe9\xbcW\xab8\xa2\xfe\x86l \xaeot\xe7y\xb6\xdc\xc6\xf1\xd7\r\xf6>s\x93~\xd4\xab\xb9\x87he\x1a\xc0\x80\xae\xf4\xad\x9cD\x02[w\xd6\x93\xe7\xbf\xb6\xf9\t\x92\x81DpW`\x16\xa2@\xbc\xc8{\xf9Gh\x91*\xcaOZ\xfe\xa67cn\xc17\xbc\xa9\x03\xb0\x1cyK\xcf\xf71a\xc2\xd3\xa2\x14Xj\xeby\x8eN#\xf8)\xcaI\xf2*$\x98\xfc\x05\x95r\xca\xc1<\xff\x99\x91O\x90\r\xff\xe4\xce\xc3Q\x19\xc5\x7f\xaf\xe8:z\xcb!\xc2\xfc\xd3\xde]\xb6A\xadwj.w\xef@\xee\xaek\x0b\x8e\xfe\x11\xa5\xa4f\xf7\x97\xe9\x1e\x0e\\`\xf3_\xab\xdch\xcd\xfdH#P\x83ys\xa4\x05\xd4\xc3\xf5*\x87\xdcg\xe5\xb6T\xb0)\xbf:T\x03\x99\xef\x1et>\xef\x1a$\xa5\x17-\x15\xe5\r\x1b\xfa\x8f\xd4H\x1b[w\xd5\xe7K#\xb0\x009_\xbd\xa6LF\x18{\xda\xa0\x00*\xf2^cR~\xf6\xe2\xf5\xd8\xf1\x81QD\x8d\xaf<\xa9\x13\xee,\xda\xfd\x0f\x8b\xdd38.\xae\xaeq{i\xdb\xad5\x8c`\x19\xbb\xde!\xfdQ\x9f\x8f\xa5\x9eN\xdc\x01b{\xc6\xcc\xfb\xfe\xe4\xae\xbd\xbf9\xf0\x0e\xf2\xa4\xa4\xec\xf0\xf2(\x9f\xf3 \x96zz\x08y\xbb\x82s\x98\xaa<\x97\xda\xa9\x1c^\xfa\x96o,%Z\xe8\xb8\x89\x00s\xf0\xa8\x81\x88\xe4\xb9\xc3\xc5`)\xe5X#`d\xcb\xd2\xad\xbf\xa7d\x15\x02\xc0\xb6\xd7pM2\xcf\xf8\xf5UY\x0c\xa0k\x1b(\xb7\xb1\th\x98\x94\x9a\xe0\x1a\x14\xd3\x91\xd6T\xf0\xd6-\xfdH\xb2P\xeb\xaf>\xe5[Li\x07\xc1\x85\x9cC\xf7\x11\xc1\xf7\x9el\xd1/\xcaK?\xc7\x87=H!U\xa7\xea\xbc2B1\xe0\xd4\xcc\xc4\x9fc\x90\xe0\x1a\xa2\xb5\x1eS+j\x02?acj\x94\xf8a\x91\xfa\xd9\x11\xa0?-y3&>S4\x15\xfd\x0c\x08\x05\xe3\xa2K\x99\x91\x9eK\xf6\x9bO\x8aa\x17\xbbp\\I%\xba\xbb\xc6\'\xb69\x15"\xcd\x05&]Z\xa5*\xbf\x91\xf1!\x88\xb6\xe9\xb2\xb0.\xd4:"\xa4\xc6\x84UI\x9c6\x83,\xb0\xa0\x1f\x05\x03\x15,\xeb\x1e\x96+ \xe4!p\x9e\x12\xb7h^o>\x85\xe2\xa7f|\xb1\x90`j\x9e\xc0I\x97K\x11\xc5P\xb7\xf1qE(\xf5\xa8\x05\xcd\t\xa2h%\x905t\xe0\xb7\x00}\xcf\xb3\xc2\xfeF%\xbc\xcdb\xe1\xf1\xd4:\xee\xe8\x9e\x11\x83\xd4\x80\xb24P\xf2\xd4\xce\xb6c\x1a\xa1}L\x18xm\xd9Hv\x8b\xeb\xc9\xda\xdf\n\xc7\r:\xf0\xe8_t\xd3\xe9\x89\x1d\xe8w\xf3\x17\xedVh\x84|\x95\x01\xe7\x8a\x8a8nV\xb7*\xfa\xae\x7f\x08?\x13\xda\xab\x1b\xd9y\x05Yj\xb0\xd2\xd4(S\xd2Q|\xd1\xb1\x18BV\xd8BSQ\x04\xb3\xe8.\x8f-&\xb0\xc9h\xa8[\xcd\xb2\xbaXu\xf5o}P*N\x1b\x84\xda5\x08\x94\x99\xd2itX\xd4\xf9\x90\xf5N&}\xb3\xc9\x16\x88_\xf3\x92`\xde\xb1\x0f\xadgdR\xd7\x97$\xc6\xca)\t;\x94\xbf-\xe2 Ym/\x17\xd6~w\x85\x14N\x8e}\t\xb7\xb6\n\xfb\xd4I\xdc\x0e\xf1\x85#\xfe\xee\xdck`_\xba\xd6g\x83\xd2\xd3\xda\x90\xa16d\x107Q-\xca\tF\xad\xba5}4\x8f9\x8e\x06u\x05\xc6\xdd[\xa5\xfeE\x84)\xb2\xb4\xc9\xac\x97\xbe\xab\x08\xf0\xa8n\xbf\x14\xd2\x83[\x97\x1c\xb4l\xa4>%\xc9\xf9\x98{\xc0\xd1\x9e\xd4\xa6\xb2\x86+U\xe1\xd8\xfcq\xc4\xd0MI\xa9\xc4\xd0\xd1\x81\xb3)W&\xc0\x13\xd5=\x0c\xc4\xeb\x88\xa9\xde\xdb6*\x9e\xcd\x07dsc\xea\'\xcb\x00\x86V\x82\x9a{\xd83\xed\x9c\xbep^t\x84p{qs_\xa7\xa5\xe4\x14\xa6-\xe3{\x1b\x10Z\xf31\x15\\\xf4x\x0f\xa9\xac\x11\x95a\x81(e\t\xc6\x98\x0b\x07\xa5\x8eLm\xa4u\x7f\xa1`\xbf\xec\xcd\x1c\xbe\x0c\x93\x9a@\x93\x84"\x15\x04\xf8\xb5\xb1\xc3\xfb\xe4\x0f\xbd,\x92\x9f\x8f2\x17\x96\xc7\xf6o\xe3H\xca\xe1\x83*3HB\xac\xe78bX\xdc\\\xf2\x99\x95\xedy,3Y\xab\xa4\xa0O\xc6\x80*\xa6@\x9f\xb8\xfe|o\xbd^\xaf\xf2,p\xae0\xe9!S\xc9\xd2\xf44>\xbd\xc2\x1b\x01\x93R\xefp\xbdz\xeeM\x0f\xaa\xf1\xdd6\xf1\xe5]\xcf\xbbs\x13|c\x97\x07]ty \x13N\xe7\xc5\xbf\x15\x95\xb8\xbd\xc8\xfe\xcff\xa5\x9f\xc6H\xd1\x04Ed*B6pwI\xe4\xd3\xd5\xa50\xa8U\xd3r\xb1%\xc4\'\xda:\xe8[\xcdC\x84\xde\x11PO\x9c"\xaa\xfc\xef\x14\xfc-\xdc\xc5\xcb\xf0\xb0\xf8\xb8\xb5a\xab7H\xe98\xae\xc7M\xc4\x11[\xe4\xe3\x95\x19\x9b\xfc\xf1D\xf4B\xb8\xbfE\xb7(`\x1fgcsz\xfa`\x1a\x1e\xab\xfatI9\x17\x82(\x95\xd1\x00\x8btJs\xe3\x16Jf\xec\xf4\xd1l\x1c\x07\xdb\xa8w\xa9Y\xfe\x03\xbd\xdc6\xd8\x1c\xaf\x91\xc4\xcb9\xdc\x10\x8a\x01\x0c\xac\x9e\xc3\x1a\xda6\xabL\x12XB\x02>\x8a5\xa1"\'xx\x15\xee\x1dDc\x19\xa0\xcek\xa0\xf6\xc4\x86\x1f\xb3\x9a\x02U\x8bZ~e\xbf\xca\x1b\xd2i\x83\xf8\xd0\xab\x8d\xf0i\xf1Z9\xa6\xfa\xca\x9bR\xce\xff\x1827Z\xc8\xa5\x1b8U7\xd5\xa6\x7f?\xa0\xf2\x0c\x14\xbb\xd0\xdd\xb3.\xd1\x00\xc9MW\xf5\xc7]\x97b\r\xb3cN\x105&Xg9M\xc2\x00S\xe6(\x9d=\xc9\xa2E\xcf\xf5=\xff\xdf\xe5e\x8b\xe4"\xf4\x08$\t\xa1g\xe6BD\t\xf5\xeb\xec+\x8d+>o\xa5\x05J\xda\xae\xbb\x91\x8c>9\xf8\xc1\xc2\xbdZ!7\xcb49&\x0bWUo\xee\xd3\x01\xc6\xcdAR\x16\xa8\xc2\xec\xb2L\x85\x1f\xc9\x0b\xfcS+\x98\xe3\xb7d\x0b#3\xbb\x9a\xb2\xad\xed#_\x0c&\xc0 GN\xcb\x95\x1a\x0e#\xb7H)|-o\xe0\xdb\x87N\xd8N>v\x907\x0b\xaa\xadL\xca\xc1\xfc\xf9\x9f\xb9\xa8X\xcc\xc0\xf5\xde\xd3\xf9\xb6Z\xb4\xd8|\x14\x94&\x02\xb6\xa1\x1f\x86,\xa0\xf1\r\xf8\xd4\x95\x83\x82~\xc0\xdf\xbfE<lZ/\xd1\xcf]?\x9d\x0b\xa3Bo\x01|bx\xd4\xd7\xfa\xb1.\xc7\xe6u;\xbd~\xff\x94kK1~\x1c\x9b\xf2eM("2%x\xcc*\xd8\xb7\xdeR\x1a\xcc!i\xd0\xdd\t\xb1\xcf\x02\x1f\n\xe2b8\xc3\x98g\x95\xbe\xff\xb6\x9b4L\n\xe6\x08XOu%*\xeci\xc9\xb90[_w\xf0\xbe\x94\x8c\xb6b\xc6\xb3R>\x129Z\xfc\x82\x9d\xfa\xb7\xba\x14\x19\xedf\xb2\xeb!"\xa2<4\x12{\x0c\xf3\x01ih\xe0\xd2|\x108\xc9\xb6\xedA\xa4 `\xe2\xe1X\xbby~x\xeaQ\xf1W[yD\xdc!\x1e\xbe\xc5s\xf5kk~\x92\xf2\rq:[\xd8\x8c\x10\x13L\xf5\xf1\x96D\xf4\xdd\xf8ig\xde\x0e\xd1\xb0\rP@\x0f\x18\xcd\x90\x05S\x14\xe6\xd0\xf8\xe0\xdc\xc5^vg\xd4{\x08\x9d\xe6\x89%\xa1\xf1\xb1\xb6\x1b\xac\xe8m\xf4\xe1w\xb5\x14\x84;\x9b\xc2R\x11\xef+0\xed+\xf3/k\x8d\'no\xed\x14\xa8s\xad\x06\xa6YW1P>H\xee\xc4\xa2\t\x00\x89K\xa4b\x17 r\xfa)X\xce4.\xb8\n(\x885\x9b\xcb\xdbR\x8c\x00\xba\x10\xf3\xb9,\xce\xfd\x13\xb3\xe6\xcbL}6W\xf6\xd1\x19\xec/\x80\rhzz\xfd\xe1\x05\xe0x\xc7ik\x04\x83\xac\xb5c\xd2\x9a`6\xcc\x0f\xaeV\x9ec\x95\x93c\xf5\x81\x81J\xce"\x9b\xbd\n\xbc\xfc\xcf\xf0\x10~\x05\xe6nL\x14\t\xb8c\x02\x89\xdfq\x95\xa6\x02e\x026?\xffIG\xf7\x12aV\x92\xc5\xdf^WU\x91\x8f\xef\xdeK\xa3\x1f\xf7\x03\xe3\xa11\xff\xdb"\x1c\x85\x1a\x8a\xd8R\xeb\xe3M\xcb\x1c9J\x06\xf1\xab\x91\xe0\xddh{\\V\xfcIH\x074\xe8\x03T2\xedK\xf1n\xbf\x11\xfb~uDo\x1a\xd3\x89\xc0[Z2H\xc2\x0f\xd5\xf6\xf2\x0fv\xdaS\xae\xd0d\x92}\xe3\xc7\xe1mo\xc0\x8f\xb5q4%\xe0\x8f\xabV\xbc\xdd\x00\x9a\x84\xe6\xd7P%\xd1\x06S\x96\x14\xcf\xc0d\x83C\x1b\xe9\xb1\x14\xb5>\xb9\x81KD\xab\x00|\xe2\rYb/\xfd\xe5I\xcf\xfa\xbd\x93\r\x85\xc2\x13K/^\x0b\xb6\xdc\xaf\xad\xee}\x9c\x9fJu\x8f<\xf9\x06\x06\xffb\x0b;a;\x00\xd8\xfb\x01P\xfe\'#\x1d\x88/\x1c\x8b\x16H\x06\xb0Pn\xa7\xcc\x06\x93|\xcb\xef\xee\xd9\x8as\x8d\x17,\xfbz ;\xa0\x11\x8b\x9c\xb1C\x87f\x96\x17\xbf\xd2\x02\x16~\xa9\xf3\xb7{4\x8f/\xd4\xa9z/\x9d\x0fd\x81o\x11\x8f\x11$\x9aZAp\xeepY\xe1\xc6k\x0c\xa1\xbb\xd2!\xe4d\xd7\xa4@\x8e\x07t(\x02\xdd\x01#\xca\xbe\xbc"i\x02\xcd\xc7\xf9\xed7\xe0\xf0\x0fW\xdc\xaa\x1c\xaeg\xbb\xa5+u\x08Xq\xdbE\x83*|\\\xdf\x97\xce\x97\x8a\xf8\x81\xbd>\x02$0e\xe2\xca\xc3\x9c\xdau,\x9d\x9do\xeea\xd6\xcaI-I\xc2\xd8}\xcc%K\x00v\x91\xb5%Xs\xf9\xa2\xf6@V\x16\x9a\xfe\'D\x85_GS0o\xb8T^L_\xe0\xd1V\x86\x89\x07b\xd5\xd4&n\\5\xa4\x85\x94\xc45\xc0\xbe]\x02J\xf4\xa1qC\x15\x8e\x119\xcd\x9f.k\xb4\xdeW\xfaP\x14\xe2\x86\x90\xb7sw\xb5j\x19\x8fi\re\xc2\xde\x9f)Yo\x84#5H\x14\x8e{b\xd9\xea9@tb\xe9\xa4\xf2\xd6\x9c#\x96\xc2G!\xf2,1\xaf\x0cV\xa3\xfe\xfe\xc0}t\xc3\xdb\xef8\xf7JH\xbb\xbc[fH\x83n!\xcd\x08M2&\xc5\xc0_\xe0\xa30i\x83\xcc\x7fFG\x02\xb2\xcd\xe1\xba\x95#\xd5\xe7\xe0\x04bt\xb2\x946\xce\x0f\x95\x9e\x1a\xfcJ\x196\xf1\xad\x8fRN)\xc8\xcd&\xcf\xfd$EoAQ/9l\xaf\xd1\x13\x82[\xd6\x89\xd0\x8e\x91\x8c\xb4 \xddg\xebs{ik\xfdm\xa3\x08\xb2\xd5"\xeb}\xfdx\xd2\x8eW\x99\xd3yS\xad\xf7U\x0f\xa81\xc0\xe7\xef\xe8\xfd\xd2~Q\xbfmqn\xafC\xb3\xa3\xd7\t\x17X\x00\x1e\xefS\x0b\xab\x94\x8a\xaa\xb6\xfc\xdcm\x02y\xb5v\x8f\x1e/C\xf4\xba\xe0[\x9b\xbe\x8e!\x8c^\xfcp\t\xc0\xdd\xf7\x15\xf1^O\x9b|3\x95\t\xa9d8\x88\x0f\xcfK\xefO\x92\xf6\xe4\xc8Nx/:\xf7\x1a\xc4\xd8\x08\xeeP\x94=\xc0\xc8\xcbxW\x86\xcb\xd7S\xa0t\xc8\x1d\xac\xa5\x10\xcb\xcd.\x80W\xba1*G\xa87\xed\x0b\xd2Jcu\xe2Z\xce\xbfm\x88\xe0u\x89\xb6\xdb!\x18\xf8\x9c\x1c\x10\xe6\x9f$\xe6\x0f\x94\n;\x13\xca\xdez<\xf9x\xe3Y\xeb9\xb2\xde\xf1\xe2\x06\x13p\x00\x8e\x8a\xc9\xf8\xca&\xef\xa6c\x0c\xf6\x97\x05v\xcb\xbf\xbb\x9b7.&\'\x80\xdd\x8et\xacs\xa9\xa9]\x7f\x8cT\x0c\xf7J\xc6}\xc7\xfeQj\x94\xba\xb2j\xf7\xd7\xc1\xb0g}\n~\x8b\xed)E\xae\xc1\xaf\x13:\xc3\x15\xd5W\xf4\x00K)\xdcg\xa9\x19\xb3\x90\x90\x19\x83\x0b\x89\x96\xd7\x83\x05 \xbc\x98\xf8\x90\xb2\xc5\x14S9\xa1\xf5g\xa7\xf0\xcf\x02\x9e\x9e\xc0]\xfe4<\x12\x84\xc2\xcf\x88i\xf8\xab\xbf\x1eu\xa9)\xb6\xd1\xe1! \x05wv\x1a\x86\x90\x9f,&6\x1d}\xday\xca\xf8\x8d\xf4\xfe\x97\x98\x01\xbf`^\xcc\n\x9a|j\x93vsA_g\xad\xf9\x11\xd6\x14\xe6\xd3L\x9e\x7f\t9\x84\xf3\x180p\xd4\xba\x01\x00DvG\xb0\xd1%\xe6\xf4~\xb9c \x89\t9a\xfa\x1dq\t\x00.\xa3M\x03\xb1\xddh;\xe8zP\xb4\xb1#)\xa7<J\x99\xf1\xf9\xa1\xc4Jk\\\xc6\xdcs6\\\xea\xc1G\x13\xe4k\xcdZ\x06x\xdd\xfc\x85\xe83"\xdc\x0c\x9dC\xf9\xba\xa0\xc2\xea-\xc9\x1d\xbe\xb5\xc0\xdb\x16>\x8f\xe5\x8b\xf3\xbf\x8f\xf4\x85\xbf\xb4\xbdv\xf4\xac\x0bZ\xe0\x83m\xcax\x1e\x8d\x98\x8f\x8f/$Vq"\xc9\xa07\xf3\xc9r{b?\xce\x7f\xa2/\x02\x10y\xa6\xd9.\xcb?\xb1\x9d\xed\xe4\xc0}\xdf\xab+\xfc\xd0\x19]K(\xf3>\x04\xd0\xd7%0\x96b&\x9fy\xf3TH\xcaZ\x06h\xd6\xf4\xed\xf8W\xd7\xbc\xc9\x92\xd3\x17\x13tJ\xbf\xdeTZ\x9d\x9e\xceY\xbeH\xf0\x92\xe7\x7f\xf5h%58\x80\xe5\x7f\xf6\xc3\xe57\xf2\xf8\xe73c[\'\x17_{\x04\xbd|\xa0Ch\xce\r\xea\x1e@m\x8a\xc8\x91\x9e\x9a\x17\xce\x8dPPU77\x84(\x82\xef8\xc4\xdevu\x83\x883\xca\xd3s\xaf\xd9Z\xd1\'6^\x82\xdb\xeb;\x94\x8b\xeb|\x1ftn\xa8I\x95[ w\x98\x8c\xe2x\xc3\xfdO\xbb\x98Y\x1b\xcbq\x1c\xf7\x80\xac;\xabw>\xb3%\x0b\xbbO2\xd2c2\xde\x9d&,A\xa1\x010\x89w\x04\x9f\x9fw\x97=\xf7\x83\xe4$\xeb\x7f\x1c\x82t\x0b\xa9\x1c\xb6\xcd\x07\r\x8b\xe9\xf4\xb7p3\xfb:sFtt\xb6\xa3\x14-\x80I\xcaE\xa0\xb1\x0e\xda\xffe\xb3\n\x97\xc7rX\x8bZ\xcer\x1dF,\rc\xbbz0z`\xb23\x0b\x1c\xe4\x14\xa1\x82\xba\xf0\xbb\x86\xa4\xa0[*\x9a\xf1w5w\xd1\xeb\xb4?CE\xd8b\x11\xb1\xc3D"\xf6s\x1f\x0e/\xd8\xd5Q\x1d\xe9:3G[\x00\xf04q\x8ar\x1f\xdd\x91\xea\xb6\xe8\xf79\xe1\x92\x94\xc0\xae\x97|\xb5P\xdb\xa8\x7f~A*5\xd4\xc2\x81!t9cZ\xea(\xeb9X\xf41,>\x9c\x18\xc1\xa3\x9a\xf8\xa9J\x19o\xa2\xd7Mz\x97\x93\x08\xeb\xed\xb3\x97\xa6\xd3\x04\xef\xebk\x8aQ\xcd[\x84\xe13\x9cu\xed\xbd\xaa\xfb\xd9\xcc\xe2\x03\xf1\x8f\xffT\xa1`\xd8\x83\x87\xb3\xa7\xea\x8a\xa1\xa2\xb3]\x10@\xe3wa\xf4\x99\xad`\x07\x931u}N~\xd9\x05\x94Y\xfa\xd5\x8f\xcf\xe0s\xca]\xf5]y\x1b\'\x17\x10,\xaf\xfa\xdd\x9a\xc7\xc7\x99\x84\xd5\x9c\xed_\xd9z\xbe]\xa06\x1c\xff\xb6')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+ from hiddifypanel import Events
19
+
20
+ from .config_enum import ConfigEnum,ConfigCategory
21
+
22
+
23
+
24
+
25
+ class BoolConfig(db.Model, SerializerMixin):
26
+ child_id= db.Column(db.Integer,db.ForeignKey('child.id'), primary_key=True,default=0)
27
+ # category = db.Column(db.String(128), primary_key=True)
28
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True)
29
+ value = db.Column(db.Boolean)
30
+
31
+
32
+ class StrConfig(db.Model, SerializerMixin):
33
+ child_id= db.Column(db.Integer, db.ForeignKey('child.id'), primary_key=True,default=0)
34
+ # category = db.Column(db.String(128), primary_key=True)
35
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True, default=ConfigEnum.admin_secret)
36
+ value = db.Column(db.String(2048))
37
+
38
+
39
+
40
+ def hconfig(key: ConfigEnum,child_id=0):
41
+ value=None
42
+ try:
43
+ str_conf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
44
+ if str_conf:
45
+ value= str_conf.value
46
+ else:
47
+ bool_conf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
48
+ if bool_conf:
49
+ value= bool_conf.value
50
+ else:
51
+ # if key == ConfigEnum.ssfaketls_fakedomain:
52
+ # return hdomain(DomainType.ss_faketls)
53
+ # if key == ConfigEnum.telegram_fakedomain:
54
+ # return hdomain(DomainType.telegram_faketls)
55
+ # if key == ConfigEnum.fake_cdn_domain:
56
+ # return hdomain(DomainType.fake_cdn)
57
+ print(f'{key} not found ')
58
+ except:
59
+ print(f'{key} error!')
60
+ raise
61
+
62
+ return value
63
+
64
+
65
+ def set_hconfig(key: ConfigEnum,value,child_id=0,commit=True):
66
+
67
+ if key.type()==bool:
68
+ dbconf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
69
+ if not dbconf:
70
+ dbconf=BoolConfig(key=key,value=value,child_id=child_id)
71
+ db.session.add(dbconf)
72
+ else:
73
+ dbconf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
74
+ if not dbconf:
75
+ dbconf=StrConfig(key=key,value=value,child_id=child_id)
76
+ db.session.add(dbconf)
77
+ old_v=dbconf.value
78
+ dbconf.value=value
79
+ Events.config_changed.notify(conf=dbconf,old_value=old_v)
80
+ if commit:
81
+ db.session.commit()
82
+
83
+
84
+ def get_hconfigs(child_id=0):
85
+ return {**{u.key: u.value for u in BoolConfig.query.filter(BoolConfig.child_id==child_id).all()},
86
+ **{u.key: u.value for u in StrConfig.query.filter(StrConfig.child_id==child_id).all()},
87
+ # ConfigEnum.telegram_fakedomain:hdomain(DomainType.telegram_faketls),
88
+ # ConfigEnum.ssfaketls_fakedomain:hdomain(DomainType.ss_faketls),
89
+ # ConfigEnum.fake_cdn_domain:hdomain(DomainType.fake_cdn)
90
+ }
91
+
92
+
93
+
94
+ def add_or_update_config(commit=True,child_id=0,override_unique_id=True,**config):
95
+ print(config)
96
+ c = config['key']
97
+ ckey = ConfigEnum(c)
98
+ if c == ConfigEnum.unique_id and not override_unique_id:
99
+ return
100
+
101
+ v = str(config['value']).lower() == "true" if ckey.type()==bool else config['value']
102
+ if ckey in [ConfigEnum.db_version]:
103
+ return
104
+ set_hconfig(ckey, v,child_id,commit=commit)
105
+ #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
106
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product