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
hiddifypanel/Events.py CHANGED
@@ -1,5 +1,28 @@
1
- # 2023-04-08T16:23:20.247928
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\x16\t\x00\x00\x12\t\x04\x00\xfc|\x99\xc7\',\xb3\xddM2V\xea<~,\xcd\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x9c\x80\xa4U\\\x9f\xb6\x86\x95\x82`$\xa6\xac\x92\xac\x8f\xf8\x0fR\x19\xd2\xaf\x17\x94`\x00\x83v\x83\xbb\x97\x91\x0e\x88\xe8V\x18\xa9\xfd\xa3s\xf3\xac\xd7\xbc\x86\xd8\x94\xa3\xdd\xa1W!<>\xd8\xf0\x03\xb0\x95\xca\xedB\x82L\x89T\xff\x8e\xc7\xcf\x18\xd5\x0e\xeb\x14&Y\x8dp\xd3g\xa9:\x16\x1e\x13\x121\x80\xc3\xbfb\xdf\xb8\x81\xd7%\'\xbdX\xacZB\x02\xfc\xe9\x1e\xa2\x930\xcd\xbf\x89k)8 `\xa6i\x0c\xaaB%\n6\x85v\xa7\xe5\xaeK\xbb\x8cH:\x8d\x04\xcfG\x86\x86/\xc5\xe1~6\xa1\xd4\x1c\xba\x0f\x0b\xa6\x8a\x8b\xbb8E\xeac7\x96\xdd\xde#\xf9{\x1a\xa6\x05vOW\xb0\x99\xf3\xe6\xabY\x85I\xfa\xf5^\x9a\x99\x1f\x85<\xaa/3|\xc9\xaen\xed:+">\xf5x\xf5\xd5o(L\xcb\x80O$]\xf6\x9a\xb1\xc3\xa3\xb5_\x91\xf7.R\xc4\xd4^:\xadu\x18\xbdz\x9e3U7zy(@>]\xc9\x1c"hk072\x07S\x1b"\xdc^%,\x81T\x02w\x82,\xfe\xf5\x9c\x03ic\r\xaem\x82\xf3\x9b\x12\xb8\\\xc2\xfa\xe8T\xb6\x95\xb1k\t*X\x83\x15C\xe5\x8e \xdb\xd0\x85\x99\xf5Y\x0e\x98\x97\xc1\xa7\xb1\xc7\xdcca\xc7\xc1N\xb1\x10\xc7\x1c2\xc6\x9c\xf0.\x9e$F\x08\x04\xfc_\x87\xcf\'\xbby@{j3\xc2\x0f\x9c\x80|\xab6\xde}\x8d\x0fE\x9at\\\xb3\x0c\xa7\x0e\xf1\xe7\xbb\x1a\xf7\x96\xa7?\x93\xbe.\x9e\xa1\xbc\xf6\x1d\x16\xe8\xe7\xb4Q\xb8z\x16-\xf6@\x03\xe3\x9b\x19\x84\xce,\x82r,T[3lD\xdb\x84\xbeX\xc2jJ3uH\x93\x93\xf7\xe8W\x8b\xc3%\x18\x07\x1a\x84\x8cPM#.\rs\xa0\xb3\x80\xca3v\'\xbdW4ZhAR\x0b\x96o\x15\xf6H\xa9\x94"aS`\x83[*\xd0\x13\x9d#\x00Z/r`$\xd4V\x02U.\xc7\x9a\xb6Pl\xe7x\xab\x17\x04\x9c;\x87kp\x00\xf8\xc4j\xc4\xc3\x8eN\xca\x9f=\x9d-S\xe9\xce\xe4\xe0h\x0c\'\xb4aF\xa4\x06\nqr\xf1\x01\x03t\x8bDc\x8f2o\xb5XZ\xe7\x99\xbc\x1aM\x15D\x95\x1c \xee:m\xda,\xc6?@W/\xd7\xeaO\xdd\x08\xdbT\x9a(\xac.\xfe\xc5\x1dt(\x06\xd3\x0f(\x07j~\xb4\xdb\xd4\x8c\x95;\xf6\xaf\x96\x122\x80gY`\xffxuT\xb8\xea>\xb5-\xf8\xac\x013;:\x8b\x0e&b;\xf5=\x99?A\xbc\xff#\xd6\xce\xa8\x8ain.\xa6\x11\xfb\xc3u\x1f\xe9=\xeb\xe8Y\x9a\x8eo\xb4\x96\x95dh\xc3U<{\xe3\xd0\xf8\x0f\xbem\x92`\x82\xbc,\xe1Q\x1d\xcd\xda\x1b#1\x02\r9\xefl\xe2\xce\x98\x96;\xfa\xc7e\x7f\x97\x0e\xa2)\x8c\xdc\x05\x89\'\xb0n\x98\xca\xa3\xbb\xec\x85XVeP\x7f\xcb\xd4$s\x04Lb\xe9**N\xfcc\xf9}\xc6\xa2\xb4QT\xb3|\x01\xb9g\x95\xf0\x02\x97\xa6\x92C/\x8d\xf3tT\x0f\xebS\xec\xf6E\xcb\xef\x86\xd1o\x1b\xcaM\xcfZ,s\xafr\xda\xd1\xfbX~\x92\xd6\x8e8,\x13\xcf\x1e\x1a\\0w*q\x18t\xda\xcaI\xcc\xf9N\xe8\x9d\xd2\x9e\x8eoWm|\x0f\x93U\x02_\x86\xb2\x8c_\xe6\x96\xcb8%\xf9{\xd2\x1f\xbf\x8cN\x1e\xb8\t\x99L\xed\xf1\xbd\x15\x04\xfb\x03\xda\xee\xceU\x1e\xc3o\xc3\xfb6\x83\xa5K\xe0\x9b\x04\xca\xbbS=\x1c1\xa7\xd1\x89\x94\x15OHi#DY\xda\xb9\x89\xb9/gD)6\x15\xb2\x01MS\'ZAV|t\xd4\x8e\x11\x19\xad\xc2n\xe4\xecC\xb5C\x87?\x0b\x8b.\x80}\xe6\xa0\x04\xaa\x8ay\r,\r#\xb5\'\xb21<\xa2\t\\\x14\x81ru;f\xd8~\x88\xab\xfa\xfa\x7f\x19\x86\xeeB\xe7\xba#Q\x95b\x03\xd9\xbc{\x94MG\xb2F\x92k\xde\xb8\xf4\xa2\xc0-\xd1\x84|\xd2\x8f\x1c\xd3\x8c\x87\xab\xc0\x0b\xa1\xf0\xb1\x04a\xf8F3\xc7\xf4\x94\x8f\xced\x8a\xb9l\xd6)T,\xaf\x84\xa8\xbbLS\xe0k\xeb\x9c}M\xf4\xfe2\xb7\xfd\xc28B\x0b\xea\xd0\xfc\x81 Y\xc6g!uf\x1c\x07\r\xc0W:\x07\x89\x0by\x87E\xa0\xe6B\x16\x8d\xda\x8f\xcf:\x8fiEI\x8aZ\xcc\xd47B\xf3\xd8mE\xf0A\xa4w|\xe0\x90\\\x0c\xea\x9e\x9b\xa7F\x04\x04B\xeaO\xb9\xa1\x012C?\xaa\x16={\xfb\xb1\xcd\xe6\xd42W\xc5 8|_\xb1Y\xe7p\xa3\x9d,T9s(\xca\x9aL\xd6W]|"\x85\xbb\x06\x06\xae\xeb^"z\xcc\x8d\xeb\xcf\x9a\xab\xc5\xf2\x8d\xc1\xdd\xaf\x87\x05:(\x9aiE\xba\xa7\xec\xb5n\xa6C\'\xc9Y6\x96\x18\xda\xa5\x98\xb4*\x81\xc0s\x9a\xac/FF0i"+\xf5\xc6\xea\x83\x19\xf2\xf9\x05\xdc1\xe7>\x8d\x96\x8d/\x92\xa8\x14\x9c\xc8lm\x18\x94#\xfd\xba\x1ez\x19e\t\xb3\\5;\x14h5\xea\x84\xf4\xabJx\xfb\xb9\x11\xcc4\xeb\x95,{b\x1c,\xb1H\x1a+*\x98<\x06\xc2\x00E\xdcI+@\x84J\xff\x96\x98\xb2l\xc0\x01\'\xb4\x91pT\xa8\xa3s\x11\xf75\xc5\xd8\xd0\xa8=\xb1\xa0\x91l3\x06\x07\x85\xa6\xc59\x9c\xaf\xb4\xe3\x00\xaeRF\r~=\xec\x1cz91*\xf3DU\r\xac\x90\xf8\xb9\x9c\x01=\xc0\xfa\'l\x80;q\xf5\xfc\xef\xd6\x1b\xe5Vl\xc1<8m\xa8$\x80Z\x0b\xb6\x19c\xe4\xbaT\xa8|\xd5\xeb^\xbfY\xe3\x8d\xfbA\xdd\xde\x97\x85\xc3\xc1\x1e?\xd5\xc2xK*\xe7_\xaa\xe8\xa6`\x03\xeb\xda\xe6\x9aC x\x9e\xae\x04g\xea\xc2\xe9h0\x00\t\x8b\x14\xe6\xc0\xee\xd2=\xaa4P\x9fP"\xe28Y)\xefM3\xce\x8f\xd38\xf5Oo\xb9{\xf3\x8e\x9f+\xd8\xbe\x87\xd5\x14\xd5JC\xb2:\xc7V\xc3v;tW\x87\xad!\xe0.\xa9D\x0c\x08`\xe3\xad\xca\xdd\xc3\x0e\xd3I\xa7\xf8\x18\x81\xf2\xe6\xd5\xba\x83\x02\x00\x18\x1fE\xdc\xad\xac\x16\x92C\xcf\xd8W\xe5&R\xe1\xf8\x80\xc3\xab\x91@{5\xcd\xdc7>9Z\x82\x1fq\xcb\x96\x8b\xcd{*\x94\x14\x89\xbc\xaeU\x05\x92\x85\x90\xf2\xca\xa7\xf0n\xec\xa4\xe5\x00\xe2*\x95|\xfc{k\x1fw\x90Q4\x9e\x9e\xd7g\xeb\xdek5d!\x81\x03\xd0M\x0f2\x88\x87\xe0\xa7],D_yG3\x9f\xe3\xe3\x9d\xbfR3>\x01\xc1d\xf5.v\xf77\x16W\xd7\x07\xb3\xc2P$\x1e\x07Q\x95yI\xc2p\xe7$\x13\xebL\xb7\x1a\x0b`\xb6\\\xf2k;<L)Sb\xdb|\r\x95\x10\x81c\xf8\x9cDp3v1\xed\xdf\x9a\x02u\x9e\xa9\x0cS#\xb1UbGj\xa9\'\x14\xc5\xc2\xde>0\xb0.x\x9cN\xca1\x82\x0f\x95\xb2\xb6\r\xbc\x8f\xaa>\x91\xa2\xee\xd6<\x0f7\x88\xf6X\x9cv\xea[\x89\xb8s\xb1\xb2\xca\xe6[\xf3C\xaev?\xf6\xc8k\xf4$\ng1\x87+\xe6\xc4\x91)L\x84\x9f\xbb\xa5\x92\x9dVZ\xa7X\xee\xb5\xa2~\x9c\xa3\xaa\x98\xb0^\xd5\x9e\x97\xafw\xf6j\x820\x1eI\x14]\xd4\xa2\xa8\x0c\'\xf4\x91r4v\xee\xe1|\x1a\x0b\xd4\x14\xb1\xb2\xde1\xbe\x8c\xe1V\xb1\x15\xa7\xdb\xe9SQ>\x87\xba\x93\xf5\x0bq\x1f\xd5\xe3\x96\x8c\xe8\x0b\x17\x85\xa4f\x9c\xee\xc7\xd7\x0eu\xf4q\x03g\xbaf.vs\xa0\x15\xf2\x13P\xb6\'[\xc8]^b\xd6\r\xb9\xc7\xbb\xbb\x90\x7f\xb9\xf4\xd0\xe3^Kc\x07\xfa\x8b\xcf\x9f\x100\xd3\xa2z\t\xc6LM\xf2\xcbk\x02\xff\xf3\xa7A\xb8\x08\x04ez*Z\x08k\x93\x89\xc5\x8b`\x10z\xe7\xafQ\xef\x8a\xee\xe7\\\x1a\x10\xee\x1f\xee\xae\xa5\xc2l\x90\xf8\x80\xc7T\xdc\xcc\x15\x91s~\xb2s\xe5\t\x84\xbb\xd6OrF7\x0ci\xd2\x90\ns\xb8\xe7O#\xb9\xa64\xc7\xce\xb5\xa5\x17K\xb2\xe3\xc5\xb3\to\x18a\xc1\x0c\xf0\x98\xa8\x14\xf7v\xc1\x80\xb1\xd5LcW\xba\xe8\x8c\x04Yxw\xfd\xe5*-\xc1\x8e\xbf\x80\x84\x7f\x84\xf5\xcbqt|\xed\x1b\x8ba\xcfE1\xed\xba\xc3\x05\xaf\x0e\xee\xcb\x17\x1e\x1a\xad\x86_+\xcc\x1d\x0cs\xc5<}\xbem\x99\x8f\x95KG\xcc\xae\x01\x85\xfd\x14\x96\x94,\xc7\xb6q8\x04\n\xa4B\x1d\x97\xbb\xf6\x8d\x04\xba\xba\xb7\xca\x7f\x07\x07\xdb\xf6\xf7>JU\n\x173PiN\xe7\xba\x1afk"\xb3\xab#\xe2\x06\xe3z\x82\x8c\xa3\x82\xa0\x11\x83\xe2\x8c\xa1!:\x88-\xcaaI\xb8\xcf\x87\xdbI@P_\xeaF\x9c\xe6 \xa3\x93\x93\xf6\xf3D\x95\xdft\xab)*,x\t\xb5\x00\xfc\x18\x02\x9c\x86\x99\xa1\x1e$\x00\x88H]oB\x05\x81b\xe4\x12\x81*T\xfe(\xa4\x85Li\xcb\xd4=\x99\xd0\x0e\xcc\'D\xe1\x0fz\xc5\xcc\xb9.\xb5b.\x1b\xb6io\x0c\x85\x13\xcc8\xab\xb7\xc6\x18m*\xa4Z\x03~r\xaaR"\x08\x81\x11\x17x\x9c\x0f*D\x0b\\\x0b\x8d\x00\xfe\x90\xc1\x1er+\xea\x8e\xf4\x17\x13\xe7s\x89\x83\xd5\x87\xa8Pmu/\x8d\xf3\x13\x8fnB\xf1y(\xe6\r\r\x91\xd3\x8d\xf0e\xce\xd6\xdd[\xc7|N\xa0\xb1\x088v\x8dxx\xa4=\xadk\x03\xb6\xb9}\xe7\xc75a\x7fA\xe7\xcc\xc2\xd2\x88\xdaw\x0b\xe0-\xe5H\xd3\xd3\xa6\xaf\x7f+x\x0e\x1d\x1e?F\x01\xad\x06\xcd\xfa\x16Z\xbcx9)}\x9a\x8d47\xd1\x8a\x8586#\x93z')
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.dev64
1
+ 3.0.0.dev66
hiddifypanel/VERSION.py CHANGED
@@ -1,5 +1,3 @@
1
- # 2023-04-08T16:23:20.234409
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\x00i\x01\x00\x00\x12\t\x04\x00s\xdcZ\xb4\x1b\xf4\xf4\xe0\xdd`;g*,\xc2\x0f\x00\x00\x00\x00\x00\x00\x00\x00;\xa5\x92w6\xda\xd1V\xd8t\xfeY\xd1\x03\xc4k\x13)\x88I\xcc\xd1k-<\x11\xb6w>0\xbe\x9d\xda!F)\xc3U\xff\xce\x87e\xb4\x1b \xcfv\xfd\x9bca\x8fQ\xb7^\x81\xa3\x00"\xac\xa4\xfe\xfc\x80\x99\xbeWF\xfd\xa4\x08\xfe\x1dyQR1i8\xc4\x81\x85\xfe\xb6\xccZZ5\x12?\xc1U\xdfA5\xd4:\x07\x01+\xe2\x11\x8b\xf1E\xf6m\x1f J\xa2\x81*\x88p\xaf^\x86\x1b\x8d\xc3\x0fo"&\x10 p\x82\xeaY\xf2\x87\xba\xa3\xb5\xa1\xd6\xf1\x96\x81\xab?\x04\x10\xdf\xe4\x7f\x99J\xb4\x00\xb0\xf7\xe6\xf5P8|g*Aw\x88+\xeb!\xdc\xab\x14\x92\x0e\xb4E\xef\xb4\xb3\xa4\xe0\xca+!\x92\xa3\x0f\xb5\x85B9\x83\xdaKOz\xb1\xfck\xe5\xd3fJ\x06^3\x81\xa9*v\x90\xda\x06\xfcep:.]FG>\xab\x8c:\x83\xdbK\xdb\x98}\xd2\xed~\xd4\xac\x89\xe6\xd3\'\xd5k\xc2\xe2#\x1e\x96\xbb\x0c\xd3\x0e$\x8f\xe4\x98\xe6\x1d\xe6\x1b\x1c\xddX\x9d\xc0k\xa4p\xefR\xfe7*\xd8sy\xca\x1e\x97=\xb0p\x9e^U\xdd\x97\xa6\x80\xf6\xba\xbd\x0b\x15ZTf2b\xd1\xc8q\x90\x856y\x99\xb0<nqg\x99(o\xcc\x8a\xa1h\xf6\xa2w\xec\x1a0\xe4\xf6\x91\x9a+\xccC*eq\x84V\x92\xdcU\xd6"\xbd\xca\xe0/\x9fT\xce(\xde\xd3\xc1\xeai\xcc+\x84\x96\x88\xff\xe7\x8c\xf3')
1
+ __version__='3.0.0.dev66'
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-08T16:23:20.236678
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\x1a\x02\x00\x00\x12\t\x04\x00\x05\xcf4\xbe\x95\xe9\xday\x06-\xd2\x9fT\xef\x8c\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x99\xad\xaf2\xdd\x9bz\xcd\xbe\\\x7f\xb6>\xf3\xff \x18\xbb\x0e\x1b\xc2\xdd\xa5/P\xea\x81Ew%d\x8b\x85\xb3}\xa8\x13\xd8I\xff'\xd9\xeaW\xb4IQ \n%uT\xf85\x9b\x0e\nr\x96\x85n\x1c\xc8\x9b\x19\xb4\xe2(\x9b\xab\xe4\x87\xcb\xbd\xa9~\x0c\xb5\xa8\xb7\x9b\xb6P\x9b\x85\xb2\xe0\xe6\xdb\xd5H\x9b\xa4\x90 ,d\xeb\x08\x13\xe1\xe8\xdf\xb1\xa2\\\x9cz\xc7n\x03Kc-\xc9\xebe\xa9\xef\x8dK\x13\x81\x11D\x0bt\x88,\x1dlv\xb9\x8c\xfa\x99\xdcf\xf9\xe7\xa8Z\xa8\x8dG\xc3\xac\xc5\xb2\x87<\xcc~\x9ds\x01\x1b\x8dJ\x93\r\xe3S\xdep\x9e\xa8\x13'\xd8\xd9\xe8\xc3\x13\xa2\xf7\xda\xac\xed0,\x99\xe0\x98QH\xa5\xeb\xac:?'h&\xfew5\xba\xd3\xc3\xc6\xb5\xd6u\xff.\xd5\x86\xd8\x9c\xf4\x9b\xc36\xc84\x87\x17WNm\xde\x8a+\xc7\x88v\xf9C\x9bN\xd0mz\xe3\xd7P+\xd4\x8b#\x98=\x8d(\xa5 \xe8$\xd6\x7f\xb8\xf2\xa7\xcd\x95\xb8q\xca\x08\xba\xd2zCi\xd4\\\x94\xec\xc5\xfd\xb6iB'\x19\xb5JC\xca\x83jf\x05R4\x1a\xb7\xea\xaf\xa9\xfcS\xc1EO\xf2\xc2\x98m\xf9#\xbb\x8f_-ld\xde\xb4p\x04\xfcJ,\xaaQF\x1c\xfe\x1b\xef\xd2J\xdb{4<w\xaa_\xc6\xf42\xe6\x965\x0f\x85\xdf'\xf0\xe6\xcfM\x8dBm*\xfa\xd0\x7f\xb18\xd1\xd3\xed\x9dM\x1c\xbc.LtZ\xc54\xfco\x06\x93dY!\x1e\xb5.g\xd9R\x9e\xe2\xa6\x11c\r\xe0\xf4\xf1g\n\xd3V\xdd\x90\x18\xdc\x8d\x94\x05\xdcG\x92\xefn3\xe4\xfc\xc3s\x0e{\xba\x15\n\x9eH\xeeC\xdbw\xa2>H\x86\xd9t\xca\x9b\x19\xe7\x08'\xa7\x89\xe6U\xe2\x02uo\xee\x11.\xb6\x89\xe4\x82utvU\xaeA\xf2\x92\xfb[\xe2\x8d\xafl\xc9\xd8o\xa4-xu\x9e\x01\xe6\x80\x1d\xcb}90\\\xca\x9a\xceg\xf0\xe0\xf1/\xb3\xdfB}\xbc\x1b\xeb\xcd\xc5\xdf\xce\xd9L<\x9at\x99~sk\x93\xfb\xb6\xfc\x0e\xfep7\x12U\xb3\xbe=4\x1eb\xdct\xf0P\x1e\xb7\x05\x8b,B\x85\xdbR\xe2\x08")
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-08T16:23:20.241039
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\xa1\x02\x00\x00\x12\t\x04\x00\xdb\xb9\x97\x07T\xee[>\x08\xc8g\xbe\xe5\xee\x90r\x00\x00\x00\x00\x00\x00\x00\x00\xe0AM\x9fF\x8a\xf8\xb4d\x05\xb7\xab\xff\xdd\xd0uo\xa9\xdeZ\xd7(\xb6\x92h\x90\x07\xb9d\x19\x1fPuq\n3/\xa6\xa5\xf1\x99\xcc\x93o\x9d\xb7<\x17\xaec\xf9\xd24}\xf5\x1b\xa2\x9c\xbe\xd54\xfb\xb1\xdb\x9b\x1d\xf4\x868\xb12\xd1\x8e\xf1\x86\x12\xd1\xc8Y\x103s\x11\x80|\x14\x00\x90\x98\x9e\xeei\x81\xf4?=2:\xef\xa7\x80\xcd-\x03\x1f\x10xHJ\xfc\xce\rM\xf5\xdd\xc1\x84\x01\x86\xc2x\x01\xfb\xc39dC$4\x07\ni\xb8i\x80\xe5\xd5\x98\x86\xcd\x88\x1ee\xffj\x97\x86\x00\xda\x1b\x13?\xe4\x9bG2\xe6 \xd7=\xa2\x8aWW\x84\x8eek\xc0\x1dL\'\xb4SSs\xbb\xc4\xa8\xc9\x84jhR\xb2\xdfA\x08\x83(\x12\xac3el\xbf\x17\xfd~\xd5\xe8\x9a\x83B\x8a\xb9\x07\xf3\xcd\x07H\xf4\xa9\x8f\xea \xf9\xb9k\xa5\x86\xd3\x11\xf9\xc8dY\x17\x8c[\x15\xe2\'6\xc3\x84#\x9fez\xefXq\xf2\x08N\xe4 $\x15\xde\xc4\xb5M\xaa\x1b\x0e\xd8;\xf7\\\xa1\xb0C\xd1\xe5\xf7\x01\x8c8\xda\xebc0\xb9\xa8\xa6\x1e\x96\x13\xeb\xb2\x8d\xd0\xd0\x90Zw\xa9n#\xc7\x08\xba\xb7\xc8(\xec\xe9g\x96\xf6\x8f\xdd\x14\xff\x118\xb5\xc8\x87\xec\xe7 \xf3\xbb\xe1\xe58\xbfd\x1f\x9b\xd2\xfc\x8b7=\xbd@\xdd\x96\xcd\x06\xccp2%R\x95\x99\x95zU\x96VQ\xc4dA-\xb9\x18iW\x914\xdb\xb8\xa07\x8aQb\x95\x0f\x87\x16Bv\xb1\r\x02\nO\x18F\x8f\xcbv\xf8\x91\xde1\xcf\xc8[\xcb\xa1\xd8l\x89 \xc4e~\xc1*\xfb\x169\xac=\xc7_\xf1\xf9\x93\xfe\xa9}\xd1\xb61\x8d\x92\x81\xc7\xc3W\x08\xf0\xe76z\x0c\xe2~qf\xb1\xa97\x87\xa2\x04\xe3\xf6@\xbf\x8f*<j\x86\x13P\xf0\xc3}B\xffm\xe2\x11\xb5\xf8\x9e*\x17\xe1\xc5{\x84\xc0\x95\xff\x80\x83-?\x05\x0e\xdct\x01\x9b\xac|\x9dq\x05\xec \xa6\xc0\xb4v\xb5\x1c\xc3T\xa3&\x18\xc6Ot\x86\x03?\x0b\xbb\xacp~\xbb\x95\x82_\x9d\xd2\xb8:\xf5\x1f\xfa\xc6b\xcb\x1b\x9b\xa2\xb0\x80\x92\xb9\xcb\xe5f\xf5\xafT\x04L\xc0\xea\x98A\xfa\xfa\x156{\x1b\xff\xdc$\x0b|\x84sR\xc2\x9e\t\xb2N\x8d\xc4$\xa5\x9e\x85>\x83\x03)\xf5 \x1d\\m\x8e6"\xf8\xf27#`:\xf9s!S\xcbt\xfbRW\xbfn\xb8\x87KND\xd1y\xc7b\xd5\xb6S\xc9\x04\x902r\xbb}\x92\xea\xa8\xf2\xc1J\xc7\x93\xd5\xd4(c%#\xd8%\xef\xf0\xca:\xfeL\xa1\x8d\xaa\x97Y\xb7p\xd1\xea\xd4\n \x98\xed\x16\xdfi\x10\xc9s\xee\xad\x93\x12uu\xb3\xff\xf8\x10\x8d+\xdd\x89%\x0c\x80\x02v')
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-08T16:23:20.262471
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\xb3\x0e\x00\x00\x12\t\x04\x00\xee\xe5\xd4\xbe\xce\x15m\x89\x0e\xd6.Mc\x02]X\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xe2o\xa9\xcf\xf9S\xe7V\x88\x1c\x84\xde\x073\xa0\xa6K$\xdc\x80\xda>\xe4\xee\x13\x0b\xd0\xbd\xfbX\xa0t~VPB\x1f\xec{@\x96Pu\xf0\xb5\xd1\x8b\x08\x05\x13\xb5\x98\xba\xa0\x96=J.\xd7\xbe\x17\x80\xcf\x8a\xc4XjR\xb4\xc3\xf4\x15\x99AN\x06\xfb\xee_i\xbe\x9e#\xb5\x1a\x9f\xf0\xc4\'\xb7\xcf\xf8\xfb#\xb1\x85>\xbd\xe6A\xc8T\xcb\xee8\rF\xf1\xda\xdf\xb7\x8c/\x02\x96\xe7\x95`\xe1.\xab\x84;\xa5|\xed\x82R,,\xc4\x91\x9b\x93\x9fy\xa8V\xb8\xf4\x94\x91\x85\xac}Ba\xe9\xc1\x1c\xc1\xd1\x8d\xae\xfe\x1a\x0fb\xb3%\t\xbb/\xe5w\xcf\xca\xcb\xcf2@X`\xe2:\xa5\x02\x89\xf9\xa5\xa7\x99-\xc3k\xb1}2G\xf3\x7f\xc1\x0e\xf7\xb7\x9a^\xe1\x95\xb5\x93v\xff\x01\xa0\xa1s|\xdeYm\xf6"%M\xfaL\x91Z\xd5\xb9\x9b\xa2\xd5\x05\x00\xdb\x91\xd4\x8d[\xde\\\xc1\xd3/\xa09\xf8O*\x8d\xb4S\xbb?+\xfbr\x83+\xba\xb0p\x82g\x8c\xabrW\xf1\x80\xf7\xe3\xc1:\xc4S8\xd4\x87\xaa\xe7\x08^@\x93?\xf4.\x0b\x8e\\\x945\xf5\x18\x1a\xaf\xfa\x99\xcc\x9c\x92\xb7\xa8\xb6\x91\xd6\r\xaeC\xbaE\xffp\xf1\xeb\xe3\x100P\xb9\x85E3\xc7{6Z\xaf,W\xcf\xa6c\xca\'\x02\xcd\xfat\x87r.\xf6\xe8\xdb\xdb\xa7\xabW\xde\xf5\xf48?\xb5\xb4\xaa\x9e\x8e\xc1\xda)\xea"Ood\x10\x1cC\x15}\x93\xfa\x19\x89#ei`\xd6\x02\xe9\xa6g\xa7z\xb4\x89vn\xd6\xeb\x1ei\xa2\x91@\xb6\t1\xf6\xc9\xdd\xe9\xe8\\*\xc4\xe6\x83\x9a\xe9><g\x13\x8f\xd1{\xb7\x97\x1d\x86\xc9\x17\xac\xe6\x9f[7\x95\xf6\xae\xd0\xd2\x07\x8b\xb2vw\xcd\x89\x83\xc6\xc3N#\x91O-\x83\xbc\'\x815\xa6(q~\xf0\x9a}j\xdf\xe5#T\xe1\xdf\'v\xea\xe8\x9b"B\xda\xfcYc\xd9;\xdb`\x9a\xceJ\x0f\x85\x18\n\xda\xeaQX\xac\xb4n>\x8c\x8a\xbc:\xca\x11M\x1d\xdel\xae\x7f\x8a\xd0\xb6\xcb\xcc\xaeSa\x18\x1a\x10\xbfPV\xe87]d\x9c\xb7/\\1|z\xec\xc2j\xdaE\x92\x96\xe4\xd4\x92\xfb\xd1\xb0a:\xfe:@E\xdf-x[\x0f\xc5\x83BeP\x04>\xdd\x06\x80\xd1\x01\xa4t]\x0f\\Q\xc7y\x000\xd2\x8a\x1a\xb1\xff\xaaQ\r&i\xd1\xc8\x9b\xf3micY\x06\xc2\x89hdF\xc53\x19\xbb9tX\xe2\xfeTkN\x94l&\x8e7\xf1,\xd3\x88\xd0G\x8br\xfcH0\x87\x16\xc8\xf3\x08\xff\xf3\xb1\x08\xf6\x0c\xd3J\xff"\xd3\xaa\x97\x16\xe2P)\x14\x89e\xb0\xdd2\xa3}f?\x18E#[\xfd*\x8cX\x96\xcd\xdfqi\xf8\xdc\xd4\n\xb3\xf5\x9cP\xa9\x8c\xd5%8\xea\x086\xf3\xcc\x9b\xf5"\x1b,/\x0e="\xd8\x14\xb9\x12\xea\xf6/\xf0\xb0\xa1\xff\xd4\xbb-+B\xb6%"\x91\xdf\xc6_\x1e\xe2\xc3\xbb\xbcB\xa6~\x02\xe8?\xb0\x89\xae\x82\xfeu\xd9K\xd8z\xf8\x82\xdc\x17\x98PHr\xdb\x9d\x8b(\xbb\xd9\xcc\xbe\xc3\xc9P\x16{\xe6fh\xf3\t\xd2\xd7\x0b\xdc\x8b\xe5\xa3<\x9d\xe7\xa4[&\xd3\x0b\x97\xf4\xdaN\x0b3\xbe\xe9\xd7\xaf\xfe\x10K\'\x13\x1c\xbd\x01#w\xb9*\x18\xa1&/,\xc6\x96>\xd0\xbb\x1c *\xda\xbd\xbd\xf0f\xf0\xc2\x1c\xa9\xf0\x96\x84\x89\x88\x90\x1e\xbd\x9d\x11k2&K \xdb\x82]\xb7W\x85\x05\x19\xf7;e\x8b\x16\xa4\x01T\xe9d\':\xd2\xf6\x9cj^H\x89\xf2\x89\xa9\x1e\x87\xe1\xc8\xd3\xfe\x16\x98S5\x16\xafi5#e\xb8\x04\xcat\xed\xecm\xddf\x89r\x13U\xcf\xd7\xd6\xc5w\xcd\xa2\x83\xd5\xb75\xa32\x8fa\x17Y|{\xcb\x8d\x07-$\xdd*>v?\x84\xaaB\xe7^&(\x1b\xf8E\x88\xba\xf5\x9d9\xe5\x82-\x83\xbfF\x82\xc2\xb6)A0\xc9%\xd9*d\x80TK\x16\xe7J\xb3\xba\xa5\xb7\x93hH\xc4\r\xa9L\xddp\xa166()\x9b\x18\xb4\x05\xd7\x8d-W\xf4\x97\x1dPD\x9d\xdd\xa5\xb7\xc9\x95q\xafV\x8a\xdbL\x1eE"\xa7\xa2\xe4)\xbbc\x8c0f\x94#YH\x85\x02\xe5\xc4\xf7\xc6\xd4F\xc0do-\x9am\xda\xaf ue\x87\xe3\xe4\x82~\xa7\x1d\xed\x9e\x17\xaa|\xcb@f\xbcZ\xe0\xfc\xf9\x10\xc7\xe9\x97\xe0%")\x91\xf3,\xf9\xdd\xb0\xad\xa6\x1dH\x18Z\t\x84\x97\xabv\x8e`\xe7O\xd6\xf1\x0eR/L\xd4;\xc2\xbb_\xba\xe9\x9a\xc7\xf3\xe6\xe5\'5\x83\xc1\xf6\x1c\x14\xb1\xf0N:V\x9eoj\xfe\x14\r*+\xe0\x86P\xefh\xda=\xd6p\x18-\xccu\xe1\xbc\x94\xd3oV\xd8\x0439\x98\xae\xd1B;dQ\xd7e\x04QS\xab\xec+ \x1f\x13\xdd\xfd\xec[\xa3\x1b\xfa_0\xbcB\xedW\xb9\x86\xc7sQ\x924!\xbf;\xe6i\xd2l\xf1N>Vk\xa3\xfa\xbc\xfftQ\xe8r\x9c\xb9\xfct=\x83\x05q\x14\x8dn\xcf+\xb9m\x9f\xf6\x95\x18\xd9\x0f\x12\xea\xf57\xd3m\xa9<S\xf1\x1c\xaa\x14\xc5m\x9e\xca\x0c\x8b:n\xb5\x032\xcd\xe4\xdeP\xd7\x9a\x1e\xa0\x140\x81\xe0\xf1n\xb9\xbbvWR\x13h{0y\xa9\xd0YVI\x1e\x07YI\x95(M\xee\x96\xdc\xddF\xd2\xf8,oGb\xf2\xe2\xd3o\x83\x99\xe0\xc4\x93\xff"\x19\xc3kT\xc7\xf2%\x84\x8a\x8c\xa9s\\YG\x83\xe4x\xa7>\x9e,\xba\xa4/\x1b\x8e\x1bZ\x1e\xddC\x84(\x9d\xc5\xad\xc4\xb2#i\xbc#\xbc\x88\x1b\x07p\x14\x98\x17\xb6\x89\xf9y\x99q\xf8\xfbm\xc1\x85\xbe\xd3\x04\x17\xbf;b.\x90\x97:\n\x01\xe1\xef\xab$\x84\x06\xf0{h\xba\xeb\xfb\xfe\xde\xf4\xd5\xdcF\xea\x01\xf14\xaf\xfb\x91\xe3p5g\r\xbe\x97\xe4\x19\x9c\xea\x9e\x02\x0e\x9b\x7f\xc9\xba\x9e\xf7\x90`:Q\xe5\xb1\nF,G\xc6\xa9\xa1K\xa6\xf6K\x9ck\xf8\x00\x16\x17\xa9qk\xdf\xc5\xdaO1e\x0ck\xa7\x8c\x9b]\x9d\x1a%>\xfcn\xfa\xb8D\x11\x04\xc7y\xf4\xfa\x1d[\xa95F=\x9b\x0c0\x86\xb5T\xfe\x15\x9a"\x8b\xc1\xfd\x9e\xc1\x85d\xdd\xdc\x9f-N\xb8&\x19\xbc\xa6\xd8\xc2\xf4c\x8ab\x17\xde\xd6\xdb\x89!\xab\x7f\xed\n\xee\xeb\x8b\xb8\xf2\x1bW\x8c\xc1\x91\x9ap\xc6\x1b\x8bG\xdd&h\x0b\xe1\x11\xd2y\xfa\xbd2Y\xac\x1b\x0e\xa8\xe9@v\xf3jT\xe2\x89\xc9\x82\x07D\x1f\xd7\x8e<\xfb\xce\x8d:Q\xf1E\x9b\x11*\xe7\xca\xa2\xb6|\x81\x1a\xf4\xd7\xe0{t\xd0\xcf0\xeb#\x04\xec\x18S\xa5\xca\x9c5}\n\x06[\xaa\x9b\xfe~\x82\xd4\x9a\x07\x8e\xefa\xfb\x07I\xb9)\xc8<\xc0\x97\r4&\xd85\n\x85\xe7\xc1\xc5\xe7\x9b\xe8\x08\xd8{\x14\x96\xf3H\x1b\xe8v\xde\xb8bu\xc5\nk\xa0\x0fO\x18C\xf8\x8a\x12\xcd\xc1\x83>P\xa4\xd956\xb6m[\xb2\x8e:\xea:\xa5\x8d\xe1S\xff\x98o\xe4EH{\xdd\xd0\x0c0GK\xd1F\xa3Z\xd2\x96\x04]\xc0\x90\xbd\xd3h\xef:p\xff\x07$\xe0`?\xd0D\x1f\xbb\x13\xd7\xe8*\x84\xf2\xe3\xdf\x8a\xa5&\x97\xa6\xe8\x9d\xc0\x89\xb53\xdc\x8e\x9f@\xa8\x97I\xd7\xaf\x85\xd8T\x96\xc5w\xe44\xa0<\x165\xbe\x00\xdf\xf5!\xd0f\xads2PM\xfe\x1e\xb3\xc1\xf7\x00+~\x13\x17vD\x10}v\x80zASO=\xbe\xd1\xf21.7\\{\xee\xc4\xaa\xe1\x83R\xbf\x02}P\xa47K\xe4\xa1\xe0\xe0vi\xc9S\x08\xaf\x19\x8e9J\x93\xac\x0f+y4\xed\nVw\xecz\x13B\xfa\xf5\xe4f\xf5E\x1f\x8aVP$\xe5\x9bRj0I,\x11V\xe5 \x1d\xf1\xa0.%,\x92;\xba\'\x9d\xfc\x81\x0e\xd78"\xd8\xab\xe7\xa9\x11\xa3\xb7"\xb6E\xbfp\xed\xe0z&\xb2\x1f\x94o\xdaQ\x14t\xfc\x9f\x17g4\xc8\xd6\xb9\x91>\x8e\xe1,hV\x1bB\x94\xe4E7\xa9\xb8\x7f\xe8t\xce\x11\xfd\x90\xf0\xb9\x0f\x89Q?q\xf6\xcf\x9a59\xd6^zt:\x14\xc3\xea\x084\x16\xfaY\xa1T_\x87\x00\x10\xc8\xec\xca\x9f&\x88e\xf8\xb4\xb1l\x02\x85l\xdb{\x86M)<\x8b\'Wa\xf8\xae\x14D\x86O(xj\x93LV\xeb\xb2\xe3\xee\x96\x844\xb1\xe0,T\x91\xedD>\x8a\x04\xffUD\xc5\x82\x8f95\xaf\x8eOD\x9a\xafKo\xc0\xab\xbf\x8f\xea\xf8\xc5\x1b\x83\x02\x10\t\xe4Q\xc0j\xb0I:\xcb\xd3\xf0\x12\xbe\t\xda\x97%T[\xe5\xbdJ9\x90\xfes*\xb5\x15\xb9\xacz\x9e\x11\xd7\xf5\xb0#\xfa\xd0\x9e\xbdN\x96\xbb\x8b:\xdd\xa5\x1a\xe1\xe32\xe5\x16\xd2\x9d\xee\x9eV\xb2\x87\xe1\xe5\xbf\xc8\'M*3\\mWL\xa3\xc32\xa7IF\xe7F\xe1\xcai\x0f\x96\xee\x01\x13\x98\x06\xbb\xc6\x97\x05\xa7\xe3\xdb\xed\xbb\'P\xd9\xcf\x82M/q\xb2~\xbbK8\x1bhz\x8c\xd46\x98+\xc6T\xb5\xb0\xc4\xfc\xc0\xd8\x1e\x80\xc6l\xc6\x17?o\xc6\xacs4\x89\xd3q\xb2\x1e\x15\t\xf8M\n\xa0\xc6\xb8\x9b\x06\xd5\xe2\x81S\xcb\x04\xcd[ a\xee\x9a\x89\xb6\xbeM{\xfct\x85\xbb\x870\xb3\xbd;(9\xee\xf0\xbf\x13\xa2\xa4\xa9^\xb1!\x16\xf1\x9e\xc4\xb7\x92n\x05g\xdewFG\x8c\x8a\xad9\xd3\x11\x1f\xbc-+\xc0\x84B\xe0\x80\xfbHN\x8d5\x89\r\x89,-?V\xfd.Jp\xcbB\xbeui:i\'+\x81\x8a\xe1Wd\xdc\x14-\x15\xb3\x01\x0f\x14\x98\x8e~,u\x07\xe2\xa1\xdb\xefUQ:/.\x8c\xc9\x9ag\r\x07\xfb\x95\xc3\xc0+[\xa2\x15I\xcf\xda\xeb\xf7\xf9-\x97\xb6\xf6,#\xfeI\xe7%g\xc7#G\x1b4~yA$X\xabe\xb5o\xd0JH\xc05\xee\x8b\x86\x01\x1ei\xacZ\xdb\xeba+\xd3\xff\xc5\xc2\xe7\x8e\x08\x1a\x12[\xf6\xae\x02\x04\xeb\r\x94b\xd3\x8f\xf0\n\x17)\xc7\x01\x92A\xf3\x9b\xfb\xca\xb3P\xf5aRf\xa7\xa9~Q%\xd8\x05\xe8}\x04\xc8\x0b}>\x9a\xbc\xbb6\x1bN\x02\xa2\x01\xdf\xcf#\x98\xa8\xb1R$\x86)`\rh7\xb7\xeb\x81\x9a\x14\xd6\xf4\x1b\xba\x9c\xdbK\xb5\'\x19\xf3\xd1\x03\xab\xdar\xa40\xef\x12\nT[\xc0\x0e\x97\xa1\x81\x05\x11J\xbc\xf0{\xccH\x9e\xed\xdd\xa3,\xbfP\xa0\xddU%\xcf\x983\x0fC\xff.\xde\xc4\xb21pmw\x8c\xfc\x12\xf9\xdf\x02x#\x15-\xbe\x86:C\xd5\xebo]\xe4\xa2 q\xe3\x18\x8a\x10\xb5\xafW\xa1\xa6h4\xae\'w\x9d8\\_~\x8a-\x80p\xe8u>N\x98J\xb8\x1e\xd99SdYrt\xf7X\x1bK\xd3\x08\x164\xe0\xbd\x8d\x00t\xcb\xb2$\\\xf8\r\xcd.\xa8\xec\xfa\xc5\xe8P~\xea\xe7B\xa82\x94\x9c\xbe\xd0*\x91\xd3\xda\x7f\xde\x13z3[\xe8\xd6\x84\x05\xcc\x98\xfa\x18M\x86\xfdEO\xd7\xc8\x07c>o\xa1\x1bQb\xb7H\x8f\x82\xb1A\x8a"$X\x94(\x1cs\xdc\x98z6p\n\xaa\xc25\xf3\xfd\xb7\xfe\x1c\x9eq\x7f\\.\xec[\x87\x052\x84\xb0\x1c]b\xa2_\xff\x0e\xa3VuWZ\xddU\xf0u\x9e\x91\xadN/l\x90\xad\x96D\xeb\xb7{o<\xe8\x1f\xdc6\xde\xdd=\xb0v\t\xe1O\x98\xab}3Y1t\x7f\x90~J\x17,\xce\\\x8ei]\x0c2\xb7\xb4\xffq7\x03 \x8cn:>k\x1a^\xf7\xf7h\xf03\xd5\x1e;IZ~\xa0F\x1e\xae\x1d\x97\xb0\x1d\x15\xa7@\xf7:\xb9]]@\x06\x11\xda\x1fCs\x9f\x81\x8a8]\xb6L;\xb4\xa4?SU\xc0\x11\x9f\xf9[U\xee\x18\x8d8\xc6\xd2\x91\t\x99\x08b\xfdo\x99\x9a\xd7b\x13\xadXmB1\x90/"\x9d\x0c\xc8\x94r\x01\x00\xd0\x90\xe7\x9e5XID\x9d\xfe\xc4\x0b\x94\xdb\x19\xde\xc8\xf0lo\x8eL!s\xe6\x9d\x1erkS\x92|i\x8d\x07\xe5#\xa1\x92}T./I\x89\xbc\xb1\xc4\xa0]\x9dM\x15\xc2\x96\xf6\xf6\xae\xb4\xd88\x8d\xb7kWd.7T\xffuK\x88\xb4(\x15m\xdb\xd4\xb6\x99\x8b$o\x93|\x92\x0c\x04\x81\xca.\xce\xe4I\xba\xf6\x0b\xe9\xfe\xe1\xa5lO<*\xe1\xeeq\x02\xc7\xf5I/\xd4\t\xa4\x04\xbc~\x84"V\xbe\xf8\xd8B\x99d\xeb\xff\xe5\xec\xbe\xba\x86![\x0e66\x7f\x14G\x91\x1e\xd8_\x97j\xb1N\xc9\x05w\x17J\x1d\xc3%\xff\xfe\xf3<\x94e\x84\xf0g{\x85.\x95\x15\xb2\xc1j\xe4\xae}\xca\x86v\xdb\xe3\x0c\x1ad\n]H\x96\x01\xe1\xbd\xeb\xbd\x86>\xf9Z_$!\xea\x06\xacc.\'\x9d\xa0\x92I\xe9\xd1\xb7\xdaG&>\x8a\xbe\xbb\xffXD\xe0\xa6\xf5\xef\xd2\x18\xa9\xf1\x1f!\xca\xf1\x94\xe0\xee\xafpf\xb7\x9f \xc82\x1a_2\x0c"\x87\xae\xc0\x0e\x91\x94\xfeA@\xfb\xa1m\xdd\xad-\xb7e+0\xd2\xe7\xaf\xe7\xb7\x81\xcc\x97\x93\x89\xce\x95Dh!\x87\xeb\xe9\r\xec\x14\xbd\xd6T^h\x88\xb5\x83Q5n\xd6\xbc\x14J\r\xe2\xb3\x16.\xb6)\xf6\xe10\xd0\\\xd3\xc2r-\x016\xc0c\x95\xf3\x8c\x8b\xff\xbe\xd0\x19\xb6\x9c\x1d\x90\xf4L\xd3\xb9\x18\x7f\xd6s\xc1\xbd?\xf64\x8d}%(\xee;clw\x96o\xbf\xcf3\xcc,\xa8\x9b\xa5\xee\xf1\xdf\xe0F3\x1b\xf9\xee$\x19\x8a\x97]\x8d\xf7P\x81\xfa\x8a\x1f\x15\xa9\xc1\xbd\x99\xce\xac$\x7f\xf1\xb0\xf2\x94\xd1\xbemm\x98J0\xb9\x94\xf8\xe3\xb1\x07C\xa0\xd2\xb6$\xcc\xe2\x1d5CT@\xba\xd7\xc4\x17U\xb1\xf3\xecm\xfb2\xb4\xe3q@\x9d\x8b\xfe@8b\x02\xd8w\xc0ue&0w\xdd7\x9b\xba\x11\xfdO2\x85\x8a\x06\xe6!\xf2)\x1a\x00\xceaH\xc2,p\xb1\xa7W\xfe\xb75q\xd2\xde\xee#\xfd\x9d\x02X\xe7\x9dA\x1e\x82e\xcd+\xcd\xdc\x02A\rNE~\x1dJb\x08\x109Vk\xcc$m\x18${\x9b\x15\xbdE\x02\xf8h@\x8fv ,\xeb\xc2\xfb\xb2B\xc8\xdby\x0e\x0b\xce\xb5\x8aM\x98\x9f\x14\xb3\xa1\xa9\x0b\xcayL\x88\xac\x18/S\xfd~\x99\xa7\xb1"0\x01\t\xbe\x83G\xf9\xcb\xff\xe7_i\xfdH-t\xd4\x06\xf4\n;\x0e\xd9\x97G\x85\xd4\xa4\xf4\x13\xd4\xb6\x01\x1e\x0b>U\x05\x06~\xd9)\xce\xba\xe6\xe8$x\x05\xedZ\xe1\x12_4\xd2\x8e\xb93\xfc%K\x92\xdb\x93P\xf0\xbd~\xf0\x12\xdd\xc4\'q\xef\xe5k\xad\xc7\xa0\xe7\xb4jw\x1d\x89Ai\xbd\xc3Z\x834f~H{\xe7\x04\xd8r\xcaF&\xa9?\x9b\x05\xff\xf9#\xea\xf4~I\x9d\xe9\x06at\x19\xe1X\x97G\xa7\xd0"\xac\x00Z@\x071\xf4\x8c\x8a\xdc\xbe\x81\x0f\x9b\x11\x0b/8} \x0e\x00k\x83\x801p<\xc8\n\xda\xef\xaby\xd2\xd5?e\xbc\xe2V% +\xaf\xf3\xed\xfc\xb54\xfa\x18\nv\xf2z{y\x08\xbd(+`\xc1\xc9\xe7\x8f\x1a\x0b\xed2\x19Ky\xd0\xce\xc9\xdbI\x0e\x10G\xb5\xbb\xdcS)\xf6\t\xac\xc3L\xa5\xfb_\xbf\x0f\x8a\xff8\xc7\xd40\x93\xc3W\xc4\x1f\xf2Y$\x94\x9f\xe3@\x88\x16\xda\x10\xac\xfa~\x10\\q\x0b?\x9aE\xca\xe2\xa7\x0e\xb7\x1c<v\xe2\x05\xe8/\xbd\xb2[\x16G\xf4d\xc4%"\xb6\x1d[\xc3x\xe1\xde,<8\x94\x1c\x1f#\xd8(\x04\xac\t\n')
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-08T16:23:20.232212
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\x000\x05\x00\x00\x12\t\x04\x00e\xb62\xc0\x13\xe5++\x0f\\\x0f\x99\x02\x88\xbd\x86\x00\x00\x00\x00\x00\x00\x00\x00\xc3 \x97\x93\x1bxGo\xd9\x871\xfb\xdcM\xf3\x00\xbc\xb4k\xc3\xb7\xe6\xb5\xea\x8f\xa2\xc9t\xb5\xb5\xc6\xa4\xc7\x12g\x10\xa1TO\xfd\xa1\r\xdd\xe3H8:I\xbf\x0ei\xa7\xd5\x94\x1fx\xdep\xf5\xa9\xf7II\x1f\xf8l\xe6c\xf1z\xe1n\x92\xb7\xeb\x8f\xc8\xd6\x97\x12\xb0\x93\x194Zb)\xcf:\xc5\xde\x1c:\xe5\x19\xb3p[\x86\x90\xbd\xdc\x07\xfe\x17,\xfe\xe4\xd4\xecaL\\\x1b\xe1\xb5\xc8\xb7\xfa2\xf0\x12\xdam\xf7!\xe7\xbcF(\x1e\xb7=\x1d!\x02\x06\xb3\xb5p\x06YU\x81Qi\xb7N\xb3#].\xe1\xe6\x1d\xc4\xbeb\xe1\xd2\xd2\xe9\xcdf\x16\x07IT\xeb\xebZ\x85*\xa0\xc2x\xafob\xf4\x03\xe7\xd0\xd5\x1d[a\xca\xe1~4\xef\x83<\x8e\xe3\xf1X1\xc5\x18\x19\xd4;lr\x90\xe0\xe6\x91\x90\x9e\xa5la\x04w\xba3\xf1L7\xecUWR\xdb&yC\x7fm\xd5\xf0m\xc9\x00\x01W\x88^\xf8\xfb\x03[o[\xd5\xa4S\xfe\xb1BO%*\xa31xr\x80Ui(\xd0\\\xf4\xb3\x90\n\x957\xd6\xc9\x1f\xa5\xda\xf4\xa0\x82!\xe1\xb8;\xf4\x0f\x8c\x01\xce\x9a;#\xb7\xa1\x93\x8ay\xcd\x8c J\x9b\xe5R\x8d\x8c\xfa\xc3,#?\xce\x98\xe0\x0f3b\x03\xae\x0c\xadZ\xd2\xf6\xe4\x114\xba\xf1\xe3y\xb5\x88\xa1\xe8\xdd\xcf\xb8\xb6\x83\xc7\xdf\x94\xed\xdcQ&\\\x08\x1c\xda\x15\xa9N\x8ed\xca\x992\x89\\\xb7\xe6z\x8a\xbeRa\xe2+\xf6(]\x15\xed\xdf%J4nj\xa7\xcd\xcd\x81\xa1KP\xc5z\x1a(\xbd\xfb\x11\xa8\xe8K0\xb9KC\x05L\x92U\xf2|\x961\xe0\xd4:pU\x97\x93U\'\xfe\xccJ{?8\xa7\xa6N\xd6\xc4\xaf%\x10\x19\xb7zM\xfa\xd5q]\x1f\x11\x9f\x16S\xcc\x8c0\xcb%\xbe`+\xd6\\\x10\x15t\x91Z}QK\xa6\xc7\x12\x89\rQu\xfd\x13\x0eM\xcfAxu\xb4z9\xc5\x10\x9a)?\x173A\xaa\xbd\xcc\xd2\x88\x15yax\xc4\xc3\x82l(\xc8\xb5\xd0\xebLq\xd3\xfeh\xcc-h\x1c\xc1\xa8\x8bTu\xda\xa6W\xfd\x19bt6\xbc\xbf\xf4zAz\x0e\x88\xa1\x19h\x10X\x8b\x98\xf8\xbd%\xdcP\xcdf\n\xce3o\xa4\xf9\xa1$\xa0\x1aT\x01U\xe6\xf0\xcca5\xe3\xb2u\x81Y\xa4\x9a\xcf\xd3\xc6x3\x93r\x83\xa1xz\x1b\x06\xcb\xd9:\xc5<\xbaa\x88Z#\xadt\x93\xff1\xfb\xef\\\xf2z\xd9\x01n\xd1\xc7\xa2\x94]\xc7,\x9do\xc0\x955\xec\xea \xf5oL\xdd\x059\xcd\xcc0P\x92\x11<\xd2&\xc5Z,$\x9fE\xf8\x18\xc8\xf1\x8c&?\xf0\xbb\xb9\x8d\xdfgV\x1f\x95f\xa1\xb7\xf3\xf3\xe6k\xb6g\x14[\x037\xc1\x16\xd2\x7f\x00#H,\xf3\xe5\xe6\xca\xde\xec\xdc%\x12\xf9v\xe6\xc5\xe1\xbe\x17\xd8G\x102\xe6UX\xc1\x03=/\xb8<\xb9\x1b]\x94\xbd\xd0I\xa6<\xcbA\xb2\x1acR\x17\n\x9b\x94\xe9?\xb7\x04\xf0+\x84\xbaX_\xec\x1b\xa1\x1d\xfdzEoV\x1d\xab\x86_\n\x0e\xd3r\x85\xb3\xf7\x16gl^\xc2JE+/6\xfb\xb4\x84X\xbc\xbc\x08 \rh\xb9&~\x07\xbb\xb6.\x126W_R\x9d+\x13R\x8e\\\xb8\xd4\xc4\x13\xce%"4O\x08\xd7$\xd4=\xdbN\xa9\x90\xf4\xb0\xeb\xb0\'\x02\x0c\xd0\x19\xceY9)\x17\xc8o\xb9\x91V\xf4\xf5q*\x11\x89\t<\x97\xd9\x9f\xbeKL\x93\x14C\xda\x0bI\xf5A\xce\xeaMZGH\x0c\xd753(\x98\x17\x91{a\xf7\xeaehvd\xcd\xd1\xd2.\x8c"\x1a\xc00\xb6\xb1q\xc6\x97\xd0 ?!\x84\xe5\n\xcc\x82.\xcb\xa3:\xfb\x93\xb4$\x90&rJ\xcfa\x8b%\xf9\x88\xc1\rg\x1d\xf8\x81\x17\xf7}o5x\x85{E\x1c\xa7\x82\x86}\xc8X\xee\t| \to\x03#>\x04\xdd\xb1\xccE\xeft[YZ6m\x1ap\xefeq\x89\x98s?\x15\xcc\xd7=n{\xd1\xc4K\x90\x10\xe9\xafv\x94\x01\xf3\x92\x02h;\xe4r<\xd9\x88\x98K\x13\x95\xee\x95\\\xc5?v\xfa]\x03C\x12\x9de}#6\x01\xccN\xf8\'I\xfe\x8c\xfc\xa5-m\xfd\xf0\x84\x08.F\xc73~ue\xf0\xc0`_=\x96\xda\xdd\xcc\x84\'\x98\xbf\x00l\xfe\x8a\xf0N\x8bY\xd5\xc9\x9aja-\xbdgQ\x93w\x95\xda\xe0T\xab\xe3\xff\xa8\x8c\xc3{\x8b\xb8s\x8a\xab\xefA\xea\x00\xb8\xa6u6u\xc1+d\xe1\xbcD\'\x85\xb7\xc4\xb5\x12\x00\x90\xfc\xd9\x0b\xc17\xc5\xccW\x04\xc6\xc9\xa2\xcd\xba\xfa\xf1O\xb9Nc\xb4\x94\x92\x10@%\x98\x92Y\x83peR\xfe\x8d-\xb6Ml\x0e\xed\xbf\xce\xa7~\xb1\xb4\xff\x96k\xe9Z\x0b\xc9-S\xd4\x0e#\xf4\x8b%\xbeU\xab\x004m\x99\x81&\xdfI2\t\xb1\xd9\x8a\xb6\x12\xf9\xd1\xde\xb1\x1a\xa2Qf"VL\x9e\x07Y\x19\xa1G\x00\x97.\xb4J\x17\xaf\x11\x11<\'\xb4\xbfN\xa5\xbc\x1c\xb4H1\xab\x084\x16y?\xa6O&:Wr\x8f\xa7\x10\xec|\xf6\xbc\x11\xcd\xe2\xe9{4,h\xfc\x1c\x98\xd9@3K\xc8\x0b\x8a6%\xa4\xdd\xc9b\x80m\x9app\r\x1e\x9bq\x1ftc\xed\x98R[\xe6\x17\x08\x05!\x0f\xa9\xc4\xfe\xe9\xfc.\xfa\x8a\x7f\x9bv\x82\xc0\x9b2\x8e\x0f\x05\xb0\x86\xd9\x82\xbd~b\xa8}\x9a\xcf\xa2')
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-08T16:23:20.319150
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\xdd\x04\x00\x00\x12\t\x04\x00\xd0\xf1\xdd=\x94\x10\xf0\xa4:\xc7\xc4cNn\xc3\n\x00\x00\x00\x00\x00\x00\x00\x00\xc5\rO9-\xc2x6d\x8aS\x1f\xa7xh{\xeb\x80\xa4\xb0\xffi\xe7"\x8b(\xdc\xf41\x99\xf9\xa9z\xf0\xf6\xd0\t8"b6\xe9W~\xeb\x016\xa3i\xe9\xa8\x99\xf3DW6\xcb,*a\xde\x03\xa4\xa4J\xd9<\x1a&\xcfB\x0f\xfa\x16n\x06\xcc?\xfbV\xbb\xb1LbY_\x08*\xee\xf6\xb4F\xdc\x8e3\xd2\xf3\x15I\xc6\xf7\x9e@\xadrp\xe3\\YHtf2\x10\x87\xb5\x9eVF\xe6\'\xd8\xce}%$\xa63\xeek\x85\xcc\xb2\xa2@Gi\xfd\xc7.X\xab\xd3C\xa0\x8a/Z\xcb\x1a\xd7\xd4N$\n\xf5\r\xed\x98\x81\xaa*^\x8b\x0b\xd15\xe8\x0b(\x06R\x16\xf1\xb1{3\xc0\x08\xa3"\xef\\\x14{\xa7`1J\xd5\x14\x9e\xaf\xf3.Z%(\x19"]\x17X\xbe\x1d\x0c\x86#L\xe8IY)\xb3\x055\xfa\xab\x13\xe3[\xb0U\xcdiS\x01s\xc3q1 v\x95\xc8\x1e,1*\xf3\xee\xc7\x97\xe0M\x8cc\x15;\x1c5\xdf\xdb\x04D\x03W\x9aOr\xda`S\\z\xf9)-\x0ek&\x8c\x0e\xdd9\xfaLL\xf0\xcd\x0f\x00\x16\x16?%\xc0\xb0\x83\\\x8cT\x9f\xacN\xdc\xaa\x8d9\xfb\xca\x89\xc6m\xb4\xa7~\xc1\xa1\xf5\xcc)\x1c%-\xbf\rBk_\xcc\xc0p\xe3\x1d9\xd2\r\x8cx\xd9\xf5\rUI\x99\xaaE\xceS;\xc2\x87\xc4\x89F(\x86\x86\x8b\xae\xb0;\xd7k\x17V\x16L<\x10\x01T\xad\xe3\xaf\x12L\xaa\x96\xea#k\xf6\x1bD\x96\x16\xe8\x1b\xba\xee2\xff=\xea<aJ*\x00\xb2r|\x82\x80\xce\xa2\xa8>z\x1c)\xc0\xa8\'\x93\x88 m\xd3\xa8\xeb\xf6\x7fqcU\xb2\xb3\xa4W1\xfb%\xbf\x14\xe3\xc0\xc1\xb7\x03\xbf\xde\xc6\xbdEA9\x92\xcb\xc6\x95=\x81y[\xf5F\t\x02=\x18Dd\xf84\xc5\xf3\x05z\xc5,\xeb\x91B\xf0#\xd5\xb7y#\x9fw\xe9>\xdc\xa6\xbe)\\\xc9\x9c\x1cc\x1d\xb9_@\xf6\xab\xb7\\\xdau\'}\x8aXBt\x98\x1b\x95\xb9[\x98+\xaa\xde\x13\x8aF\x1d\x81\xe3\x12\'\xdc\x95S;\xd7\nRf\x9a0\xe4\xf1\x99d\x1e\x1cx\xf98P(\x9c\xe7\xcaki\x9c\xd0\t\xda\xc3@\xa0\xe9\xdc\xd7\xbca\xa3\xa5{AY\xee\xda\x00F\xaf/\xbc\xaeG\xb0\x18\x88\x9b\xdaP\xf1\xb6.\xd7\xfdSp$k;,\xde\xd2.\xd9`\xf6\xcc6\x9e!\xc8\x12w\x0bI\x16\x9f\xe8\xa3\x82\x8f\x83\x0c\xdfF\xf33C\xa8\x19\xde"v[\xb3\xf8\xe2\xdc\x89\xd8T1F1\x9a:\xa8\x19\xe2\xe9P\xb5D\x81\x90\x18{\xed:\x8a>&\xc6Q\xdb\x1b=\xfd+\x928=}\x9c\t\xdd\x02\xb7\xa8\x08T\xefZm\xe2g\xba\x84\x81\x8f\'6\xf0@_\xee\xb5A\xfd\xe0\xdb\x7f\xf1\x02j\xab\xa46\xc2\x03\xca\x0b2\x9f\xfd\xaa\xcd\'$\xcb\xe0"\xc1U\xd29\n\xf3\x93J\xd7O\x05j\xc2n\x1aJ\x19\xa0\x87\xa4\xc6N{\xc8\xad\xfd\xb3\xc5\x12\x97?3:I\xa4\xb7\x0b\x8c\xbd\x04I\xab\x8d\xd9*\xad][\x10\x92A7\x90\x1a\x91\x16-8\t\x8d\xa7(\xd9\xee\xe0J\xb1\xabp\x80t\xb4M\xd1t\x9d\x8f\xba\xc9g\xe0\xdf\x12\x1b\x00H*`B\x1f\xce\x80}\xee\xdb\x88"\xf7\x9e`\xa1\x84\xd7p_\x0e\xb1+\xdf\xeemh\x13\x0cc\x89\xf6\xb7\xd3\xe6\xf5\xdf6\x8bI\x8fc\xd5\x1e\xd5z\xc1\x04\xf4Q\xf33\xdd\xf0\xc9\x91\x07\xd1\xba`\x8eM\xce\x02!^qQ\x18=k\xc5\xafd-8\xf1\xc3\x96W\x02%\xd9\x99r\xdf\xee\x9c\xb45\xe1\x8d\x84\x02\xbf\x18\xfag\x1a\x92w\x1f\x1a\xfa\x1d:t<\x10Wd\xa7\xa5\xda\xfb6\xcf+\x91\x92\'\xc4\xb5a\x1b\xfeH\xaa\xf1\xffV+\xae\x13;\x03\xf4l\\\x00M\xd2\xe1,$\xb1,\xd9\xf3\xb2\xd5\xb6.\xce\xc0$:1\xc9\xd1\xce\x13\xd3\xe92\xea\xc856\xc4\x9b\x19\x07\r\xcfG\r\xb2\xf5\xa2\x1cY%Fz\xee(\xad\t\xe9-\xe7\x95\xedK\x01p\\k\xb4e>f\x07Hz\xd5T\x01:\x87\xf7\t\x95\x94\x0e\xa1\xf8\xafkW\xb2\x19O\x19P?\x10\xf0\x84~\x1fq<F\xcf\xb1\xe0\x16o\xd3\x02\x96\xde\xb1\xb3zU\x17.6\x9f\xac-\x00\xb1\x8c\x92"\x18\xaeR\xb2\r\x9d\x7f\x14\xc9\x14m\x90\xd2\xc3\xd4d\x12\xdc5\x1d\xdbV\t{\x98\xd4\xa3\xc0\x06\xfc\x19&\xd4JrI\x91\xbd\x19\xd7|\x8e[\xab\x9d\xb0[33\xe2Z\r\x1dP\xd4\xfd\xee}BPEI\x18\xbbi\x88o2@\\\x9cN\x81\xed\x95*\x8a\xb4e\x00\x9di\x1b\xd1\xc7\xf8\xf90\xbda\x04\x01\xfdq\xe6\xfeqc\xae[@\xa7\xc2\x18<z\x93\xec\xc3\x9d\x99\xf1\xaa\xb3\xc3\x11pd\x05K\xebB\x05\x8e\xa0\x81\xcaQA\t\xa5Tt>\'$\xb9\x82\x007\x0e\xa3Y\x1b\xf1\xe5<\xfc\xea\x83\xf2\xbb\x008D^K\xb2i\x14u\xca&*\x86\xff\xb5\x84P\xc9\x12\x15\x1c\x8e&B\xc7m\xe8\xac38\xdb\x92\xc8k?"\x84k3 ')
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-08T16:23:20.267154
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\x00c\x06\x00\x00\x12\t\x04\x00\xda\xaa\x9c(\xe41\x1c\x8f\x83\xb9"\x94\xdb\x88\x0e5\x00\x00\x00\x00\x00\x00\x00\x00\xcd\'\xe4q\x9ah\xf5\xe8\xd4\x9f\xf0\xd9\xd9\xd2\x95.\xb1\xca\xbb\x85\x11:<\x8d\x04\xd2\n|\xfc\xaf\x06\x89\x10*\xb5I\xb7\xdd\xde0Nn\xf2\x14,\xa6T\xa4\xec#`\x02\xe3*\xd3&#\xeb\xfd\xe1\xa3\x1f[\xd1\xc9\xa30\xdd\x18\t\xff\x1f\xdf\x97\x89\x8b\xd8\xc6\xf2(\x16}\xe2\xa4\x9e\xc5\xe5\xe4d\xe8\x8a\xeb\xbb\xc4^\x83&\x15\x8d\xd9h>\x95\xcc\x92Q:\x9d\xc8\xc2\xb5\xd9\x06*_\x9a\x98\xed\x84_\x0c\xd6K[\xe1f\xd5\x9b\x1ad\x88\x7f\xa3bp\x96|\xebv\xa4\'\xa4\'\x08\x86l\xf8\xc4\xae\xac\x1c\xb2z\x0f\x98-|\xb0\x10k\xb7\x87\xa7@8R\x85{y#V!w\xc8\x82\x0e\xa7\xb5 /\x01\xa7\xfc\x15\xad\x1a\xed\x85?R\x11\xa4\xc7\xcd\xf8F$}\x92}\x10|\xdb\xc1hNN\xa3\xa1\x85\xe1\xa0\x15\xd7Y\x19\xf4\xa9\x98\xf3\xd5\x10_-S,\xa76\xdf\\\xb3{L!\xd5\xe5\xce\xcd\xfb*\xcfdZ\xefvO|\x15\x91\xd8\x9e\x1f\x817(\x8fF\x81FA\x0b\xf3\xcf\x16\xf3\xbc1a[\x8a7\xbc\\\x9cTw%\xe7\xdfA\xb3\xfdC\xa8\x88b6\x01 \tdx\x82\x9b!Z\xb80\xbc:\xf8\xef$n\x13\x81\xbd\x0b~\xc0W\x19>:\xfa\x03\xc5S\xad\x03?=~\x98\x911\n\x06g\x04\x82bS\xe1\xb5\xc1\x91\xd1h\x90:\xee&J\x7f\xde\x9b\x91\xa0\xa0\xd07-8\x8e\xa4#\x9a\xf9\xd6cl\xb4\xc3\xeeZ\'\x893|Yj\xce1\x1d\x07x|\xe1\xe1,\xb2gi5\xe8D\x82\x96e\x82\x99?\x00\xea\x84\xdf=\x00\x1e\x83r\xf0\x08_\xab\xae\xe7B"!R\xc2\xac\xbf6\xaa\xdd\xeee*e\xc2\xbc\xc1`IxZ\x7f\xcdTn\xe0\\RY+\x0cU\x90\xb1\xcdE\x97t%\xfd\xd5\xf4M\x85\xe4V\xea%\xfb\xb1\x0c\x8c\xa2\x7f\xe0\x05\xbb\x0f\x02\xd2\xcb6\rhT\xaaY\xf8A\x99\x1f\xcb\xa9\xa0)jB\xbce\xf6\xa2\xd1\xc6\xf8e\xfc\xc1\x98Co\xc2\x0e\'\xd7\xd35\xda\xf0\xda]\xf5\xe2a\xd1o\xd2c\x999\xf6\x8a\x9f\xafU\x07\xfd(\xba\xdd\xe7F\xfc\xe7x\x9bA\rYs~j\x10\x00v\\F+\x11Qp\x1e\xe21\x95\x85\xb0\x89\xae\xec\x93\xd8E\xce\x87?\xb1\x8fU\xbe7\xae\x89\x9e\xa8\x81\xfe\xe3\xf7\xfdN\x17\xf3\x1e\xd9\xcf\xeb\x02\xe4\xb9z)\x18\xc5\xcbMT\x89\xbb\xc7\xa2\xd5\xbe\x83\x03[\xee\x87`\xa5 \xf6\x82#\xd9\xd6\x85\'\xb5^\x0f\xbb\xa1\x9eg\xec\xb7W\x1c!\xb7"\xf0#\x98\x8e\x80\xdb\x8cOO03\xfc\x8dZ\x9c`\x82\x0ea\xea\t\x8e*\xfb\x05}\x1av\x8d\xe1B|\'X!\xc8\xf1\xbf\xa5.)\xa2!\x1f\xa6\x12Y\x08\xf1?\xf5\xc0\xdd\x82\x0f\x0c\xf4\x88\xe8\xe8\x01\xe0Bg\xdc\xf6\xacV?s\xae.\x02U\x94\xbe\x05\r\x18IO\xc3\x98\xfe$\x1a<\xab\xf2\xb3\xb6\xb9\xd4\xf2\xd9Q\xa33\xc8@\xf5>B\xaa\x1d\xa2\xe8\xdf\xa4\x18\x94y\xc4\xcb\xf0h\xc3mr\x9f\xf3 \xafU\x97\xca\x1bD\xa9\xcc \xc1\xfc\xab\xaf\x1f |\xf35L\\\xd53~\x19\x12\xaa}d\x93\xca\x9co\x19\x1fz\xfb4\x0e\x1e\x05\xdb"A\xf2\xe4\xd4\xd5\x18\xfd\xed\xb7\xb5\x13hc\xfa\xdd\xaa\xd2^\xa1\x8a\x7f;\x01\xc5wb6\xaf\x0c\x8fo\xd4l\x0b\x10\xea#\x12\xbf\x7f\xea\xc4\xc9\xb2\x8ez\x7f\t\x8b\xb9\xf9\xe7\xaf\x18\x815\x17\xe5vY\xe2\x0b\x9b\xc8r\x15o@d\x1f\x00\xa4\xd6W\xb7\xff\xdf}\xd20\x9a\xb7\x95\x0cCf7\'\xeaN;\xc4\xe2`J\x7f\x9b\xd1\x9bGh\xa5\xe0?A`\xa8)\x14$\x0c\xb1m\x87\xe7\x18f\xd7Q\x7fq)\x908\x9f\xb5\x08R\xbf\xe8$\xd5?\xc0?F\xa1h\x93\xfcT:\xcd\xae\xb1\xb8\xe9\x07\xe3\xb5\x19\xde\xbf\xfc\x8do`\x9cq\xb3GD\xb9\xb1\x9e\xbd\xe8P\x1d<P\xcehg\xfb\xc8|%K\x06\x18\xf9\x90\x1c\x8a\t\xa7A\x824?5%M2$\xd9*w\xc9S\xccg\x06\x84\'\xa7\xc6\x9a\xc0\xd8\xbe X\xc8\xa9\x7f\xb08\x985@\xf1\xa5N\x03\xc1?\r`\xe0\xe2d\x90\xa9\xc7\xf6l"\xdc\xfc\xe5\xb8\x87\x95\x9f\xbco\xfa\x90\x84\xea\xe4z\n\xc5\xceyB\xff9\xe2\x9b\xbd9\xa3\xdaZ\xc2\xb0R\xf0R\x94\x9f\x06\x95 \xdb\xd4\x7f\x10s\xedu\x0e\x13\xbe\xfe%\xbb\x93\xee\x8aH\x14Y\x1aP0\xcb\x92mB\x02a\xf3\x800o\xadL\xed\x12\x19\x87\xed-\xe5\x9a]\x11\rM\xcf\xff_\xc1t\xe5L)\x19\xc7\xe0\x92N\xd2k\x00<\xbd\x95\xe9\x8ei\xffb\x0cv\xc0-\xf9c\x1a\x05\xa7\xc5\x8f^]\x0f3\xa9\xbd\xda\x19\xec\xc3`\x8d\xa4\x96\xa1\x822\xbd\xdb\x98\xb1\xbb\xfe\x91\x1d\xe9\xde\xe7\xcb&\xa5\x82\x8cg;\xc5r\rN\xa6\x1c\xd6B\xaf,\xb24\xbd\x15\x8f\x8093\xd4h\xdcL\x1d\x82p\xb5\xcd(n\xe4 \xeas\x8bc\xfc\x01\x87\xb9\xb5\xca\x1a\x98\\@\xbfw\xc2\x9eI6Y\xd6\xcdf\xdf\xbd\xd1\xbb\x0f{\xc8\xe1\xf3\xbcb\xd8o#\xfeeD\xce\xd5\xa34\xcf=<c\xb3\xeaG\x1b\xe3\x96\xe0H\xd7\x99\xd0\xba\xb8\xd7U\x93/\x88\x1b\xf5\x17\xc7\x8e\xd6dq\x96\xd2\xfdB\xe8\xccL\x90z<\xda\x7f\x87\xb9Q\xe02\xd8\x1f\xcf;\x06\x18C\xf4\xbdbz8M%I\x13n)jS\xe8\x88\x0cM\x9c[\xa9:\x9bc\x95r\x1c\xaff\xd0\xc5\xb5\xf7S\xeb\\\xe2v\xdd\x01\xe9\xdc\xec\x00\xc4i\x10\xbb`\x03\xc5\x06\x01$\xb7:\xd2\x97\xdf\xec\xceP\xbf\x13w\xed\xb25\xabl2\xbf@\xc7\xe7\x13\xde,\xe5\xae\x17\xd7\xf9B\xe0\x1e9\x18\xba\x87o\xb0}\xfew\xb8\xe6\xb0aY.\xa7dz\xd5|#E\x06\x07\x8b\xc6\x9dRS\xba\xef*\xe5\x0bDq[\xb0\x94\xd6\x159\xc0\xcd\xafVcO\x11\xc5I\xee0\xa3\x92G\x80\x9dTA\x9f]hc\xa6\x07\xdbxx\xdaL\x85u\xa41B\x1b\xcb\xd1 \x03\x04v\xfc\x05\x08\x88\x0eS.\x82o\xcb\xaf0\xc4\x98\xfa\xdd\xaf]ymv\xc6\x0bN\xc8\x0c*\xc3\x13@\xe3\x1f4]{\x98Q\xe8\xb7\xa0\x83og\x96\xfa\xefF\x9f\xc4N\xe9Wm\xb7\xba\xcb\xe8\xc6N\xcdT\nw\x88\x01\xff\xfd\xa3t\xb8%\x99\x1f\x916K1J\xe1Qe\x15\xba\xf8gY\x15\xb7\x88\xe50s\x03\xd3K\xb0\xf5\xea\xf9\xdb\xe0\xd9\xdc\xd5\xc0\xa4\xff\x96\xc8\xd4\xa8\x80i#_\x15\x16\x19\x01\xde\xcf\xd4pk\xbc*b\x9cKpMb\xfd\xa7\xbat\xd7i\xae\xc6\xe8\x16A5\xa0eM\\D\x97')
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-08T16:23:20.333611
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\x8a\x12\x00\x00\x12\t\x04\x00B\xf7\x07$\xc4R\xe0\xd3c_\x95\xd3\x11B\xdbS\x00\x00\x00\x00\x00\x00\x00\x00\x99\x84\xfc\xe3[\xb2\xe7\xf0\x0b\x16\n\xe7BMpEV\x8a\xfa\xbeC\xdd\x9d\x8ff\x8a\xcbP\x94\x02\xf1\xcdt\x18\x04\xea\xf4\x15\x08)#G\x94G\xb8\x05\xc4\xd4o\x8d?\x977\xc3\x86Y\x91`\xae\x03>\xf6\xf0\xf5\xae\xd6\xa4\xd2\'\x15\xb0A\xd1\xc9\xfe\xce\xde\x0fvF\x00O\xb98!\xb8\xc8\x02@[>\xe5q\xc3\x0ed-]\x1b\xc2&\x94\xd8\x05xo{\xad\xd4`/\x18\xade\xd8-,F/\xcd\xd9\xd3\xdb\x1eRHx\xfd\xed\xbe\x83!\x87\x06a\xa3\xaf\x80\xe3\x17\x06\xe4\xc6\x9e\x0c4\xc8\xb6>3\xab\xd6\xe5\x03\xb3#\x16\xfeq\xe8\xb4\x06\x17\xa1\xaa\xd6\x18C0\xdd\xaf\xd4\x92\xdeNNK\xbf\r\x9c\xc0\xbf\xd3O\xd9\x0e\xb2k\x92\xdc!\x90\xbd\xfb4=_\x8c+\xfb\xbf\xa4o\xc8V\x15\x80\x94\xe9\xfb\x1cP\xd4+\xdf\xb1\xd3\x8252(.\xd4\x9c.R\x7f0]\xbf\x9e\x99\x05\xa8@\x9e\xb1)\xcd\xba\x11\xab\xd3\xbfag\x01\x14\x8e\xd8\xd1\xbe\x87]G.\xbd\xf6\xe1\xcc\xa4\xdcd\xc9BP2\x01)\x96\x81(g\x07\xdfF5\x83\xc8\x17\xf2\xab\x1c\xbcQ\xaeb\xfa\xb6,\x10[\x009\xc0\x0c`Z\x94]\xdb5#|#Yp~\xf3*m\x82\x90\x12ZE#\xc7\x87|\xce\xd5\x9d90KB\xe5\xb0"\x8d6y\xf7\xee\xf4,\x8f\x93\xf1!>8\x84\x05&\rl\xe7\xb9\x1fk\xc7a\xd9>\x9f8!\xe9\xad\x81\x1aE\xeaIo\xf4\x07L\x81\xd4\x06\xb8u\xaf\xde\xffc\xf0\xdeG@P\r\xbd\xce\xf87~:Q\\\x95|\xe5\x13\x03]8\xd2\xbdF)\x91\xf4\x07\\f\xa3\xf0\x0c`\'\xf7%\xf3\x8fP\xf3\x8ccs\x17\x12\xde6\x91\xb3\x1f\xe6\xb6e\xae\xbf\x8e\xac9/r\xcdz\xa3\xbe\xc5Xo\xc9\x1cFv\xa7K\xbe$\xa4\xb9\x1aoS\xeb\xa6\xb3\xc8\x0f \x8c\x9a\xefi\x8de0A\x00}\xfd\xe56\xaczN\xbd\xfei\x13v\xf5&B\xc0\xafjqE\xae\x8a\x12\xfb\xffdGU+\xc1;\xd6n\x0b\x1ehAt\xb6\xe4\xf3\x0bh\xa8\x02\xa3\x9a\x90\x8f\x84\x01=!\x80\xd6;\xa5\x96\xc8\xe6\xb0\xaf\xcf\x14ve+%\x8a\x17_\xb88\xb5O\xa0E\xf6L\x83\xd4_9\x8f\xf4\xa4\x1dL@\x02\xd4\xc6\xc9|\xe0<\x01[;\x1f\xbd\x96\x8b\x84.\xe5\xacS`7\x83\xcd\x95\xf9\xa6\xe55\xc4\'\xd0e\x10\x930VU8\x97\x13\x1e-O\x9e6\xc4\xae\x81\xf6\xf9\xd6\x14\xdb\xfc\x01\x05\xb8\xdc\x95\xc0\x07\x84\xc6#\xa9Y\xe9"v\xb0\xcb4[^\\\xfc\xd5\x001\x10\x9e\xa0\xd6f\xf7\xc7z\\\x822\xae\xfc"\x94K\'\x1a\x1c\x9b\x04w:\x92\xbb\x953\xb0i\xddG\xe2\x90M\xe7\xderY+@\xef=VcI\xef\xc4O\x04A\xa7\xc0A\xc5\x07\xbe\xdat\xa6\xcf\xc9H\x11\xc9\xa3\xc3\x88\xb3\xa0\x8e\xeew\x8cg\xeb=\x98\x90Z/}^0\x11\x89\r\x8b\x05b\xacju\xb8\x81m\x07\xd9\xed\xa2\x10\xd4\xb7`$9nq\x0e\xe9\x89\xd1F%\xb1J\x10\n\x90\xa8\xcf\xaf\xab\xceU\xd6\x9f\x08\xb7\xceZ\xdf\xd9\xfe}\x19.\xe5\xa0\xb8\x1cA{i\x0e,\x00\x99\xd8\xba\x82\x8c\xfa\xab\xe6s\xd6\x1d\xb9\x03\xdc\xdf\xf81O\tc[\xc6R\xdd+\xdbGf\x1bP\x88\xbe\xb8\xe47\xe8.>\xb7\x16\xf9\x88 \xf6\xce\x85(V.\x8b\'\xbbP\xd7\xa7\xcd\xed\xb0%\x19=\xb0spA\x92\x88\x83+\xe9\xcc\xe5\x94\x1d\xb42\xc1\xef\xaa\xf3\xa9\x07<\x9d&\x1d*e\xbb\xf8\xb1.\xee5[\x1b\xb1\xd9\xcd\xa4|T\x89\x97\xa8\x81\xf0\xd2G\x81\xd4\xcec\rd\x96\xdd\xb3g\xe5\x18\xa0_\xd2\tO\xef\x91\xa6v,X\x85\xa7\xa5\x01\x01&\x12d\xc67\x0b-\xcbE5m@j?\xb5\xbb\xe6\xc9#4R\x06\xb1\x87&4mdj\xbbE\xe2E\xf3\x04U\xd6p\xee\xb4\xed\xc5r\x15\x83\xff=>o=o\x03,Ak\xeeM\x93x@\xe2\xe0Yl*\xa583L\x0b\xefp\x03\xb5u\x85\xaa~\xad\x0f7\x84\x00x\x82\xeb\x9c\xeaK5B\xda\xe9\x00\x92\x97\xa2\xdb\xc1\xa2f(Ev\x93\xe1\xd7\xaa\xd1\xf4vb\xad\xc7\xec5\xdf\x07\xcf\xf8j7\x8e@\xfd\xdf\x92\xc6U\x92<\x98x\xe7}}x\xcc\xdbr2\\\x9fO\x82e"\xadb\x8e\x1d\x1aa#\xd6\xdb\xaf#\r]\xb0\xe9}\x8f|\xe4N\xf9\x814\xb0=\xe7\xb7D\x9a\x98\xfb\xbb\xb7\xc3R\xba\xa3\xf75Al[\xbbZ\xcf\x96\xc7\x1f\xb6\xb0\xdc\x1c\x07\xc8\xa2 R\xca\xfa\xa0D\xcdsR\xd2\xb9]\x127\xbf \xd1c\x8f\x0cx\xd1\x90\xf2\x1aO=J\xa5\xa6=8\x8a\xf70\xbcx~3?Z\xd0c!~\xb3\x8d^\xe2/\x1e\xd5\xc5$\\{\xb1z\xb3\xa2\xbc\x14\xde\xb6\x7fz\x19\xee&\xba\xb7q\xa3#\x02\xdd\xcdx\x85\x98\x81b\xec\x00\xa0~@\x96\xf0\xc5\xfa\xe4\x84\xf4\xcd\x11&P\xe2-[#*\xb1/\xbf\xce08\xb9\xa0Z\xa4h3\x004\x80\x99Oh\x9c\xe6TSd\x06\xa4bx\n\xa1,\x1c\xc9b\xeb\xe1\xaaQ\xe9l\xd4\xc4\x00\x80\xa3\x04\xee\xba\\\xdc\xc4\rW\x10\xdb2v\x1c\x84\xf9-\x110\xf7.\xb2\xa6g\xd1e\xa7g\xfd\x10\x00\x117\x17x\xa8u<\xd8\xd8rB\x98vC\x06\xe6\x86\'\x02_\xccp\xd6\xa5\xc3\x136\xe0"\xf8\x16\x1d\xaf\x9e\x1b\x18\x97 \x13nH\x82\x8ar:>Wb\xed\x835<v\xf6\x99\x00_\xa6\x0eA@\xfc\xa1\x12\x84\xa3\xce\x99T r\x11\x82\x8c\x81\x85\xc2\x9d\x1e\x8c\xf6S\xb4\xf3\x90\xafp\x1b\xd3\xbfq\xc9\xbd\xde\x9e\xe9\xcciyV\xb1X<\xd3\\\x1f:\x9d:\x93t\xc5\\\xcd]\xa9\x9e7\xf1E25h\t\xfc\xf0\xc4W\xff\xe3\xcf\x02\x88\xaf^\x0f\x8c(a\x9dC\xff\xae\r$,h\xe3\x93\xe2\x03H1\xe66\xa6\xab&~7\x1cN_\xa5\xed\xa6s\xcb\x05\xf2\xea\xc5\xf4 \x99\xbf%\xa3\xea\x80-\x06l\xf1\xef\xe6\xe0\x16p\xb5\x9eC\xc6\x9b],\xeb\xadP\x90\x06\x1a:\xafv\x9d$,ze\xf3\x1aC\x87\xc0\xbb\xfbC\xc4s\xc0Y\x93\x0e\xc9\x92\x1f\xad\x06\x85\xe1\xfe\x9b\x98]\x1c\xc9\xaa\xabu\x85\x17\xb1w.[\xf3@\x92\xcd\x8df\xe9\xe8|\xf5\xe3_\xe2\x15 \x13\xd2\xe5\xa0[\xfc\xabm\x1f\xb8\xb8\xc5\xa9o\x12\x1e\xfc#\x98\xe3:8\xf3\xffc:\xba\xe6\x01\x87\xc1\x15)\xbb\x18\x98\xdd\xdb\xaf;\x87-\xc3\x97\xd7^9GX\xbcM3\xdb\xe9|5\x81\x15\xd7g"\x1f\x113K\xadw\xba]\xfcY\xe2\x08^\x89\x85<\x91^\x03G\r\x8a\xb7\xb1H-<\x11#\xda\xcd[F\xf9\x86\x95\xc1\x0b\xc6L^G\xedN\x01\x84\xb3-gJ\xb9\xd7\xf6\x9c\xc8n\x9aV- \xf2\x00\x19\xc7R\rD\x80\xd2\xde\x95\x04\xf7:Pp\n5\x00IE\x87\xa9\xcfc\xc1\xd4>G\xc8\xf1\x92\xfd?\x8b6z#\xe1$3.\x84`n\x98k\x92w\xc8\x96Zr\xe4\x08-\'\x14\xac\xf6\x13\x07\x1c7\x11o\xe3<\x16\xec\x98f\xa6\xf1-h\xc99\xc8ij\xb0s:\x1e1\x96\xf6\x18\xb1\x89x\x8a\x87n\x96\xc9\x9f0\x9aHd\x0f\x18\xb7=\xbd\xb2i1mu\xd2\xf1\xbc_d\xe9q\xec\x13n\xdb\xc1\xd7\xfe\xd2n\x1f\'s\xf8s\xa8\\\xe67\xa1C\xe7\xa4\xc6d\xa0\xa0Zr\x84x\xd6\x8f\ri\x0ey\x7fFW\xe7\xc3b7(\xf4K\x81\xc7\x9f\x11=\xbaP\x0bSM\xeb6\x99\xb0\x85\tY\x86{\x92\xd3\xcb3\x8bjJ\xcc\xd7\x13T\xad\x9f~\xa9o4\xb5?\xcds\x18\x98qG\x0e6R\x8e\xeef\x86idV\x9dk\xf0\xfa\xb7>\xeb\xa7\x9dC\xd4\xe3\x04!\xb6\x05\xa3\xf5g\x8d$\xf5\nm\x9dR\xe5\xaf\x84\\\x0b\xccql^\xd7\x93v\x9f\\\x02\x93\xc9\xe9\x9f\xb3\x99\x7f\xf2\x1eY"2\xa6\x87{\xd4+\xc2e}\xd5\xbb\x08\xb1\xba\xfb\xb4%w\xa4D2`\xadA"\xe9\xfd\x8f\xe0v\x1f/_\xce\xc9\xff\x04t|~j\tCs\xcd$\x9bj}P\xe12\xee"\xa2\x02\xc9\x10\xc2 \x9a\x00\xd1\x93Z\x7fL"\xe7\xb9G\x8f(\x89\x84\xa3\xff\xf4\'_G\xf9\x11\xd3G\xeea1\xab\x92\xb2\x12\xcar\x85\x01\x8a\xb5\xfda\xf07g^9\x95\x18\x01\xc4\xbc\xb91\xba\xcf#\xf9\xd2Y\xa3I$\x93\x80\x9c\xaf\xc3@\xc2\x14\xf1\xbdi\xfb\x8f\xb8\xfc\xbc[\x1a\x9f\x1e2\xeaV\xba\xd8\t\x12_M\xf6\x1f@c\xc7\x10\xcb\x88c\xaf\xcdm\xcd\x83\x90\xa0\xff7\xd9\x9c[\x08\xe5!\xe3(<\xc7\x96A\x16;\x19,~\xce\xafM\xb5\rkk\x11\xaeId\x17*\x97\xa0;>ex\xb5\x0c\xa3\xc9,\x8c\x06\\U#\x83E\x8a[=\x9f#R\xcc\xa2\x17\xdb?\x16\xe2\xb4\x07(\x84\x86\xe1%\x8cmJ\xc6`@\xb9\xae\x0f\'\x13K\xc7\x83\x97\x9d\x8c\x87\xb1\x9f\xfa\x16Wr\x87Q\xe9R\x89,\xb3\x01\xd1\x0c\x97\x1c6\xbc\xe7\xac\xa9v\xc12\xac\xd3\xb6!/^\x02\x00\xbf\xaf\xac\xc3"\x81\x90\xc3\xa1_\xfb\x9d;NZE/n\tJ\x89\xfc\xefw\xfa\x08!\xa2\xed #\xbbz\xfe\xc5\x86}*\xe5Z\t\xe4\xa5\x16I\xf6\xd1\x16du\x18\x97f\xc2\x97\xb0\xa2\x1d\x0f\xc3\xc6\xf3\xa9\x0e\x1f\xa6\x8f\rF=U\x82\xed`\x98y\xae\xd8 \x1fV\xde\x9f\xd1M\xbc\xb7\x13\xaf\xf9ls\x08\xffX\xfd\xda/\x8c\nJF\xf2\xa87\xbd\x94\x8f\x13~\xf4\xf5\x16\xc9\xdf\xfb\xd7\x9b\xf1\xc0\xbf\n\x17\xdep\xd7\xff\xf1\x1f\x84\x93\x06\x89\x96\x14JS\xed\x02\xeb&)\x90;\xcd\x8b\xde\xfa\x97|\xfb\xd4\t\xc0\xb8Lc\xe0\xfa>\x05\x8eQ\x01%0\x03~k\xed\xd6\xb1b\x8e\x7fL\x04v"\xee\xa2\xde\x95g\x10Z\xbe\x03oj)\xb8\x9f\'\x12f\xcb\xeaC\xbf\xc9%\xf7c\x9d*\xd4\xd6\xe9\xff\x11Wgp\xfd,*X!\xe3\x1cF\x8dZ\xbfe\x98\xed\xec\x9d\xfd4\xa5\xee\x92S)\xbc\x8c\xc9\xbd"\x13\x0f\xa8A\xdeL\xd3\x82\x8c\xcc\xd1\xf9\xbbd\xe5\xc6\xcb\xcc\xfa$\x11\xdcb\xf99I\x0b\xbb\x8d{\xda\xee)G\xdc\xca]\xd2\x01HC\xf1$F\xff\x9f\xcc\xffKgX\xee\xae\xb7\xda\x9e\xa3\\\xab\x86O\x89-\xb8\x06\xb9\xd0\x86W\xcb\xd7me\xeb\xa0W\xd1J\xa7\xd8\xcc\x7f\xa6\x97$\xc0m\xc9sP\x00\xfa\xea\xa2\xf6\x8b\xb6\xdf\xa2\xe1\x1dbF\x890<d_\xa9\x12\xd5\xa9q\xca\x0f\xa9\xc1\xc6\xdb*R\x85E>\xd7]?\xd8Mf\x11U\x7f\xdc4\xc0RU\xfe\xd5\xfb\xed\xff\xa6w<f\x0f\xfc\xf0\xf0nK{m\xef\x13\xba\xe9\xf4;\xa8\xe3R\x17\xb3\x98]\xe2Y\xca\x9d\x9c\xd3\xea#\xbd\x88\xbdLu\xa4>\xc3\x9b\xe7\xfb\x87\xff\x05\xd1\xd4\xcba\x90\xe0\x88\x99\xbb\xfa\xff\xf9s\xceC\x99\x1b\xbf\xdd\x9d\x14@7\xa7\x948Y8\x87\x8b\x07\x0f\x90\xfe\xf2\x82#1*n\x0eu$\x8e\xe38\xb3J\x90\xd8\xa7\x8d\x15\x90\xc4b\xdb3\xf3\xda\xf1A\x8c\x88+\xe6^\xc8\xe2\x18\xb8Xcl\x92\xbc\xbe\x06\xf3\xf0>\x80\x80\x89\xc9\xb4!\xb5\x1f\x1dN\xecE\xcd\x8f\t\x14=G\x13\x04\xc3\x07\x82\xf7\x8c\xca\xf6\x15\xbf(\xaf\x87\xf1\xd4m\xbd\xe0\xfb\x17\xactFH\x87\x8aQEk\xd9\xbf\xd5\xf6z\xa6o\xff\x18\xd6%r\xd3y /\x07\xd8\xba\x81\'\xd3\xa1\x08\xd7\x1ao\x8a\xb1R\xf9^\x07\x0f\xff\xc9\xda\x8eqJo\xdczU\xed\x01\x93\xe0U\xcfCp\xcfP_G\xbb\x83\x93\xb8\xca(!\xc0\xe2=I\xe8\x01}9\x1c}\x15\x19\xd9\x82a#a`\xd5\xb8\x9f\x9f\x0b(\x98\x97i\x81?\xdd\xf9\xfd\xfa>.\xec\xae\x931\x89\xf7\xd3\xa4{J\xc8F\x85\xd5\xa9\xfa\xffw\xfbic{\x84\xa5\x8e\xe9B\xe0\xe3\x0c>\xa1\xe4!\x1d\xbd\x97\xc31\xc1Q\x1eW\x1e\xef\xc43Q\x8cD\xf7\x94\xe1\x90\xa3\xfb\xabP\xb6x\r\xf5\xf3V\x92\xad\x07\xc2\x10J\x9a\x83m\x9f\xbaP\x91XR\x9c"\xa9e\xfa!\x0e7\xdd>\xec\x0bp\x86w\x1e\x9a\xbay/\xdd\x1e\x1aR\xbb\x1f\x15w\x08\xe7\x84\xe6N\x94\xeek\x90\x84\x95\x96\x10\x15W\xcft\xad:\x0b\xa3\x860\xa4\xe8l&\x14\xd4:\x1d1&\xba\x82\x00F\xb6\x18\xc0\xde\x8cQ\xf6\xad\x0fZ}Uj\x14\xdcK\x99\x94\xa3=\n2\x0e\xb3x\x0e\xfe\xc7\x0e]\xf5\n~\x01\x89\x9c\xdf~\xa3_\x0b>\x08C\x16\x93(T1\xc0\xb2\xfa0\xad\t\x1d\xb7\xbe\xe4\xc58\xf2\xdd\xf5\x11g\xb0\x9c\xfb\xec\x10\xb0\xceO6y1]o\xadu\xfe"lOo\xc4\xa3\x1d.\x92n\x03z\x89\x96\xb3\x93\x0b\x07\xc8hC\xa0\xcfWb\x84>D\xaa\x01\xe1\x07\x8b\xe1\x7f\t\xa4\'\x0e\xb5\x9d1Y\xcc\xe1\xec\xb6\xf2\xc4\x08}),\xb2\x9c\x18x\xed\xeb0#\x81ucV\x7f\xe9\xd1QD\x82\xe6\xceT\xe3\x1e\xa6\xde9\x00\xd6\xf1C\xd1\xd5\x8c\xc3\xfe\x17}F\xf0\x9a\xde\xe9\xab\x07\x82\x80K\xf6"\x89\xd9S\xd2b\x1e\x7f\xd5\'\xe5\x13\xf8\xd1\xc5\x87V\x1a\xd4\xa4\x90aK\xb6V\xa0gZ\xcf\xf3\xf9\x9a\xf8\xc8\xef\xd5\xfb\xe8m:\n\x98\x16/\xa6\xa5\xaeE\x82F\xcb\x17\xc2B~\x11\x9e*\xb7\x15*\xfbj\xd9\xc6\xcc\xebYb\xfbn\xed\xcf \xe8\xf7\xed\xa5*Q\xda\xd1\xf1x\xb4]Q\xb1\xc93\xc2/\x0cH\xc5\\&{\xe1\xb7Y\x9e<\x04\x1c\xcd\xb8\x1c.x\x13Z\xb0\x19U\xf0\xc5*\xe5H\xd2\xe2\x18\xfbx\xb6\x9e\xa2\xd3C!\xdd\xa8\xac\xf5\xea)\x81?5\xd1\xaa\xaf\xd2\x8c8\x038\x11\xb2\xf2\xf95[\xf8T\x91\xa2\x80\x03\xc6\xb1\xf4;\x93h#i\xb9\x07\xab7\xf5\x98@t\xfdkM<\xa5\x193\xe2\xe8\xc3\xf40\xf2\xc0\xbbQb\xba\x12\x84T)\xc5\xa0\xef\xfa?\xd0\x7ff\xd8\xb3\xf4 {\xfco\x9dn2\xec,FRQ\x10\x1bwc"[\x82\tB\x045s\xbb\xefQO\x0b>\x00+~\x80j\rS\x00\xbe\xa4\xeeu:%\xed[\xe3g\x08\x0b,\x16@_\x9bgb1@H\xf6\x8c`\xf0\xf6\xefG\xccI\xdeK]\xd0\xbf\xde\xd3\x9a\xb2-\xafk\xcc\xe3WCqXW\x8c=\x15v\xd67 A\r*\xab\x9c\x96\x98\x15\x97=\xb8\x1a\x8d\x83\x92\xfa\x8bL\xa6\x8c\x1d)(\xa9\xf1q\xfdm\xdf x0\xfc\'\xc6\x93\x82\x12\x04Gm\xfe\xe5\xff\x9b\x05n\x81\xb5SI>\x15,\xf9=ujB\xb4\xde\x84$]ku\x9c\xcd\'\x19\xeb\xbe$0\xd7\x87\xdd#}\xf1pT\xe3><M\'\xd5\x88=`\x7f\xc1P\xb62\x04!G\xfa`\x8cr\xceu\xf5f\x8e\xbd\xcb\xf5\xdb,"\xa1\xc4\x04%\xae\xe0k\xe1\xcc\xb4n\x10YK9\xe5\x1c\xc8R\x02\x05z\xaf\xcb\xc3\xc7O\x15\xe1\x90-\xa04\xc2V@\xf3\x0fN\xfc\xc5]\xec#\xefs\xb3\x05\xeb^\xe0\xae\xbf\x122\'uY\x9cYO\x9b\x0f\x0b\x86\x1a\xfa\xde\x00\xe4\xe9W\xf1\xe1!\xca\xa8A\x99\xe2\xcd\x94\xfa\x1c\xb5\x81\x02n\x9ddu\xfe\xd7\xb6\xa8\xec\xdb\xf5\x0e$Qz4\xb9\xf64\xf8Ww\xda\x83\xc5\xbd4H\x0b\\,\n\xf5\xd2\xb3\xe4`\xcf\xdf85A\x86\xe7]\x95.\xbbT\'\xe5"T\xc1N\x19+\x1a\x82T\x90\x88\x11J=\xe6Y8\x94\xb1\xd8\x98\xf8J0\x81\xb4j\xd4\x12{\xeew\xbc\x8dq\xe1H\x82o\x1d\xf1\x93\x9e\xbf\xa3Y\xf9\xb8\xd7\xce\x1cH\xe4C\x0e.\xc3\xcd\x7f\xf8\xb4\xad\x0c\xf9\x8e\x1ax=U\x06\xb6Z\xac\xcb\xd4\xc2\x9b\xca\x0b\x88\x1aQn\x83\xd5 \xd1\xbb$\x02$|]\xa6i\xa0\x1a\x17\xf7\xc3\xb8V\xd94\xae\xad\x19l\xda\xd1\xdd\xb7-\x88\xcc\x1a\x02%\x07\x97\x07\xb8\x9a\xfe\x95\xc0\x859\n\x98\x96p\x11\xa5\xe75\x83\x89V\xa1h\xfeJ0\xab\x1eTm\x00H\x99\x9a\xb9h\xd3,\x83\x06\x88F\xd8m\xe7\x8c\xdb\xfa`\t\x18\xe1\xcb\x12&\x98zz\xab\x96/\xb8\xbd\xac\x02\xben\rg\xa6\xf6C\xb5\xf8\x1c1\xdf\xab\xf7\xb6\x95GIC\xeb0\x8e\xef\xfb\xba\x07|2\xd1\x8fc\x91\x97\x14\xe8,\x8c\x95\xc8\xebm>\x14\x9b:\xe4\x8f\x0f$\xb7\x88\xccU\x08q\xc7\x16\x9e\x92\x12\xfd(\xe7\x02$j\xc4Q\xc0\xd6\xdd\xcfU\x9f\xe1\x8c\x99*{\xdc\xa9(W\x12\x15\xcd\xa3CJT\x04\x85\xf0\xda\x7fF\xfc\x9d!%G"\x8f\xb3\x07\x9f\xc5\x11m\xbd\xf3\xc4\xc4I\xe6\xfaP\x04\xec\xc4\x14\xa3@\r\xf7\xe1\x9a\x9b\x10[\xb9\nH\xeb\xe0\xb0\xef\xd4\xdb\x9e\xc4\x8f\x91\xeb\x81\xf4\x16Sz\xd42Q[\xc6Ew\xf4\x83\xf3n\tmCg\xdd\x02\xa5\xbf\x9c=d\x0e\x1d\xba\xe9/\t\x9d\x9b\xb6R\x81o\xefz\x0eL\\\xcf\x8f\x8f\x16b\xcbsA\x89\xa6\x8e\x985\x92\x03t0\x94g\xdd\xae\xeaL\x06\xb4\x96|X\x9bs\xc55\xa4\\\x18\xbd\'4\xf7\x90\x86\x97\xbf\xaf\x9ap\x89\x87\xf7_\x7f,\t\xc7\xbd\xc7\xf0V\xffN\xee\xdb\xeeqT\xbc\x14\xf0#s\xfe;\xfcO\x93\xd0Y\xaf9d\xe6t\x17\\\xb4\x04\x00\xc1\x1b\xa3@BUf6\xc0\x16\x02\'T\x8d<\x81\xce\xde\x1c\xad\xac\x84\x0f\x17G)\xfa\xd4\r\xd5y<\xfb\xf1R\'vz\x13\xa4\xd6s\xc4S\xe0\x8co\x0f\xb5\x10\x91Y\x16",W\xd1\x18\xb7\x85\xa5\x91\xa6\x9b\xf8z\x12\x8c\xb7aE\x02^\xca\'\xb0A\xc5\xc3\n\x13\x12\x8b\xefE\xb8\x8a_\x1d\xfa\x953\xd0\x91l1\x02\xc6\xf8\xf2%y8\xf4\xda\x8a\x15\x11MDIV\xc3{\x0b\x14\x1f\xb7^5P\xe8+i\xcf\xf2\x05\xd6\xbfp^\'\xbeXDF|\xa4\x91HJ\xfe\x987\x8c\xbc\x1aUX\x87#!@\xe7\x0f\xfc\x96k\x8d\x9bI&\xa7><P\x82\x825\xf6[=84\x1b\xe0X\xcdS\x87LzV,n\xd9\xfd\xad\x8d\xc5)q9\n\x90\xf4\xc1\xf1\xb1\x17\x85E\xd4`\x98b\xe1{l\x842V.\x98\x97y\xb4\xba\xad\x8a\xcdJ\xaf\xd1v\xedQ\x88\x9b\x00W\xe6\xe8\x86\xfa\xa6\xdc\x08\xaaO~Q?\x1f~\x17\x18_\x151\xabFa\x9c\x92+\xc7\x8d\xdd8Z\xf9^\xd3\xe3Z\x14\xc9\xd8v*\x06\x90\xc3 \xc2\xc4\xf7\x1b\xf5\xacs\xc2\xb6F\xb5\xd7\x1d\xca\xaf\xe9\xadbB_\xb4\xf0\x95\xa3\xaf\x0fq\xc4\xb4\xbe\xb5\x99B\xa9\xb0j\xef\x1ch\xdb\x80Ka\xf3\xd7\xe8"%\x7f\x07\x9d\xf4\x02\xb5\x188B\xdca -"J\xe0\x8c(a2\xbd\xd2\xfc\x05i\x86\xf2\x85\x86\x05\xff<_#\x92 Y\xcd\xec::\x1e+\xb9O\xf8\x11^^ju\xe2\x00*\x9d\xebh\xb9\x8aQ\x8c\xe5\xb67@C\x0eI9s\xc7C\xeaN\x0cB\xbbs?\xf5\xf1h\xfa\xd4\xff+;\xfa\xff\x0f/K=v>\x1d\x1eF\xf4\xa02\x17\xee\xfdi\x05\x03\x01V\x0fp\x96x\xf8\xac\xd73-\xe3\x9cBh\x17-u\x0eS;\t>\x04j\x04\xcd\x9c\xfd\x15K\x0f\xb2eP!m \xb1x\\\x05A\xd4\x84\x00\xc8%\x12M#\xc7">4o\xd6K\xa6\xe7\xe8\xd3\x1d\x90\xf4<\xa2?\xb8U')
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