hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev66__cp38-cp38-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/websocket.py +9 -3
  32. hiddifypanel/panel/admin_2.py +33 -3
  33. hiddifypanel/panel/asset.py +17 -3
  34. hiddifypanel/panel/cf_api.py +35 -4
  35. hiddifypanel/panel/clean_ip.py +125 -3
  36. hiddifypanel/panel/cli.py +172 -3
  37. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  38. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  39. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  40. hiddifypanel/panel/commercial/__init__.py +50 -4
  41. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  42. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  43. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  44. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  45. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  46. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  47. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  48. hiddifypanel/panel/common.py +98 -3
  49. hiddifypanel/panel/custom_widgets.py +71 -4
  50. hiddifypanel/panel/database.py +18 -3
  51. hiddifypanel/panel/hiddify.py +655 -4
  52. hiddifypanel/panel/hiddify_api.py +70 -3
  53. hiddifypanel/panel/init_db.py +393 -3
  54. hiddifypanel/panel/usage.py +85 -3
  55. hiddifypanel/panel/user/__init__.py +25 -4
  56. hiddifypanel/panel/user/link_maker.py +416 -3
  57. hiddifypanel/panel/user/templates/clash_config.yml +1 -0
  58. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  59. hiddifypanel/panel/user/user.py +233 -3
  60. hiddifypanel/static/css/custom.css +6 -0
  61. hiddifypanel/templates/500.html +1 -1
  62. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  63. hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
  64. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  65. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
  66. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  67. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
  68. hiddifypanel/xray_api.py +109 -3
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
  71. hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
  72. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  73. pyarmor_runtime_000000/__init__.py +0 -4
  74. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  75. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
  76. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
  77. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,72 @@
1
- # 2023-04-08T16:23:20.025447
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\xfa\r\x00\x00\x12\t\x04\x00\x14\x17\x1c\x83`\xae\x0e\x08\xae,Y\xc7k\xe1M\xce\x00\x00\x00\x00\x00\x00\x00\x00\xcf-\xca\xff\xf9\x1fE\xb8_\x00\x1a(\xcdA$\x8d\xdb5c`l\x8f\xe7<A\xa6\xa8<dA\xe3\x96\xd8\x174\xc4wD\xde\t\x927\t\xb5\xb3\xb8\x01\xef~\x05\x98D@\xf3A\x17\x9c-\x16\xcd\xed\x96/\xb0\r\xad\x16\xa3:\xc5z\xda6\xeeg\xdeq\xdc\x99)\x1d\x8e\xc0\xeb\x18d\x95\xd9\x8f&\xfa\xe9\x8d\x0f\xd1\xafx\x8f\x9b\x14\x9a)\xb4\xed\xc0\x0b\x14\x8eeh\xd8\xa21d\xfb\xcf\x12\xee\xd9r\xa5\xb1\x0bT\x99\x1e%O\x19\xe2o^\xcf\xebQC~\x0e\xe9\xcfS;H\x93\xb5_\xed\xf4\x10^\xd5y\x83\xeb\xe9,\x8eJ\xa4\x9b\\6g\x9b\xdb\xfba\x1eS\'\xaes,\xe7\t\xd1ubO\xee\xa2\xf1:A\x16\xb8\x8b\xe7b-i\xe1a\xab&G\x14\xb9\x9f(\xdeL\x85o\x90\x0b\x88\xc1\x1b<\x9b\x8e\xe9\x05q"\xa1\n`\x01^\x9d\xeeH\xf9\r\xdc\xf4\x08\xf0\xc0\xe2qm\'\x897k\xaaP\x1e\xfcFd\xb7dt\xec\xeb\xe2\xc8Q(\xfd\xc8\xad\x8a\'\xc4|]nK\xda\n\xfbm\xdb%\x86\xfau\x1e\x94\x1f?Z\xba<\xa4i\xad\xb64\x00\x9c\x11\xbe\xed\xba\xe7\xc0\x06\xe3g\x9d\\r\xc24\xf2\xc2\x0b\xcf\xcf\x81F\x10`P\x81M\xee\xba\x94\xf2\x93D(\x1eA\x16\x8f\xdb|\xc0\xb1\xf4\xb1\x9b1\x19\xcfgf\x1a\xc3\x1e\x0e\x85[\xf9\xd0\xd1J\xbd\xbd\x86j-\x83\xc5\x8d\xf8\xe2\xe9,3\xd1\x86\xdf\xe9\x0c<7\t4\xb7<\xc1O{\x87R\xd0\xdd\xd1\xd0\xe7HnU\xe9c\xda\xf8n\x00i-\xb4\xb5\xa1\x10\x11>\xf0\x88\xea&\xba\xa9\xfd\xe7\xe5\x88\xf3\x1br\x95\xb9v\x81\xd0\x03\xb1\x8a8\x1f\xb5\xee\xbe\x1c\x18\x8e\xda\xc7q\x7fw93%\x0c\xa0\x86\x8fZ\xc7\x08\xecg\x1b\xadk\x18\x1e~S\x9flv\xde\xde\x08d\x9c\x913\xce\xbe\x95\xefl\xac\xbb\xfb\xff7EUp\x8d\x80(\xec\xf7\xae\xa3\xae\xda\xc8w@\xbdk\xfc\xe8\x0ew\xb5\xbc7\x9f(/\xeew4\\G\x99\x98\x0c\xba\xf22\xb2\xef\x95\x10\xab\x0cE\xd0\x07@9\xda\xe6\xa4Q\xa5\x81Efm\x08\x82\x9b\xc6\x84\xd34\x0b\x03\xcau%\xd7\xdfH\xb1Z\xc1\x95O^(8\x17\x1a\x96\x83\xa7k\x8f\xb8\x017qp\xea\x83#\xab\xd8\xf3\xb2\xeb\x1c\xee=\xebk\xd2\xee|^2~\xaf\xc4z\xc4\x94M\x94\xf8\xdd4L\x92\xf3\xd8}\x95\x84\xea\xcc\xdcB\rU\x0f\xcd\xe7\xc9Y!`\xf5\xec\xe0\xa8\xcdp\x9d\xe2\xf3m\x1e\x13\x8f\xb8-O\x1ff=\xadz\xb2\x1e \xe2Ke\xff\xee@\xaa\x8a\x14\xe2\x01\x92\xd8\xd5]\xbd\xbav\x88\x95K\xd6\xb5%\x0e\xc0#\x02\xb8g\xfa\xf7\xfa\xce\x0f\xe3\xd6\xc8R=\x15v\x16I\x9d\x84\xfb\xfcG\x19}\xfb\xb6o\x10R\x11G\x84\xd8`\xca\xd4&\x0bEd3\x84W\x9a\x96 \x8a\xf6\xbf\xf1KAN\xaeN\xa8W(~\xfa\xfd\x96\xb6\xdd\xc5\xd7\xf99\xc4\x92?\x81\xcb\x9fO\x9f\x9a\x84d@\xb8ieE\xe7\x1aS\xc4GMW\xac\x8a\x02\xc9o\n\x90\xb9\x0b[\x0f\xcc\xc4\x16.\xe19\xb2_\xcb\x05\xaf\x1cG\x7f\xed\xc5\n\x14\xbf\xff\xcc\xb8\x97\xb4\xd1\xdfu\x97\xd0\xb8br}\xcc\xec\xc5\x1b\xce\x82cZ\xb6\x88\x9b\xd4x\xe7\xedt\xfb\x90\x89"y\x0c\x1c\xbb\xa7jqT\xcc\xdc\x9d\xeeYv\xbc\x198\xeb\xd3\xfe\xc1\xff\x9a\xc7\x8e\x00\x83+bp,s\x13\xa29\x0c\xee{\x0f_\xf1\x80?m\x85\x95\xad\x029p\x05\x17\xd6#:A\xc6Wf\x0f\x18\'l\xcc%T\x80\x10,\xe35^\x81\x03|\xb0\xf7\xc6\x1b\xa4\xa7\xb2l\xdf=\xdd+\xa2!;\xd0\xe3\x16\xdd\xfb\xa5&\xb4\xe5\n\x84\xdc\xa7Y/\t\xc7\x1c\xc44\xa8\xe0\xad\x9c\xc8\x9a\x91(\x7f\xc9H\xed\x81\x04YX\xd0\xdf\xe7\x00\xd9\xbbu\xe5h\xcem!\xd3\x06l\x9a\xe2\xe9p#+\x96Y\xa5Me\x18\xc9\x95\xfb \x1b\xb7&\x829)\xca\x12e\x97D0\xfd7\xec\xd4\x03c\xd5\xf3RN\x88\xea\xb3\xe7\xae\x1d\xcd\xa4]Os\xe3\xf8E\xa8\xaf\xc4/fP8\xf1\x99\nQ\xe8\x04uk\n\x10\xde\x8f\x85\xcaO\x02\xce\x06\xba\x876\x89~^\x96\x98\xa1\xd6\x01\xc8n\x96\xed \xbc\xac7A!\xcd\xaf\xfa/\x082Y\x92d\xc8\x1d\xdd\x1b\xa3\x7fx\x8c\x80y\xd86\xe1m\xb7\x036wk\xfc\xc1dY\x12\xb1\xe1r\xad\xa3\xb0 \x043\xcc\xa85\xfaa\xbe\xdf\xdeYj\xab\xc1\xe4|\xb3\xc5\xcc\x83\xc2\x87z\xc6\xebZ\xa4g\xb2f\xb7O\x9c\xa1\xff\x005\xcc\xd5\x90\xa4r\xcc\xc2\xc1\xdb\xbaH\xc4R~d\'\xa3\xcb*HG_)1q\xb4\xe2\xd7\x98\xdb\xc19s,9\xc7/\tp\xbb9\xc8\xea\xa6O\x11\xe9\x16\x07\x88\xf9\xbd#U\x06\x93\xa1\x89\xc9\xeb\xe8Rmd\x1f\x1a\xed2\xef\xcbHU\x98\xd9\xe9\x9c\xe4\xf0\xb79 h\xeb\xc6\x81\xb6S4\x8f\xe0g$1\xd6ET\x01\x1ew\x9e\xb7\xf5o<\xd0m\x18\x04@d\xec\x15\x8fj\x02\xb9\x8fEa\x03a-\x12\x17\xcb\xdf\xff}\xe6\x89\xba\xbb\x01\xb2De\xe9M\x83N\x8e\xc2\xd1\x86\x06\xef\xa5\x15:\xc5ugb\x9e\x04\xbf\x1a%\xe6\xefh\x84\xbeLJ\xd3\xe7g\xd8\xfa\xa0V\x96\xcc|\xfdM\x98\xbbV}\xdb\xf5\xd0O[/\x7fZ/\x8a\xac\xc7!~\xe5T\xca*\xee\x02\xa0\xf8\xe9\'\xbe\x02\x01{\xc8@\xce\xc6\x8a\x1aY+B\x89\x1a\xff\xc5\x15\xde\xff\xa1\xa1\x01\x1f\xf5\xdb\xe7d\x03\x99\x9cj9\xaev\xa3\x19\x063H\xaf\xfekW\xa1RZ\xd7"\xf0\xf8\x81\xd7\xbc\xf1\x91o\x0e*\xd93\x99\x86\xf0\xa0\xd2\x13k\xadv7\x00>\xd1\x90\xc6\xb0V\xddD\x92\n\xcd\t\x8e\xc6\x98\x8d7:\xfd\xecl\x8b\xb8\x02J\x05G\x0e\xea\xe3\xa7\xb4~\x06\x8e\xef\xf4\xb2.\xce\xe8\x92\r.p6\x9a\xe6N\xb3\xfd\xa7\xe4>\x83\xef\xf9\xf7\x93\xbah\x00i\xf9\xa5m\xa4\xd5t\xc9\t/3\'\x1f\xbb\\1\xc2z\xd8\x80\x9c)\xf6e\x99\xafX\x1c\xc9\xbe_\x9f\xad\xf3|\xb0s\xdb\xa4*\xe3\xa0dOUe\xa2@\xd3\x01!.\xd9a\r\xe4\x1c\xbe\x83 \xf6\xaa\xce\x9dT\x14\xd8\x01(\xf4`h6\xc0\x81\x08M\xfe\xf7\xf5\x17\xaem\x07.\xddg\xd2\x86;g\xb3\xd9\xe4\xab\xaa\xb2\xa7\x82\x02\x91\x8d\x9e\x86&f&\x1e)I\xbf\xc7GA&\x9eO\xecG\xbeV^z\xe6\xe6\x9b\r\xd1\xediaz\x03\x02\x86\xbe\x0b\x8c\xfd\x8f\x95\xf2R\xc4\xdaZ\xaa\xf7\xbc\x18q\xb2\xe6y\xa7\x05g\x01\x97O\xf9\xfc\x8e\xcc\xa7qn\xe2d\x12\xdcX\xfd=\x11c\xf4V\\\xbe`W\x94\xa0n\xba\x169\x07\x83Z\x9fV)m\xc3\xc3\xfbh \xe9q\x93\x92w\x03D\xf0\xee\xc7\x0b\xf1\xc08zQ\xb9\xcf\x02\tEj%\xe9J\xf0\x16)J\xd8\x9e\x8d\x81\x93\x82\x8a\x81Ri\xe7\xbde9\xffb\x87\x17\xb6SqY\x05\'\x04H\xc5\x04\x88r\n&=d\xe59*\xdf\xa1dt\xd5\xfe\xe2\xc7\\\xfdH\xae\x9e?\x9f\xe1\xbb\x03\xe0\x89%\xa2\x06r\xbfM\xc3o\xa5\xf4\x05!\x08\x0egq\x1e\x97\xc6\xf1\xd3\xa3\xcb\x18\xcaH]%\xa8r\xc32J\x8b\xda\xd4\xa6\\\xc5\xf1n\x1d\xddd \x11\xfbg\x107S\xa9\xb5\x8f\n\xbeO\xdf\xbfj\\Uw\xb2\xdd\xd7\xd1\xce\xba\x96\x9bA\xafm\x83\x89\x18ly\xac\xa1\x9d\xcb\xf5\xc4\x10zn\r \xdf\xf5\xecO\x1e\x10\xfc`\xe1\x00\xd4B\xabU:9\xb6\x00\xd3\xca\xff\x9bq\xa1s\x9c\x0f\xa8+\xa6\x80~6\xf8t\xe4\xed\xf4\xaf\xab\xefC}\\0\xa6Tn\x19\xdd\xe4Q\xf2\x16\x89t\x92Y\xd9\x12r \xc8\x1b\x822\xf6>E\xfa\xc9\x80\x8eqAC\xa2\xd7\xcc\xda\x80Q\x0b\x1c&\t\xf5\xd1\xc3\xc9\xacw\xe4?\x896\xd7(\x85\xddN\xec\xf76\xf3\x8c\xc9h\xd4\x7f\x80J\xcd\xd1V\xe7h`\x9a\xf3u,\xe7\xb3;\xff*\x85g\xe2pU\xb5\xa9\x92Qp\xb3\x94;1\x08Ck\xc8R\x14\xf6]<\xb5~\xae\xe2\xb0+\xbb\x91\x19\x02l\xaaDt\xd1.\xdf\xe4^\xf1\x9e%\xdca3\xd1H\xd3\xbb\xab\xe9T\x18S\x93T\x9cf@\xa3\xfea\xbd\xf4\x1f\xef\x84\xee/Gg1\xc8\x0c\xd5?n\xead\xc4\xc0-G0\n2\xc7\xca/\x89\xbeg\xfcDHq\xba\xbe\xb3\xd6\x91\xc2\xd6\x89\x92\xe8IIM\xc5\xba\xf3/\xbc\xb0\xd5\x1b\xef\xae\x88\xd0\xa4`*P\xf6Jz\xfa\x15\x97q\xbf[g\x81\x10\xdaZ\xbf\xbd\x95\xf3\x9b\x02\xce\xf0#@\xb7\x06\xbe\xc3\xb6#\xca\x95\xf8\xef\xbdq\xde\x80i>\r\xb9(i\xb9\xdd\xef\x93\xcd.wF9\x04\xb0\x14&\x04\xaa\x0e\xf6Q\x83\xe7\xd6\xc4\xa0\xa5\x88\xdb\x82\xb0]\xcf\x84\x8b\xbb\xaa\x8b\x8fg\xad\xb5Mm\x15\x9d\xb3\xae,\xef\xa2\x89\xa6m]\x11\x9f\xf2\xf1\xeb#J\xceK5iv^\xdc\x04\x8f\xbf*7\xab\xd1P>3\xf8:\xb1\xfd\xd7&\xe9\xf5W^\x1a\xb50x\x1e2@\x17h\x0e\x97\xd7\xfe\x9e\xc2`\xc3\x85)\xf1\x1e1\x0f\x860\x98\x1a>\xcc\x9a\xe1\x8f~ \x0c\x15p\x02\xf0\xa3Rc\xc9\xd7f\xccNEr\xfa\x03\xd3p\xf4\xe3\x81.f\xba\xd6(&_\xd3\x06y\x81=O\xa5N\xbd?O;C\xda\\\xb3\x8a\xc6\xcf\xe3\xada\xb5\xf95I=Yb\x8a\x8f$\xb2\x90H\xea\x90s\xbb\xe1\x8e\xa7\xa6q\xf5\xd5\xadb)\xd8\x1fx\xd4\xca\xf8\x88&\xa0\x17Q\xab\x1b\xf6\x08)\xd0\xe9}\xb6c\xe2Ld\x10\x9d\x1dv$\x82\xc8\xac\xe5\xcd\n\xbeb^<\xfa\x16\xbc0\xe6\x18\xe3B\xd0\x9d\xdaJ\xefo\x11\xc4\x0c\xa4z\x92!\x98\xcbw\xb9\xac\xc6\x92\xc7\xcd\x95\xbdrA\xae\xd6\xa5\xd3X\xcd\xc3\\P#\t\x10\xe3\xeb\x8aF\xbc\n\n\xca*s\n\xd6\x81w\xe7\x97\xe3Y.\x7f\xdf\x17-\x86j\x9f\xecRx\x03\x1f!\xfb\x91\x102a^Q\xdb\xe9z"vc\x8c\x94\x04\xeb1\xacjA\xb8\xa8O\xdbkf\']v\xf6\xf8\xeb\xe2:O\xe8\xe6\xd0rw\nejc\xa9\xdc\xa43\x80\x18\xf1\x89>\xaf\xb5^\xad\xdb\xc37\n1\xbe\x08}\x857\xd4@\xfe\xebX1\xd88\x02\xbb\\\x95+\xc3\xcb\x01\x88&\x0b\x0cZ\xca\xd7\x1b\xf5Ti\xa2\xdc\x05\xd1st\xfdn\x1ec\x1f\x19\xe2uH&\xd6\x81\xc7\xcc\xd1_"\x9e}=A\x18\x9b\xfd\xa15\x1a\xac\xe4\\b\xbc\xebj\x8f\xd1\xaa?\xcfK^Y@\xcd\xcfR\x04N\xa48;\x17\xfa\xb5\xe6\xcd\xcb\xb8D\xb7r\xe0\x0c\x1e\nR\xf6\x12\xb9\xe2\xbb\xaa\xe46\xd0\x0f\xbb\x80z?\xaf\xe4r/\xe2T=\x85a\xbc\x16\x84\x97{\x19\xeb\x11)\xe7\xa4L;\xa1y!\xfe\xee\x83\xc9\xdf\xe8Jv\n]\xe1\xaeT}`\x97\xe6(\x0eei\xdf\xd0PdmMs\xb2\x1eo\xe6\xf0_TR\'1e\xbc\xd10\xa6\x0bA\x06\x91,y\xd4`\x7f}\xa3\xc0DhQE\xdekZ\x08\x07U\xab\xe6\xe0^\xc0\x9d)\xe7\x9b.\x04\x9b\xb9\x02rV\x8e\xa9\xe4\xb4\xae\x90~q-\xbd\xc7\x971T\'\xa1\x81\xbcc\xeb\x17E)\xe2\x9e!\xfeol\xb7\xe77\xc1\x8d)v\xcb\xe8\x15\xc2\x83m\x7f\xc1\xe0\xb7\xaeY6\x90\xac\n\xae\x97$\xa1s\xcbt\x86\xcdGO\xc5\x9c\x1b\xcd\xab\xd8t\xd4jB\xc3\xc6\x918>\x18[lj{A\x83\x88"\x96\x84M{\xb1\xba\x9c\xdbk\xdd\x14Ih}n?\xe7\x97\x05\x1f\x83\x81\xf3\x8a\xe7\x18\xe76\xefn?\x96\x970\x89\xc2\x11\xff@\xb0\n\x8cWN\x1dN\xa1\xcb\xc5Ke`\xe6}\xbewm\xe0\xcf\xa5W\x97\x80\xff\xc5S\xb34M\xfd\xd8#}8\x1f,\xf6cC:)Kj\x87>\x9adS\x99\x17\xcd\x00\x82l\xa8\x1c\x7f\xa6\x90\xce\xa2dJ\x18\xd2\x95\x98\x80\xd7\xf5\xd4\xd8M\x94\xe0\x16\x00\xcb\x86\xbb\xd3C\x8a_\x9c\xd7\xb3\xb8,O?j\x9f\x18\xbb \xa7\xf7\x12\xef\xb1O\x8c6\xcdw\xe7\x83\xbe\x86I\xb6\xa6F\x86@?\xee\xa1\x1dK\xf5[\x83\xdfG\t\xbb\xbaI\x97\xd4Z{O\x9d9E\xc6t\xcf\xcc$\xb2\x1c\x0c\xfak\xb2\xa4\xce\x06U\xdc\xd7\x8c\xc1\xd6n\x9b\xdau\xb1\xcf\x0cD\xce1A\xcb9\xb9\x1e\x87S\x9a\x1fB\x99\x14y\xf4S"1P\xf0\x1a\x84\xbcG\xdf\xde\xf7\x8a\xb6\xcd\xecv+M\xc8\xe9}`\xaf\x17\xb1\x92\x16]\x9f\xec\xb0\x00\xbaO/|\xaf\xa6\xce@\xea*\t\xdf\xd9l\x97\xa0f\xe2\xca\x01@5?n\xa9\xb5\xb1\xe6\xed\xc3,j\xbei\xcf\xca:4\xd3\xdbIF\x1e\xb4\x002S\xc3\xd4I\xf5\xa9$\x82H<SJ*\xbf3\x17$\x99\x1e\xaa\xb3y`6\x18b\xfc\\\x87\xc4\xb3\t\x04\xc3\xa0D\xd2\x9e$\xa5A\xc8\xde\x91t*\x0fGu!\xcd\xbd\xf0\x0fg?\x87\xc9h70\r{;\x03\xf5BWEr7\xe8\xb7}:tq#\x13\x9b\x8a\xb5\xbc\xc1\x96\xf6DU:\xe3\xf0^\xe2\xe8R\xf0\xc1J\x16\xcd9\x1d\x18\xf0\xc9\xb1\x84\xcc\x98\x12\xc8R\xdf\xb9v##}\xdc\x9c0\xbdBB4\x9c$\xd0\xe0d\xed\xa1\xdd\xda\x0c\xbb\x18G\x05\xa1ij\x1e\xc4\xb2\x060K(\x7f\xab\x13x\xad\x91\xfe\x89*fa9pWh+\xc2\x90\x92\xf5HP\x07n\\\x94!\xd5$._\xee\x0f`\'Db\x0eX\xacB\x1b\xd9g?\x12\xb6\x10%\xf4b\t\xa0\xbd\xb17\x87aY.8)\xb8\xa5*\xe2\x9d\xbb\xb1O\xa8n\x10~\xa7\xfe\xd4\xf5s\x17\xc5]O\xc4\x18\x03\xa2\xe0\\6C\x04\\\xb4\xa2\x87\x93\x9dI\x07l\x96\x7f\xbe\x87dR\xf5\xe8\xed\xe1x#\xbc,\'\xf5\x00\xa4\x94\xa7\x8d\xf8K\x9e{7j\xffK@\x83\xbf\xf9\xc228\xdcS\xdd.\xe7\x1c-\xc2.\xf2\xd6Pg\xf3\xf65\xfc.\x87\xd7j1\xea\xd8||\x04.\x83\x1e\xec]]\xc3R`0\x9c\x05\x1c\x99g\x91\x0b\x83\x17\x07\xf5\x00\xcf\xc1\x7f\x13\xf0\x08=\x99\xe0\xbc\x80\xba*\xebP\xab\\\xc4`7\xd4\xe6j\xdaL\xe0\x9b\x0e\'MR<SQ\xdb?\xac\xd2,\x7f\xa3l\xb8E\'@\xe1\x12}\xe9\xd2\x12\xe4Q\xe4\xb5\x10\x9d\x10\x15\xaf?\xbaor\x1c\x17A\xe3`_\xf1/\xacK\x93<\xc4z\\-\xc4>4\xf8\x85\xe0\xa4"q\xc6+\xc0\xb2Ur22\x8a\r<\xb1e\xe6\'\x0c')
1
+ from hiddifypanel.models import *
2
+ from hiddifypanel.panel import hiddify
3
+ import json
4
+ def sync_child_to_parent(parent_link=None):
5
+ parent_link= parent_link or hconfig(ConfigEnum.parent_panel)
6
+ if not parent_link:
7
+ raise ConnectionError("no parent link")
8
+
9
+ return send_to_panel(f"{parent_link}/api/v1/sync_child/",'PUT',hiddify.dump_db_to_dict())
10
+
11
+ def add_user_usage_to_parent(dbusers_bytes,parent_link=None):
12
+ uuid_bytes={u.uuid:b for u,b in dbusers_bytes.items()}
13
+ new_user_data=send_to_panel(parent_link+"api/v1/add_usage/",'PUT',uuid_bytes)
14
+
15
+
16
+ uuid_status={u.uuid:is_user_active(u) for u in dbusers_bytes}
17
+ hiddify.set_db_from_json(new_user_data,override_child=True,override_child_id=None,remove_users=True)
18
+ have_change=False
19
+ for u in User.query.all():
20
+ if u not in uuid_status:
21
+ have_change=True
22
+ break
23
+ if is_user_active(u)!=uuid_status[u]:
24
+ have_change=True
25
+ break
26
+ if have_change:
27
+ hiddify.quick_apply_users()
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+ def send_to_parent_panel(parent_link=None):
36
+ send_to_panel(parent_link)
37
+
38
+ def send_to_panel(url,method="GET",data=None):
39
+ try:
40
+ import requests
41
+ from requests.adapters import HTTPAdapter
42
+ from requests.packages.urllib3.util.retry import Retry
43
+
44
+ retry_strategy = Retry(
45
+ total=3,
46
+ backoff_factor=0.5,
47
+ status_forcelist=[429, 500, 502, 503, 504],
48
+ method_whitelist=["HEAD", "GET", "OPTIONS"]
49
+ )
50
+ adapter = HTTPAdapter(max_retries=retry_strategy)
51
+ http = requests.Session()
52
+ http.mount("https://", adapter)
53
+ http.mount("http://", adapter)
54
+
55
+ headers = {'Content-Type': 'application/json',
56
+ 'Unique-Id': hconfig(ConfigEnum.unique_id)}
57
+ print(headers)
58
+ if method=="GET":
59
+ response = http.get(url,params=data,headers=headers)
60
+ if method == "PUT":
61
+ response = http.put(url,json=data,headers=headers)
62
+
63
+ res= response.json()
64
+ print(res)
65
+ return res
66
+ except Exception as e:
67
+ print(e)
68
+ print(url)
69
+ print(headers)
70
+ print(json.dumps(data,indent=4,default=str))
4
71
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
72
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,395 @@
1
- # 2023-04-08T16:23:20.091346
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\xe0@\x00\x00\x12\t\x04\x00d\xab\x17(\xb8\xef\xab[X\x17Y\xa72\xd0j\x19\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x89\xd4t\xae\xf9\xed\xd8\xd1\xaf\xee\xed\xd4\xe0[\xe3mh\xc7\xb6x8~E\xa0\xf9\x9e\x9d\x1e\x11\xf2\xf0\x9ds(\xf6m\x0e*OB\xee\xf0\x05\x97!\xc7u\x9c\x81\xba\xe7*"o\xbc|\x88\xfb`\x8f\xa8\xea\n\xc9\\\x127e+.\xcb\x81+\x0f]\x9d\x90\xc5\xfc\xca\x1f\x9e\xc7\x9c\xb5\x9d\xda\x1a\xf7\xff\x9e\xaf\x82L&\t\x18\xc8<\x9f\xdb\xbc0\xcf8\xa4\xc6|\x97\n=VK\xff\xf2\xf5\x8a\x08\xec&\x1a\x9b\x05\x9a!{\xee0\x19\xf3L\xdc\xfd\xf5\x89\xb9\x00\\\x85Tr\x8e\x1a?\xa0\xc4\xd2\n`|\x15\xab\xe8\xea\xfe\x95\xe4\xad\xa8p%Zh\xdf\xb9JNs\xad\x02\xa9\xf7\x9aV\xd1b\x1d\xc5P\xc6\xbd\xb4\x90oxP\xab\xc0\xf4\xc7\xbd\xb3a\xbdG\xc4f0\xdb\xe7\xeb\x82\x19\x89\x92?i\xa9D_\xc1d\x98w\xec\xddG#%q\xbe\x1dD\x04\xc7S\xf1\xf0zs\x91\xe6;\x91H\xdd\xbb\xb8\x19\x81\xfc=4\x850\xae\xeb\x8e5Q2\xa1\x1b\xaa\xcf\x0e\xfe\xc3\xe2\x97]\x97N\xcbzu\xb6\x8a\x10\xd9OD\xd6U\r\xb2\\\x8d\xf0G\xb3\r\xce}<\xc0\xae\xb4\xf2\x95\x07\xaf\xc2hK\xb5\xfd\xc9!\xb6\xa2\xdb\xdf\x87\xb2\xc6\x87~\xfbe\xeb^:[(\xben\x9a\xa6\x07\x88\xbci\xf0\xf4\x0b\xc8\xbc\xba\xde\xda\xe9\xd2\x12\xd3g\xe9\x1e\xa3\xea\xd4\x7fzF\x81W\xbe\x11x\xabQ\xbbEq\x8c\xac\xb2+\xce\xef\xa2\x04)\x0e\xddm\xbfZ\x84\xd1\xa0\xa9\x1d\x94kC\xa2\x8c\x80\xbe\xa0\xbb\x91\x10~L\xc5\xabJW\x85\xe77_b4\x92`\xf2\xc5\x0b\xea#\xed.*\xc9w\x8f@\xc0\xff<L\x97\xffE\x91l\xd4\xa3\xf1\x94\xc3>\x04\xa8D:J\xce\xaaQ,<\x8f\xd2e\xe3\x9a\x0e\x87\xd6\xce\x91\x842\xb8\xd5\xb8\x7f\xf3\xe5\x02\x8b(\x9e[\x17\x8d\xbf\x8e?J99 \xd8[\xc3\x0bD8;\xd6\xef\xf4\xb8D\x12\x99M\xf36\xcb\x87r\xbb\xef\xf2\x1c\xacl\xc9\xed\x9dl\xe2\x8e\xa3\x0e\x9e\x08\x9b4\xa8Gt\xc6\x0c~Z\x0e\xa2\x06\xb4p"\xc4\x87\x17\xe8\xc3zk\xd3\x14\r\xa1\x0c$H\xad\xdd\xd1%T9\x1e\xd4u\xbe_\xbe\xf2\x16\x06\xfb\xbd\xfd\xa1\xb2)\xbd\xd9!hc\x8d\xf0\xbe\xfc\xaf\xf0\xc0\xcd\xd2\x82[\x89)\x8a\x06K\x07\x93\x80\x15\xbfX\xbe\xbep\xbem\xc7-\xa4\xb8\x03L\xcd\xd3\xa6\xb6\xe6\xc0q\xa0V.\x8dK\x99\xda\x16\xbdNNmn\rgl\xda\xe8\x93\xe7J\xa7J \x8eJ\x88\xa2(\x90\x10?\xe5\xc7\xe2\n\xe1\xdd4\x8fe\x0e\xde\x8d\x1c\x18w\xbd\xfdh\x9a\x99\x87w\x08\xb3I\xbf\x14\x1a\x97\xec*\xf7\xd9xAn<\xec\xde~+\xd8\\\x14\xb7\xab\xaa\xc6%`\xefE\xd3e\xdb\xd5!\xb6\x17(\xf1\xd5 gLX\xdd\xe5F\x8a\xbfx-\xba\xf4\x83\xe2M\xb7do\xea\xf2\xe1\x97H\xf9\xeb\xce@\xf5\x04\xbb8Q\xe1\xf8z\xf2\x87\x7fT\xa2\xddE\xc1")\xa2\xc5\xba\xc8\x83\xed\xb5\xdb$\x10R\x9f\xd2V\x14\xe4N\xf3\x1c\xf1q\x83\x84!\x82i\x92G(\x81\xdd\x85&Ws?\x8aCK\xf3\x05\x83\xf7\x11by\xf1\xb1wx=E\x04\xcc\x81\x02\xf7\x13\x9a=v\xb2\x9d3#\x11\xc7G\xe8\x12\xfc|\xb1oy\x0f\x13v\xfe\xc9\x07\x91\xfa\xc0\xbbC\xb9\x1f\x7f\xdb\xe2\xb7<t\xe2\'\xc9\xc3\x11\x03\xac{\xb0\x05\x1c\x05(\xb2\xd0\xb3Q\x03T\x95\x1a\x16\xc7l?\xd53:\xc0\xe4\x92\xcb\xc5\xb9\xe1e\xd3eG\xdc\r\xce\'\x17\xe9\xe5\xbe\x9f\xab0\x0ft\rCf\x9f\x8e\xdbo\x0f\xa7B\xa4\xf2\x8f\xef^Q\xbb\xb5qh\x16^n\xdchc\'\xa1k#6\xe3\xe6\x8a+\x18[;\xb4\x9d!)\x91g\xc9\xe5M\xe1\x04~\x91bv}\'\x82\xc4@\x91%\x99A\xff3\x873\xf5*\xc9Ibzvw\xdb\xe7\x11-\x10\xb8db\xf1s\x10\xf0\xdd3M\x9a\xdfT\x10\xf9\x86p\x08\x90O+\xbf\xfbM\xba1\xb4\x1c\xf7\xc8\xb4\xa3\x94\xb3m\xcc\xa9\xd9\x90 \x046\r\xac\x93\x85\x94\x9d,\xd7\x85\xacY1\x836\xb7-`\x1d\xfc\x82\xbc\xd2\x85Q\xac}O\xaf\xae[\x91\x8a\xa4\xa7\x18\x9d\x95\xb2\xf1\xa2\x0c\xeb}\x89\xcc$^\xa4\x94\x9cz\xc5:\xbf\xeeD\x9ab\xa8,\xbd\x19\xe6m\xebE\x15\xb6\xc8r`\xd7\xa2\x81\x124\x0f&\x83n\xfc\xd3\xfe\xa28\xb3n\xd5m\xdf\xf4g\x11f\xedEM\x8c\x96\xdd@g\xa20s\x1f\x88/TU\x057\xd9\xb9\xee\x88@\xdbD\x1e\xa4\x88\xcf\x0e\xde)\x18\'\xab\xf4\xed4,%>\x02g\xd9\r\x84\xaa\x88\x1en\xd3\xbf\x8ck-+\xee!C\xf3\xf0\x9d4\xd2S\xfb\x17\x96\xaa$\x01R\x90\x80)X\'(\xb4b\xf2\x13\xfd\x07F\n-;wu|\xcd+\xf1n\xeb\x89\xd8\x9c\xbe,a\x94l\x93\xb5\x1f[/\xfd\x1fh\n-TA\xf4\xb7\xf6#\xb3\\\xbc\xb7\xd1vs\x8e\xf4\xe5\xe5\xf79m\xbcnu\x98\n\x10s \xc3\xb1\xfe\xca\xe7)!\xd4Aq\xa1\x1aLvp\x1b#3/>\xb7\x17\xc9v\xc5\xb5x3\xba\x1f\xb8xs\xb6\xa2\x93\x83\xe4)\xfd\x1c\xa71P\x96\xd7\x86*1\xf0\xe1\xed\xef\xe0\x89\xda\x0e\xac\xf6\xbbZ\xcf\x08\xc2\xef\x82\x15\xbc\xb0\xa8\x0b\xe9\xa5]\xacw}\xa7\'F5\xb1\xb3\xf2ke\xb6\xf7A\x7f\x9d\xb3Pq\xeb^\x84\x96\x08P\xc2Sw\xcf\xd8\x1d\x90\xf3\x17\xd1\x1b\xe3\xb2\xe6\xcb\x18\xdf\x85Tq\x8b\xaa\xea5\x94\xc4\x03\xf2\xc9*\x0b.4\xae\x8e\x1c\x9a0\xbbis\x988\xc7\x86\x95}\x8b\x12\x05\xf6\xac\xa9\x14\xd3\xea\x9dr\xe3\xe5\x01O-1\x0c\x0cY\xe6\xbd\x7fT\xc3\xab\xf1\x919\x18\xd6P]\xfb\x04\x9c#\x98\x12\xf6\\6\x80\xdb\xfa\x14\xc2\xffx1\xc0d\x19\x0c\xc2\x8a\x13H\x00\xef\x10#.\xa0"<Y\xfe\xc5y"\xa9\x001BB\x18\x9f\xd6B\xf8\xbe\xb0\x7fJ\xa5\\\x0ev\x0c\xfbS4\x8f\xba\xc3\xe7\xeca\x86\xf1\xbd~C\xb4\x8d\xe9\xec\x9cS\x83\xaa\xcd\x93\xdf\xad\x15WS\xd6}\x7f\t\xe9xqX\xcd\xd7KP\x80MA\xe6\xa9\x02\xbf@M\xf5\xd5\xd2\xf3\xd90\xcfG\xc6\x016#\x96p\xe1\x16\xff\xd4L8\xa5E\xd3\xdb\xb8\x8b\x06\xc3\xc9\x92\xc6J\x96U\xcb\xf1\x8a\x9c\x8e\xd1b\x92\xa1\xcaG0\xf46L\xc0\x12\x94~f\xab\xe1\xe4n\xc8n\x00\x16z\xb3x\xaf\xb9\xebK\xdb\xa8S\xcd\xa1;h%\xdb\x98\xcc\xf56,o\x9c\x12\xba\x8b\x93\xd3\xefC.\xff\xd9\xab\xf6\xec>F\x96\xb3\x8c\xe7\xc7cKo\xff=\x8f\xc5\xc4\x9a.\xe2\xe3\xc4\xca\xee\xe5\x9d`G\x97\x86\xf6A\xe6\x00Y\xe8=\xc3-rW\n-?>\xfe\xe5\x04P\xb8\x1e\x9f\x03\x81\xe3\xeb\x9d\xcb\x08\x98\xc7v\xa5D\xf3\x18\x0c\xef \xe8\xae\xaes\x0b\xd0\xc1\'H\xd1>L\xb5\x90\x16\xbe\xc5\x98\xfc-\x80\xd4\x99\xad\xc4`\\\xe6\xb6\x07F\xc2/\xf0\xc1\xfc\xcb\x84%\xdd\x1e\x88 \x14\x00\x1f\xfce\xa2\xe3a\x11\xc9\xe5\xb4\xeb\xf9V\xb2\xad\x87E\xb8\xb1G\x91\x97\x89\xaf*\x0eb\x9a\x15\xa4\x0f\xa4\xe4\x9e\x00)\xbeW\xdc\x18X\x01\x10\x0c\x8ec\x01\xb9c\xaa\x90\xcd\xb9\x16\x0b#\xbe\x847\x91\xe5dA\x03\xb1\xbbf)-\x89\xd0\xc8\x7f\xc1j\xa5\xb6\x96\xd4\xb9\xfa\x96\xa8J\xee\x14\x0e|$\xbc\x0e\x04\xd2\x10y\xce\x1d\x91\xda\xb3\xfb2\\\x9aLF\x13\xf4m`\xb0\x02\xd6\xb0&\xce#z\xccvx\xe24\xb5\xef\x86o\xb1\xff\x1d\x9d\x066\xe2\xdc\xf3\xc5I\x8c\x92\xf4\\\xbf\x1b\x88}\xd9\x166k\xc2\xab?\xea\xaf\xc7\x95)\x08\xaa n\x1b\xab\xc6/\x17\xd4\xe5\'\x02\xa2,j;k<,t\xdd~\x05\x1a\xd3\xb9\xb6;"e]k\x19\xe9l\x823R\xcc6\x00&,\x95\'\x02\xcf.x7(4\xb1\xea\x8f\x9e/\xaf\x0c\nU\xbd\xe4\xf5\x13F\xd6\xd4l\xb7\x1e\xed\xb1x\xc8\x9c_\xb3\x99\xa4\xdd\x0f\r\xec\x01j"Y+WJC6\x92(\x16\xec-DL\xcf\xd3\xe1\xe5[@\xba\x9cv\x8e\xe3\xc8\xb3\x03\x19\xfb\x9b\xa3\x8dX=\x16\x96\xda\x03;\xb6\'\xd1Z\xc5\x87\xb6\x85\xbf\x0e\xdbY\xd2\x89\x84\xceR\x8c-t5\x9aA\xbb\x87\x96\x92I\x1dD\x97\xc4\x97\xff\xc4\xcb\xfcq\x86\xa3Oh\x9a=\xef\xd0\x06\xa08u\x8e\x99Q\x06\x7f\x0e\xf4m\x08\x15:\xd1^)\xb7\xff\xaa\x15\x86I\xbcy\x10"\x98\xde\x07\xe9<\xcd/ }Z+\x1e\x9d\xachIi\xfdpH\x8a\xceeWE\xd0\xd8_Ju-\x19\xcfy.\x14\xf2\x16\x10\xcc[\x18\xb7\xc0 ^\xafs\xcd;\x97\xcd\xca\xde\xff\xab\xdd\x99\x16\x06\xbbpr\xe6\xc8\xdajL\xf8\xe0_EO\x86\xf2,F\xd1k{\x14\x8f9\x96@\x96\x02\x122\xeb\xd0\xd6\x93)i\x99\xf0o\xbcO7\x8d;\xd1\t\x04\x03P\xa6\x97\xc5\xafD\xcdH\xd1/B\x91\x11\x82\xb7\xdf~\xde\x1e\'4A\xd6\x05\x13\x93%PJ\xd2\x1dR\xbf\xa6\x7f!\n\x1d\x0f\x88(\xc9#&f2\xdc\x98\rZ\xe0\xefaL\xdc\xfb\x97$\x89\xd0<\x84u<8)\xad?\x8d\x8d\x85\xc2\xfe\xe0u\x80\xfax\xdf\xcf"\xde\xa8H\x9e\xfb~\t\x9d$\xc3\xea\'\xd0\xdf\xf7:!\xb0I<:\xf3\xa9\x84\xcc\x98\xc9\xa6X\xc8["\x83E\x91G\xaf{\x9d\x0e\x8b\xca\xbb\xaa\'\x99\xf2|\xb0~\xbc!\r\xfa8.\xa0\x17\xf2\xca\xc9y*\xd8\xb4\xf7~\xe9\x98pJ\xbdV\x8dH,\xd5H\xadGy\xf5(\xbd\n\xb9\xdfg\x04u\xe8#\xbcj\xberI0\x95\x08\x12\xad\x02\x93\x16\x04\xad`=\x81\x1d\x90\x01\x7f\xb0*\xe9\x93z\\\xd3#\r\xd8\x87\xf6]\x0eN\xd6\x94\xb0\xb7&\xcfh\xb6\xa4]\x8b0.X\xe9\x94\x19\xe7\x08\x17\xb1\x0e\x19\xc4\xee\x88\xe6\x98\x8f\xd7\x19&\xa6R\xc7IU\xe8\xbf\xc4\xa4n\x1c\x1e\xe8\xd4\xfd\xe0\xbe\xd8=\xfa\x80\xff*\xb0T\xac/T\xf8{\xa2\xa1@3\xa2O\xf93k\x11w^\xe6iR\xab\x0c\xa8\xcb\x04\xddS{\x98F\x9b\xb1u\x01{}f\x02\xf4eS\x1c@}\x96h\xf3\xc76\x9c\xa9\xaa\xf7?\x8c\xff]\xbf\x0eDR\xd7\xd6\xe8\x07\x14\xbee\x9cL\x9c\xcep\xa4g\r\x8e\xb5[@\x9bj\xf3\x1c\x14\xae\xa4{\x8c\xb4#\xfc\x8b\xfa\xa4\xafY\xd0\n\x0bP\x99\xcc\xff \xb8\xda\xec_\xe3M\xb4K\xaa\x10\xd2\xc3 \xb1\xd4\xaa\xb6\r\xa4u\x9fv\x88\x9d\x0c\x83\x82\xebkwi\x87$3\xbe|\x86{r\x87M\xe9f=\xd9S\xd8\xb4\xb5\x8aV\xaa\x9a\xc7\xcc\xc4\xa8\x9a\xa5\xb7\x99\x8a63o\xde_\x03r\x9b\xad#\xff",I\xf6\xa4\xd8\xbf_u\x83%\xec\xd3h\x0b\xf6\xd3\x85-\x06*%\xc5M\xe9\xb1\x9d\x13\x1d\x11n\x1a\x17\x97\xa8\x8e\x9bq\xe7tF&\x9dN\xe6\xc7m\x91 5\xc9\xc4\x1e\x99\xcc\x83\x1dx\xd9e\x8e\xe6\x99\xdarj\xe7\xd9\x17\x12\xf3\n\x0e\x91n|\tC\x9b\x01\x062\x0c\xad\x8fa\x08\xbd\x9f\xb5\x83\x13\xc4O5\x86\tn\xa2\n\x80xmx\xb1\x95(\xfe\xf51\xfa\xe9\t\xb2\xf2mk4\x98\x98\xb9\x01L\xd5\x94\x04\xef\xed\xd0\x1eWM\x9f\xd8\xfa\x0cgb\xdf\x07q\xb7\x03\x0c\xcc\xbd\xb1\xf7\xeb\xaa\xe3\xa1xc\xa2\xa6\xdc\xb4`\xbf!\x0e\x14\xbd\xe3Xd\xf4\x90\xf5:\xa4e\'\x1e \x93T\xf2\x82\x15\x91?\xa9W\x9c#c\xfe\x04\xf6\x0fv&\xff\x0b\x9b\x1d\xca\xebK1f\xd9\xb7c"\x8c\x93\xcf\x10\xce\xbc\x14\x01\xbcn\xd5-D\xbc\x98\xb0\x7f\x9dQGp\xfc\xf6p{\x7f\xd8\x0b\x9ed\xc7\xcb\xda-(\x99\xda\x05\xe0\'\x97t\xb1\xc7\xb4fn\xec\x83\xf6\x06+\x8b\xd0\x87Z\xa1\x8e\x81\xbe\xf0\xb9\x13\x1b\xbe\tl\x93\x16N\xf5\x18\x04V\x17r\x1d\xe2R[\xbf\x82\xd4\x86\x18\xe2\xfdFg\xb0\xcc\xee\r>\xd82\xaa\xd7kc%\xafh\xc3]\x94\xf91Q\xb4\xd1\xd1+\x0f(\x1a\xee\xb1\xc2\x1b\xae\xb2\x82\x03a,\x1fv~\xdfl\x91f\x02\x0b\x0e\xf5\xe2\xdf\xb8dx\xc3\xe7=x\xc5Bq?_\xaf\xf2\x92\xc0\xe7\xfeL$&\x11\x11\xb7\xb8G\xa6{Y\x95lm\xa5|n\x10\xdd\xf2\x97\xb6nL\xe5\x08\xd80\xa7\xce\xf2\x12\xbar\xa3.\xe8v.`\xb2~v\xdc\xc0@\xdc\xe1\t\x9aZ\xa94\x18\x83\x81/\xdfsq\xf7w\x86\x98@Ew^\xf2("~\x82\x03qR\xfb\x8aO\xf2\xbe\x8d\x8a(\xee\xc7\t\x0c\x90\x05\x19\xdb\xaf\x0eZ\x13\x9d\xbc\x10\xa4\xd4\x9ew\xcc\xff\xb4\xec\x80\xb5\x19\x1b\xa3\xbc5\x06\xf4\xf8\xcdt\xeb\x0c\x9eb\xad\x99\x9az\xcf5\xa3\xe6l\x03\n\x89\xa68\xf0\xb7\x15\xb1\xcd\xa7\xa0G\x9f}\x13\x81;w\x04s\xf1\xc79D\xc4\x93\xd8PW\xef\\\xd6\nN\x97\x8dg\xba\x91j\xf8\xd2\x7fiRO|\x11\x0b\x8b\xd6\xb2\xdb\x9d\xa2\xef\xee\xffRZfr\x11\x03x\xf1\xe8\x81\xf4\x0fE\xf9\xd4\xbfPI\x1dM\xc7\xa4\x16\xe6\x01\xb9\xc8\x9b\xfd\xa6\x90\xbc\xc71q\xe6\x90\x9fYH\xe7Q\xe7]\xbc\x93\xbe\x80\x02\x9f\xa1\xfd\x88\xd5\xbd\xfaga\xa8\xf7\t\xd7W\\\x80h\x04{\xa9\x02\xea\x9c\xbc\xd7w\xda\xb3\xbf\xb4\xca\xc0@\xb3/\xa6^\xf5kjK\xb9\xb9\x1e\x1e\x1d\xc4\x19\x11\xeb\xd6\xd8^\x8d\xa8MQ\xb3\xdd9\x00\x9e\xb2,<\xb2!\x03\xfa\x05\x1d\xc5\xc3\x15\xb4\xf0X\xc7\xa8\xb0\x9f\xfb\xed\xf6}\x1e\xde\xb9\xfcZ\xb0\xcb[F\xca\x82\xc8G\xb2\xb2\xcbTA@\x1f\x98:\xbf%6\x02\x94\xa0\x8eq\xed(\x8de\xde\xe6\rC\xfb\xdd\x11\xa1/I\xed\x8fH\xfd\\\x9e\x84)9\xc5\xd9x\xddx\xb3\xdfG\x93\xb5\x97%\xf4\x85\x97\x1aV\x8d&&\xe8\xf2\xc19\xa2C\xd5\xcc\xc1}\x85\x13r\x1aj\xa2\x1d]\x15.\x9f5J\t\xb2\x0e\xc9\x95\n>RE\xfc\xc4dL\x12\xc1d7\x91J\xbd\xf2V\xce\xd8\x8a\xe1o\xa4\x03\x1d1]\xb1<\x95\xb5`\xee\xfe\xecs3D\'Y\xf2\xde\xf0G\x12\xb9\xb9\x80\xc6\x8d1\xb4\x9d2\xfa\x96\x9f\xf8\x9f117*\xad\x1apGQEL\xff\xe1y\xed\x16\x90\x9c\xa8\xbbK\xda\x82\xa9\xb2+\x1d\xa2\xf40\x1a\xfc\x16\x11\x8c\\hEX\xcc\x15\xdeO\xd0\x92\x1d\xf0U5ff\xda\xf8\xe0g_\x00\x1c\xd5\xba \xe6\xa8\x1e={\x10\x92\x85\xe7\xd1\xbc\xb9YQ\xa2\x92\xcd\xad\xb5\x83\x9c\x1c\x92\xc5\xbb\x1doa)>\xb5\xb7\x0e\xe9\x96\x1bi\x97g*k\x98\x1fv\xc7r\xc7\x9b\x94\xf6\x9c\xa2AL\xa1\xc7\xa6\x8c\xe2E}T>\x9d\xbd]t\xc4\xc9t\x9b\x86\xe2\x0bUN\x7fJ\x91c$\xbb\xc4A\xeb\xfb\'\x1f8\xceC\nlD\x9f\xe4lT\xfe\x85K\x19\xb6\xa7|\xa7\x18\xb9K\xed\xe0\x0f\xae\x1fh\xa5\xaa\xa7\xd9\x04;\xe6\xd9\x16*\xb7R\xa4\xfc\xcf\x0ck\n\xbb#\xd2\x8b\x18\t\x9aq0\x18\xd5$\xc6\x0b\x91Wvl\x8e~\xb5\xb1\xcc\xeet\xb0\xb6\x9dic\x14\xda.\x7f\x97;nL\xc4\xd6\xe6j\xf6\xb2\xe1?\xc1\x92Q\xd0\xf6\xdb\x8f\x0f\x7f~2\x9c\xcb\x15\x9df\xd3\xb3\x85IYc\x01\x88\xf1\xd7\x7f"\xb7\xb9?\xf3\xa29\xc3\xa9`\x80k\tc\xa1\xaau\xd7\x80\xf1{\x0c\xef\x1c/\x17\xd2_\x8clR\xc3Nt\xf9}\xa3#\xad\xd4\xa2\x17qJ\'\x0c\xcd=\xb1\xd4fg\x7f\x8d\x87%5M*[\x05\xd5\xc2\xf7\xae)=&h\xfe\xf8\x17\xb8\xbf\x86\xdeNz\x98\xaf(\xb2\xe0U\xcb\t\xef\xa5):\x90\xach\xc2d\x83\xc5\x009\x97%\xc5\x95\xeas\xc9>t\xcf\x95\xac\xac\xa1X\xaa\xcf\xa5eLB\x9d\x9a\x9c\xac_V\x829\xd7\x88J\x90\x8fb\xeb\x155\xba\xbb\x18\xb2Om\xd9\x13\x1e\xa3 1B\rI\x0cs\xe8&\xd7\xec\xc8|O\xc2\xf8\xcd\x89\xd9\x9c|\xc2vI\xc7\x16\xf3*\xc4pr\xfaP\xa3\x93\x12\x8a\x1d\xa9\x8b>v\x16o\xf6\xb8K\x074L\xa4\xc3V\xc26\xdd\xc6\xd7P\xdd\x08\xe0\xec\xbf-\xdb>\x98\t\x16\xb6\x1a\xa4\xc3\x84\xda\x99T!\xcc\xaa~\xb3B\x1cQ8f\'\t{\x80_\xc2\x86\x8a$\xeb\x15\xf9)\\\xf3\xa5\xbcT\x1a\x8c/\x02\xc8>S\xda\xfdH\xa1-\x99\xe5Y\xca\xd0MX\xdd\x7f\xa0\x07\x83k\xc52\xa3#$\x87\xe9\xc2\xc3\x07_!\x80p(\x8f\xcd\x02\xae\xc4n\xc09\x01\x93\xc6\x8a\xe2\x9e)\x19\xea\xdb\xba\xe6\x90\xeb\x039g\x9aS\x891F\xa3\xb1ox\x06\xc8\x98\x99\xaa\xe31\x9d2\xfe\xa6\x05ny\x85\x815\x1dO\xfdX\xa7\xfc\xc5\xa1\xe88\xd8\xb4\x81\xe6\xec\xd7\xf6\\\xb4B\xebj??~e5\xcc\xd9\x81M\xc2\xf2!\xe4dK\x00\xd3\xa0\xaf\x85A\xd9\xb8$8h\x83\xf5\xd2I3\x9b\xef\xe2W\xdd\x85\x92?)\xd6\xf2\xd9\r\xb2\xc3\xcf9\x8dyh5\xb6\xff{i\xb6>\x8a\x03(Xp\xb9\x85\xa4\x94=\x8a\xe0\x8f3\xa3W#\xf0\xe4g\xf3W\xb6\x1e\x91\xa4\xd8DY\xf3#\xfep\x10\xd1\xeb9\x0f\xf7\xb9*\xe1[\xe0g^\xb77pc:nq\xf5\x99\x1cE`7\xe8\x02\xa8\xf7:X\xda\x96\x9c&\xd4\xd5\x1c\xd7\x80:\x16\xe4\x17|\xba%q\\g\xe3\x91m8d\xa9@\xa6\x05.o\xcf\t\xdf-}\x1f\x8f;\x87\xfd\xee\x01jwl\x80\xc2\xf4\xf3\xf0\xb3C\xd0\xa9\x17\xed\x17\x8e[\x94\xb6\x8b2>j\x1eYdx\x18Z\x98m\x91\xa1(\xf7\xe0ct\x86\x1b\xefz\xe6\xaag\xc6\xf0\x11\xf4\xa9\x1b|P\xb12~\x04\xddc\xd9~\xa6R\xf6\x046\x10d\xa1-\xfcB\x97>\xc58\x17\xd4\xc0\x8a\xc2\xe1-2.*n\xfe\xbdU\xad\x08\xb9\x8d\x0f\xe2Nx\x82\x07\x15\xec\x0ez\xa74\xb1\xd1S\x7f\xf1\xc1\x13@\x19\xb8\x9f\x85\x1f\xe6\xf4\x93),9E$\xeaR\xbb*\xdaa\x11\xf0\x04\xca\x1dx]Fj\xd4\x0f@\x88\x91\xe8\xa8\x03\x1d\xcf\xaa\xa6\x82}V\x81\xb2\xaf\xec\xbc\x98\x06\x92\x0c\x8d]\xc7\x1bs$Kx\x9e\xcc&#\xfe\xbf\xd6\xdc\x05\x16\xdbu\xffB\xa5\xccCz\xfdF=d5!\xd4\xe7\x0e.\xb8]\xd4\x9d\xc3\xde\x92\x020\x81{\x99\n\xffa_U\x99\x1a\x84\x0b\xe4\xc3x\x17[\x16\x12z\xaa_Y\x7f)\xd8\x0b%W\xcd\xeel\xee\xba\'V/y\xcc\x8b\x1ayX0\xb0Pm\xb5\xbe\x01e\xe4,g\xb2\xeb\x83j\x03^\xd3*\xe0\x86\xc4B\x01\xcd\xbc\xed\xd0W\xc8y\xe9!!\x9f\x0buA~\x04\x99{\x10w\xaa\xa1\xf8\x92\xd6\xd3\x9bOo\x19:s]\x95\x94\xa1\xea\xebI(\x16\xf2\xed\xe7\xed\xe1 \x86E\xf7\x1e\xd7W\xe7\xad\xaf\xa5\xc8aBlA\x91\xe1\xec\x81\xea8\xd6\x8f\xb3\x0c\xd6\xdd\xf8\x82\xc710#SR.\x14\xda\x9a\x84*h\xf5f\xa8v\x15.\xa2_Ym\x15>>\x1c3\xf9\xf7\xa2\x96v$\xa1\xb9\xa4\xacJ\xe6\x17k\xf0\xc9\x9c\xa5\x03\xef\x12D\x94\xb8;\xaf\x0c\x86\x9a\x90G\x8au\xc1w3\xfd\x08\xfa\xf6\r\xe1\xfd\xdd\x9b\xf9Dt|\x1d\x1bO\xe5ak\x17\xd2\xb0\xec\x94\xbe\xbc-\xf0\xc2\xf5\x06\xe1\xf9)\x95\x19\x9e\x97\xaf\xfe\x02\xeb+\x7f\x8a\x90\x96\xb8\x1e#HMo!\xe5\xc5dC\xbf5Sd\xcd\x96\xf2^\x194_\x8doW\x1d%\x02\x143F\x03"\x92\x19K\xed\x85V.a\x16\xbb%\xcd_Wn\xf7h5Yp\xc1Q\xeaVy1\xb6\x95\x0ffV\x1cw}g\x91#\xb7\x08\xa1=\x8d\x12\xff\xae\x8cS\x8ac.t\xf0\x07\xa1\xca\xce)\xa7\xa5\xa9;=\xe9\xb1\xaa\xac\tzJ^^\xa1\x80\x88D\xb0\xa54A\xcb\xdf\xe8\x18\xfc\xd5\xd9W\xea\x18\x0b\xb4K\xdbk\x16*A9Ra\ra\x9a\xbc\x1d\xac\xe7\xe6H;\xa64\xbf\x9e\xf8^\xa09\x85\x9de_\xfbt\xf9t2\xea\xd3\xa9Jw\xd2\x97q\x82\x132\x92h\x00\xf5B)\xb1\xa1\xf3\xb2\xff\x85\xe5*p\x18\x1e\xc3cnl<\xbf<1\xb2D\x8e\x92\x9f\xa1=T"\xef\xc0\x8b:\x1b\xaf\xfb\xf5\xa0\x83\x10\x0cx\x1c\xbfT<\x1a\xe6\xfa\x00\xe7\x0eZ\xd9\x9b\xe6\xdc\xa9\xc2o\x9c\x88\xbc"\x015\xcdU\x131dB\x83\xc8,\xd0\xfd\x823>\x8a=D`fh\x06%\x89\x0eV\xb6\xe5\x1d)\x1d~Y\xc4\xc6\xd3^ \xdfA@\xf6\x1b \xc9\xec\xc3\'}\x18\xef\xc6,"\xba\x11\xf6\x96R\xbd\xcb\xa0|\x9dD\x1c\x7f\xbc\x99X\\\x05\xda\x91\xd7\xb0\x1a\xff\xde\xee/QFX\xbd\x9c\x9b\xe0\xa1]\xe2\xbe=\xcb\xad\xcf\x93\xfb\x02Ve\xf5\x8bq{\xadH!\xe5\x83}\xcb\xd2\x9c\xf2/w\xa1zx\x95=D\x08\xadK\nB\x11#c\x07v\x88\x10t\xd6\xac\xa4y\xf2\x85\xff4\xe07\x7f\x11vcN\xfbc;\xa5\x12X\x82T\x8f\xe4,\xa5\x04F/\xeb\\x\x1e\x8e\xb2\xd4\xb3A\xb0\xf2\xec#\xdf0\x90\xd9\xf3\x14t.\xa110\xb0PA_o\x1a\'"z\x99A\x93o\xb1\xab2{\x8c\xda\xd6;\xaaLV\xd2eD\xe3\xb0_i7\xe9\x13\x83\x95\xd3I\xf1m\xabw\x1b\xb6\xc4\x10\xc7\x02\xfd\xa7-r\xcb\x84\xbb\x8b\xb7\xb2\x87#e\x98\xdf\x0c5\xdc\x14\x91hn\xd1\xcf8\x91!\x01#\xf6\xa5\n^\x80\xb1\x04\xfb\x9e\x84\xb5-\xc2\xc15\xe7\xbeg\xa3\xae\x9f\xd7,\x94%\x85v\x1e\x9d\xc2\xda!N\x18*\x8f\xa4\x1f\x99#G\x157?\x8c\xdaD\xce\x9c>\x18\x8a\x1c\x1d\x84!+\xe3\r\x96\xcdcBd~\xfd8g\xb7\xab\xcf\xaa\x96\x0ej\xc9g\x82u\x0f\xdc\x94\x0en\x94\x99\xa0\x8e\x06\xc2\xd7\x96H&O\xb9\x8b\xf1\x0b\x1b\xdc=E\xd94\x86g\xaf\xea\x12M\x8eH\x12\xaa\xfb\xb7\xc2\xfacJ\xc1B w\xab\xfb\xf3-\x0eqHrT\xf4\xab\xcbb\x1d\x12\x87\xc1-\xab\xc9\xac\x08\x99\xda\x96Y\x1747\xeb\xf2K\x11\xeeG\xc6\xff\xb5\xdf\xb3\x1a\xd6\xdb\xd7\xf9eZ\x8d\xb9\xb6\x84\xce(\x9ef5\x9fX{\xcb\x8e>/\x02\xbcWEI\xe0\x13\x9et\x8e\xa7\xcf\xb05\x891\x9b8\xa2\n/\xc1q\xf7\xee7\x84\xa3i4\xeb\x99o\xd1\xdam\xc0\xf0\xa7\x14P\x87\xb35F\xda\xce\xbd\x075\x88H\x01j\xa2\xdc\x14{\x03\x96\x07\xf5\xbb\xb0\xb5\r\xc0gF_\xb2\xcf\xc2\xa2$\xde*\xdddK\x8aR\xda\x7f\xc9H\x8f\x96\xe3\x08\xb24\xe9\x85\x0c\x03\x16\x8d\x0f2\x07\r\'\x0cy\x9cM\xde\x15\x99\x961\xdac\xb8\x87\xae]\xcf\xce\xda\xef\xb3`\xf4\xd7W\xec\x8dDhJ\xa1~\xd9;\x17\xa9\xbb\x12{\x86$\xbfW\xb6\t\x95J3\x93m-t\x19\xecH\xfb\xeei\xcd\x9c\xd1I+\xae\xa1\x82\xdf\xa5$\\>\x8aE\xde\x93\xd5d\xcc"p\xf7\x1a\xadm\xd3\xd5f\xf0fk\xf0\x8c#\x94_)u\xe7g\xb6Oi}\xcc5\x0f\xdc>!\xbaQ\xe4\x03\x96o#\xe6\x8d\xa6\x1b\xcbV\xaaJ\'\x10\xb9YjM\xac\xf6\xdf\x14CoQ\xccA\xe4?\xc6\x9f\xdbV\x94\xb3\xbc\x8b%<]\x9d\xcf\xb5\x16\xa3\x9aS\x95\x19\xf0\x9c\xdfDf7^\x97\x1b\x89\x95\xf1=m\xdeL{\x15\x80\xa7\xbeR\x1f\x0f{\xbd\x19o\tu\xac\x0b\x88\xe3\x868\xdf\x8aL\x84\xefv\x8c\xd0\xcfE\xf6A\x8d\xff\xf0\xe0c\xeb\xcb\xaf\xc7Y\x83\xd1\x1c\xe5\xebr3\xd7\xb1pkO7r\x9f\xdd\x84\x7f}\xa3|b\x10$\x88\x17\xb1|i\xbb\xd8\xd6I\xaf\xdc\x81O\x05nI\xa9m_\x8e\x06,\xc9\xef\xcc\xff4%\xc2\x9b\xb7+\x89f2y\x94\x08\xbf\x11\xe0\xc3\xae\x86\xae\xe7\xd7z\xe7\x05\xf3\x1b\xb5\x9fr2\xeeo\x96B\xe8_\xb9\xca\xfb\xb0-\xfb\xd9E\x03\xaf\xaf\xc9\xb8\xad\xf8\xb8\xbb@\xbcF\xc5\xa9\x88\xd7\xfa\xce\x06\x13\xb3\xcdt\x02\xe8\xa2\x04UZ#\xd0\xb6\xec\x07></\xb9\xd0\xb9\xda\xce\x07kD!5J\x949Ef\xb7\x86\xc0\xfb\xe0\xda\x0e\xb1Of\x14\x00k\x7feq_ue \xf3\xf3\xee\xbd\\\x90\xb9\xadk\x1c\xdawi[\x1a\xba\x13\xd3;L\xc7\xd6d\xbe\x1c\x1b{\x8c\xdf\xd5w\xd0A\x010i6z\xd2\x9d%\x8f\x07\x14\x9c\x04^"\xf2\x90\xc3*\x9c\xd3^\xce\xb9\'\xcd\xb6\x15\x8f5\x12\xefv\x94\xb9\x83\xa3\xd2U\x8b\xa0\xc5@\xf2\xe1XU\x12\xf76\x08\xd5j\x14\xbaA\xf0\xb6\x8d\xbd7\x92n@\xbd\x13\x14\xd9\xec|\x02e\x93=\x84n\x19\xad\x8b<c-\x80\x12*\xfb\xdc\x1c\x08\xb1\x82\x9fJ\xb9\xe1\x8alg1\x19\x16 \xcdD\xdf\x9e\xe9&\xe4\xa0\xb5Nb\x96A\xde\xf9B\xf7\x97\xc8\x7f\xb7\x1eB\x86\xea\xe5\xa86\xcb\x89\xb3\x19\xcd\x1eEy\xd1\x1c|\xd2\xb5\xa8,\xf4\xbdb_\xea\x83\x10\xa9T\xe5C&\x8e\xe3\xbas=0\xa2\xe1a\xb0\x93\x8c\xfb\xec}Z\xc5\xfc\xc2\xb3\x18ni\r\xc0\xd7\xf7\xa9\x0f8\xb7\x12\xfd\x98\x01\xcb\xf65\xd2@\x04\x04\xa1>\x1aX\x0c%\xa5V\x98\xda\xab\x91\xf0B=\xcf4S\xfd2\xa1\xb8\xa3{\x9f\xcbz\xabl=\xa2\xe5\xae\xa9\xe2)\xb8\x91\x80\xd2\xb4j\xad\xc04\xea0\x08=\x87)\x9aC\xaa\x9dr\x01Q\x88\xaax\xad\xafi\x9a\xbbM\x92E-s5/\xb4\xc3\xea\xc4%\x07\xc1\xc9\x99\xbe\xa7\x11\xaa\xfeh;\xfe\xf9\x8a\xfc\x9d\xd4fE\x81\'\x12moo\xca\xbd\x95\xd5\xf7\xd3\x9d|\xfe6\xa2\xd0\x89\x87\x93\x82\xdb\x1e\xb0\xf9\x96\x1f0\x9c\xf4\x90n\x1f\x1a\xfb\xb5U+Y\xac\xc6bx\x8a/\x92\xadU\xdd]\x173\x08Q\xba\x9c\xf7\xa1\x8a\x97\xfc\xdd\xcb\xb1E\x1c\xb6\xcfE\xcf\xed}}\x11}\x9f\xd2\xd1\xa8m\xd0\xb5\x01W\n\xdb\xbd\x85\xec\xf0\x15\x81\xcf\xb1\xfa8u\xd5\x0fH\xfe\xa5\x1e\x9fDK\xc1\x10\xd6\xf0r\xaf\xfe~\xe15\t7p\xac\xe8.u\x93\xbc\x9b\x95G\x96`.\xafK@\x1a\xde\xcc\x0e\xf9\\V\x96\xc7\xad\xec\x87\x89\xfeebt\xff\x8e\x054E\x90\x16\xe15\xd8\xe8\xc25\xc4[\x814?"\xe9\r~\x005\xe3\x9d\x85\xe8\xb2\x9d\x97uvUO\xb9O ?\x94c\xb47=\xa4\xcc\x8c\xae\x06\xb3\x86\xc9\xed\xd9Ln\x07\xda\x9a5\xea\xca\xc8\xc3\x9b>\x94i\xbf\xdd\x82\xaa|$L\x8c\x06<\xff\xd3?\\\xef\x01\xf9\xe8\xcbp\xa2\xd8\xd9x\xa4\xbe\xd1$\x180\xe5\xf9Q\x04/y\xdbR*k\x05K\x1b\x13\xbc\x00\x91\xbc\xe4\x83B\xf2Bp#\xe2\xb6\xed\x88\xd1\xceb\x1cc\xa5q\xc2\x13\xac\xda\xb5\xc8\xfe\xdfy\x87\x87\x1a\xb8\x94e\xb2R\xb0\xab6\x18\xfaC\x02ly\x82\xbe9\xf4s4L\nT\x14\x14\x8do\xfcu\x04*\x8f\xd1\xa7\xc5@\xeall\xc9\x802\xf3\xcc\x90\xa3f\xbe\x18\x8d\xea0,n\x9c\xbe\xa5E\x05s\xd9B[\x9ap\xc1F\xf8\x901Q\x7fk{\x13A\x8f\xd4X\xddU+k\xd9Q\x99\xd7S\xbdF\xba\xfc\x8d\xe7\xe1k\xe9)\xc9\xbd\x9bu\x90"^\x85\x10NY\x1e\xc3\xbf\xa1\xcc\x15\xc5\x8c2\xc9\xd4\x9d-\x9fs0=\x98\xdd\x14\xec\x1e\x02\xe7`-\xe1V\x13\x0e\x18P:I,\xfc\x9c\xd7\xc2*\x0c\xfe\xdb\t&4\x12\xf1\xb0\x1c\x9dux\xd8\xe1p\xc5\x95\xa7\xf4q\x07\x0b\xd0\xc6\xcd\x8a\xc0\xac\xcc\xab\x0c\x06\x1c\'\x07\xccww\xb2N\xe6;\xa8\xd8\xb5v<ZE\x00\xeez7\xc1\xe0G^/\xba\x16\x99T\xd3\xa0\xa7\x9ay$\x98\x98\xc3\xee\xc9"m\xbeMr\xde\xadk0\xa9\xf9\xbf\x7f%\xfc\x1eV|\xd7\xaa\xec\xb1\x80\xec)r\x9d(J\x15\x97\x1c\x92N\x96\xb13:\xaf\x17Fi\x13\xf9r{\xf8\xb2\x87^\xfe\xa3\x14\x19\xd6\xf7\xdd\xfa\xd4Y!\x9f\x05\xae*u\xefM\xf5\x8c\xffxWF\xd1\x96\xd8\t\x00\x08}\t\x99v{<mPl%k$\xdeu\xd6E\xb6\xad\x07W\xf8\x12\x90\xa5\xb3\x84\xeeG]\xe1\xa1UR\xb9\x14\x90j\xba\xa0\x8b3\xaf\x14sV_Od\xcd\x1d"l\xec]\xf7\xed\xb5z=\xa0p\xdb;\xbbM\xa8[\xba\xb2\x82\xaf\x11\x82CN\xdeF\xbe\x0b5\x93+4\n\x16\x12\xa0\xf8\xdbc\xf0\xfeZ$\xb5\xeeP=\x85\xef\xaeTM\xeb\x92\xb7\xc9\x8fm\x9d\x1f\x9a\x94"uc\xeb\xe4\xa5{n\xd7\x07\x83\xacbm>\x80`\xb4\xa9g\x9f\xf26\xba\xcc\x19\x8eJL"QU\xf2\xc9x\xc4\xa4h\xd4\xc4\xc3\x10]\xb4,|\x9c+\xe4\xe9\xfd\x90\x93\x1b\x115\xe2\x93\r\xdbX(pk@\\x\xa8\x17\x19M\xa9\xcf\xe2Y\x8b\x83\xf3I\xb1\xe6\xdcoFk\xf6\x0e\x9d\xf6w\x0e\x96V\xbcu\xd6\xfaU!\x86\xbb>\xf6\x0e\x9a\x91\x99\xc1Y"\xfd\x7f\x8aAJ\xa9\x97\x01u\xd74\x95A\xaa5m\xc1\xf6\x83\xef\x13\xffp\x86\xd4\x9ca7?\xddX\xf3v\x83E\x14l\x9c\xda\x15\x17\xa6\x0e\xf1l[\x91\xf6\xf7\xe2%\xfa\xaa+\x01\x8a\xf3\x92\x11\xba6\xb3\x8aj\x11\x88\xecak|\xf7\x16M\x8d\xf1\xbd\xa2\xb4\xe17\xf9MYM\xc5\xe4Ol\x81_\x81\x0f\x98 q\xff9\xd9\r\xc6\x14X8\x13\xaf\xd3\xf7X\xa2\x17\x88\x9ag\x87\xfe\xfc\xa4S\xff\xc6\xfb\x9dK:\x9e\x92\x8cd{\xa0\x03\x03\x1f\xaa\xe9\xd5<J\xe1\xa7H\x86X\xbb\xc4\x89\x02\xf7+\xf2\xa4\xddx\xce\xdfe\xb4\xd4\xc1\xe4\xe4O\x05\xf2m\xa9rV\xfc\xf6>\\j\x94\x84\xc8\x07>9wy0\xd2R\x9fG-e\xd8e\xdb\x8c\xbd\xf0gP\xe2\xe95\x8bn\xde\xb5\x8e\xb2\xd9\x84p`6\xec\xbd\xeb\xf9\xda\xd0;+\xf0MvP\x8b\xa4\x13\nP\x07\xe2\\~]{\x9a\xb9\xe3a\x84\xae\xd0\x18]\xc9e\xa1\x8e\xb0\xf3\xba\x8a?FD\x1d\xac\xec)&N[\x19\xfc)\x06\xa9\x1e7?\x94\xd3\xdfR\x0c\xa4\xe4\xf2\x19\xf0]\xfa\x82\x93lFB\xb9\xf6\xae\x86\xa8\x94=y\x83,\x01\x8f\x81 `Rd0v\xa05\x12\xd5@\xbd\x1e\x1b\x9f\xd9\xb0\xce\xb1jI\x9d\xb3\x94\xc5\xe701\xa1|\x17\xbf\xd9\xac0\xc7\x17W\xd2\xaa\xea\xba\xbd\x8b\x81X#E\xf3#\xc3\x9b\x9d\xdb\xc9\xd1\x8b\xa4\xcbIN\xc0\x13c\x9d\\*\xd4*w\xe34o\x84\x83D\xf9\x13\xbb\xf0\xca\xf6\xbd\x16\xa9\xb1K#[y\xef\xda\x8dD\xe8\xaf\xd1Z\xb3\xc3%\xd1|J\x1a0\x0c\xf8\xc0\xe7s\xd2\x1biy6\n3\x86O\xda\xad]\x1f\xeeWL\xc6\xde\x8fi\'\x93\x026\x9f\xa1E\x17\xd3r<\\\x1a\xea<Nr7\x8e\x1as\xe0Mh\tmI\xf7S\xe1v,\xaa8$+\xe7\x804\xe9~\x10\xc5\xa0\x9c\xf4\x9f(@\xb9\'`|Fj\xa9\x04v\xf0\x04.\xd1\xf9\xee\x90\xfd|Pa&\xd6\xa95\xb3\x189S$W TX\xc9S\xdb\x8a\x87\xf3\x9eE\xdc4\x85\xa5\xa4y<\xb4\x80Q[7\xe4;\xbc {9A\xcf\x81\x01\x8f\xd6\xbc\xc9\x17F\xee\xbb\x93\x02\xd0VgT\xe0<Z\xc1\xacd\xc4\x04\x0e\x0c\xb0\xc0\xff\xbeS\xcc?S\xdcH\x13\x04\xfeCp\xef\x8ct\xde\xa6\xba\xdf\x01&#\xd1z=\x92\xce\x8aD\xab\xa4"\xd5\x8cO`\xd4\x16Z\xa5}\xd3l\xce\x89$w`\x04\xec\x00\x05\x11\x8d\xbcP4l\xbbc\xe5y\xee\xbc\xf3\x86\x84q\xcb\xfe\x93\xfc\xa3m\xd8q\x9f{-!\x0c\xff\xe0\x8eSN\x81\x9bT\x18\xd2S_\x07S\x0f`-\xaf\xd9\xf3\xd7EI\x9b5Ku\xa1&\xf4\x1d\x84j\x82u\x83H3m;\'\xf0\x963\x1d\xedj\xb8\x1e\xf6\x9c\xbc\x98\xa3\xe0m-\xef\x1e\xf2Sj\xb6\x13s\x85!st3\x83|\xfd\x18\x14^\x86\x8d9\x8c\x1d\xab\xec`\xd4v\xe2Z\xa9\xacY\x81\x19\x1e\xc9z\xd8\x8c\xe8\xc4\xd1{\x917\xe3^\xb6m>\xc6\xc3mp~\xdc\xfc\x08\x86\x10,\xac\xff\x8e\x0f\xf2\xf5\xcbw.\xc7\xc1\xa9\x97\x11\xa3\xd9\xf4\xd1\x8dL+\xed.n\xdd\x15\xfd&\x8d\xa7\xa6\xd3\x86J\x89\x1f\xcf\x08\x9d\xc7\xf36\x1f\xee\xca,\x98l/\xc2\xdf\x98\xc3\xf7U\xae\xe3!a\x97\xe7\x9f\x85&B\x80C\x9e_\xa7*Zw\xa5\xba\x0f\xcc}L!r\t\x1b1\xff\xde\x93t=\x12\xdbel\xb4\xc9\x90|\x15Z\x8b\xb8-\xbb\x90htw\xfclS\xdd\\\x8a\xcd\xd2\xbe3\xcd\xb4\xc1\xec\x02\x8f\xd7\xffF\x90u\xe8x\xf7\x04\xb9t<rd\xea&t\x1fd]W\x93\xe6_\xa9#\xc2p\xd0\x10rW*\xff\xbf\xb2\xc1LM\xd9\xf1v\x05\x8a\x9e\x0c4\xfa\xa4\xd9\x92\x1d,\xd9\x05>E\xe2\x8c\xef\x80W\xc6\n2v^\x85\xb4\x8e\xf3-\x1d\x1bh}\xdc\x98BN\xfd\x92/\x1dl1\xb2\xd5\x97F}lD\x80\x8bk5\x8e\xb2\x92\x93\xad\xbf\xc0\xfc\x8b\x1e|m}-\x9c\x83\x1bz\xce\x88\x08\xf3!B\x80\x9e\xf1\x90G\x89\xcd\x10\xd4\r~\xafs#\x160\x1b\x14\xb2X\x8e \xf6^\xd3\xe9\xadK#\x05y~\x11\xc7\xa6\xc7\x95G!\xac\xf6m.\xc1\x99W\xfc\x0b\xb3&\x98d\x17\xcdK\xecPMu\xdd\xd0\xcf\x99\xaa_^\x1a3EDJ\x020\xecH\xc3\x0c\x0f\x90\xea\xc3<\xc7\xca\xbf\x07\xc5V\xf0\x0f\x06g\xcaP\xeb\x19\xadH\xe6@\xf1F@\xd5\x19\xc7u\x0f\x08vp"J\xbeGuJ\x9b\xb2c\xa8*I\x85\x08\xc2*\xe8\x7f\x94F\xcd|WzA\x99\ny\xa2?(\x8e]O\x0c\xbe\xbe\x9c\xd4\xe2\xca\xf1\x08\x89c\xfe7Q\x90zEMm\xae\xc9\xec\x89\xa0-\xa5\xa0/\x12\x88K\x0e\x85\xf3@\xda\x07#W\x87\x94\xb9U\x7f\xc6^\x9d\xba\xc7~\xbe*\x0fOr\xe4\xc3.\xc8y\xd6\x08\x90\x0f\xd9!\xaa\xe5\x02x\xb5\xe5\x96W\x961\x10\xcf\x8d\xb8\xc3\xe7\x85\xa6\xd0\xd5\xf1\xe9\xfeZ\xccw\xd5\x0bX\x18\x9a\xaf:\x00nf\x88\x16\x16\x94\xaar\x8f\xb9\x86\xd9\xe2}j@\x04w9\x89~\xdf\x94\x91\xcf\x8b\x93\xd43\x96\xff\xcc\xaf\x00~4\x0e!\xe5\xc9\x10\x9b\x98\xd6\x1a\x98\xed\\D\x9d\xb3\xc0L\x0bK\x8a0T\x8c\x91k<\x7fW@\xa6K\x00\xea)\xebI\x9d\xda\x85\xe0\xaa\xa9\xb6\xee\x15#\x1eE\x1a\x8a=\xe9%. 9\x85nxtg\xad\xcf\x8b\xe9\x7f\xd4\x89\xd6\xd9\x17P\x10\x9c\x16\xccq\xc7\xd9\xe2\xb7F\x13\xf72\xcb\x07\xb7\r9\xca\xa9\xf64&\xc0\xea:\xe2\xb5\xbe^\xa4F}t\xca\xf9\x15+(\x0c\x84\xc3\xb8\xef\x7f\xd6T\xd1\xf3~\x1b?\x8b\x9d\xc5\xf3\x88 \xca\xca\xa8\t-\xf1\x0e-\xf9\x9c\xe7\xcf\x076\xc3\x92\x17\xb6.\xe3\x0c\xd3\x13FL\x91b\xe0\xd28\tN\x81\x93\xb4VA\x83\xef\xa8?\xabl\xd7\x8d|\xfe\xfaM\xcf\xf7)\xd7>\x1f\xa2\xcbk\x0bB+\x1e\xcb\xb4j\x9c\x11G\xf81Q\xb6\x92\x1f\xc0\xf8\x1bK\x14\xba\x94]\x9a\xe7\r\x13\x143d\x8c\xe3\xc6;\x11|\xd7\xf0\xf3\xc6=\x90,\n\xac\xad\xbf\xc2R(\xd4\xfb\x9a)D%b.\x02~@\x16$B\xe78\xfc&d\xb1r\xbe)\xf6\x12z7\xdc[\x1a\xa0\xaf\x99?\x12\x07\xd2\xc0t\xf8\xcb[\\\xf5\x01v\x1b\xf5K\xc7\x9fXn\xe9\t|8\xb6\x95t\x1a\x1d\xe2b\'8B\xf3ga\xb1~\x81\x08(\x85\x03\xb8\xe5#d\x0b\xf0B\xaeb\x8c_\x9f<\x82\xe2\xf6\x88\xe8\xbb\xb7D66\x1f\xbe\xa3\x88\xa0\xd76\x1b\xfc\xe5\xb9cQ4\xb1X\x92\xf9\xf2\x98\x0f\xfcy\xc6\xd8+H\x99Z\xedi\xfe\t\x1ao\x97[\xa6\xe0\xd0aP\r\xe5E\xd2\xc2N\xba\xdb\n\xb9f\x08\xfc\xd4\x8d!\xbe\xdaQV\x08\xee4\xf1\x94A"g\x0e\x86\x07\xd9\xd3\x19\xd3\xba\x89V\x96[\x97\xed$\xb7\xa0\xe3\xc0\x18\x12\xfa[y\xc2\xd6\x0f`\x94\xc5\x12c\x95f\x8cS?\xb14(4Z\xd3\x817>:\x8b3\xf8\xbd\x194\xd4H\xf5b\xb3\xfc\xbeY\xf8\xe6\x82\xa9\x12\xb5\x81\xca;!\xf2\xabV\tC\t*\xdd\xda\x8c\xd4O\xefz]\xa2)Y?`\xe3\xa7\xbe9\xc6H\xfe\xb29\xab\xc9\x90\xbd\x95?\x92!\xabL`\xb1_\xeaBu\xd9\xfeI\x1dm|\x07\xda\xfd[XN\xc7~J\xd3\x9a\x19\xed\xd6K~\x93\xf5\x91\x11\xdf\x9bi\xc1\xe9\xb3\x83I\x120""7\xa8K\xb8\xb7\xfd\xd4\xc6V\xe6\xc5t\xc5\xda\x87p\xa1\xd3\xa0\xfe\xf4\x0e\xb0\x0e\xb2\xad\x0b2\xde\xeb\x88\xcf\xe8z\xcb1\x99w!3\x8a\xbcK\x1a\xe3mh\x7f\xef\xeb\x7f\x0b\x89\x1b{\xdfs\x1b\xbb\xaa"\xa4\xf6\x1et\xfb\x83\xb3;\xc6\xa7p\xb8b\x00\xecZ`*\x9f\xdd_pu&\x04-\xf3^O\x96I;\xfa2\x05\xcfV3!\xf3\xc1\x80\xe3-\x9b\x90\xbc\xb5\xc8m\x12e:\xf8`T\x14lp\xcd\xaf\xdc_d\x8e\xcb\x00\xb3\xa7\xe0\x80g&7\xbf\xe6\x80.(\x88\xe2\xb9N\xa3]-\x947\x03\x066\x07t\x9d\x10\x8dt\x116\xf6\x86\xb9\xe3\'\x99\x87-8\x93\x93\xee$\xf0\xf0\x8f\xe3y(\x1b\xdeE\x8d\xea\xa8\x04\xf7N<\x1bLYy\x06\x9c\xb8\x98"\xc5\xe2\xda<\xbfe3\x05\x15\xfa{\x04T\xc9\xd0\x93\xd5\x94S\xd0\xd1\xd4d\xefb:\x98\xbcR\xc1r\x8f\xca`\x19\x19t\x06\xfb\xd2\xbb\xbe\x8b\'6%\x1c>\x02\x1b\x04&[\xf7\xccP\x10\xc9\x7f\x8c\xe6\xfbr\x14\xc7\x03\xbd\xc7\xd9\xb1\xd7\xfdO\xa8\xa9IO\xfbZ\xaa\xee\xaa_\xb2$\xb97\xf5k\xda\xe0\xe8s g\xc6_\x1a\x1d\xcd\x8aKBl\x8e\xc4\x9d\xd0\xc5\x0e<\xe4\x00Z\xb6\xa7\xb1\x04\x16\xe96\x05\x05\xba\xf8\r-\x07m\xa7\xb9\x08n\x9fYBz\xd8j\xdf\x13\x0b<v\xc5\xa2+\xac\x07w\xa1)\xc1\x9d|\xd5C\n\xf8U!\x1a\xfb\xb0^k\xa1\xeelHt\xde\xa7-\xd2\xd4\x9dd\xd7\x18D,\x1a4^\t\xfa\xe2\xdc\xf2\xe0[h\x89\x14/\x87\xec\x8d\x9a\xa5a\xd8%J\xbbc\xa9\xbb\x85\xd2\x0e\xfd\xa1\x7f\xc9\x11\x85\xf2#+yh\xfe\x92\xa6\xb3\xaa\x107\xb7\xe2/\xb04["A\xdbC\x8f\x965\xb7\xe5\xb0"UUZ\xb0\xa7\xdc6\xe2\xf2\x1e\x1c\xcb\xefW\xe5\xd7\xfa\xef8\xc2\xe3\x87yd\xa0\xc1\x0b\xc4x\xa1\xbc\x82\x9f\xf0\xd0o<m\xde;\xd9\xd3\x84O\xc6k\xd7\xe9\x87/\xfa\x06\x03\x15f\xc8]\xee\xea\xb9\xdaz\x10\xaf\xe5\xc5\xc8\xdbRM\xd5:\xc2G\xbe\xec8o5\xc8\xf1\x94\xda\xa0\xa7\xe0\x95\xf7*\xcc\xdf\x1aLd\xfa\xd7%\x86\xbb\xaf\xa5\x8d"\x13I\xd9\xcb8\x8b\xb5\x9e\x13\xe6\xdeJ\xbf\x11\x01x9\x98 \xf04\xb9h\x02\x89T\x1b\x07\xf7\x99\xd1W\x1a\x0b5\xcd7\xf5\xb1\x19X\xe6\x9f\xbeSc\xee\xd9\x87\xb0w=u\xa5H\xf9\xd1\x9e\x01x\x0c0\xa2\x12S\x16\x1a#\x06\x13\xc6\xfa\xd2_X\x9ek\x1b?\x9d\r\x00\x9dk4WC\xc7Jhx\x9f\x91\x82\xda%/_Z\x18!\xa0\xb9)\xb9\x17 \xa5ur\x1as ANaR\x86\xb7vg\x8d\xd3\x1dN\xed\x1e\xce\xd0\xdb\xec\x9ap\x86\xd6\xf4\x06\xd0Qt\xc2\x99\xf9\xef<\xbfz}\r\x81#\xd3\xb87\x19\xfa\xe8\x90\xc6?\x8f\xf5\xb2\xfb\x96i\x1d#\xdd\xafe~\xc90$\xd7\xf6\x05\xd8\xe9\xc9\xa5\x8f\xd9\xc9B\x12y,\\\xfb\xc0\xb0(k?I\xd0\x8a,\xdc\xcbN\x18\xe2>\xafx\xd7%\xbf\xder\x89P\x1du)w\xecf\xed]\x11\xbfS\xbe\xfb\x9f\x15\x95\x17\xf9"\xfb\xd0\xbeZ\x068\xd9q\x94\x90\x93?@x\xe5UC\x03\xa5WK\xfa\x99O\x90=\xeenXIS\xc9\xaf\x13\xc6]9l7\xba\x17]\x00Hs\xa6zK\xd4\xd8\xbd\xc8?wM\xc0\x08\'\xf6\xa4\xc0Z\x17\xac\\&z\xd8CB\xdf\x92\xa4\xfayS\x90\xd2\x1aS\x1c\xe3\x8266u\x19o\x8c\xd1I\n\xc6\xfb\x17&\xf4\x1fD\xbe\x0c,\xc6\x80\xaf$\x03\xed\x08\xc0LhO\xf0\x0bi\xe8\x81E\xce\x16U\xc5\x9d\xffK\x92\xf2\xf7<\xec7.5\xd6\xd1;K\xf1S\xcc\xce\xcbc\xc9\xbd\xa6\x95g\x88\x91\xe0\x8e\xa4>g\xb7\x00\xfd:\xa9\xdc\x88\xc9=\xe7\x12\xb1\xab\xe2f4\xc0\x92\r\xac\xc6G\x08\x0b\x9d,-A?\x96\x81/\xa21\xd4QZ4\xf8+\x14\xe9\xb7\x1a;\xc8~\xef)L\xd9-\xd6z4\x91M\xc5\xc7\x97d\xca\x10\x86\x80s\xfb(\xbcxg\xf1\xd9\x83\xe0\x82\xc3\xe2\xc8\xd7s\x07\x8fdY\xe9M\xe36\x8b\xde\xfd\x84\x7fp\xc1\x99|`\xae\xbe\xc3\xe7\xd9\xc8\xd0\x04J\xb5\x94"\xe6\xa8\x1bQ,\xdc\x10\x12\x8f\xed,\x9e>n\xa1]\x8d\xdf\xca\xbcT\x8d7DV\xf6A\xe8\x0c\x82^\x1a\xdc\xb1\xdb\xd0\x9d%c\x14\x18\xa3\xd1l\xe3\x8b9\x1c\xc5&\tV\xac\xc7\xae\xdc\xd5\x95\xc2\x98\xa4De\xa9\xaf\xf0\xc8\x80Q\xf6\xd1\xe7\x98\xdc\xc0\x88!@V\xffL\x1akY\x85\x86N\xc1\xd3\xc7\xaeS\x13\x8a\xc4H)\'\xbb\xd4\xab\xd0JL\xe0\xd9e\xf8\x7fEdq\xa6\'V\x0f\xbf\x83\x00I~m\x92M\xe2\x9e\xc1\xcb\x16\x19\xafLKn\xf2\xe0\x11\xce\x94\x9f]\xf6!\xa9\xa5\xfe[\xec?]\xeaD>\xd1\x19\x99\xdc/}\xe9\xba6\x93R\x03\xfe#bs\xd8\x9f|T\xd4\xcd2\x1e\xb2\xb0\xcd[\xdf\xcd\x18\x92\x19W~b\xd4\x19\xf10d\x17y\xe0"\x8a\xf7\x06\x98p\xf7\x12}\xa8\xedE\x1a\xe6\xd5b\xb3r\x05\xfa\x7f\xe9\x06\xde\x81}L\xb9\x97\xe4\xa6am\x19\x99\xd6\xc8R%[K.\xe2\xef[\xf1}\xbe\x8c\x19\xd5\x08\xfe\xd1\xcb\xa0\x9a .\xcd:x6d\x88\xdaS\xba\xd6\xdf\xe8\xd4E\xb6\xfd\xb20/s\xc9\x06\xcc-\xde^\xea\x94\xdbt>UMhG\xa39\xc0\x07f\x93\xc2n\x9eoA\xcd\x8b:\xb2"\x86\xaf\x89\x8e\t\xca\x06\xf7yNx\xe8,a\'\x8f\xe0\x08\x8d\x1fr\x993\x1aK\x7fZ\x06\xa4\x16w\x92]\xc0\xfe\x14\x9bA|\x86\x10g\x19\xba|\xcc\x8a\x0erR$\xa2\x98\xe22-5\xb9Yd\x8d<\xa1w?\xc75<\xeb\xec\xd6\x1b\x83\xe2GQ\xd5\xe7\xa5\x98\xb9\xddI\xc5m\x8f\xb1a@s\x8c!!A\xe6\x10\xa5O\xc9\xad<\xf3}I\x11\xd8\xb2\xd3\xc6\xf8G\xe6!|\n!v\xf7\xb9\x85\xdd\x98<\xf6\xe2\xf6\xb2^\xa6\xa7d\xb3\xc0\xfe(\x89a\xeb\xf44)\xa5:\x81\xc41\x83gAno\xce\xb0m()\xb4?\xa2c\xee\x7fH]\xf7\x14\xda\xbc7&q@#\x82\x1b\x85\xca]\x90\xffjU\x98\x98\x17_\xd2C\xe1D\x91\xbc\x0e!\x9ehH\xd6\xd0\xb2\xd9\xb7N \x17\xbb\x17\\\x16\xcdA\xbf\x1e\xfa]}\xbf?>\x81\x0e\xc2\x82\xb8Z+\x05\xb6&\xd5Z\xe1\xe2\xbf\xfc\x98\xb0\xfe^\x9d\xf7+\xe0Y\x8a\x85\xbb\xd0N\xa8\xdedzW2\x11\x8d(\x98\xd3\x8aM*\xbc[\xc3\xf0\x8c\x17\xabP\x98\xa3\xcc\x19\xb8N\xf8\x94)\x15\xe4\x0f\xa9\xcf4\xb4\x86\x95<+lJ\xd7\x85\xaf\x00\xeb\xb8+9\xfd\x8a\xeb*\xba\x04\xb8\xe2\x082\xf3\xd9tj\x16cY\x0e#o+\r\x96\xd4A\xa03\x8dJ\xd0\x11\xaf5\xa5\xa1>!*E\x16\xb9\xca\x87\x1aa\t\\\xc1V\x1a[!=0l\t\xae\xff1\xbfnat\xa3$\x8b\x9e\x9bv2\xb95^\xcd\xe7\xc0\xf8\t?\xee\'\x95\xea\xcc\x16c\x801\x94\xc6\x92g\xb4\xb6\xc5\xf0KL\xf7\x17\x9f\xbe\xb2\x10\xf0rG1\xfc\x9a\xde\x02\xfdj^k|^\x04\x9b4k=\xd0\xab\xeb\x14lL\xfc\x99\xcb\xb9\xc7x\xd3\xe7\x7f\xe0H\xd4\x03\x1d\xeb\xb5\xef\xf7\xa4#\xfa\xca\xff\xba\xda3\x10C)\x83y\xd4\x15\xb0\xb6\xb5,4&\xb5\xb6\x1e\xd2\n\xbd&K\x0f?\xfa\xa0H\xc4OX({K~\xd5>c\xf7\x88\x99\xfc\x85t`\xdf\xf2Y\\\xb9:4\xe2\'\xe4\x1f;\x92\x95\xc3\x89Dt,H\xbe\xf4w\x95\x84\xae\xa7Ek\xe3\x8fTCv_\xaa\xe1\x19Hr\xde2\xebPP\x8f\xfe\xb7\rH\xbdq\xb9\xc2\x16\x16\x13\xdbA\xe76Bv\xce\xb9d\xf9\x1a\xb29\x0fA\xceb\xd4\xe7\xc1e\x1fRyI\x80\xb1@\xa6\xb9\x9bk!*dC=\xa8\xcad\x08yv\xaf\x0b\x8b\xf3`\xec\n_\x04\xc7>\xbe\xaf\xeb\xfc\xe9\x03\x91b\x1ffn\xbaj\x11|>\xc5\xacYt\xfcN7\xb1\xfbb\xb9by\xd8\xa2iHY.*\x8c\x96pP\x10\x851\xaf\xc8\x07\xda-,\x10\xef_R]\x1f\xd4\x94\xaf\xfc\x82\xb2\xa1\x1e\xf6\xcaL\xe3\xf5b\xf4_\x924\xebjD\xb6D\xc5\\\x9d\xe6\x87\xf3\x96:+\xda\xc6\x84\xea\xc8\xe0\xcaCIy\xc9C\x9e\x10\x95\x88\x0fO\x1d\x9d\x0e\xf8\xeb\xb2C\xb0c\xfe\xcf\xae\x15s1\x92C\xcb\x98/\x9d\xb0\xd2\x89X\xc1\xa1S\x15b\x90}\xde\x0b\xd6D\x13\xd7\x81\xe7/\xeae\xae\x13TH\x03\xb9\x00~\xee\xfa^\xd93\x12\xb07z\xf0\x1dF\x9b\x05\xcf\x9d\x82\xc3D73\x81s>\xfa\xcbN\xad\x93\xb4\xad\x80\xf4\xee\x1f\x9fD\xe2\xfb=\x01\xd3\x0c\x1f\x8d*\x8c\xeb^\xbawd\xb9\xc4\x1d#g0\xd0\x80\x1d&>\\\x91f\x01j\x13\xe7<\xe5\x07\xe1t\x9an\x95}j\xb156\x88\x12\x86\xe2^[!w\x07\xe3\xd2\x8a\xc6\x0eM\xff,K\x93*:\x92m\xaa9\xaf\xf4C\xacJo\xf4#\x8b\x95f\xe3=\xe6\xd7\x11\xf4\x9f\xc7\xa6lv\x93\x9c\x08k\xfc\xad6BI?vc\xb88\x1cm\x13v\xdd4/\xd0\x0bD\x0b\xe8\x1e\x00gT[\x9c\xf8<\xc3\x8f\x1e\xcf\xda 4p\xe7\xf8\x0fl\xc3\xbbJ\xc8\xc3\x93\xf8x\xec7\xa9\x1d\x97@Dw\x14\xde\x11\xa9\x0cP\xa1\x87\xa9k\xfe\xbd\xeaZf\xb9\x9b\xa2\xbbB}\x80\x02D\x9b-J\xb0E\xad\xbd\xb3\xdf\xe8\x035640y\xbc\xd5\xb8\xa3\xdcZ\x89r\x1d\x11o>\xed\xd2G\xdb\xd8l\xccXX\xcd\x98\xcb\x0fr?\t\x84\t\xc7H\xfd\x13\t\x8c\xc5\xd2\xdb\xad\xe5\x04\xe1pJ\xe4\x83\xd4~"/\x13\x83/\x11?\x96\x9d\x11\xfb\x16&\xc5\x7f?\x08W\xa5\xdc}u\x1c\x98\xe7\x18s\xd2z\x07Y\x187\xab\xaeB\xb1\x1f\x13#\xb2\xfa\xbb\xf8\xcc_\x91\xebFmWty\xa6\xda\x90\x81\xd5\xbd\x80\x15\xdcUX\x8cv+`\xf7\xc8{\xb2\xf6\t\xd8\xe0\x9a|N\xda^\x9eV\xde\x9bV\xc8\x1a\x1f\n\xd1IV\xf3\x13\x03\x8aQ&\xd1$\x08\xd8\x9f\xee\x93\x8d:H\x00\x00\x80\xe6E}\xa9\xdf5\xac\x98g@\x08\xf2\x96g$\xc6\x03-Q\xbcD,LB2K[\x1e\xdd!b2V%yy\xf8\x920\x0ed\xb6\xe9\x04\x06\xebs\xb2\x9f\xa8\x16\x1e\xb7cH\xaf\\\xccZA9\x1fX\xc6!;\xfd\xdd\x8e6B\x07\x19M\xe7\x1e"\xc4o\xe7\xf3lle\x9dF7\x83\xc7\xc5\x91\xd5\xe6i:\'\'y\xf7TF\x19\x0e\xe7c\x86YM\x0c`\xf7fh\xb6nT\xa6`3\x04\x00\x9c*\x97O\xad\x02/\xdf\x9a\x95\xcd\xb2%\xa5\xaf\xb0>QP\xd0\x05\x9e\x8e\x9c\x83?\xb6\x89`I2\xc1\xe0E\xd2\x80yJ\x7fa\xd3\x84\xfc\xf8\xf0\xe5m\xd5\xf4\xfbF\xfe\xa8b|\xa5f\xa4\x15m?I\x01A\x03\xe0\xaci$\x04j\xa7\x89j\x03\xbd\xcb=\x167\\\xfa\xb0\x1e\x1b\x0c\xf1a\x15<\xb6\x1d\x05\x031`\xf1\x84V\x00 E\xb3\x9a\xa8\xe74\x1c\xe9\xd4\xbc\t\x18W\xfa\xa17\xf8zcC\xb0\xa8\x89\xc2\xf2\xe4\xe7GG\x1f?n\xcc\xcc\xed>\x10\x87/_&\xe1\x854\x8f5\xc3\xb6\xff\x7f\x03v.\xad\x87L\xb8\t\xd0H\xdb\xce\xac\xac\x9c\x1f\xe84}\x88\xeew,\xc9y\xcdg\xf62\x0e5\xa6\xabOq\xc1\x04\xc9\x93d\x15\xffh\xc0\x1f.6*\xa4\xe4%n\xe7\xe4\xe5>\xb8\xb9\x01d\x82\xc1\x8a\xaa\xb4=\x14\x14\x87\xc5\'y\xc7Mf\x18\x14\xf4vN[\x19N\x04\xdaQe\xf6\xf8\xa2W6]:2\xdc*@\xca\x91\x1but\xb6\x96C\x9e;\xb7^\xdaC\x19U\xf7\x17Y\xef\xe8\xe4\xcd\xc8\xc9\xa2a`\xfb\xc2H]\xa1Y\xb50\x9and#sy\xc3\xb8\xe8gMr\x14\x94\xdf9*R>\xf68g\xd8\xbf\xf4\xc4\xe9l\xa1&\xa2W\\\x0b\x13l0\xf6\xb4r0d\xd7\x8d\xe34\x92Q;>\xc22\xfd\x10\x08\x1d\x81\xcf%\xba\x9ey\\\xbf#)c\xfaX\x07\xfc\x1dxE\xbc\xcd\xfet\x10\xa4\x93\xcfa\xc608\x0b\x1a\xd7U\x198\x05\x00%\xdd\xb7\xb6)6fX*\xf1\xb5`d\x10\x9e\x06\xf0\xf1\xc3Z\xef\xe0\xf8\xae+2\xdcU\x8cv/\xa4\xde\x82)*\x99k\xb8D\xe0\x04TK\x97\xfa\x81\x14\xd5l\xc2\x1c\xb5\x83\x0e(k\'\x05\x9e\xd5\xf7\xbdW#\xfa6\x04~\x11tf\x7f\xcb4\x97\xce\x1a\x97D\xef2r\xa66\xbc2\x07\x06e\xce;4\xeb\x14\xb6rZ\xf3\xb2\xdfsa\x83\xd0yFh\x96\x1f6:\x90"\xec\x05N\x08d\x9ef\xab\x0e\x07\x9d\xbc\xfa\xff\x9a\x98\xa1\xea\xb0f\xcdK\xcb\x10$\xad\x9aN\xfaquw>\xe2\xfau\xa7)d\x8cyI\xfd\xda\xc6i\x02\xbc$s\x86m\xed\x0c\xd6\x90\xd8\xa9\xee?\x7f\x8d\xfd\x9b\x12\xcc\xa7\xde\x04\x8bh\xd7K&\x85g\x1e\xe51W:m<7\xc4\x9b\xc0:\xd8/\x11\xbd=\xb0\t\x10\x8c\x08\xe6\x80>d\xa3X5\xc4y$\x08[\xf7\xc5}\xd4\xfb\x1f\x96]&\xdd\xe1\x07\x91\x1c\'V\x8d\xc0\xc4\xc4\xdas\xe5\x17\xf1\xb8\xfd\xb18\r}\x12\xfc\x96\xc4{?)\x8e\xd9F\x0f\xa1\x8c\xb0\xd0\xc8>\xff9mA>\xc0\xd8cY\xc4\xdc\x93\xf3\xf5\xec\x8c\xe0%\x062\xa6\x95\x99NQqe;\xa6\x8eR\xf4\x1a!\x99G\x0fcd\xfe^\xb9\xd8\xe7\x13\xd7.g\x1f\x1f}\x81\xc3\xfeZ\x104\xf5\xc6\xc11\x02V\xc3\xf6d`<\x17qU\xb0\xd7\xe7\xff\xf0\x10\xbe\ri\x85\t4S\x04\xe8 \x7f\x90\x92D\x17n \xbc\xe82\n\xf1d\x01\xb6\x96\xf8C\xf4\xec\x93\x89o\xab\x07\x8a2gI\x1b\x8f 3\xe0\x11\x92?kA\x07\xa6\xbc\x8d\x0bd)8Qa\x9c\xb8\xec\xf7\xdb\xa5f \xf55}\x1f\\2BP\xe2\xb3\xd3\xfe*\x02=\xa4\xc5\xc3D\xdf\xe0\xb6\x11\x15\x1f\x8b\xf9\xd3\x87\xb8\xb6\xb7\xd7\x13\xeb\x95#\x15^\xfe\x85\xabU&\xb91\xbbn\xa3\xe9\x9c!\xd3\xe7Z\x84\n\xbd\x92\x8bj!\xc6S\xfc\xe0B{\xb3\xae\xe2JM\xc0\x7f\'*@"\xe7\x9a\x86\xd4\xc8\xa6\x06X\xb5\x14\xf7d\x94(\x1f[\xa4\x15\xd0F;^\xa7b\x84\xb9\xea.\xb8\xde@\xcb\xc9L\n\'\x9c)\xcd\x9f`R\x86\xad\x8ea5U\xb4\x9d\xdd\x14\x91A\xbe\xbd6\x8c\x90gxip{\r\xc2\xf9\xcb1x\xde\xf1\x9c\x0e\x8bV\xf9k\xe7s\x9e\xfb)\xff\xff\ty\x81\x17O\x90bk\xa7\xee\x9c\xe7\xb6\x84\x8a\xcc\xa5\xa7\xad\x90\x01\xcd\xb4\xd1\xce\x86\x94J\x12l\x8aV\x9d!\t\xaeG\xd4Hg\x0c\xf8\xe9\x04\xa3Y\x1cCf\x82\x17\xd6\xa5\xdf\xde\xd7\xd8\xaca\x8b\xdd~\xdb\x8b\xdb\xab\xba\x83\x92\xa8Ya\x10\xa0vs\x90%\x96\'\xf2o\xa9\xdb(~\xd4\xb0\x17\x9b\xc4\x167t\xca\xf6\xa2 mVk\x89e\x16\x1fi\x97c\xe79xQ\xf7\xae\xa0R\x05\x08\x06\xd0\x13"\xdfo\xec\x06\xad\x84\xd2;L\x1b\xe14\x06V)\xb1@\x03\xae\x8c\x87\xabfH$\xaa\xae\xc5)\x19M\xebX\xafCvc\x15\x05\x0c\x8a\xbd\xfaqE\xfb\xf45\xa0\xe8\xf8\xdf\xa7\x13#+\xc3R)k1\x94\x83\x94\x1a8\x05\r%E;+@~mM\xbf\xe0\xbaf\xc5\x08\xe80k\xa1\xa0\x1b\xf4\xe5\x97\xb6w\x86\xd6\'\x07\xb3)\x90\x87+w\x83r\x1d3\x99\x86H\xe9\xd8\xb5g\x86\xefh\x1e\xa0\xb8\xf6\x1c\xd2\xa9\x0e\x9a\xa4\n\xdc\xf6W\x0e\xe0[\xb9\xc4\xc6h\x00\x96\xa2\x92\x03\xad+{z\x07\x1b\xdf_\x0e\x08\xce=\xefLe\xb7Tg\x85\xad\x90\xe8\xb8]\xfc\x9e\xad\t\xfb\xaf\xff4\x03h0Y\xa4/\x9f\xfa\x9a^{\x11Kj\x9e\xeb\x1d:/\xf2\xcd=\xc9\x1f\xa6|^\x01\xd1TI\xbc\xd3\xc7e\x1a2\x89\xe5a>g\xa7\r\x07\x9a/2\x83\x8f7\x88t- ]\x83B\xdcx+=\xe1\x19\x0f^\x07-C\x1a3\x16\xe4\xe7\x88L\x11\xba?r\x04fL\xd7\x8b\xb5\x90\xca\xc8\x06\xa8q\xbd\xeeUC\x02\xd4\x87eH\x10\xe0\xdd#8\xa8\xd2\x8es\x05\t\x19P\x0e\xfdxu\'\xe5\xeb\xd6Df\x96\x96\x82\xb8bq="\x19\x9bpo,k=\x92h\x00Z\xb3\xbdI\xf8+\xb8\x81\xac\t\xd8a\x8c\xac\\\xe0\xd3)\xba$\x1d\xf5\x8e\xb9\xeb\xb9\x91\x99\x99f\xb3g\x0eM\x87l>\xb9\xb5\xb8\x7f\xd8\x99f\xb8\xf2\xb2\xcd\xe3\xd5\'\x9a\xf2\xb2\x9f\xad\x13\xa1J4Csc<`\xe9\x1f\x03nZ\xa3\x1c\xaa\x19\x04\xaf3\xf8\xb7\xc0\xce \x94\x88\xfa\xb6\x06\xca\x9c\xfc\x1b\xb7\xf3\xb3&e2al\xaaN\xd3\x11(\xf9\xf8\x1d\xa8\x01WU\x85\xb1S\x1a\xa2\xbf\xab \x9c\x96E\xdeU\xff\x9f\x81o\xce\x82\xdaL\x8a\xf2J8\xe2\xd8/\x88Q\xa9\xcb\xc4"Ge.\x14\xf0\xbe\xded\xd4y\xcf\xb8\x9b\xd5\x8c\xeaz\xfa\x9d;\\[\x17\x84TYhCj9\xaa\x89\x00\xed\xe0\xcd\x9c\xccf\x7f\xf7\xdc\x97\x0b\xcf\xdf\x1dEb\xbd\x93\x8f\x18\xd1dJ\xb3C\xf0\x840\xc0\x8c&\x07^\xe78\xbb\x8f\xc3\xfe%\xeb\x1a\x90\xb2\xbd\xfd\x1c\xc5\xd79J\x8f\nZ4N\xb0\xc6\xb5\xa5\x1c3C\x13\x96|,D\xbf\x88*\x89.i\xecT3E\n\x03^\x04s\xf3\xf6\x0b\xa6\x01\xa3\xcffP($\xec\xb0\xeb\x95\xbfi\xfa\xf2E\x9e\xd6\x86\xf0)\xe0\xd9\x1c\x95\\\xc1\x16S\x01@\xc0>}\xbf\x06?\x1a\xe7\x0e\xcf\xcd\x06Nc\x9f5\xc7JJ\xd8\x0c\x92\xc4h\xb7_\xefK\x85\x9e\xd2\x07yer\xa0\x1d\\7\x0b\x9aG\x10pK)L%l\xe1\xeb\xf3~lI<\xa1\xce\x9f\xce\\.i(\xbb\xbf\xcd\xc4\x83M\tg=/\xf7\xd9\x0ev(d\x90\x14\'D|\xf3\xd0\x9c\xc2,\xc3~k\xf2\xfdD\xd1\\\x93\r\xdeH\xc8\xfbu\xc9\x14p\x8fc\xebh\xed\xfe\xf5u3\x8d\x95j\r\xf0B\xb7\xc6\xe4\xb0W\x1b}\x91vvq\x86\x9e\x9d\xe0\xed\xb5\xe7\xdd\x1e\xe3\x96\x10s\x17\xd8\x7f\xa1\xfcG\x96%\r\x8b\xac+\xa2\xc2\xf5\xa4\xe3\xba\x86:\x03\xe5&\x9f\xde\xac=\x15\xf7\xda\xbe}"\x8a\xcc\xe0.8Wd\xefLH\x1fN\x9f\x16r\xaf\xf5\xee5\x9f]\x15\xdf\x9b\xd6\x981\xec\x82h\xe7d\x0f_\xb2\xa5d\x82c\xcc\xca\xefI\x10@*\xa2\xca+56L\x11\x8b/:,\xa5\xafDf\xa4\x01\xfa\xe8 D\xf2z\xfc\xefW\xdb\xab\x8c6\xba\x98\x05:D\xdb\x13\xdac\xea\xc5F\xaf\xad\xda\xc9?\x1b\xdd,:\xd4\xe9\x0e0\xa3\xd0\x9f\x82\xf0L\x049\xef*aQ\x94\xae\x97g\xc8\xff+X\x06nu\xc5;\xfcD\xa7\x10\xd9\xd1{\xe5\xe5\x06c(\xa3\x80\xbbn\x95\r\xc4\xb9\xd3\xc8\x8c\xe8\x9bSro\xae\x8f\x17\xdbeq\xcfF\x9b]3\xa3\xcf\xe3I\xba\xa5\xda[f\xc6d*\xe5\xec\xd05\xfa\xb2\xf7\x19\xcd\x00\xbc5\xde\xccBd\xef\xd11\xd7\'\xe8\x95\xfd\xb0h\xfd\xbfY1\xf6\x97\xaa\xe2\xbf\xc2\x93\xb7\xeb\x19\rRF\'`\xbfU]V\xb5R\xd4^\xa2J\xbf}\xc4\xcc#\x8dhXiZ\x99\xe44\xa8&\xf0*-c\xa9\xe3\xc0\xde\x91\xd3\xfc&0\x89\x94iw\x94\xd3z\xb3\x1b\xb0"`k\xef\x16\xa2\x83a\x98\xa3,:s\x9c6\x9d@k$\xb2(l\x82[O\xc0\x0f\xbc\xd1\xdc\xf7\xd9.:\xd9\x81\xb4\xe0\x86\x01L9\xf5\xd3\xd1\xc4\xe1a\x92\x04<CZ\xd7\x9f\xc3zV\x15\xf9\xca\x9a\x8bg\xdb\x83\xfb\xea\x831\xf7!ZF<k=\x87\xdbI\xa3\xda\x9d\x8b\xb9\xf9\xcb\']\x0b\xa6,\n\xe3zt\x8a\xa9=a\xc9\x01\xc7T\xf7C\xf26}\x80\x87\xd7\x07ZS\xa9\x17\x14\xb6\x17j\xa6\x1a\x1b\x9f\xb6:\x1b\x90-\x08\xbb\xa9\x00\x90B\xebP\xe6\xe0\xc5\x04\x07\xf2\xe2\xa1\xea\x16A\x93\x1eQ\x94t\x06zU\x08F\xed\xe0a\x04Q\xe12s\xff\x91A0\xca\x99\xb2\xbc\xc3n\xd6/\x91\xc7\xbd\x1c\xaa\x177r\x8b6\x9f\xe8\xd2\x9f\xf6\xa5\x1c.\xbc\xd7\xd6\xd6\xb1\xde\x1a\x89\rG\x0fV\x99rl\xc0\xdd3\xf0\xb0n\x1b[\xe1k\x1b\x94\x8b\x95\xa5\x0cj\xd2\xda\xa2\x19\x17\xf1\n,m\x03\xc4\x9d\x90\xcf\xb8\x1e\x02A\x90\xe5\xc8#\x0c;u\x0c\xfa\xe7\r\x8d\xdf`iM3\xfb\xed5\n-\xd42\xf4z\xa8\x95\x15V\xaf\xe1\x1e\x1d\x9b\x0e\x0b\t\xa65\x80\xe5\xfau}ew\x0eR\xa3\xee\x87=\xf9*>\xe0\xcf\xedc\xaa\x88\\\xf3xM\xe1\x89t^\xc7\x9eD\xcb-Ajk8\xf9\n\x17\xef\x1au\xd8\xb5\n\xec$\xec\x03\xd2\x80\xab\xe6p\xa9*K\xa7@lUn#\xa3g\xa8\xa1dq\xa7\x1aB\xd0\xe30\x0f&\xdc \xbb\xc9\xe2\xeaS\xca\xe4\xccVw\xd1\xcd\xcb\xd1\xea\x7f\xac\xd3h\xbaKBj\xa6\xe4M3lE\x1f\xf3\xd9\xac\x89\x85\xc6\xb9\n\xa0\x81&\x8fci\xa109\x0c[\xa28\x89\xd0\x08\x8e\xaf(\xba\x80V\x846\x88\x1as\xf3\xec\xb9\t\x954\xb5\xe6\xfe\xd1Am\xed\xfe\xaaE\xdd8W\xb0mY\xbb\x1fX\xb3xI\x10\xcdrr\xf5\xebg\x0b\xcfR\xe5\xff>mba\'P\xf6\x1b\xcf\xab\xc7B\xb5\xf62\x82t\xc1\x9f\xab\x14\xd0\x8e\xbd\xf9\x9e\xb087\xf4\x1c\xac\xcbZ\x08\xf1Ka\xe2\x9a,\xe9v\xaf\xbbL\x16EK\xea\xdb\xbfv\x87cu}2\xde;L!\xef\x84\xe5\x8ap\x05a\x04X\xd4\xe3\xa5.\x98\xe9\xc4\n6M\xbav!\xc0\xa5[-\xb3S&+\n=\xc3\x88\x81#W\xbea\x94\x1c\x17\x08\xaf\xe1#\xaaD\xd1\xd2\xd2\xfc@\xdd\x02E\x8f\xf5\x92\xf5s\x8b\xe6#\x19G7\x1d\x1dn#\xd3O\xe3]\xe5O\xf1S_|i<\xd4o\x8a4\xd3\x0e\xbd\xd156y\x1d\x9d\xc2\xdd\xe2\xb9<\x08\xa8\x80\x85kt\xdd\xd6[x\xf5\xbb\xac\xfcc\xe9\xa7\xf6\x93\x8bf4\xb9\x98\xd0[\xc4\x00,\xb2J\xd3\xde{;\xb1\xf3\xbf\xa9H\xaf\xc8Uu\xb6\xad\xaa\x07\x15\xe6\xb8\x13\xf9\x88\\QF\x85\xe2\xa0\xfe3\xa4z\xc3\xf3l\x1d*\x15\r]1\xc4E^W\x9d\x05\xee~\n0\xc9\xc0Lc\x9e\x04\xc0>R\xdc\xa5\xe5\x11\xd1\xf6&\xb2\xdd6\xbf\xe9i\x1c\x9dH\xcdI`\x96\xc5\xf7Y"\xfd\x85\x95 \xf2\xcd<\x1dg\xc1\x0bG=\xb2\xa0\x10\x07T\xc4\xe7YP\x18\x82@;\x9dnC\x03\x15E\x18\x0b\'O*\xbb\xe9\xb4e\xa9\x04Cv\x1e\xb1$q\xb2j\xbd\xeb\xa6\xe7o\xe2B8A\x08]\x8eNj}\'\xfe\x8d\xd5\x8a\xfc\xd1\xac\xb2N\xa1\xfd\x07\xaf\xdcw\x08\xfa\x83\xb9\xc5\xbcos\xc6DO\xd0\xff\xb7\xbc\xb2p9\xdeL\xcee@-&\xbd\xf9\x98|\x99\xbff/\x1d\xa9\xb0B?\xbf\xa2\xef\r\x97\xc17;}\xef\xdd\xd5;q\xea\xa2D\x91\xbf\x93\x12\x84\xf1A5)OmR]\xdffy@"\xb1m\x93\xce@\xff \x0b\x82\x0e\xca\xc2_7\x14\xbf\xc5\x99\x0c\xd9\x1d\xd8\xd82\x05\x0c\x18\x05\xeb~\xe4Pej4\xed\xb2\xcb\x08#\x8c\x06{\x9dZ\xe8[T\xde\xf6\xce\x970\x16\\W\xc6n\xa8\x9b\x83\xfa\xef\x19Y\xb5_\xf7\xa8`\x84<\x82#l\xe9w\x1d\xee\x13\x8f\x0c\x88\xc8h9N\xe9\xfd`\x10L\xa9F\xb7\xe2\xfa{\x90\x7f\xfc\x82\x15\xd0\x1bH\xe8+\xe1\x8f\x18L\x865\x16\xd9\\\x8e\x11u.\n\xd8\x93\xaeB\x86\xabO\x03\xe4)\x9dN|G\xf4\xcc\xcb\xd6\xdb\xd5\xe3\x92=\t\xe9\xe9\xca\x0e\xb4\x93[\x90\x9c\xbc\xf2\xbf\x15y\x9c\xa05\xbd\xd9\xccn\x8dQ\x89\xe6\x8e!\x85\xf9M\x94\x814\xc7A\x87\xf1\x01#\x18\xe5\xe4\rQ\x87Ak\x945\xc7\x0br\x82|v\xfcq\x13\xef\x8c\x17+[\x88\xea\xc7\xa6M}\xed|\xec\xb3|i\xc7\x08\xd5O\x9b\xea\x84E\'C\x04\x11\xa78\x07r@\xe3[\xc0\xecV\x0bt+\x9e\xa9\xf5\xa42u\xa1Qv\x08uH\x08\x14|\x83\x7fZ\xa4\x8e\x19\xdb!\xef\x05\x9d\xf60\xa4\xd2\xbb\x99\xec\x99\x96q\xc2\xe5^\x84\xee\xcf\xb9\t\x9f\xf4\xbf\xc4\xdb@C\xef^\x13\xa6<\xa2\x81Q\xcen*\xb8Nps\x97\x18N>\xcf\xd6\xab\xdf\xc5\xdcvW\x93J\xd1\xe0\x90\xec\xe8=_Cwz\xd3\x83\x90\xbe\x03\xc1\n)\xebg\xb3<\xb0\xee\xdf\x00\xae\x80\xfdv,\xbe\xee\x8e\x8bP\xca\xf6\x80\x8c\x8a\x9e(b*\xb1\x0b\xdbB4\xb4_-Oi\xf5\xffW6\xb7:4\xa5\x81@\x8d\xd4\xd6\xfb\xfe\x1d\xfdVp\x98\xf5+\xeeu\xdd\x05\xbf\xeb\xec!w\x17^OTs\xce%\xb8\x85\x83\xa4\xc2\x95\xe9TA\x0f\xc7?|8\xc8\xcf\xa4\xc5r\xe3\xab3\xeb\x8a\x7f\xcbn8P\xe1] \xe1\x14N\xad\xdf\xce\xf3\xab{-\xc9"\xde\xcf\xdd\xa9\x06\xefJ\x8c=\x14\x81\xb11\x90"\n\xc5\x16\x15\xc8lc/\xfe\xf7\xbe\xf7"\xd9\x83\x9dJCA\xbf%mo\xfd\x96\xb7\x04 /\x92\xb6;\xb3\xd5\xa3\x07\xf9\xcds\x99\x13\x84t\xc6\xd7T\x90\xba\xc8E#\xcai\xca\xda+S\xe1?\xe9\xd4\xa6\xb4\x8f\xa1m}Q\x199\xda\x14\x07\xa4\xb7w\xa6\xf9H\xcaD\t\x8fg\xbfs\xb9\xd1\x84B\xc9\xa3\x9bX\x1edk\xdb\x07\x97\xc6\x1dZ\xd9w\x87<\xe6\xf0\xcf\xeb\xa7\xdf\x93\x96p\x90\xcb\x1e\x1a1^\xa0HV,\x1f\x05\x986\xbfH[\x9521.[\x83H\xe6d\x02_\x1d\'R/C.O\xfb\\4\xa3\xc0\t\x00\x86|\xe2+eV&\xc2f\xe6!\x98V\xc0E\x14\xa2\x9e\xfb\xc3\x19\xa74\xf1%5\xc1\x12\x8a\tKt\xc0[61#m\xd9\x0b\xb4\x9d\x90\xbczO\xdb\xb0d\xeb\'\xfe\xcep\x8a\xcf\x90\xc5\xadYHL]\xb7^\xf6(PQ\xaeD\x8e\xac\xb2\xad\xce\xcdw\xc4\xc5\x08\x12&\xcc\x89U\xc5\xacRD4F\x05\xe4\xdd\x15\x19\xa4\x1e\xcc<DM\xb6\x15\x17;\xea\xfa\x7f\x1a\xe4\xc1\xf5\x7f\xf8\x0b\xdc\xb1\x08\x99i\x82\xd2GH2\n\x19c\x1f,\xa7\x86\x10w\x80\x19\xf8;\x1d\xb9&\x93\xa2\x08g[i\xd3\x9e$\xf5\x864]\xc0\xbd\xfa\xb9\xbfP\xddAy\x10C*7\x98\x89\x9e\xb9\xe0\xf2\xa8\xd3\x18\x05MPx.\x9dX5sl\xda\xf9VU\xc3\xfc4U\x88\xd2\x81\x90\x80\xe9\xc5\\\x13\x1c\x87\x0b\xc0\x14\x85\tI\x02\xfb\xcd0&\xff_\xb6If\xd6\x0f\xd4\x89\xc8\xa0\xbf*\xc1\xd3X\xad\xfbV\x10\x14\xc4\x86)M9JWm\x910\ro.\xb3\x8d\xcd\xe0\xefA#\xc8\x94\xc7\x06\n\xfbPx\xf9\xe6\xea\x7f\x8f\xe3\xb0\xe6T>(\xe9\xac\xd1S\xc0\x9bP\xca~X\xfbS\xder]\xaa\\\x92\xd2\x0f$\x1f\x89@\x8b\xdd;\xb5\x8d\xa8\xac;w*\x18Yr\x08fX3\xdb\r{\x98M\xf3\x02\xf2M78\xef\xff\xd6\xa2P[\x12$a\n\x14\xdfY+\x0c\'\x9e@\x1c_\x7f+\xbawP+\xf5\xa6\xd8\x8a\x07\x05b\x00R@lg\xd6{C\xa2\x03#\x9c\xc8\xaf.\x02L\xd8=\x1e\xfe\xe5\x85\x90Z\tV\xed^\x0e\xa7\x03\x8a\xa4|\xf8\xb9\xf2\xa4\xab@\xb9\x84\xa1Wz\xb8>.7\xa1\xd4\x9e\x1cv\x13P@\xab\x04\xf6b\xae\xb2\x95\xc6\xde\x86\xdf\xdc\xddL\xc9\xb7\x0c\x9b\xb3\xf9\x156\xb4`\xac\xd5\xc5W\xad\xcen6\xfd\xd6\r\r+\x1c\x98\x0b\xa3 \xef\xd3?1\xe1\xbajxQ\xc0\x10\xda\xa0\xe9\xe7\xae\x04X\xc2\xe7\xfc\xe1\xf7T\x02\xd3\xbe\xc7x\t\xf2\rLz\xe7\x10\xdd,\xd2\xa3\x82^\x13\x04\xee{sW\x97\xc0~\xb0\xff\xebR1\xfb\x85\x03\xbaIP\xe0\xb68\xf4\xbc\xa0\x13e\xe7\x9dY\xa3\xa5\xe2\x84B ~$\xde%\xf1\x14\xd7I\xf4JO\xe8\xf8\x13%\xa2#??y\xcd\xff \xca\xfc\x0c^J\xd18\xc8\xde=\x9b\x17\x01\x1b\xfc\xd7\xf94\x817+P\xf1\xbb\x9b\xebQ\xb5\xf3\x18V\xf7nH\xf3P\xe1\xbe\xca6\xa9Tq\xd7\xeb\xd2\x10\xd3\x0b\x99\xb3\xe0\xa4\xe9UT\xda\xcb\x87\x93\x8a\xa5\xbdK\x1a\x8f;\xfdU\x8bYz&\xce^\xb0|\xed\xdc\xb7j`.-\x11\xb8?\xa7\x8d.\x17\x9c\x93\xd4\xf2\xa7\xfa"\xb5\xe0\x18\xd7\x81I\x9fh_\x0et\xe2%\xf3<\x8f\xac\xc5E\x18c\xc3~\xf9\x86\xe3\xff\xea\x1e0\xf8T\xba\xfe\x17\xb5\x83\xd2_\x0bu\n\xa3#\x941\x95\xbbl\xdcc\x13\x91\xa9\x95\xad\xcd\x12\x08\xc7W\x07RR\xaa\t\xd9n\xb6\xdd;ug\n\xa1\xe1\xba\r\x87\n\xde\x07\xeb\xf0\xe0\x9d\xe0\x86\xa0\xb2\x1d\xcb8\x8dBQN\x0058\x13\xeb\xf9\x8b\x82q(1Y\x8d\xb7\xda\x91}\xb3\xc7ru\xfa_\xf6\xdf{\x94@\x88)\x90?\x0f\xea\xfa\t|\x97\x1c\xd6\xca\xc6\xb8B\x88\xee\xe9\x87\xbb\x16\xe6nb\xd9r\x14g\x8e\x1a\xe2*\xca\x17\x1b\xdeQ\xc7\x822t\xb9b\xa0`\xdd\x9c\xc0\\Ai\xaf)m7qb\xae\xc9\x1f\x06m\x1b$c\xd2\xe3\xd9\xed\xf1\xc85\x04\xb9\t\xab\xc0\xe0\x9b]M\x8b$\x03\xd2F\xf9\x04T\xe2\x11&\xe5p\x88\x1e|\x93\x99\x94\xc1\xfa6\x18\xf4\x13\xf10\xa4\x19N\xee\x9e\x90w\x12\xb5-\xeb]\xb2\xbb0\xa5\x97\xae3\x90`#\xddV\xbd1\xb4\xd6@\xb8jy?Q\xc3x\xba8\xb4\x9c\xb0R:\x8d\x95"\xf8\x9e\x14M\xc6(l\x17\xbb\xc6ZCG\xa2\x87\xcc\x83\xa3\xb8\xeb\x7f\xa5\x03\xea=\x89?\x1ce\xbc\x8b\xb9\xc5\x9a<\xef}\xaf\xd9\x14K\xad\x8fEH~\xc2\xe7\xa2\xc0\x11\x7f\xe1zi\x06\xd3\xbc\x07\x88\x10%c\xccs\x84w!\x12\x9a\x87\xc0\x1e\x91\x9bL\xf3\xbaq\x80\xea\xa50`"\x9f!\xe6Ad\x94^\xc3C\xa8\xd9\'\'\xa8),\xdb\xa7\x95\x80\xd3\xe4\x0fGi\x13;\x02\x9a\x12\x19,\xbd\x13\x96\xe2\xf9O\xad^\xbf$\xe8\xfc\x0c\xe0\xa0\x14y\x8a\x02\x99\xe2+\xde&S\x8b\x11\xa4\x80\x02\x12\xb6\x12\xfe\xf9\xc3?\x10\xdfV\x13U\xfe\x99\x93\xccR\xf4\xc4;\xf6<\xb7>\xb1\x16\xb0=\x8cTo\xf3\x0b\x1d\xcb\xb8d;_\xfc\x02Z\xe4|\xb7J\xb9\xa6\xf9\x1cA`\xd0J\xb1\xce\x199,\xe9\xde+\xe5x\xecN\x7f\xd8\xd1\xb4\x18\xca\xd7\xb0\xe7\x908rx"\xbfa\xcd^\xc3\x1d\x1b\x1b\xc4\xf7\x1e\xd4\xe1\xbe%\x11\x04\x11Qj\x028\xe6\xd1;\x95\x829s\xf3\x0f\xd1\xa2\x00[\xda\xf4\xc6\x9cV\x81\x80\x120D\x1b\x02\xce\xf0\x15\x91\x98\xc8\x97w\xb3\xe8\x0b5\x05\x1d\xec\xdf{2\xe2W\x14\xea\xc0\xa6\xbe\xa9\xd8o\xd0Q\x80\xb4>@\xa2\xa8+\x8e\xa2a\x83\x8c\x1cwP\xd3\xfd\xf0?\x0b\xae\xed)\xc5\r\x9e:\xd9[\x9eE\xfc\xab\x8eg0\xc4\x93S\xec\xf5\xb5"\xb61\xd9`\xba0t\x16\x98_\x91?%\xe8\xa9\xbc\x9a\x80~\xfet\xc4S*\r\x9c\xc5\x94\x92\xe4\xb2\x8c\x88\'\xd0U\xf7')
1
+ from hiddifypanel.models import *
2
+ from hiddifypanel.panel.database import db
3
+ import sys
4
+ from hiddifypanel import Events
5
+
6
+
7
+
8
+ from dateutil import relativedelta
9
+ import datetime
10
+
11
+ from hiddifypanel.panel import hiddify
12
+ import random
13
+ import uuid
14
+ import urllib
15
+ import string
16
+
17
+ def init_db():
18
+ db.create_all()
19
+
20
+ try:
21
+ db.engine.execute(f'update proxy set transport="WS" where transport = "ws"')
22
+ db.engine.execute(f'DELETE from proxy where transport = "h1"')
23
+ except:
24
+ pass
25
+ if hconfig(ConfigEnum.license):
26
+ add_column(ParentDomain.alias)
27
+ add_column(User.start_date)
28
+ add_column(User.package_days)
29
+ add_column(Child.unique_id)
30
+ add_column(Domain.alias)
31
+ add_column(Domain.child_id)
32
+ add_column(Proxy.child_id)
33
+ add_column(BoolConfig.child_id)
34
+ add_column(StrConfig.child_id)
35
+
36
+ if len(Domain.query.all())!=0 and BoolConfig.query.count()==0:
37
+ db.engine.execute(f'DROP TABLE bool_config')
38
+ db.engine.execute(f'ALTER TABLE bool_config_old RENAME TO bool_config')
39
+ if len(Domain.query.all())!=0 and StrConfig.query.count()==0:
40
+ db.engine.execute(f'DROP TABLE str_config')
41
+ db.engine.execute(f'ALTER TABLE str_config_old RENAME TO str_config')
42
+
43
+ try:
44
+ add_column(User.monthly)
45
+ db.engine.execute('ALTER TABLE user RENAME COLUMN monthly_usage_limit_GB TO usage_limit_GB')
46
+ except:
47
+ pass
48
+ try:
49
+ db.engine.execute(f'update str_config set child_id=0 where child_id is NULL')
50
+ db.engine.execute(f'update bool_config set child_id=0 where child_id is NULL')
51
+ db.engine.execute(f'update domain set child_id=0 where child_id is NULL')
52
+ db.engine.execute(f'update proxy set child_id=0 where child_id is NULL')
53
+ except:
54
+ pass
55
+
56
+ add_column(Domain.cdn_ip)
57
+ db_version=int(hconfig(ConfigEnum.db_version) or 0)
58
+ start_version=db_version
59
+ # print(f"Current DB version is {db_version}")
60
+ if not Child.query.filter(Child.id==0).first():
61
+ print(Child.query.filter(Child.id==0).first())
62
+ db.session.add(Child(unique_id="self",id=0))
63
+ db.session.commit()
64
+
65
+
66
+ for ver in range(1,40):
67
+ if ver<=db_version:continue
68
+
69
+ db_action=sys.modules[__name__].__dict__.get(f'_v{ver}',None)
70
+ if not db_action:continue
71
+ if start_version==0 and ver==10:continue
72
+
73
+ print(f"Updating db from version {db_version}")
74
+ db_action()
75
+ Events.db_init_event.notify(db_version=db_version)
76
+ print(f"Updated successfuly db from version {db_version} to {ver}")
77
+
78
+ db_version=ver
79
+ db.session.commit()
80
+ set_hconfig(ConfigEnum.db_version,db_version,commit=False)
81
+
82
+
83
+ db.session.commit()
84
+ return BoolConfig.query.all()
85
+
86
+ def _v27():
87
+ # add_config_if_not_exist(ConfigEnum.cloudflare, "")
88
+ set_hconfig(ConfigEnum.netdata, False)
89
+ def _v26():
90
+ add_config_if_not_exist(ConfigEnum.cloudflare, "")
91
+
92
+ def _v25():
93
+ add_config_if_not_exist(ConfigEnum.country, "ir")
94
+ add_config_if_not_exist(ConfigEnum.parent_panel, "")
95
+ add_config_if_not_exist(ConfigEnum.is_parent, False)
96
+ add_config_if_not_exist(ConfigEnum.license, "")
97
+
98
+
99
+
100
+ def _v21():
101
+ db.session.bulk_save_objects(get_proxy_rows_v1())
102
+
103
+
104
+ def _v20():
105
+ if hconfig(ConfigEnum.domain_fronting_domain):
106
+ fake_domains=[hconfig(ConfigEnum.domain_fronting_domain)]
107
+
108
+ direct_domain=Domain.query.filter(Domain.mode in [DomainType.direct,DomainType.relay]).first()
109
+ if direct_domain:
110
+ direct_host=direct_domain.domain
111
+ else:
112
+ direct_host=hiddify.get_ip(4)
113
+
114
+ for fd in fake_domains:
115
+ if not Domain.query.filter(Domain.domain==fd).first():
116
+ db.session.add(Domain(domain=fd,mode='fake',alias='moved from domain fronting',cdn_ip=direct_host))
117
+
118
+ def _v19():
119
+ set_hconfig(ConfigEnum.path_trojan,get_random_string(7,15))
120
+ set_hconfig(ConfigEnum.path_vless,get_random_string(7,15))
121
+ set_hconfig(ConfigEnum.path_vmess,get_random_string(7,15))
122
+ set_hconfig(ConfigEnum.path_ss,get_random_string(7,15))
123
+ set_hconfig(ConfigEnum.path_grpc,get_random_string(7,15))
124
+ set_hconfig(ConfigEnum.path_tcp,get_random_string(7,15))
125
+ set_hconfig(ConfigEnum.path_ws,get_random_string(7,15))
126
+
127
+
128
+ def _v17():
129
+ for u in User.query.all():
130
+ if u.expiry_time:
131
+ if not u.package_days:
132
+ if not u.last_reset_time:
133
+ u.package_days=(u.expiry_time-datetime.date.today()).days
134
+ u.start_date=datetime.date.today()
135
+ else:
136
+ u.package_days=(u.expiry_time-u.last_reset_time).days
137
+ u.start_date=u.last_reset_time
138
+ u.expiry_time=None
139
+
140
+
141
+
142
+ def _v16():
143
+
144
+ add_config_if_not_exist(ConfigEnum.tuic_enable,False)
145
+ add_config_if_not_exist(ConfigEnum.shadowtls_enable,False)
146
+ add_config_if_not_exist(ConfigEnum.shadowtls_fakedomain,"en.wikipedia.org")
147
+
148
+
149
+
150
+
151
+ def _v14():
152
+ add_config_if_not_exist(ConfigEnum.utls,"chrome")
153
+
154
+ def _v13():
155
+ add_config_if_not_exist(ConfigEnum.telegram_bot_token,"")
156
+ add_config_if_not_exist(ConfigEnum.package_mode,"release")
157
+
158
+ def _v12():
159
+ db.engine.execute(f'drop TABLE child')
160
+ db.create_all()
161
+ db.session.add(Child(id=0,unique_id="default"))
162
+
163
+ def _v11():
164
+ add_column(User.last_online)
165
+
166
+
167
+
168
+
169
+ def _v1():
170
+
171
+ next10year = datetime.date.today() + relativedelta.relativedelta(years=6)
172
+ external_ip=hiddify.get_ip(4)
173
+ rnd_domains=get_random_domains(5)
174
+ data = [
175
+ StrConfig(key=ConfigEnum.db_version,value=1),
176
+ User(name="default",usage_limit_GB=3000,package_days=3650,mode=UserMode.weekly),
177
+ Domain(domain=external_ip+".sslip.io",mode=DomainType.direct),
178
+ StrConfig(key=ConfigEnum.admin_secret,value=str(uuid.uuid4())),
179
+ StrConfig(key=ConfigEnum.http_ports,value="80"),
180
+ StrConfig(key=ConfigEnum.tls_ports,value="443"),
181
+
182
+ StrConfig(key=ConfigEnum.decoy_domain,value=rnd_domains[0]),
183
+ StrConfig(key=ConfigEnum.proxy_path,value=get_random_string()),
184
+ BoolConfig(key=ConfigEnum.firewall,value=True),
185
+ BoolConfig(key=ConfigEnum.netdata,value=True),
186
+ StrConfig(key=ConfigEnum.lang,value='fa'),
187
+
188
+ BoolConfig(key=ConfigEnum.block_iran_sites,value=True),
189
+ BoolConfig(key=ConfigEnum.allow_invalid_sni,value=True),
190
+ BoolConfig(key=ConfigEnum.kcp_enable,value=False),
191
+ StrConfig(key=ConfigEnum.kcp_ports,value="88"),
192
+ BoolConfig(key=ConfigEnum.auto_update,value=True),
193
+ BoolConfig(key=ConfigEnum.speed_test,value=True),
194
+ BoolConfig(key=ConfigEnum.only_ipv4,value=False),
195
+
196
+ BoolConfig(key=ConfigEnum.vmess_enable,value=True),
197
+ BoolConfig(key=ConfigEnum.http_proxy_enable,value=True),
198
+ StrConfig(key=ConfigEnum.shared_secret,value=str(uuid.uuid4())),
199
+
200
+ BoolConfig(key=ConfigEnum.telegram_enable,value=True),
201
+ # StrConfig(key=ConfigEnum.telegram_secret,value=uuid.uuid4().hex),
202
+ StrConfig(key=ConfigEnum.telegram_adtag,value=""),
203
+ StrConfig(key=ConfigEnum.telegram_fakedomain, value=rnd_domains[1]),
204
+
205
+ BoolConfig(key=ConfigEnum.ssfaketls_enable,value=False),
206
+ # StrConfig(key=ConfigEnum.ssfaketls_secret,value=str(uuid.uuid4())),
207
+ StrConfig(key=ConfigEnum.ssfaketls_fakedomain, value=rnd_domains[2]),
208
+
209
+ BoolConfig(key=ConfigEnum.shadowtls_enable,value=False),
210
+ # StrConfig(key=ConfigEnum.shadowtls_secret,value=str(uuid.uuid4())),
211
+ StrConfig(key=ConfigEnum.shadowtls_fakedomain, value=rnd_domains[3]),
212
+
213
+ BoolConfig(key=ConfigEnum.ssr_enable,value=False),
214
+ # StrConfig(key=ConfigEnum.ssr_secret,value=str(uuid.uuid4())),
215
+ StrConfig(key=ConfigEnum.ssr_fakedomain, value=rnd_domains[4]),
216
+
217
+ BoolConfig(key=ConfigEnum.tuic_enable,value=False),
218
+ StrConfig(key=ConfigEnum.tuic_port,value=3048),
219
+
220
+ BoolConfig(key=ConfigEnum.domain_fronting_tls_enable,value=False),
221
+ BoolConfig(key=ConfigEnum.domain_fronting_http_enable,value=False),
222
+ StrConfig(key=ConfigEnum.domain_fronting_domain,value=""),
223
+
224
+ # BoolConfig(key=ConfigEnum.torrent_block,value=False),
225
+
226
+ *get_proxy_rows_v1()
227
+ ]
228
+ fake_domains=['speedtest.net']
229
+ for fd in fake_domains:
230
+ if not Domain.query.filter(Domain.domain==fd).first():
231
+ db.session.add(Domain(domain=fd,mode='fake',alias='fake domain',cdn_ip=external_ip))
232
+ # for c in ConfigEnum:
233
+ # if c in [d.key for d in data if type(d) in [BoolConfig,StrConfig]]:
234
+ # continue
235
+ # if c.type()==bool:
236
+ # data.append(BoolConfig(key=c,value=False))
237
+ # else:
238
+ # data.append(StrConfig(key=c,value=""))
239
+
240
+
241
+
242
+ db.session.bulk_save_objects(data)
243
+
244
+ def _v2():
245
+ add_config_if_not_exist(ConfigEnum.telegram_lib, "python")
246
+ add_config_if_not_exist(ConfigEnum.admin_lang, hconfig(ConfigEnum.lang))
247
+
248
+ def _v3():
249
+ add_config_if_not_exist(ConfigEnum.branding_title, "")
250
+ add_config_if_not_exist(ConfigEnum.branding_site, "")
251
+ add_config_if_not_exist(ConfigEnum.branding_freetext, "")
252
+ add_config_if_not_exist(ConfigEnum.v2ray_enable, False)
253
+
254
+
255
+ def _v6():
256
+ try:
257
+ Proxy.query.filter(Proxy.name=='tls XTLS direct trojan').delete()
258
+ Proxy.query.filter(Proxy.name=='tls XTLSVision direct trojan').delete()
259
+ except:
260
+ pass
261
+ # db.session.bulk_save_objects([
262
+ # *make_proxy_rows(["XTLS direct vless"])
263
+ # ])
264
+
265
+
266
+ def _v9():
267
+ try:
268
+ add_column(User.mode)
269
+ add_column(User.comment)
270
+ for u in User.query.all():
271
+ u.mode= UserMode.monthly if u.monthly else UserMode.no_reset
272
+ except:
273
+ pass
274
+
275
+ add_config_if_not_exist(ConfigEnum.is_parent, False)
276
+ add_config_if_not_exist(ConfigEnum.parent_panel, '')
277
+ add_config_if_not_exist(ConfigEnum.unique_id,str(uuid.uuid4()))
278
+
279
+ def _v10():
280
+ all_configs=get_hconfigs()
281
+ try:
282
+ db.engine.execute("ALTER TABLE `str_config` RENAME TO `str_config_old`")
283
+ db.engine.execute("ALTER TABLE `bool_config` RENAME TO `bool_config_old`")
284
+ except:
285
+ pass
286
+ db.create_all()
287
+
288
+ rows=[]
289
+
290
+ for c,v in all_configs.items():
291
+ if c.type()==bool:
292
+ rows.append(BoolConfig(key=c,value=v,child_id=0))
293
+ else:
294
+ rows.append(StrConfig(key=c,value=v,child_id=0))
295
+
296
+ db.session.bulk_save_objects(rows)
297
+
298
+
299
+
300
+
301
+
302
+ def get_proxy_rows_v1():
303
+ return make_proxy_rows([
304
+ # 'WS Fake vless',
305
+ # 'WS Fake trojan',
306
+ # 'WS Fake vmess',
307
+ # 'grpc Fake vless',
308
+ # 'grpc Fake trojan',
309
+ # 'grpc Fake vmess',
310
+ # "XTLS direct vless",
311
+ # "XTLS direct trojan",
312
+ "XTLS direct vless",
313
+ "WS direct vless",
314
+ "WS direct trojan",
315
+ "WS direct vmess",
316
+ "WS CDN vless",
317
+ "WS CDN trojan",
318
+ "WS CDN vmess",
319
+ "grpc CDN vless",
320
+ "grpc CDN trojan",
321
+ "grpc CDN vmess",
322
+ "tcp direct vless",
323
+ "tcp direct trojan",
324
+ "tcp direct vmess",
325
+ "grpc direct vless",
326
+ "grpc direct trojan",
327
+ "grpc direct vmess",
328
+ # "h1 direct vless",
329
+ # "h1 direct vmess",
330
+ "faketls direct ss",
331
+ "WS direct v2ray",
332
+ "shadowtls direct ss",
333
+ "tcp direct ssr",
334
+ "WS CDN v2ray"]
335
+ )
336
+
337
+ def make_proxy_rows(cfgs):
338
+
339
+ for l3 in ["tls_h2","tls", "http", "kcp"]:
340
+ for c in cfgs:
341
+ transport,cdn,proto=c.split(" ")
342
+ if l3=="kcp" and cdn!="direct":
343
+ continue
344
+ if proto=="trojan" and l3 not in ["tls",'xtls','tls_h2']:
345
+ continue
346
+ if transport in ["grpc","XTLS","faketls"] and l3=="http":
347
+ continue
348
+ # if l3 == "tls_h2" and transport =="grpc":
349
+ # continue
350
+ enable=l3!="http" or proto=="vmess"
351
+ if not Proxy.query.filter(Proxy.l3==l3,Proxy.transport==transport,Proxy.cdn==cdn,Proxy.proto==proto).first():
352
+ yield Proxy(l3=l3,transport=transport,cdn=cdn,proto=proto,enable=enable,name=f'{l3} {c}')
353
+
354
+
355
+ def add_config_if_not_exist(key:ConfigEnum,val):
356
+ table=BoolConfig if key.type()==bool else StrConfig
357
+ if table.query.filter(table.key==key).count()==0:
358
+ db.session.add(table(key=key,value=val,child_id=0))
359
+ def add_column(column):
360
+ try:
361
+ column_type = column.type.compile(db.engine.dialect)
362
+ db.engine.execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}')
363
+ except:
364
+ pass
365
+
366
+
367
+ def get_random_string(min_=10,max_=30):
368
+ # With combination of lower and upper case
369
+ length=random.randint(min_, max_)
370
+ characters = string.ascii_letters + string.digits
371
+ result_str = ''.join(random.choice(characters) for i in range(length))
372
+ return result_str
373
+
374
+ def get_random_domains(count=1,retry=3):
375
+ try:
376
+ irurl="https://api.ooni.io/api/v1/measurements?probe_cc=IR&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
377
+ # cnurl="https://api.ooni.io/api/v1/measurements?probe_cc=CN&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
378
+ import requests
379
+ data_ir=requests.get(irurl).json()
380
+ # data_cn=requests.get(url).json()
381
+ from urllib.parse import urlparse
382
+ domains=[urlparse(d['input']).netloc.lower() for d in data_ir['results'] if d['scores']['blocking_country']==0.0]
383
+ domains=[d for d in domains if not d.endswith(".ir")]
384
+
385
+ return random.sample(domains, count)
386
+ except Exception as e:
387
+ print('Error, getting random domains... ',e,'retrying...',retry)
388
+ if retry<=0:
389
+ defdomains=["fa.wikipedia.org",'en.wikipedia.org','wikipedia.org','yahoo.com','en.yahoo.com']
390
+ print('Error, using default domains')
391
+ return random.sample(defdomains, count)
392
+ return get_random_domains(count,retry-1)
393
+
4
394
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
395
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product