hiddifypanel 3.0.0.dev63__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,72 @@
1
- # 2023-04-08T15:11:21.687850
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00?\x0e\x00\x00\x12\t\x04\x00\xf9"\xc6\xa9\x9f~r\xfc7\x92\xcfQu\x7fp\\\x00\x00\x00\x00\x00\x00\x00\x00\xbag(l\x99\xda\x82\xf1\xde\tw\xbf\xaa\xa5-\x84\xdd\x7fVBX\x0et-\xc5)\x80`\xc9\xc7\xdeK\xbc\xa7i^C\x19\x05\xeb/\xd7ZWq\xaaEMZ\xd7\x8fP\x87\xd2\x1e\xe2\x9a\x96\xb1\xce/M/\xf0\xb9\x1c/^\xa2\xdb\xcb\xd1\xaaO\xdf\xa6.;?\xef\xf8\x07\xdd\x82:\xaa\xd1\x99\xaa\x85\xf4$\'\x06\xc9\xa1\x06\xa0\x10:\xc9\x02o\xe3-\xdb\x80,\x9eT{\x95Wa\x88\x83f\x83YN\xf1u\xd4D\xceUb\xa8\x81F\xc2\x83\x17><\xc8\x11\x05\xdb\xf8\x14RP)!\xfe\xf6\xa5h\xb1\x0eOya\x12 \x06\x1bsI.n\x1a\xca\xfbX|XTV\xb3\x1e\xbb\xabb\x94\x1e\x1a\x9e\xcal\xbf^R`\xa5\x95\x81cr\x85p\x16;\xeb\x11(2\xe0\xd9CE\xd6\xebd\xecR\xb6i\\/\xe8\xf3\xef\x16\xd2\x1b\xf3\xdaT\x13\x80G\x92\xf3Z\xf1.@|\xf4\x08}\xc8\x81\xe6UJ\x921z4\xf2\xce\x16\xc09\'2\x83\xccS\xa6\xee\x99\xd9\xc0\x8dQ\xf6\xb2B\xd3\xe8lp\xe9\x1d\xe5n\xa2\xba\xe3r\x18\xcc\xfdM\xb3\xce\xab7\xe8\xe95$un\x08\xc8\xbfP\xda\x1e\x1e\xc6\xa5Z\x9b\x19B\x9c\xac\xca\x9a\xa6\xffs\x12\x82\xc9&V\x91`\x1d!\xcc^\xae\x01\xf3c\xa2\xba^\x9f\x10\xa3@\x1a\x02%\xfb\xd9\xb9\xe9\xc6\x96\xc9+Z\xae\x8a\xc0\xa33\xe8\xd9x\xef.\xf13x\xe7%\x0fx\xef\xee%)a$:\xa1\xa9#\xd6\x9d\x884\r\x90\xd1is\xc7\x9c\xbe\x83 8\xb2\x7f%\x10\xb9t,IPq\xbcr\x9c\xb2\x16\xd0\x85\r\xaf\xa542Z\x99l\x9e\xde\x00?\xa1\xaeV\xff\xe6\xcc\xe0\xefR\xd13\xf9\xa6\xc2N&@\xe1\x008\xbb.\xb9\xe6\xc4h%I\x02\xa8\r9\x0e\xfc\x13\x14 \x7fa\x07\xcdz\x0by\xf5&)3\xc6\xc3\xd5)O\xb5\xa7\x8e\x90\x90K\xc9\xe9\xd1\x16B\xf2K\xa3\xb6\x8dI>\x0c\xfb\xb1\xf9\xa2\xf9\xff\x9a\xd2\xba\x13;\xa3zJ\xba\x80\xb8\x85I\x10\x06\xc7\x90@^@\x9c\x9f?r\xd4U<+M\x94#e\xd5\xa5h\x82\xd3\x88a\xb1a\xef\xf3\xad\x88\x1a\xb4\xb7\x079\xba\xdc\n\x9e6Z+\x84\x9a\xa7\xd2"\x8a\xc6q\xc9\\\xc7%\x90j\xca?Dz\xc7i\x1e\x18\xd1\x1a\xe5\xd3~>\x9d\x9d\xc6\xac\xb7\xe3\xc9\x11\xd0\xaf\n\x03\x15\xfd, \x81\x17OI\xf6\xe5Lp7\xa1A\xb1\xf3\xe1\xd8\xe5}\x83]\xd3\x02\xc7\x96\xb0R\xe5<$\xa2\xac\xf0\x9e\xad\x0c\xf7\xe4\x92(\xe8\x1f_l\x16/:\x97\xb0&i\x1c\xc9\x9f0\xaf\x9b\xbb\x85K@J\xfe\x01\xdd\xbc\xbc\xdd\xb5\xa6\xd3\x8bo\xc2\x11\xfd\xb9\x80]x\xd7m\xeb\xd1\xc3\xf0\x9a\xa1\x9e\x97n*\x1d/\x83[W\xb8\xa1\xca\x06S\x01\xaetF\xb8WT5\x1dRX\x95\x84\xb7\x8e\xb8/v\xb1Z/\xbb\xa3f/W\x17\xdb?8\x9e\x84#}\'i\xd2\x98K\xad\xa7\n\xbb\xe1U\xb9\xab\xe4L\x1a1\x07`\xe0\x84\xb9\x86\xd6\x83\xf9\x00\x85\x18NU]R\xc8\xfd#\x12\x1c\x9dwY\xbc\xadz\x83\xbf\x8c\x81\xceY!l\xd0\xb1\xe96p\xf1\x92@SR\xd3\xb1K\xcd\x8ck\xc6`\x0e*\xc4\xa9\xb3\x84\xa4\xed\xd5r\x18v:\x1c\xac\xe7\xd8_M\xf5\xa2+\x94\xd2*\xdbW\xe4\xa4\xbb\xbc7z\xaf\xee>+\xb7\x98L\x0c\xcf.8\xc4\xe0\xce_\x9e\x8d\x8e\x97\x8a(b\x00\xe6vb\xde\x01\xc1\r\xa5\x12\xbfn$\xdf\xd8\x1b\x84\xf3\xa05\x9b\x8et\x83Tw\x04E\x9d\x1fw\x96\xbf\xab"\x04\xef\xb2\x9b\x9c|\xbe\x12\xc0\xa544C\xe3d`\xaaE{\xa6\xd50\xe5\x8c\xa1c\xdc\xe5r~f\xa6q\x80\xa3;_\xe8\x02)\xae\x93j\x8d\xab\xdf\x82\xfe_\xa4a\xb5\xe8v\xbfy\xa3\xb5v\xf9\xa2t\xcbb\x9e;\x80\xe0Ii/UH$ \x81\xcd-\xdb\x94&W\xcf\x13m\x9c5\x15\xfe\x08h\x19qbAQfB\x06a\xf8k\xfd\xdc\xc5\xef<\xa8G-\xef.3\xc9\xd7\xa2\xc1\xa6\xd7\xcb\xffZ\xd3i\xf5\xc9\x13\xeb\x01J\xf2\x97\x15\xea\x07\x0b\xf5\x07\x85\x8e\xa8\x08\x8cO\x86\xcc\xa1?w\xef+P\xbe\xfdi\'Pu71,O\x02\xfaW4\xb3\xd0\xe3\xa8\x86\xb0N\xeb[!\xc0%\x90\x9b7rx\x17\x0f\xc4\x80\xac\x0f\rpCaM\x18q\rg\x9f\xb3\xbe\t\xb9~O`\xed\t\x10\xdcD\xe9\x04\x9d\x15z\n{\xaf\x80\xe6\xd6\xaa\xab2\xaf\xa3Y\xe1\xa3\xe8l\xc4\x11\xeaf&\t/\xd9D\xcf\xa7\x7f\xa3\xb8\xad\xd7$\xb3n\xd5\xab^\xea\xa3\xa2\xf8k_\x84\xd8\xb5\xa8l\xda\x81\xa6\xaf\xe0\xac\xdd\xf1\xbe\xad\x05"\xef\xf8\xbf\x02\x80O.\x84\xed\\\x15\xf0\x08\x1aj\x1eLQ\x9e\x99\x9d\x1f\xbd\x1a3\xd8\x00\xe1\xc6p\x98\xfe\xb7X4$\xaa\xae\x9f\x9b6 {\x9a\x98\x04_\x1f\xebY\xb2\xef\x83:5\xe4V\xa0q4\xdf \x91o\xda~`\t\xd98\xd9n\x88\xca\x13\x88[\x9b\xe8]\xd7\x1d\xb4h\x98\x94`\xbd\xf2\x8alrY\xc01\x96\xae\xd1:\xc8\xa2@=p\xae)\xbdt\xb9\x1f\xc0\xae\x0e\xfe\xcc\xf5\x94\x8f\x9b\xf0\x91\x81\xdff\x97\xb6\x94\x88Z\x13\x11^\x98\xe0\x11\x81\xac\x98\x06Z\xf7 \xeb@\x1a:\xee\xc2\xa1f\x06\x05\x1aEL?~\xfeMF\xa1*W\xa8\x17c\xf7u\x89\x84\xb5\xad_\x0b\x9dW\xfb\xd6\x1fv\x17M\xfe\xd9h\xd4\x17\xbe\xa3QV\xb8\xa0R\xde``\xd0=\xf6\x16=A~@\x8e\x15\x9fQ\x1cB\xd1;\x85\x01\x1f\xd93\x01h\xe6\xc8\x88 +u\x05Y\xdd\x8b{\x01j\xaa\xbd5\xdc\xa2zZv\xaf\xfc{\x80b\x99\xd1\xb2\xa3\xd1ik\xd71\x18)T!t\x7fI\xa3j\r\xb7\xfc\t\x10\x96\xe6 \xa6\xf0\xb5p\x16\xbd\xe7\x19\xa5\xb9/(\xafX\xc6Y3\xb3\xc6a\xf9\xe10m]\xd8\xf6\t?\x12\xab\x02\xdaY\xf9\xccm\x8c\xe4\x10\xa4\x00=\xdc\xcb{\xdd\xfb\xe3d3\xab\xd1\xe6\xb9\x9fCH)\xaaN\xd4\xcb\x05\x9a\xde\x00\xea\xe5L\xf0\xca\xe7\x87\x80\xb1\\\x10:\x80\x87\xa4\xd3\xf9\x9a\x8d\xb3\xac;\xcd\xa0j\'\xb7}\xd7\x85pp*\xfd\x05c\xb0s\xbbI\x87\x7fz,\xbfWu\xb7\xd1!\xa1\xc3\x81\xf1\x83\x95\xccw\xcbHK\xee\x89\x9f$\xe5i\xea\x7f\xae\x04\x157\x96\xcf\xc3!\xdf\xb7\xce\xe8K\xf6\xd9\x13\xabz];\x9c)\x91\xc9\xa1\x80\x82\xa0\x8a9\x07\xbcL\xb8\x02\x07\x8d-U|~\xd9\xe3\xaa\xcbY\x9fk\xb6\x9d\xda\xdbuE\x10\xb7l\xb12j\xebt$9\x804d\r\x8fS.\xbb\nQ\xbf|o0\xbd\xf9\xa5\xd2ls!\x18\xb0\xc2R\x8fQ\xa3r\x03b\x8e\xb6~x\xa4\xcb\xa4\xdf\xe3zLOP\xedBd~ \x1a\x83\x1f\xd9\xe8\xae\x85 \x08\xcd\x98Z\x05\xac\xa2EZ\xf1\x06\xf3\xddiaL\xe3\xba\xce\xc4N\xb1\xaa\x15\x10\xd3\x05iN\xea+\x8a\xed\xb5\xddt\x95B\xbc\xec\xbe\xad\x8d\r9\xe8\xa5J\xe7P\xdc\r\x9bgN\xd2\xf2Hhf/\x90\x9156\xf1d\xf5V\xd1\xa1\xfe\xc6\xc2\xb0\xb2S/\xfd\xd0\x18*\xa1PQ\xd6nY\x1b"\xc9\xc5i=\xf8\xcc\x845\xbb\xc98\xc9\x86\x1c]\xf0\x9e@%D\xdatg7q\xd1zy\xe1\x87\xa4~\xf1\x85\x9cEu\xbf"{\x9dd\x0fN\x1a\xba\xb2\xde\xfa}\xb8xA\xa5\xb2\xd6\xd7\x07\x1cO\xa2\x87\xf7\xbf\xc1\xf7\xcd\x8fv\x9f\x08\xe9:\x1bOH\tP\xd78\t\x942\x0c\xd5g\x90\xf4<tc\xca;\x9fG@q\xe0\xa8\x02\x80\x9d\xf5\xd8_\x8e)\xfc\xd9~\xe8oM\x0cp\xde\xf18\x01\xff(\xab\x8c>4\xd6\xa7\xceX\xcb\xb7\x8da\x8e\xc8t\x92\xac0\xda"JNmm\x17W\x00bW}\x8b\xdf\xb3\xc8\x05\xcf]\x16zo\x15\xcf\xd3\xb8v\xb2\x08\'\xb5V\x9a\xef\x18\xad7\rV7\x18\x95\xce\x89\x15\xd6\x18op\x0c!\x80\x10\xdc\x07\xf6\x8c\xe3D\xb7\x9f\xa5T\xb0\x00\xe3\xc3\xa8\x02\x0e\xd6u\xdd\x8c\xc4\xadLD\x04\x9c\xeb]\xec\xf9\xcc?\xf3~\xe0M\xa2\xa8@\xd7\xfe@<\x8d\x05\x94\xf6_I\xf3\xc1\xc9\xd2\x83r\xac\xe5J!,\x8dH\xb2t\xa5@r\xbc\xfb$Fw\x06d4\x82vm?\xd5g\xbe<\xd2\xe3p\xd0\xee\xef\x8e\xab\xce\xa6\xea3\xdbS?\xabGTL\xaem\x0cC]\x7f\x9f\n\x10b\xe2R\xb0qYw\x80g\xd9\xd1o\x00`\xad\xb0R\xfe\x94\xe1OOg\x0c:t\xc96\xc6\xd0\x8f\xcfV\xb8\xcc\x92!\x03\xd0w\xe7\x1c\xa1j\x9a4\x0b\x169Ju\xe1\xea\x11p\xab\xae;\xc3)\xb20\xbd\xb5\xd9\xdf\xa6\x01\x18\xaa\x07\xd2\xf0;H\x18/n\xee\t\xa7\xd3\xe5\xd9=U\xee)\x81\x7fh\x99\x8bOj\xc0\x9f\xab%\xa3\xc2\xd6\xff\xc30P\xa6\xc0\x07\xc9Y*\xb1\x01\xf9\xdcra\x1f\xf9\xf5\x8f\x02\xe5U\xfa)W\xa9~B\xdb\x99\xaf\xd6Y\x9d\xc4\x1d\x84\x83d\xca\x83\xd0I\\\xcdI\xc6\x05\xd6,\x88\x82\xc1\xe7\x03D\xff\x1cY\x83Y4\xbb\x90>\\\x96}~I%\x82[Y\r\x9b\x1c\xc2-\xa5\x88\xa2\xfd\x07\xcf\x881\x85\xf0\xc3=\xcd\xa6\xeas\xca\xd6\xb8O\x15\xc7\xc3\xaa\xa2\xd2\x85e\xcaF\xfc\x8f\xb9"\x98\'\xdd\xecH\xbe\xc9>n\xfb<K\xeathUe\xa5\xeb\xb1RjZ&\x9d1\x1f\x1f%uo\x17]~H\x04\x8cn&G\xe4Bj\xa1\x12mG\x0e_Up\x82\xfd\xf9~R\xfb\xce\xa8\x1e\x17\xe1T\x1d\xd7$\x0c\x9a\xad\xa1&I7+g>\x98\xe5C\x91\x97\xc3,s{b\x1e5\xbc\xc9\xbek\xb9\x9a\xea\xf4?\xe6\x99\x8d\x1e\xe3<\xa9?5\xfb\xc9_t\x0f<\xe8E>\xadZ\xa0{\xf9!Y\xfa\xf5\xa7\xad\xb1\xddx.\xe4H\xda\x1b\xeb\xed=\xba>\xa7g\xc6f8S\xef\x846wy\xc9#\x94\x14?\x9f\xf5\x0e\x1a\xfa9\x054\x0fDR8\xba2"4\xfd\xf6\xa6A\x03\xf1\xce\x99\xab\x1aE\t\x0f\xeb%k9C\xa7\x05\x1eI\x91\xa4/\xbd\xc7\x81\xfc\xa0C\xdd\x8a\xd6U%\x90\x8d\xf2\x8f\xab\x83\x11\x01;\xa8\xc3\x8a\xa3\x90\xaf\xd8\xde\xf9c\xfd\x18j\x8f\x88\x80\xa7\x16\xafT&\x92\x03\xc29\xc4L\xae]\xd7\x18\xff\xc5I\xc0\xbb\x00P\x80\xf8Sa\x13\xe5\xd1\xeb\x13=\x19\x84P\xe5\x9c\xf8\xa6s\xdc\xd7\xe4\xd4\xe2\xc0\xfa\xa4\x82\xe2\x9e\x97\xc4\xf9*\xe9\xf8<Y\xb8\xaa\x7f<\xcd\xf6V\xc2\x05f\x0e\x1e\x1b\xf4 \x9d\xf4\x9a\x8b^\xe9\xd9\x02\xc9\xbd\x05\x07\xb0 <\xcb\xd9\x83\x15\xfe\xbf\xf9\xdb\xb1/:m\x89$\x02\x8c\xd4@\x9bl>a_\xc1O\x80\xfb\xc2\x9f\xd7\xc0\xd6\x8e)\x16\x1bk(\xad\xe8\x04\xfb:-\x8cU\xf3\x90\xdf\x92\xca:0%\x9c\xe2\x97U)\x17q\x8cch\xf2\x10\xed\x13\x87\x9c\xce\xbb\x8e\xb3T4G\'\x07\xda?\x12\x8a\x86\xa14\xd0\x15"i\x04\x82\xb6xvx\xe4\xd6}1A\xfa\xbb\x85:\xc4\xea\xc5\x9e:\x1cov\xc7;\x95\x00\x0bj\x01H\xeb\xeb\xd7|L\r\xae\x11\x8d\x90\xdff\xa4\xd1YF\xa4\x96\xc9L\xc3\x12*\xc5\x97\x8a\xfc\xed\x91M\xe3\xa5\xd4\x1e:\x08@\x15P\xf5[\xe1\xd0\x8f\xf9\xb0~\xec;\x16iCW\xbf\xd3\xce\x7f\x9bS`m\xfc\t\xc1\xfd\xa5[\xedwih\xa1\xe9\xd3\xfc\x8e\x9c\xd1\xa4\ntb\xec\xa0>N\x8an\xaa\xd6\xf3)\x8b\x8a#\xda\xdd\xd4\xb8\xf4S\xf3\xc2\x81\xc5\xf2\x8a\\1U@Z\x87\xfc\xbe\x97G\xd32_F\xb5\xf2|X\x7f\xcc\xd6\r(?W\x99\xcca\xc2\xd6\xf9\xb2\xfa{\xfc\x0b\xb2\x96\x11k\xeb\x06\x05e\x9d\x0ba\x01\xd0\x0f.Ou\xcf\xe3X\xd2U\to\xb6\n\x95\x8f\xd4{\xc9O\xd6\x07!\x03\xbb\xcc\x0b\xd6\x9e\xd4d\xb1Y\xb0\xa5\x12\xcc"\xcb#\xff\xdb\x93*\xaaX\x95\x87\x86\xe4K7@\x973>d\xb1!\x17\x0b\xf2#lP\xe6\x10\xd2T\x91\x9f[BXg\x9aG\xd5\x05\x08\xe1\xc5\x84\x15#w\\k\xfa\xf1\xcaa\x03\xd5\x87\x9b\xd2\x0f\xbb\xadak\x8e\xdd?q\t\xa9\xef\xdcg\x8c%\xc9JQ\xfd\xe0h\x057\xf2\xd2v\x18\x044\x19\xf8".\x96\xf6k=\x0b\x8d-\x15\xe8\x9d\x87]\x7f+8\x19\xa0\xb2\x12\xa1\xa5a\x9di\xbas\'\xd6\x00\t\xb5\xd0\x81\xfb\x90\xff\x92P\x95\xc2\xbc\xfb\x97+\xee\x1d\xe4j\xb9[\xd4p\xd31\xa1\x8f\x08\xab\x7f\x1fM\xe7\x8b\xe4qL\xc2b1mF8=\xd1\xd7\xd0QfX\x9d\x14\xda\x98\xb9\x8a\x8b\xb8G0\xe0\x9dz\x843\x9b\x15\xaef{\xba\xe0\xdb\x99W?<p\x80\x94Wm\xc4\xf4\x9b\x06\xb4\\\x0b\xde\xfa\xb6H\x81\xd1\xc6\x83,2HD\x00\xe9g&S\xb7\xbd\x13\xbaH\xe6\xad\x8aj\xf3h\xc8~z\xf5\xfaf\xb6\xc0\xa5\x9c\xc1\x89\x15\xd9\xbb\x13\x95\x8ax\x8c\xf0\xc8\xa1z\xf2A\xfd3\xc8{A5GB\x18\x02\x011\x0cwD4\xa4\xa5`\xff\x971\xf7\x12\xc2=~\x9b\x8b&\x8f\xd8\xecr\xeau\x9c\xf9\x9f\x90\x1aF\xe9\xc9G\x18Rn\xd0\\\x9e>\xffu\xd2%\xe7\xbf\x02\xe4\x1b\xf1\xba\x9c\x96\x8a\xb2\xcbid\xd1\\\x08e\xaf\x1f\xa5nh\x99c\x96V\xd4\x8d\x89\x12{%\t\x1d\x03_\xea\xd1\xa1\xe5sm\xa6M/C\xb8\x85\xd4\xa5\x15>\x15\x90A\x8e\x92b\x00JdRn\xca\x0f\xdbo,\x81\r\x8a\x98\x0bM3\xbb\xc8D\xbd\xe9\xbf\x16bg\xf0\xf8K\xf8A\xc7\xac\xc5\r\xb5m\x81\x80EW\xb4\xaf$I\xab\xc7\x1b\xd5\xf0b\x0e*\xfdj\xc4\xb2>\x1f`m\xac\xe2\xe9D\x9c\xba-\t}P\xf7V\xfcM[\xaez\xdc\x16\x15s\xc8j\x94\xb7\x02f\x1dvU\x9f\xadh\xf5PG\xfe\xf3\x8aD\x93\xd4\xc6\xa9\x1fB@\xe4\xd3\xb23w\xcf\x89\xb2\x94\xb6\xc2\xb5O\x18\xdf\xae\x1b\xe0\'D\xb0\xee\x17\x12\xe8\xab\x8bC\x15h\xb0\x98\xee\xc94\x06\x9a\xa5\xf3F.\x82\x12\x19\x8e\xd7\xf6Bt\xebL)~\xda\x81\xc7\t\x9d\t[\xc4\x0c\xc35k\xcb\xbd\xc3\x1b\x9dP\xc5>\xa9\x99_c\x00\xc4\xe5Kk\x07\x9e\xe1\x82:8\xf3\x12\'\x0e[6\xa1\xf1\x0e\x80[\xe3\xee\x9a\xaf"\x0eoG\x88\xa0\x98\xf3B\x8d\xecR6~\xc2\xc7\x07\xc1\xf2\x11\x15\xc4=\x81\xdd\x9dk\xcaE\xfd\xe6\xe3\xc3\xc8E\xa2\xfe(*\x15\x9b\xa1\x12XlB\x8e\x97\xf9\x15tx\x06\t\xf4\xa3\xfa/+\xd0{_W\xe7\x96\xdc\xfc\xdb\x99\xc2\xf9\xe5\x9c\xa7\xe5\xfd{\x1co\xb4W\xc0*kM\x127\x12\x82\x8bX/\r\xbb\xcf\xb4!*\'k\xdf*\x82\xba\xb1\x9e\x8c\xe8eN|\x14\x8b&\'\xd2Y\xad\x88')
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-08T15:11:21.763451
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00FB\x00\x00\x12\t\x04\x00/<Y\xb0~\xe5\xd7\xe3v^\x13w[\x1d\x8fU\x00\x00\x00\x00\x00\x00\x00\x00\xb4]nB\xa83\x01\xe8\x8an\x17\x82\nV\xe4\xb7\x84B\x1a|\xbe \x087@P\xa0w\x13\x88\xe0@m\xd53\x1a\x94\xab{G\xcb\x15\xc6\xce\xdd+\xb2\xc7\x08\x8e\xf9p\x1e\xaa\xc8\xce\x11\xac\x88A$1\x8c\x8cg\xae\xc2\xcb\xa7\x9d\xf8\xef\xd5\x906\xde\xf2?C82\xeb\x9dt\xb8\x03\x02oYLhO\x0c\xba\x18\x14\xb1\x98!r\x8e\xcb(!\x06\xdc\xb6=\x9a\x94s7\x13\xb4/e@*\xae\xdf\xfdk[\x9e\xf7\x8dCKY\xb1C\xb3y\xb9\x91\xff\xb4\x8e\xdf\x12\xfa\n\xb9\xd8\xc4\xf2F0?\x98\x91\x01\xb9\xe6i\xf9\xb3\x12\xd4\xb4\xf9\xf5\x17D\xc1Z\x15Z\x16!\x0b_\xf1\x97\xe0\xe2\x994]\'{"J\xb9\xd6\xd7\xc3y.\x99`\xf1\xfa\xa5\x7f\x18\xdd\xa7\x7fj0\x89\xb3\xef\xd0\xbc\xf6E\xb2\xa6\xaf\xf4g\x9a\xd9\xa3\xce\x9a\xf1\xda\x92\x82\r\xad\x97D\xabe\xd5\xf1~M$\x97\x974\xc7\xaeJ\xcd\xd1V\x86m\x02\x90Qb\x81\xb3\x8b\x96Je"\x96\xde\xdb\x7f\x03\xab$\xa3\xa3\x08\x7f5\xf3\xf8K\xe8\x10D\xc9\x89\xf1%\xce{\xa62\x9b\x9a\x0e\xdf*\xe7\xe5\xe3\x8f\xc7\xa6>\xca\x9b\xd8^t\x1f\xa0|\xd8i\x03\x12\x10&\xf2>\xf3\xecs\x8f[\xce\xef5d\x1c\x86$I\x0fX}u\x16\xd3\x9cJ\xd2\xbb;f8\x0b\xa7\x84\x8f\xb5E\xac\x0b\xe8\x052\x81\xa1\xa1\xfce\xbe\xa5\x92\xa0\xcf\xde\x8b\x1a\x8f\x83-\xb9\xa5\xa6z\x92\xb7a1Sm\xb0\xdboD\xb4Q\xdb\x94~\xe0]M\xa2\xcd\xc0<1J6gF\x1e\xa7,3!\n\x96\x14\xbcw\x0eUW?\x89}\x05\x10\x02yF\xad\xb7\x82RI\xd9\x12\t,\x13e\x8f\x89\xcc\x15mS\x7f\xc8n\xa1\n5h>\\\xa1\x94$\xac\xe8\xfek[\xf1\xd7\xcd/\xf4T\x8fP\x81\x92Xx!O`sr\x8bL\x8dm`\xcb"\x13\xfb"&>`\xbbn\xe3\x93\x9a\x17\xca\x9b\xcc\x1a\xa12i)I\x96ewD\xcb|V\x16cN7\xac5\x05\xfcsn\xf4}\xd6F;#\xcd\xbf\xc8wR\xf0\x90\x87zS\xcbO\x1d\xa2\xeb\x97cLhutu\x8c\x9b\xe8\xea\xf7\xcb&\xfc\xd3\x15\r=I\xe5\xf37M`IV\x07)v/E\xdb8\xc3\xcc(\'\xecgc\xda\xd9\xa0\xf9\xcf\xa9\xf3\xfdX"gO?Cu\raj?\xfc\xe1\xa4mD\xfev\xe1r\xc3\xe6\xf1\xb8\x15H\x99\xf6\xe6\xfa)y\xab&\x93\xa3\xcf\x85\xbc0s\xda \x8a\xca\xf5\xd7 \xb1\xcc\xfc\ru\xef\x86rzmt?\xb3\xb0Bo~\xdb\xcfH\xe7\x05>\x0c\x93:\xbf\xc2\tY\x9dz\xbe\xd4>e\xeeP\xa3\x0e\x14\xc9\xb4\xe5\x89\x04\xe2A\x81D\xa4\xa0\xe6\x1e\xda\xc4\xe5~\xc0\xf3\x11Y\x84\xceO\xb3\xdd\x02z\x86\x89\x8a\x16\xbd\x992\xcafm\x90\x92>\x19a\r\xd5\xe9\xf1G\xc1\xf6\xf1\x91\xe3IM\x86N:\x01\xfd+\x96qV\x05\xde\x12\xb4\x9b>j\xe7\xba6Dc`\xfb:\xbb!\xed\x10\x8cwN\xc3\xdaD\x17(\x87\xd9\xc2\xe7z\xcd^\xcf\xda\x16~\xbc\x10\x02\x81\x13\xc2\xe7U\x82"9\xe3-\xa6y\xa0\xfeK\x0f=)8\xf3p\xb5\xf7W\\Hfm\x907\x0b\x06\xc8F\x10\x8dm\xfd\xe2n\xb2\xfc\xa1\xfc\xa7\xc8\x9a\xde\x04\xfb\xf7\x99\xe9>\x88\x81\x99\x95T.\x1d\xdc\x87\xa3\x8f\xe0\x88\xac\x16E\x05\xf7\xa4/\xbd:>\xa5r\x0c\x07\x8aA\x83\x86J\xc6\x98\x89R%\x81\xb7\x086\n\x9c\xe1\x08\xee\xea\xb7\x89(\x13]\xf1\xd8\x90\x00\x98K\xfd\xd8g\x0c\xc5\xaa\xbf\xb40-5d\xc8\x01\xf6v\x995\xc3%\xf1\xec\xffj\x07>o3\xb0\x06\xeb\xce\xc1\xac\xc99\x1a\x90\xfb\x0c\x87\xcdB\xd1\x9e3p-\x8e\xfe\xc7\x0fy{\x07\x1ap\x1a\x14\xf9vC,\xce0\x99\xf8z\xaa\xbcJ(\x14\t\x11`b\x93*\x1b\xdf|\xceHH\xf5\x8c\x1e\\\x13\x18U4K\x1dz\xa3\x88J\xb6\xcc\x88\xadHo\xa2\xc1\x1fr\xcbJ\xd2\x04\\6\x83\xedM\xb4\xf1Q\x81\xe3EZ\xca\xc9U=\xaf:\xec@\x1a\xe8\x99e\xb0[J\xb0\x84m\xbd\x1f\xb9\x1eZT\x1e8\xcfG\xd9x\xaf\xa1\xd4\xc95\xd3j/\xcc\xd8\x0f\x9e\x89\xb1|\xf6\xb2vcU\x08\xf8\x8d\xcc\xac\xa2".!\xf6\x9dK\x8e\x12\xc1I\x98\x1bAxNb\'\x872\x08\xf0_\xc9,\x82\x12v\xb4[~\xbf;\x85\x8e&\xb2\x97,p\xe7\xda\xe6\r\xb7\x00\xc7\xc6\xb4\x9f\xd4\t\xde\xf2\xf0i\xc4\x85\x992HV\xf4\x80E\xe7\xdd\xd7Z\xe7\xb6\x0b\x8a\xc3W\xf7g\x11\x80"\x06W\x15\x92\x1a\x85\xdd\xcb\x1e`\x16\x1d\x0f\xa2\xee\xbd\xe8\x91nb\xda\xd2\x826?\xa4\x07\xbf\xae\xf5\xebG\xac~\xb6\xbbq\x18~q4t+qf\xf6\xbcl\xd7\xe8\x82z\xa9\t:U\x14\xb8\xbdJbS\xebBL/\x18\xee`\xec\xe3\x8bQsd2\xf8\x85l\xc2\xb6\xe8d\x08?6\x17J>\x878\x9f}\xc5\xde\xbb:\x9er\xf4\xd2\xf5\xaa\xfe\xf2\x11\x19j-:\x13+q\x0f\x03v\xbe\xba\xf2\x92Z-r*\x94\x0c\x9c\t\xa7[Jj\x83\x8c\xfc5\xe1\x145q\xa9\x12\x1er\xae\x81io^\x87K\xa5\xc7\xe3U4\x00\x9aex\xbe\xad\xdd\x94\xfd\xc7>\x1b\xb0\xbd\x07\xa2\xc6>#\xed\x966\x90\xe8\x1eQ\xc6N\xbaa\xe3Fo\xf9\x81\x10\xacR\xb1A\xec\xda\x06\xacc\xbd\xa2!\xdai\xa3\x95\xfc\xcbMN\xff\xa9u\xfb\xcf\xba\x9e\xa7\xdf\xca\x8cc\x9d\xc6\xa3S\xe6\x9cJ]\xe1}\xab#\xfd\x94\x8f\x1fC\x90?Q!\\\x0e\xd1\xfa%1\x98\x8c"b\x83\x81xBM\xfd=^mpT%i>\xd9G\r\x91\xe4\xc4\xe6\xa2\x13\xb7\xaa\xb24\x9c\x17\xa2\x8bW\xe9\xf4\xb9\xcc\xfaP\x01\xa3\xd6 \xfbZ\x1b$\'\xac\x9c\x05\x02\xb8A\x0c\xc70\xea\xb2\x97B\xde\xf7P?U\xe0\x8d8ec\x83\xef\x95\xc7X\xe0p\xb86bf`\x82^\xc1\xd8\xe4p\xeaX\xc5\xac\xc3\xb7\xf6pol\x84\x86\x93\x1f\x93R\x8f\xc6\xfb\x93\xd3\xae\xf7\x89fO\xad\x98i,L\x87\xc9\x8a\xad\xfa\t\x14\xf3\x91\xc0\xa5\xc7\x83\xb5^n\x80\xe9\x1f\xcc\xf9;\x9a\xfc\x19\xc3\\s\xba\x80\xc8\x00]\xd8\xe3\x93Eh\x18Cm\xd7\x15\xd0C\xe7\xd0\xeeVB\xfa\xcb\xa7\xce\x1cF\xda\x86\x13*f\xe1$7_`\xd2\x93"O\xc9\xa1\xbe\xcb\xd0@T\xae\x9b\x97eh\xc8a!\xdbS\xc1\xf3\x14e\xc8\xb1\xa1Z\xac\xb4\xa3t\xedK\x1c:=kr\x1c\\\x08\x19\xb1\x88\xb5qH\x10\xde<\xf2%"9\xeds\x02\xe6HT\x03\xaa=\xc8\x03g\xabK\xfb\xae?\x95v\xfd\x9c\x1d~\xe1\x8f\n9}\xc6\xe2\x12\x80\x1e\xe0S\x13\x19\xbd+g\x8eO\x89\x86\xe94\xa9\xf2\xeb\xe2\xd5\x97\xe6\x18\xdcoy\x1c\x1e&\xaa\xd9\xfd\xde\x9d=\xd7K\xc9G\xd9\xcbVZ\xba\x00gh\xd0\xfa\xce\x86y\xb2\xf6\xac\x9a\xae7\x04\xed\x81\xc9\xaeG\xaa\xd4O~0+\xd5\x8f6\x98#M\x93\xbc\xc7g.|\xdb\xaf#\xd3\x18}S3\xbdu\x16\xc4(Vs\xdcu6\x9a\xb2\x8f\xc3^\xb9\xa6\xb3\x8f\x1c\xaf\xd5\xcd\xb4c4\xc0\xdf\xca\xb3O\x18\x1b\',{\xe5b\x10?\xc9\xc9O\x15\xc9\xfd\xd3\xff\xb0\xe4\x19\x93\xa5\xec\nOco7\x11,\x97x\x97\x99\xcd\xa2\x17g\x1b\x82I\xa4\x14\xb9LC\xd5\xf3[;\x13Zf\xf9\x1b\x97\xd6\xbb\xc1\x9f\x01\xc4W(sm`\xe2F-G\x08/#m|\xb2B5\x9f\x9c\xd34\x08\xd5\x04\xc3\x1d6\x97\x15:f\x00+\x1b\'\x1f\x1c#\xc7\x02\x07\xf1\x98\xb4t\x06\x932K4\xc5*+\xbe\xccLO\xa8\xe5\x16\xd0CI\xe1\xf5u\xef\xa9\xa8\x16\x01T=\xeah\x1fn@|,\x16\xb3\x93\xad\xe6\xa0\xba>\xa0\xf2Xf91B\xdb$\xd0\xc7:\x90\xd1(\xe9,\x91\x1at\xa1\x9dq\x8a\x7f\x1c\xf9\x0b\x03mz\x9a\x00\xccv\xd1;\xc4,\xb3\xae\x96\xe5\x9e\xbf\x8f`\xf3v\xbe\xe2-\xfe\x87\xcb\x92\x01\xac\xe4\xaf\xe0\xea\xed\xfd\x92q:\x93\xda\x93\xe6\xab5\x01\x07*.\xf8M\xe1\xc5\x0e\x12.2\xdf|\xb2\xc8%Z\x8b\x90\xe0\x1e\x96\x7f\x80@%\x8d\x9f\xa3\xe6\x83+\n\xcc9\xf4\xa4\xd8\x86\xca\xa5\xc3\xb3\xe7\xa5\x83Y\xd8\x06(X\xd2\x02<\xd8\x08\x81$\xdf$\x1cl\x81\xadko\xaf\x17\x0ec\xfd\x9foH8#\xa0n\xb5d_b4V\xb2/\xfa\x00\x93\x86\xbf\x1c`\t\xf6\x06\xc8\xc4\xe9\x1f\x97\xab\xbe\xb6\xb6\xdfw\x1c\xd3\xc1\xbe\x90$\xb4+\x99ZWmE\xbc\xff\xdd\x96Z\x8e\xfdi\xbb\x88saP\xa33\x89>\xaf\xaa`\xa2\xda\x0e\x10\x83\xbf\xd8\xca\xe3\xfc\xa22"\xd6\x0fIJ-\xfa`\x8cc>\'\x9b\x18\x8e\xef\xeb<\xd5\x97\x00I\x0e\x17\x05\x13}\xaf\xb3d\xea\x9c\xe4Y\xea\xe3\x10\x1f\xc0 \xf2\xc7\xa2\x04\xe8\x95\xd0\xe4\xb6\xc9B\xac\xc9^\xd9@\x01\xc7\xbbi\xf3\xaf0,e^=C\x8a>\xa7\xa0E!#\xa4\xc7\xbdUq\x17\x97\x1e\x99\x81\xc5\x1f\xb8P/\xd8d\'w\xd9M{?\xb7\xf4\'\xad{\xbf`G\x03\xdd\x1f\xa5\xef\nQ\xc8O\xc2\xfd\xbc\x8e\xe0Y\x1ck\x18\xaa`\xcc\xfa\x8e\xdc\xc3N\x0buEb\xa0n\xa2k\x8b\xd0C\r!\x1b\xb7\x8b!\xfa6\x06\xe1@*\\\x99\x96\xe8\x7f\xb9\xd7Y\x88\xbc\xc6A\xe9I\xcb>\xc7\xf9\xcc\n\xe0\xc7|\x1f\x8c\xaa@7\t\x87\xff\x80"\xcf\x1d\x86\xe4[//WLE\xce\x87\xa3\x97\xac2\xe0\xa2\xca\xa1\xeb\xcap,\xf7\x0e\xaa>\x03\x9dT\xdc1\x84\x9a\x82\x9ds\xd9\xad\xa34\xcb\\\xfc\xe8\x9e\xbfG\x0b\xec\xeb\xe0y\x97\t\xce+\xe6\x1fb\x11\xa0\x06\x1c3\x0e\xe3h\xadp\x84\x86Cg4\xa1\x83\xf5>\xc7\xd6\xc8Q\xf9M\x04L-{\xbc\xd4\r`\x84O\xf1\x0f(HoN$c\x7f\xaf\x0f\x8c\xa5\xdd\xea\xa8q\xdc\xac/\x90\xa0\xf9\xec\x92H\x13\xf9#\xab\x9b6\x1c{t|\xc9T\xed\xcf4p\x80G\x1b\x15x\x9c\xa7f\xfb\x15p\x1d\xb7\xd5\xe2\xf7w$\xe16\xd5U[\x0e\xc4\x1c\xa7A\x92\xb8a\xc5L\xef\xfa #\x1d\x88@"V\xa7\xe9\xe9\xfa\xf5\x86\xa4\xd2\xffGp\x1f\xa0\xe1}K\x1a>\x15m\x9b\xf4\xe8w\xc2\xabW8\xe4w\x07\xd7\x7f\xf0Qz\xe6\xb2\xf9\x93\xf2\x87\xccs\xe7w9;\xce\xb4\xe2T\xdf\x8ayu\r\x8a0&\xcaF\x94)f\xa2\xb7\xbbx\xee\xa85\xe53jS\x8ep\xceW\xa6\xdd\xc1\xfe\x18\x96\xc8\xdb{{M>\x1e!\xb5j\xaa\x94^\xfcDBp\xec$\x81;H?pQ^a\x9aqW$\xa5\xa6\xde\xb5\xa2}\xbfM\xd8\xb6vb\xb4U)9\xc2\xb0\x89\xe6\x0b\xe9\xf1\x10!\x8b\xf3";cij\xe4\x15C\xd0/ \xa2\x1c\xa6P\x0c\xea\xdf\r\xae3m\x9e\x87b\xbe.\xfb\xed}T\xe7\xc0/\xceF\x1f\x12J#\xb4\xe7\x00F\x8e\xcb>]5 \xbd-&@Q\x8d\xc1\x9d6A\xb0A\xd4\xc7ks\x8a\x95\x1e\xc5\xcd\xa6\x8e\xf0\xc2c\xcb\x19oD\x93\xa0\xd7lkz{\xae\xfe\xbd\xfe\xb2\xc4\x84,\x8cS\xd0\x82\x1a\xedm6\x86\x98\xc6x\x01\x9at\x92\xdb\xccUJx\x9d.\xa9\xfe\xd0\x134\xe3!\xc6\xe9\xe9\xd9\tM?\x93\n#\x00u\x9d\xcf\xf6\xe1\x1fjl6=\xcb\x93.\x04O\x17\xdf\xa3\xc53\x90\xb9\xe9\xea\xe8o\xf7\xd5BHy\x03jd\xf0\xb9\xf1\xe42\x1f\xeb\x176\xff\xa2C\xe9\xd8\xc1n\xc4\xa0~\x1d\x91\x18]\xf4\xbeD\xe9a\xa2\x1dI\xf4E\x9c(fbr\xa5\xa4\x0c\x01\x04+\x9e\x82\xd7\xd6\x91\xd3\xb5\x13\xa3cQ\x8a\xe29(\xaex\xd1\xca\x04\x93\x82\x8f=\xf7\xe6@\xd3\xed\xc8\xcd\xf7V\x9d\xb3\xe8\x89\xe5\x7fv\x83\xa9\x9e\xd5\xe5\xc651E#\xebe\xfd\xbe\x1b\xab9\xae\x15\xda\xcd\xe1G\xba\x10"\\\x83\x99\x11\xc6[h7\x8b`\xd8+~iQm\xa4\xe5R\x9dl\xf2"v\xa4R0\xba\xfb(_\x14y\xe3\x8aR\xcf\xbcg\x9b\\\x8ab;\xb0\x15\x14Y\xa7\x9aT44g\xb3\x0e\xd8\xf8\xcc\xc7\xe1\x98\xa7\xe4s\xf5\xfa\x10bn\x82\xd3^\x14Ee/\xf6\xd2\x8e\xc1\xcc\xc5\xc0\xd7\xbe+\xd4\xaf\xa5J;\xedC\xb3#\x7f\xab\xbf\xf8\x05\xd8,EM\xe8\x8c\xd8!\xc4x\xae\xb9]\xef\x93u0\xb1g\x0e\xf5`\x9a\x17\xc2\xf4\xdb\tRG\xf6\xd4;\xe2[n\r0\t5\xbbn\xd1iJ\xb4*\xde\x13\x99\xe9o\x15F\x90udq\xfec9\x98\xbe,{\xcc)\x94)\x07\xf7\x0b\xa7IR\x99\x1b@\x14t\xe5\x16\x97\xad+Tr+\xe0l\xdb?\xa8\x11\x06)\x01@\x84\x15\xd1pd\x88\xc2\\~3\x187\x91?\xba,\xcd\xf5{\x00QX)\xb0\xdcX\xb3Bv\x8d\t\x9e\xc8e\xc8sx5\xa4D\x17\x9f\xc2m0t\x07\x05\x07\x8cc\x86\x17\xb7i\x9ce_\x0f\xf5.\x06d\xd4\xc5D\x14\xb8\x9c\xc7.\xebP%\xc2\xcdi\x15f\r\xef;\x03\xb5\xde\xc88P-\x9e\x7f\xa7\xb6\'\x7f6\xa6J\x0b$\x7f\xd0q\x06.|K\xd0l\x89\xb4\x87s\xb2\xc1d\xcc\x1d\xa0d?I1x\xfc\xed\x80\xde\xbc\xd0;3(\xc6\xbds\xd3\xd5\xfe\xc1\xa9\x06\xee;\xaa\xa2\xaf\xfc\xb0\x05\xe5\xd7\xdc\xe1\x11%O\xa3\xc5{<%\x9d\xc4\xc6\x1a\xf4p2\xcff\xd5\xd7C9\x1f\x9a\x90\x96\xe5\xb2\x1d\r\x9ax5\xe7d@\x19\xcb\xf3\xb2\xa1L\xfb\x15\xc0]\xc2\xca\x9f\xb92\x96rV\xd2\x8fb;\xe9\x1a\\9\xceVx\xd7vkDB\xdc\xb4L\xc3\xed\x14\x1a!\xa2\xfb\x0cu-\xc5\x13\x88+\x80\x07F\xf5S\xf4\t\xc1\xf9\xcfo\x13\x98h\xaen\x1a1.#\xb1\x984\x8e\x88\xfd\x06\xd50\xa2?j+k_\xe3\xba\xbd\xa2\x16\xf9L\xdb\x88m:\xf7\xf57\xcaG[!\x1d\xb7\x92\x82\xf8\xbf\xa0?\x81\x11\x11\xbai\x86Sp\xc4^T\xeb\xd2\x18zhr>s\xdf\xb6\x03\x14\xdf\xd61\xe8s\xf7\xc12:\xd7\xa3\xa8\xd0M\x97\x07m\xe8rZ\xc6\x1c@h\xfd\x00\xcde\xfd\xd4=\xdd\x85^2v\x15\xcau\xff\xb6\xc2q\xc1AdL\x90\xff\xcd\xdf\x9b\xac\xa2>U\xec[54\x01e\x18{\xf1!\xbe\x04\xd0X3\x8b\x08\r\xfc!\x1c\xb5{h\xf0\xf9\xdd\xafMfX\x84\xa7P\xd0[\xcc\x82\xae#\x1c\xb4\xcc=\xeaq\xfc\x80\xb3\xfd\x9d\xa8\xe3\xde\xfd\xc3\xfe\xe0O?m\xa1\x8a\xea\x1b3aYK\x0bq\xa0\xa0@<{\xa7\t\n\x1eY\x82\x049\x8cU\x05\xf7\xa7\xfc\x00 \xa4$\x17\xc9.\xa5\xb5\xd4\x88tF\xad(#5*\xf14\x07\xa8\xefV\xf01r\xbax\xefTL\x13)E\x83\xfb4Z\xe4pV\x86K\xfak\x93\xd6\xc0]\x8dh\xb4\xc3+\xd8$6w\x97\xb6Q\xf0\x89\xdc\xc3d\xef\x8a\x0eX9\xd4\xdf\xf2z8\x9b}(P\xbbiGE\xb1fz\n\x91\xba=\xe2\xf2,\'\x05\x1cn_\x9bQ\xabo\xf5A\xea\\\xd1@5\xf7\xde\xaeR]\xd2:>\x00\xddi\x0f\x14\x93\x92C\xb2.\xbcL\xd5:s\xcf\xebY\x8e\x0ei@$\xebX\xc2\xed\xe5S\xeb\xf1)\xed|\xbb\x974",\xe4\xbdB\xe1\xeb\x1b\x17\x8fu\xa6/\x01um\x8a\xef\xda\xdf\xca\xcd"\x07\x8c\xdb\xcfR\\\xf77U\x82*A\x06\x9d\x00R\x06w\xce\xc5\x8b\x0e\x8a+\xc1\rs\xe0!J&\r\x9e]\x92P\x13Z\xc8\xc2s\xc1:\x9b\xdaL\xfb\xca\xe2d\xec\xc2\xbd\xa1\xb2\x8f\x9e\x81\xaf\xf4\x1d\x1b\xb4\x02\\\x8e\xb9\xce\x8e\xd0g\x84\xcew4\xb6E\xf8lT\xf5z\xef\xb5;\xa8\x12\xd7~\x84}}\x9f\xfa\x0fe}2\xf1m\xef.\xb4\xe0\xaf\xa6z\xcfvy=\x0b\\{\xb00b\xbe\xa5G\xb9\xf5_^q\xd3\xa3\xd1\xc6\x15Og\xefi\xba\x0e\x1f\xdd\rH;\x1fz\x94T\xcd\xde\xc8\x031\xf0\x8b\xa1\xbc\x9c:\xf7\x07\xe3\x02o\x9b\xfa\x14`\xa7\x96\x0b\xef\x00\x95\x00\xc5\xdc1z\xc1\xecE\x05\xc2\xc2\x17\xf0\xa1O\xeb\x84\xdcAf\xed;\xe7\xd5r\x81l=\x89\t\\\xf4\x00\x96\x01\x00\x81\x9d\xbd\x8e\xd8?z}\x97g$\xa4\xa4W\xa74 \x99d\x12)KU<%\xbd\x8a\xda(@\xcb=;\x0c_\xa4e\xfdX\xe1\xe3\x19\xbd}#T\x1c\xe7\xe8DD\xc0"\xe1\xc2Q\x1c_\x8ft\xc8\xb6i\xbb\x1aYJL\x1d4a<\xb2T\xecx\xf1\x8bB\xfdA\xbf\x861\x80\xa0,@VTa\xd2\t}d\xc2>\x0f\xe7\xa0\x0b[\xd3J\xbc\xf8\x94\x1a\xe4]\xa2\xfbN\xfd\x8bY-g\xe2\xaf\xb5\xd4\x17\x85\xd9N\xfaO\xe4\xdfU?\xcf\xe3\xd5\x9a\x8e9\x9d\x92\x8c\xc5X\xee\xaa\xcd^J\xec<\xdb\xc2.d\x88qw\xd7\x01Wx\xa1\xfb\xa8Ot\xf8\xb3\xf2a\x8c\x96\xc4\x9e\x85\xda\x937XH:*\xc5\xbdnC&&\xe0\x88\xb0X\xa0\x0c(\\\xcf\xbc\xefJa+"\x01`Bbb\xa5\xd6?\xea\\\xc8\x85\xf9\x02\xb8\x85\x88>\xe2\x13\x92\xd0\rj\x90\xf3\xe3>\x9e\xf3\x84oY\xf0\x9d\xc1T;\xab\xc7K\x0f\x0c\x0c\xba\x87cV\x85\xd6\x9c\xbf\xe6\xf9 \x8a\x10\xe5\xc82\x05\xcb\x94Vc\xb5b\xcav\x1du\xf0\x016\xc7\x90^\xf3Z\x1b\x91\x0b#:\xc4"\x956\x9c\xf8\x15c\x0c\xecT\x8b\xf9\xa2>\x0c\xc2\xabZYDb\xfb\x91\x0b\x1f\x9f\x86}\xe6\xdd\xe7\xce\xba\xa5\x16j\xf1\xbc\xfb\xd9\xfd\x89.?\x86r\x0ff\x0bm\xe7W\xe8\xd83\xda\n\x95[4%\xdf\xd8\xe5-\x80\x14\x152\x85\x19d\x8a+\x9f\xc3:\xfd\xfbd\\\xec\x93<\x9a!t\x9d\xafr\x94\xa0\xd31z\xbd<\xa8\xfd\xd2\xc2\xa5\x05\x01\xad\x15K\xda\r\xb7\x99\xd3\xa7a\xa0\xe3\t\x84\x11\xe9\xcf\xba/\xa4\xdf<\x9cQ\xb8;\xaa\xb9\xe8\xe5\xdc\xcaU\xf3\xe5\x81\xab\x83\xaed\xae\xfd\xf7Q\x12I\xf5\xef[\xb6ts\xcb\xd7?\x86\xcd\xd4\xdf\x14\xd4\xd2\xac\xdb\xf1\xd9\xf8W\xa8\xbd\xdc\xb5\x92\xb55}9J\xcaZ\xf0\xdc\x01\xe5\xc5\x80\x8cdPP\\\xa3\\:ha\xe8A\xed\xb8\xdd\xad\x11,.\xf8\xf3\x01\x92\x17\x1c\xcf8\xd6\x93\x97\xf6#\xf3\xab\xde\xa1!\xb4u\x083\x06\xab\x16\x9f^p\x8d\x83I\xd0\x98\xaaHCb>\xfe\xdc\x01!Ae\x8c\x9aFz5a4&\x85\xd1i\x9e\xf0\xce\xe0\x00\x04\x01|\x8e\x0c\x0e\xeb\x17\r]\x98V\x1c\xfe\xc5\xf7\x84\x1c\xcd\xa4\x86\xc4\xdf\xce(#\xc2W\x18\xe4\xd1\x85\x8dB\x82\xc0\xbd\x16\x19\'\xbd\xfa\xc6\x85\x9c\xf6.0M\x9e\xb9q16{\xa7\xcf\x88\x1c\xd4g\xc1\xa1`#\x97C]\x97\x19wn\xc5\xa2\xa44\xe6\x1bu\xe1\xbd\x19n\xbb\xf7t\x19\xad,\xb4\xbfILb%\xf1\x0f\x02\x9aOu\xe4\xee\xc6\xdf>\xd4\x8cP\xf1<a\x89\xed1\x16\xe9\xda-\x92_\x96`0\xf1\xaed%Q\xada\x18\xb4\r\xea2\xb0X\x0e\xea\xc4\xf1\xd8pU\xb8U^/\x82\xef\x1d\x85PHi\xbf\t\x81\xafvq\'a\xfb\x9a\x07\x9cu\x17\xf8s\x05\xb5\x84l\xa5\x87\xd1\x1d\x0b\xf5\xfa0\x827\xc5*\xb8\x00\xfd\xef\xaa%)Y\xd6\xafb\xc2\xa2\xbd\x08\xbfV\x9cs\x1b\x89\xc4\xfa>\xab\x87\xbdWf\xb78\n \x99\x95\x1aT\'\x07\xa3\x1d:\xfdp\x95\xccl\x14q~\xc9b\xd4\x82M\x0f\x0e\x86\x02Z\xae\xa1;\xfc\x86\xfd{M\xad\x01\rx\xb46N7\xa7\xc205+v\xb0\x9a\x90\x1b\n\x86\x00\xcc;\xb3\xaez\x8f\xe0.\xb1\xdde=\xe7o\xc0\x16f\xf2\x86\x11l2\xc6@c\x1d\xf3@\xa9\xf2\x9dM\xbf\xba\xfd\x8f\xad\x99Mm\xee\xa1;\xff\xba=\xa2\x9f]b\xd3$\x91\xe4\xaf\xe7\xbc\x9e\xfb0\x15\xce-T\x03w\x89T\x7f\xce\x17\xbfB\xb6\x92[\xe2\xdc\x1a\xff\x07\x17\xee\x93\x90\x1e\xf0\x9b\x83\xd54<S<\xee\xed\x80\x05K>&Vk\xb7\x8a\xb9\xde\xa0\xdb\x8db\xd5\t\x8c\x0b(\x81b\xa9\x14cV\x13\'(\xb3\x16\xae]\x13^\xa0\xa2\xd5\xc2\'\xcc\xaf\xa4]\xa1Z\x00{"\x96\xd1v\x00D\x8e\x01\x0e\xed\xd7\xe9s\x1cP/\xb5\xfe\x8a\x046\xd5\xd9\x1cU$\xbea\xc2\xf2g\xc2\xc2B%\x0b[y\x0c\xacwO5\xa7tee\x8e\xb8\xb8T\x96\x8cF\xe9\x1e\xca\xdb\xcdG\xf5H6ZY\x17\xc7\xb4\xce\xa3E\xd2\xdd\xaf\xe7\xd2\x86\xe2\xab7\x9ef*k\xady\x93L\xc8\x0b\x10?\xed\x1bj@\xe5\xa0\x92b\xfa\x95;\xb7\x9c\x81\x99\xda\xf6H*X\xe9Z\x95\x07,\x89\x87\\\x01>\xe3\xda\x91\xd5\xfap\x98\xafY\x0f\xdd\xab\xdaH#\x9a\x95-\x96:-\xb4\xd4\xed\x04\x1f\xd5\xb1\xfa%c\xce[\xd1IB\tc\xfc\xbd\xdek\xf1\xba\x9eL\x8a\xa6Y\x86TPV+n\x14m\xce@-\x07\x87\x05H\xfd\xb0?\xac\x98\xf6\xafq\x81\xe0\'#ee\xb04}kJ\xc9\x1b2\x9d\x0e\x0f\xa0\xa4m\x88m,\x83\xaa:F<v\xeb\x00\xa3\x87L\x19\x12\x94\x83\xe5km\xd3\x97q\x9c\xda+\x98jm\xe1K\x86\x13\x90G:\x8fSSWD\x95\xd9D-l\xd0\xa2\x0f\xe4\xb2\xf7-\x82\xf9Bd\xf5\xc2w}\xf2\xf6{\xb4Kw\xf0?\xcd\xbb+\x89\xfa\xc4\xd4q\x81[l\x89\xf3\x9c\x9f\xcc\x83\xc4\xe8"\xc1\\8\n\xfd\xc6\x9c\x81\x92\xe5-!\xa9O\xdeL\xc1\x9c\xfe\xca\x91\xe0(\xad\xc4p\x837\x96\xb1\xb2\xf5C\xa5)wd\t\xb9B6`\xd5j\x12\xc1Znu\xaeD\x8av(l\x0e\'\xa4\xbbq#\xb5\xc9\xcdu\'\x08`\x85\x17\x8dR\x90Zo\xe2z7!\xeb\xd1\xb0\xd7srHF\xa3+=\x93N\xa62\xfa\x83\t\xdf\x9f\xf1\xb1{@\x91\'Fk$KrF\x05\xecP=V\x87\x17\xfc\xf4\x8b\xd7\x85\x87$\x12<\x94\xd8\xd9\x12\xe9m\xd16dEN\xfe7\xbf\xf6Q\x92zR\xd92\xdd\xfda\x8cD\xc9\xe3\xc5\x15]\x0cr\xd1\x8a\xe4\xd1\x19\xedh\xd7y\xeee\xd5P\xbb_1\xeb\xe3\xc3@\xf3\x17b!\x12\x01\xeaPH2\xd6\xcc\xb8\x82\xfa\x1e\xb3\xf4\x18\n-\x1a\xa9\x93\xcf_\xeb\x17\x04n-gO\x9c\xc9D*\x81L\xe4\xf5E\xadc\xc43\xf7\x15ov\x17\x1a\xafGp\xc0?\xf8\x15\x18\x00\x8d*\x185\\S\x1e\x00a\xf5\xff\xf8\xcf\xc2,\'\x9f\xf3\xcb\xf77\xe3\xe4\xdfS\x97\xf9\xc9\x1e;\xf5/\xc4\x15\x0b\x9de\x14\x9dd\xf3\xd7}Oj\x0e\xb5\x073\xaancK_Od\x9e\x13\xe7}\x0f\xa7\x86\x85MXbVb\xcaM\xfe*\xa1\xd4>7om\xf6^x\r\xbc`\xca\x93_\x8f\xfdBg,\x1a\xbbR\xf4\xea\x01\xe2\xd7\x03\xcd\x1f\x9d\xfbB~\xdf\xfe%F\tm\x83\x8a\x81\xe3}\xfcu\xe4$\xa0_K:|\xa7\xb6\xa0A\x85\xc1q\xed^\xd1\xca\xd7\xfe\x80\xcf\x89\xffl\x9c\x8b\x13\xb3\xc7\xdd\xa3\x9fG\xeb\xf9\x11\xd6\x01\x1fE\xd2r\xc9U5W@\xdb\xba\xc1n\x18\x83\x0e\xa2\xc6\xecP\xc1\x85\xdf\x1c\x99cv\xc0\x95N%S|"iX3\x8f\x00\xca\xb7\xf5\xe7m\x89\x17\x9e\x1b\x8e\xaa:\xefj\xf4OJT\xe1a\x985[\x07\x17x\x8e\xa9\xe4\x18\xd5\xb0\xa9h\xfayq\xd6\'\xf2"By\xa6\xe6\xd6\x07eP\x8d9G`\xc0\xdf\xda\x87)\x11T\x91\x89NxQ,\xec\t\x7f35Z\xe4\x84{\xf9,\xa5\x1e&q\xc7W{\xce,N\xd4\x81\xf3T\xdb,X\xae\xbey$Mv\x8ew\xa0\x08\x13,\x0b\x12\x91\x01\xa7\x1a\xaa\x92\xee\xcd\xfdtK\x16\x92\xe3\x05\x8e\xb1H\x9e;\x17Os\x98\xf5$m\x9fz\xdd\xc55\xaa+-\x0f\xa3\xe1s\x8dex\'\xe3y%\xff0\x82JYV =\x13X_\xaeD\x88\xe4\xf7O)\xa20d\xe2%\xe1|52/\x08\x17M(]\x0e\x1e\xb6\x18\x91\xb0\xdd\x9f\x1ba;\xc6\xd6=>TI\x10\x18\x8d\xf7\xf35\x0b\x85\xfdE\xdd\x96d0\t\xa1\xeeoE\x9c\xb7.g(\xe6}\xc2\x0c\x14\xd4a\xc3\xa8dB/D\xe3\xd0\x1et\xc8%\xa0a\xbb\t\x89\x97\xa5v\xce"X\xe8iIo\x84~\xb2Z\xdcf\xbcwAar\x17\x981i\x84e\xceG*\x00>;\xd2\xbfG\x8f%C\x00,[:\xfa>\x06\xb5.\xe9\xd8\xc7\xdb\x98OH\xd7\x8b0@\xe3\xb2\xc6A]\xe1~&\x89\xd6\xc5\xf8\xc6w\x18\xfe"m}\x98\xc9\xee\xbd\xc2T\xe0\xd5\xa2y\x19O`\x81\x86\xd0\xe6\x96k\xb3#?\x18\x13\x80\x10\xd9R\x86\x7f\x18\x1d\x85.8$z{sE\x1b[[M\x0f\xe7E\xe4n\xa6\x8690KAi\x88\x99\xb5\xac\\v\xee\xa9\x94\xcb6\xa3\x98/\xb8\x0bL\xe7H\xf1\xf7\xf5\xa1\xf6\xf7\xe0\xbaL\x95\x1en~\x93(\x0beG\xed\xbcUA\xa8\x00\x84\xb1\xdb\xe2T\xad\xe7^\x8ah*\x94j)U\xfb\x8b\xc2\x10Y\x85s\x08\x82|\xae\x17?\xd6\xe8\xe5\xae\xe4q\x1d[\xb6RS\x9d\x80\xdb>\x1c\x0b2f\x05\x12\r[\xfbk\x08\xbb\xa8\xc1\xfa\x8e\x06$\xd8_\x04\x7f\xa0lK\xf6\xf6\x02\x94P*I\xde\x11\xfe\x0b\xa0\xb2\xc0L}\xbda\x98ZFX\xe7\xceg\x80\xfahU\xb9\xc4\x1c\xef/\xb5\xf6\xee\xe5\xda\x12\x91g\xfbP\x82i\xc3\x9eX0\xad\xb1?#\x8c%n~\xd3k$L\x9b\xde\x0c(\xb2\x8e\xeb\x1d\xeav|p\xd1q\x13\xdd\xdeg\xaf\xfe\xab\xec_3T{F\x7fx\x8e\x0e_\xda\xf8G\x9d\x9c$cj<c\xe1\xe1\x99\xb4\xeb\xe6\xfc\xb3$\'.P\xb9\xdc\x99Ps\xf8G5W\x85qBm\x86~\xb8\x81m\xb1\xd1\xfb7_\x0b\xda\xad\xc5wd%\xc5[\xe0\x9d\x13P\xa7\xe3\x13M\x08h. \xa4\xe0\x9bi\xc2ep\x9d\x01m\x06hzK\xf8\x1c(\x0fkk\xbfL\xe1\x107\x89\xec\x18\xb8\x01\xac\xd3sq\xea7%\xde\x9c\xd1\x8c\xdc\xf2y\xa8]\x14\\\xa0\xe6\xc4:\xcbwm`\\+\xa5\xad\x99\xb4\xdan6ZQ\xeeV\x80\x7f\x0b\x9fo\xc8\\\x1c|LA\x9bP\x8d\xc4\x91V7\x8a\x022\x8ap\xafXBA\xfb\xbd\x88\x8b;6\x91\x8a,\x1c\x00\xb9\x14\x9a\xbb\x10u\xa6g\xc9\xfc$n\x1f\xe7_\xccp\xe7|\'f\x9a\xac\xa4\x99\x0f\xdb\x0c&T\xaeVX\xd9\x0553\xdeU\x91\x96wW&\xbd`\x9cs\xe0%4\xc7#tV\x99Z\xb5\x020<\xcd\xa3\x93\xaf\xbd\x93\x98\xb6\x80\x01\xfdmc>\xe4>\x1eH\x148L\xbb\xa7y&0\xb8\xe31\xe4\xfa\xca3\xea\xd0\xa7\xbb\xc0\xdf&`\xd3\xadc\xd5\xc9gb\xf8$$\xf3\xcb\x00`\xefa\x01_I<6\x84\x1d\xbfSop\x16\x16\xa8l2\xcc\xfc\xbc\xf1\xac\xdbO\x01\xee\xed0\x1a\xf6\x8al\xbf\xb1\x16\x80\xaa@\xd4\xe0\xd9\xfe\xcc\xd6M\xf1\xf3\xa65\xeaT\x8c\x915h71=_\xf3\xed\x05\x85\xa3E\x05\x96Uy\xf9\x8b\x16p\xbeZ\x12G\x95v\xe1\xa4\r\x8a\x7f\xc6\x1cz\xba(\x06\xf4\xa7\xb7s\x07\x88h\x9e\xa9\x17}g}\xfc=\x88Z\x14\x17\x98)\x97\xb9\x1c\xd3I\x08\x0cs\xc5\xf10\xb6\xf1\xc2\x15\xeb\xe5\xd4\xca\xc6\x02\x0fn\xa4\x07\x98}\xbe\xff\xa1#\xdf\x8d\'9`\x03I\xa4-%\xc5\x0fEa\xb6e3\xf4\xc9m\xddt\x97\xa9*$\xb4\xf7\xe9N\\4\x14\x12\xf4\xa1\xc9\x1c\x1d|\x03\x14g\x9eeJ\xd4\xcdp\x0f\x93\x14\xca\xaf|\x13\x82}\xe9\xc4\x91\x10/3\x16d\xc4\xc1_\xfe@\xc6\xf7\xf0\x8df\x8c\xe1\x93\x89\xd5\xb5J\x7f+"!\xf8\xb3M\xee\xaf\x0c<\'\xe3\xfa\xe2Z\xd2o\xe8ip\xfcay\xdb\x00" \x18\x93\xa3\x90\x95<\x864\x02\x11,A\'3\xb6\xfd7\x98p\x05\x8avnRF\x16\xb8\xf6\x13\xc1\xc2s\xf1\xbcC\xb7\x92\x12(\x10\xba\x98\x03\x19\xcc\xa2N\x84\n$\\bT\xfd\xf7\xf5\x85\xda\xae\xac\xfe\x1d~\xfc\x92A\xf9!\xfd\x06\xf3\xaf\xef\xa8\xca\x91\x1c\xcbi$\x91\xa0#G\x8e\xf7\x86\x10A\x94\xa2\x94\x03}\xcfAW\x1d\xde\xfepn\x98\x0b\xd5\x9d\x16W}\x04\x033\x93\x1f 8\x0ef\x853\x80|A\x9b\xe2\xf6\xa9\xf9\xa3Gk\x19\x90\x05E\xb9g\x13s\xfa\xde \xa5*\x81\x8f\x8e\xd2\x1akB\xd5\\\xa12}\x99`?RN\x87o13-\x8d\x91ox$\xeb\x19\xf7\xa1\xba\xf4\x9b\xa03\xcc\x8b\x7f\x81\xe2\x9a\xd8\x1b\x88q\xb9\xd8\xccU\r\x95\xeb\x92\x989x\xdb>Wr^\xcd\xfbj\xc5*o\x1f\x7f\xf2\xb7L~,H.R\xc5\xb2\x92\xa8!(\x05\x08\xa03\xffu\x9a\xedC{%\x12\xdb\xe60Q\x14\xa4\xec\xb5\x06\x00X\x050m\x0f\x98\x14?K\x87\xa5\xee\xc6ja\x84L\xbba\xc2\xc4!Ab\x0e\x0f\x0e\x1a\xa9\x9b\xb1=\xc4\xb9\xf5\xfc]\xb6U4\xd85\xda!\x90\x1d;\xc3\x90\xf1\x9bM\xed\x10=e\xda\x87\xb80\xe7u\x80\xa7\x8d\xfe\x85\xf7\xe1\xd2\xdd\x138\x96\x93\x11\x15\xb3\xaaC\xc7\xe2h\x98\xe9D\x9aq\x9e\xfe\x1c\x85F)K\xdfi\x8em\xa6\xe7\xc3O\xb1&\x03t\x80\xe9\x7fw\x89\x03\xe9\x07\x0e\x8a6n\xe9\xad\xfe\xb9\x9f\xf1\xbdp\xe0\xf7&\xe5PZN\x8d\x06\xc4X\xde\x1c\x9dH\xfd\xc1\xa4\xc7S\xa4\xdc\x12 \xee\xce;`7\x9e\xf3O\x03\xc3\xa7\x0c\xd7\x8d\xff\xcb\x12\\\xf9\x05\xac \x80\xf2[c\xecA\x99\xbd\xb9\xe2\xa6#Y\xcc\\\xfc\xa6~\xbb\xc4\x144\xce\x8a1\xbc\x17\x86.\xa2\x1fB\xd7\x8fw\x17%\xba\xee\xa3*\xe4\x94VN\xb5{\xcf.\x1d\xb1\x0fi\x04(\xad\x95\xa4\x0c@\x12\x89\x8e?\xd9\xfe\xe4&a6*\xef2\xbb\x92k)\x11\xea\x9e\x1a\xee\x0e\xbeJP\xbe\xbd\x06\x05\xf0\xcf8\xf9\xc4#5?\xcf\x14o\x85zDZ8F\xb5\x11)s\xbc\xea\xf3\x902\x81&k\xe3\x89\xe9\xb6u\xce_\x08\xc3[\xd0\xa4\x04Lk\xf8Z\x82\x82\x81\xbd\xe9\x06\x8a\xc9\x8d\xd2 \xe8\x02\xeah\x10\x81;\x8a\x99\x7f\x91\xb2x\\\x06\xffu\xdd!\x919\x19P\x7f\xba[\x1ea\xadY\xb4\xe0\xce\x15\x9fJl\xdf\x9f\x81\x8f_\n[\x19\xfd\xdb\x87f\x12\x11s\x9b\xd3c\x814J;e\r8\x8a\xedZ\xac\x15\xd7\xe6\xf7\xcc\xd6F\xf1*g\x80|\xd7\x84\x81\xb08\x0c\x8f\xd2\x0e\x88\xb2a\x15\xc7\xd8\xdc\x07\xd0\x03|\xce$\xa5do\xf4\xbeR^\xb7\x1dYJ\xa0\x1e\x85\x89Ug4\x8d\xa6\xfe\x87\x90\xb5\x15\xccy\x85\x1cd\xf7\x1aU\xa4\x8d\x9c\xe2{\x85\xf4\xc5\xeb\x8b\x91\x8e\xc6\xd7\x86\xe3\xeb\xcc\x12\x11\xee\xe8\x9a\x1c\x073\xf6(\xc2C!f\xdb\t;\xa1\xba+\xe5\xc6\x9fU\x1dg?\x04:\x91AA\xda\xc8R?\xdd\xcd>\r\xe2\xcbY\x08\x01V\xb7y)Q\x98\xfb\x1e\x00@\x12)\xe6\xc1\xd2h\x99\xfa\xae.\x01\x1e\x12\xe8\x06\xb2\xaa\xb7j\x0e\x84+\xcc\xaf\x00Q\xa7\x9cI\xd5,\xdcB>%n\xc6\x7f\xa3N\xb5#/\x1b\xc3\\\xfb\xde\xe9\\\xf0c\xca\xddP\xb4x\x94\xc6\x86\x0fj\x05vJ\xc3\xb3\xab]\x94^\\\x9et\xb39\xaf\xf7\x0c\xb1\xf1\xba0\xb8\x88\xd8\xa0\xb9\x1d\xbc1\xc1\xd1\xc3\xcb8\xc7\x01^\x8d\x9bb\r\xb5\xe9\xa8\x02\x12u2\xe5\x16\xc8\x0e\xc3\xe6\xd8\xb6\x08\xafO\x8c8\x11X\xb7U\xbc\x91\xf3n\xc0\xf7]8\x1a\x19\x13\xfc\x92s3\x1b]\x14\x83\xedC\xda\xb8\xe6\xb2i.\xa1\xbc\xb4\x88\xbd\xad\xdd\xa9&\x87\xef8\xb7\x1fq-\xe6\xc6\xb1\x9d\x99af\x8a\xa0\xf1I\xfa7\xb97\xa0\x844\x15\x82$u\xb15\x9a}\xd8\x9bi\xca\xc3\xf4\xb5"\tv\xd3Q\xfep\x83DT\xd3\x06\xd4\x80/\x8aPE\xc9u\xc6\x9a\x97\x13=\xd2\xf7w\xe3\xef\x12,\xfa\xaa\xf8\xb18\x00\x1e\xf0\xb1\xc8\xe3\x86x\xb6\x17e\\\xd7\xe5\xc5X\xbe\x9ca\x89p\xc7\x19\xbbZ\xcap\x8d\xddX\xb7\xd6\x0bK\xd5Z\x17\xc4#j\xfa\xde\x11\xe0D\x8fw(Y\xf4\x86\x1d\x8e>gR;\x0f\xea\xae\xbe\r\n\x8b\xbc\xb1\x80?U\xa6GA\x0e_:\xa6W\x87\xe7+\x1c\xc0\xa6\xea\x88\x93w^A\x94\x8d\x0f6)$\xf9\x17\x11f\x92\x89\xca\x0e\xdd/\n\xce\xa7\x9f\xfcW\x06&\x80]\x91C\x882\xf53\xbb\xf9>\xb2\x81SX\x1c\xa3\xe3\xa0;\x97\xd9\x00\x18KPq\x0bV`\xe8F\xa2Ti\xe8*_\xb2X\x12l\xd7\x82\x13\xaa\x14;\xd4q%\x15H\x17L\x8c\xd7\xf6I\xbc\xf0\x1a\xc5\xa1a\x0cM\x1c\xc8\xea\x95\x9a\x0f\x0fy\xa5\xa3a\x82\xc3\xafo\xf8M\x81m\xd0cX\xdcat&\xdc\xe2\xa8\xa1\xef\xf3\xb6\x01\x01!u\x84\x95z\x0c\xe7\xe7\xc5\x7f\xc6\xbfh\xa0\x17\x81g\x89\xea\x13V\xbb\x03\x85\xe1-Yx\xe72\xbd\xc5\xb9C}n\x9d\xc7{\x14\xc9\x0cm\xa4\xb2\xf0A#\xd5_\x1d\x97M@&\xe0\xa4\x8b\xd8cl91[\x90\xbc\xdf\xb0\x7fUh\xf1o.\xa6Z\xc4\xa6A2z\xec\xa8\xf1\xc6%m%\xb6\xb99\xc8\xd5[\x89\xd7\xc97J0\x8a\xb6\xa4X\xa0\xf3\xf5\xce_\x96\xbc=\x19\xc7\xda\xd1\x86\xa1,\xb7\x144Z\x8d}\x17\xe8*\xc9\xa4NJ\x02\t3D\xa6\x83\x9a\xc8\x15I\x9d\xa6\xc12\xc7\xd5\xb9\x07w]\x14TW\xe5\xe8\x8f+\xb6\xf3F\x98A\xea@x<\xb7\xcc\xb69?\x9a\xe6\x18\x06$n\xa2I\x1d\xdc\x84\xc8\xcb\xc0h\xd5\xad\x03r\xf1\xe8R4\xcd\x14\xc7M\xd4\xe0:\xf6+]\x87vN\xe3\xdb\x9c\x016\xb2\x01i\xa9\x98\xdf\xf4\xa1T\xb8:\xa5D\xe8q\xc9@ASn\xfb(N\x84a\xa1=\xc3\x90|I\x80r\xae\x15{~\xf7\xad2}\xd2\xfd5D\xc3$\x18\x01\xa1\xcd\xc3\xfb\x08\xa1\x0b\xde\xd4z\xf7\x16\xf4Q\xa0\xa9\r\xb2\x95\x9a\xc0t1\xc9\xa6O\x11>\xe1\xa2\x9c\x81x\x029\x82u\\\x08n\x0feu\xa7\x87\xf1\tr\xa1\xa8\xb7\xc6\xf7\x1f\xa8D\x81\x0bZViM54UZ\xf7\x14\x14\xf4/\x1f\xc2FK\x8f\x11\x83U\xe6\x95\xc9\xa4l\x00U\xb2\xa0^%\'U\xb1\xaf\xbar\xba\xb4\xedD?n\x0f\xdc\x15\x0fa{\xb8\x17\xb7:\xbc\x1fx\x91\xbf\xef94\x05\x83\x80\xbf\xec|H6\xf7\x1a\xd4b\xaf\x15\x8b\x9br\xa8t\xb9\xf0\xd68Q\xaf\xb0\xd4\xbc\xbe\xc8\xdb\x02d\xb9\xee \x89{\xd0\x91\xf1{\xe6{\xb5j\xbd\xa2\xc1;\xecW^\x8bu\x04\x15\xfd;\xd4lG2\xc0\xe9A<>\xe3\x97B[\xbb\xe1\x85\xd2\xc9\x05\xf0!\xb4\xe2N\xb3I-#A:x\xdf\xe5n\xfe0\xc4?\xe2\xd0>\x15\xbc\xa5X\n\x08\xe4\x1d3$\xb7mL~2\x01\xc0\xc2_\x0eg"$\xd2\x15ug&O\xf8?\xcf\xbe"\xc7:\xd2\x7f\xbb\x85\x02-\x8b\xa6$\x91\xbb\x80\x162LC"\x96\x84Tx2}\xfa\xb5k\xad\x87_\xb6\xf9$\xa3\xdf\x83\xc8\x17\xa3\xe3u>Y\xc1@\xa0\x9c\xdb:\x1a\x18\xc9\xdf,\xb3\x94\x88\xfe\xc3\x00!\xefq%\x7fTB\x9a`\xc5NL\xf1H\xfdH\xfa\x91M\x19\x05\x9b\xc8G\x87g\xc2\x0c\xfa\xa1\x86WOo\x8f\x18\x1eM\xfa\xd9\x03\x8b6$\xeafWT\xee2\xe8\xa5\xe0\xf8\xd7\xa3\x993`\x08\xeb\x1e\xe5[\xd3\xe8.\x99\xd0\xe7\x1cw\xa09\xe8f4\x8a\xbb6\xdd\xbdH\x07P\xaam$\\=l\xe3\x82V\x07\x06.u\x10p9\xeaI\x89\xe1\xca\x9e\xae\x8eJ\xa8!\x18\xf3\xe96j\xf2\xe8%\xe9\x9c>4\x08\xe5\xa5Y\x9a\xd3\x05\xcd\x9euh\x01YQ\xce\x1bw\xb9\x958?\xcf\xee\xb2\xa0\x88\xd9\x1f\xb0\xa3h\xa9\x0c\xf6\x058h-\x02]\x13\xaf\xc2U."e\xfb\xfc\xee\x91\x04\xb2\xb6\x19\x86\xa4\xb4?\xb1\x9f\xfdX\xf1\x17\xe29S\x83e\xff\xa5\xda\x9c\x8d\xba\x0e\xe6\xd8 \xae\'\xf0\xf0>\x07.c\x83i\x8biAd\x86\xf9pV\xc8\xb4>\xa2\xd2%\xd5\x04W\x08\xc0\xfe\x89\xe8\x0c\xbc\x85\x9e\xcf\xeeY\xf1,\x19`\xc4\x83S=\xb3z\xf7\xb8\xb1\x01\x10\xf5\xb7\x08\xfe\xb2\x18=8c\x15\xb8|\xcc`\xaf43\xa0\\|k \x95\xf6\x84\xfa|(}\x06\x8fQ\xc8<\xde\xd5\xc7\xb0\xd7\x1eXrS\xcc^\xee~\x08\xf9\x0f\xe5\x8a"\xf34%\xd8g]t\xe2:\xf8*\x96B\xe7\xab\xde\xd9o\x11\xfd2\x8a"\xd3v\xb4u\xee~\x0e\x1d=\xa5\x1a\xbf\x163\xc6\x96\xd4\x9c8\xa3VSG\xdcm\xdf5\xc4J*o\xd0\x02m\xfcd}\x04\x1az>4\x0et\x85\xef\xe6\x9e\xafL\xa2\x97\xac\xe4\xad\xaf\x8b+\x12\x89Ul\x0c`|X\x98~1,\xb2B\x15\xa4\xde\xe0\x9e0\xaf\xa5\xefV$\xbc\xf4\xf9\x90+\xd6\x1b\xee\xca\xe5t\xde\xc4\xf7P\xef\xdd\xf8\x1bJ(oP\xde\xe1@6\x9c\xbc\xa7\x02\xe2v\xca[\x02\xcd\xb9\xc7F\xc4\xc0m\xf6\xfaxJS;\xcb2\xd9bW\x8ag\xfd\x84\xa2\xe6\x83\xfb\xd4T\xa4\xd4[[-\xab\xc1\x15\xe0\xfe9\xac\x0bY\xc7\x1b_I\xc1\x0f\x1f\xe86\xe7\xbea\xfe4\x84\x17@\xbcGK\xe8\x9e\xd1@E\x10\xd7B\x08c\xa1.)\xd5D\xc4\x0f\x86/\xa7p0\xbf\xc8\t\x1f\x81\x82%c\xd5A\xe8~\xc2)\xca\xbbn\xad\xbe\x9b6l\xad\x0bs+\x88\x00\x89\xe8\xcae\n\xefS\xb4\x1a-eFo\x1c\xee\x8c\x91\xfa\x03\xd1L\xaf\xd0\x8bo\xe8\xc0YH:\xfd\x17p\xdf\xd9s\xed\xe4\xd0]\x96\x95{\x9e\xbb\xd1<d:\x8e@\x14a\xeb\x96Z\n%\x9d\x06m\xf20\x8e\xf4\xc5;\xdd\xce0\x88\x92r0=W\xc0\xe3\x06\xdc\xc2\xf3\xa3\t\xda\xad\x07\x8bp\xa3\xce\xbc\x92\x1a\x1c\xb4L\xc7,.\x07\xfb\x89\x01\x06V\xa7\xf9\x84\xc6R\xd1\x1eo\xd3\xce\xba\x05\xb88m\xd9\xc1\xea\n]\xb4wT\x10X\xbe\xfaf\xc4xM\x01\xf3D\xef\xa1\xbe\xe6f\xdftq\xc5\xdc\xf8\x9c\xfe|\r\xd8\x85\xfb\x9a2\x9ep\xef\xed\x1fD\xe7\x86\xff\xac\xedflD/F\xf1\xcaQ!\xf4,\x95\xfa\x83\xee\xae\xca\x0f\xff\xb1V\xd4\xdc\xe6ce3\x98\xe6\xf3V\x0f\xb3\x8e"`K\xcd\x15d\xe9\x7f\xf3\xf3\xc5n\x97nNoTr\x9cdH\xaf\x1e\xb6 \x9e7\xbfu\xbeX\x1f\xc6\xd1\x7f\x9eg\xbfX\x1f\xad\xa6^\xa8s$\xfa\xb9\x13\x1aK"\x07\xde\xee\n\x7f\x94\xe2eWk`\xe0\x9c\xc1^\x17\x13KZ\xd3\xa0\x14pw\xbf\xe35\x96\xac\xd5qs\'\xee\x9e\x9a\xdc\xb1?-\x95\xda\x1d\xa8\xae4\xfe\xa5\x90\xbd\xe3\xe8W\x1f6\x84z\xd6\xe3\xfc\x7f\xcb\x18\xd7\x86\x99\xb7\xce\xb4z\xfaQ-h\x01+\x91\xb7\x19\xff:I\x17\xe1I\x8c\xa6\xe0\x0ew\xf7\x13\x00\'\x16K\xf4w\x08\xec]Q\x94\x9b\xc0\xf5\x87\xa6\xe2\xe0\x13\x07\xd1\x86\x88r(\xc5\xd2\x06\x82\x1aF\xa0\x8c\xce4P\xe8\xe9^|h\x7f.\x92a\xd0A\x13"\x91E\xfd\x08\x11\xe4\xf8\x14\x19\xfb\\o\xebsbQ\xc7L\x8aJ\xf1\x8f\xb8\x9f\xd7\xba#\x07\x87\xa8$\xebYW6[\x8f\xd4\x95u\xa2-\ns\xff\xa6\x7f\xb8\xc7Q\r\x93\x1c\xb2h\xe1\x9b/\x7fzbkI\xad\xce\xd3I\xe0H\xc1\x03\xf8\x98\x02\x04\xd4i\xdf\x01\xc0\xf5T\xf7\xdc[\xf4:,Wo\xaf!\xc0j\xfc\xff\x19\xbd\xd0\xfd\xe9r^\x0c\x01\xd17.\x97\xe8g\xddf\xc2iTw[#\xa7\xdb\x03\xe1\xe9U\xe2\xf3\xdf\x18tM\x7f\xc1\xda\xdbdj\xfbA\xfd\x18\xe8\xb1\xb5\x11\xf9PA\x87\xdd\xbc\x98\xf6.\xd8\xea\\G\xbfc<\x18\xe7#\x1e\x1f\xfd\x84\xf8\xe1\x88K\xb1>\x996\xd2f\xa5sA\xceY[|\xa2/t\x05\xfc%\xac^\x89:\xfe"r\x92\x01{D\x0f\xd9m\xc2H\x98\xe0\x93\x8b\x7f\x01\xdaJ\xdd\x16Q\xeb\xa6;g\xdf\xa6\xc9\r\xb2\xbd\x82N\xe9\r\xf0\xb5?\x9c\xfe\xac\xe6\xe4\x14<\xd1\x1f\xc2\x18\x87h\x06T\x9e\xb1\xb0P\x13\x00\xdf&\x1c\xdf\x92\x84\xd0Yc9\xc2S\x9e7\xda\x03\x84N\x81\xff\x1f\x08\x05\x08\xd7\x8d\xeb\xd3\x8cF8;\xba\xe8Pz\xb9\xef\xd3k\x01\x08\xd36\xcd\xa3\x96\xf6\xa0\xe1\xc3\xf3#a\x96-\xe6\xbbH\xbc{<\xde\xeeeo\xe2\xc9\\\xedj\xec\x01@\x17\x9e\xb4\x9c\x14\x83\xf43\xce\x149A\xfc\xf0\xda],\x07f\x187(:\xbc\xe0Fz:\x1d\xd6~d\xd1\xb6\xea\xdd\xfc\xb5\xd3\xf8\xf21\x1c\xccMR|\xd1\xc2\x93\x80|\x98\x08F=\x7f\xd1-\xf7\xdb\xf3cqyw\xc9\xe8k\x0f\x9e\x14\xe0\xd3[r\xd7\xe2\xf3:\xbf\xe4M;,E\xe0\xbfP\xef\t\xd7}V\x14\xde\xa0\xa1\xa1\xa3.\'N\x93|\x97p.\xa6\x89\x81)\x9d\xc77-\r\xae\xef\xa1\xb3\xd1K\xa9\x9c\n\x07\x89Tp*\xe9!\x9bwo\xbd\x9c\x81p\xf4G\xe9)\xd5\xe4A[\x9fE\xf7\xf7\x83I\xe9X\xf10bFK\x80a\xb0\x13[hC_\x85k\xdf1\xc1\xd0\x12Z\x99\xe0\x19\xc6U\x1e\x9a\xf5):\x15j\xc5\xac\xf8\xb3>\xd8EX\xd28\xe7\xd3\xf2C\xfc\xb7\xf9\x8c\x03\x9bSz#\xd0b\xfc\xd4\x0e\x8d\xc2\x9aR\x8f\x0f\xbe{T\xf0\xd3\x03\xea\x84/s\xcdY\xf5\x8e\x10\x02\xa2C-\xcd\xdb\xdb\xe9\x0ce\xbe\x05\xf2"\xcf\xc2\xf4\xa1:_9\xf5\xfd\x8co\x9b\x81\n>\xf9F\x12y5\x8eR\xae+\x91\xf0d\x82\xb8)\xc3\x8dI\xd3\x00M\xcc\x00\x84\xbc]\rH\xcd#)\xbc\xba\xc9\t\x1e\x9ed.\xe7\x1e\r\x9c{\xb5\xb5x7\xa2\xb6\xe4\xab\xc8c\xf6s\xbc~\xc4\xbb\xbf\x7f\x94h\x92\xf0\xf5}=\xa0\xfb\xd8d*o\x13\xf5\x94\xcb\t!\tUD\x94\xc1\xf8\xaad\xc3rR\x9e\x03\xbatAa\xc8\xb8\xe1a\xe7\xa4\xe6}L\x0e\x93\xb5|>\xd8\x9a\xef\x08\x11\xf4o\xf0\x18\xe0G\xab\x02\xc7\x0ez1\xbbol\x89\xe3\x13\x17\xc1\t\xe6%\n\xafG\xd6\x0e\xf7\xd7>\xb5\x0b\xc8`\t\xcb\xb3\xdb:e\xde\x99\x06\x16\x83\x06\x11\x1c\x11&2\xc3n\x1a\x80\xf0t\xb3\x14\x0e\xf8\xb3\xe1qE<\x13\x1e\xcb\x87\x97\x98\x8a2\r\x01YYP\xf7\xa9\x91\x96D\xee\x88RY5\xffm3Q\xd3\xcc\x18\x95(4}\xa0\xca\x9c-r\xb1L\x87\xb9\x89\xd2G\xa6\xff\x91\xc4\xa2\x80\x9c\xf3C\x8a\x9a\xe4\x16\xf3\xcc\x9c\xc7\x18\xde>&\xd4\xad\xf2\xca\xe1\x11\xceY\xb7)\xd9\xbd\x8c\x1eVY\x906\xbbx\xd1\xa4\x1c+\x84v\xc4XQq\x98\xec\x88`\xb4\xc7Y\xe8\xd4u\xc7\x1d\x86\x1b\x83\x1a\xf8\x0b\xccH\xc0d\x81\xa1\xb6-5(6\xccO\xe7M\xa5Ks\xafP\xa0\xba\xb8a\x86\xf5\xf0\xee\xbe\x11)\xe3\x99\xf6;i\xf6y\xed\xe9J\t\xd9\xbei\x9eI\xe0@\xa9\xcd\xdeA\xeaSM\xc1@F\x8d\xea#\xf1\xfdN\x7f\x82T:\xdc\x14$ZL]\xa2\xd1T\xb2\xe2\xc9!"\xd0\xc2\xa5\xa2\xb98b\xdb;\x824\xff\tq\x1f?F\x11W\xf9C\x8d"W\xb6\x84\x9e\xd1\xd6\xf3\xec\x1ach\xb2YHR\xddj\xbc\xfe\xb0\xbb\x93\xf3i\xdd\xf2\x10\x84=\xa0\x8f\x0c\xc8\x05;4\xcf\x04\x00p\xdb8\xb0\xcd\xd2\x8c\x9e\xd4Y\xcbH|\x18;\xc4j\xdc2\x8cr\x9b\x86\xf6/\xf8\xebu\x8a\x9e\x1c\xbcD\xaeE\xe7Y\x92\x14s\x12\x851\x95\xaf\xa1\xa7=\xdd\xa1\xe1\xab\xf1\xb9&z\xc4\xc5\x87F\xe7\xc3\x96=\ng\'\xf0\x9b\xd2\xf8\xf0:\xf4\x0e"\xc1\x87\x8c/I\xbbZ\x15G~@\x90\x1e\xaf\x9b>\xee@\xf4\x81\xd9N\xfa0\x88$\xcb\x1f\xc5\xab\xc21\xc9\x84\xbc\x04\xb4\x91\x86\xcd\x183I\xf9\xc9n\xa2\xc0f\xf8\x99tYkiZ\x1b\xbed\x9cc\x9b\xf7]\x90\x97\x05\xe7\xe2\x16:\xc5\x80#\x12\xc7\x1cV$\x9fE4\x1e7$\xc9\x0ckM$\x9c\x8d\xed\xfc,\xf3\x93q\x02\xd7\xb8XG\x899#\xe5\x83\xe7Aj\x8a<a\xeb9\xadd\'\x90\xb6\xceN\xa6\xec\xb2\\\xcb\xbe\x8f\x8e\xa4C\x98\xb3\xcbQ\xe0/6\r\x1c\xcc\x8ac\xac`Jd#-\xadzA-\xb7\xb7R\xef)\xed\xcb\xd0\x11B\x8a\x15\x07\xa4\xbb.?M\xffIi\xa7 iK\xa3\xbd\x1e\r\xb7*\xed\x8d\xcbU\x0e\x80c.}\x1d\xd7l\x94rd\xb7\xc4\xafc\x8a\xa4\x18\x04\x0b\x18\x83\x0bL6&\xc9\xe3 GP\xdc\x10U\x8cdq\xc1\x0f\xdd\xba\x93\xd1\xa6\xd15\xfc\xe0#\xad\x18\xeet\xd1S\xd8 =\x1d2\xa6A)zb\xdd\xc9\\#q\xbf\xb3\xce\x06\x8a\x10;\x8c\xf1<\x19$\x82|\x88\x87\x81g8o2g\xcd \xa8~\x81s\x97\xcar\xb0\xb2\xb7d\xc4\xe1\xdd\x8f\xf1\x07Q\x01\x8a\x96Xh\xfc\x8b\x02!@\xb6Td{R\xa6\xb6=L\xf6\x1c\xe0\x08xk(\x0f\xd6\xe2xg]\xe0\x8c;\xc6\xce\xa6\x9f\xb3\xb6\x1bV%\xbd\xd9\xb8\xf0\x9d\xfe\x0c\xcb\x9b\xd9\x1b}%\xa8\xb4\x99\xe8\x17\x1e7\x19;\xb1oV\x89\xb6\x05\x06\xf75\x18L\x13\xa0\xf9\x9fl\xe9\x8dbJ~\x11\xda\x97\x02r\x0e\xe8:\xff\xf9XJ\xfc\xd8sL\xc3\xbc\xf1M_\x96\xc1\x8f\x0e\x06i\xadV!\xfev(\x1e\xaa\x9e\x18rf\x07\xa1-\xcc\r\xfd\xf3\x0c\xb0\xc7\xdc\xd1\x96\x19\xa7\xeb\x11\x9a\x9f\x97)\xb6\xc5\x15\x1e\x9b\xc6\xef}J\xf5\xbc\xf1\xf7k\xa0FH\x84FN\x1f\x07pyZk\xfe|*A\xdcxkK\x89\x01\x0cqw \x94\x00\xa8\xb4\x1c\xfd%\xe2\x83\xda\xfbc>b\x90\x9c\xbc\x7fE\xd8\xf9UN\x02\xfbI\x1e\xbc\x83\xdf\xcbM\x81\x91u\xbc\xd0L\xd4\xc8\xcb\x12\x07w\xc0\x9c\xb8\xfd\x91\xcc3\xdc\xe6\x9c\xbc\x9e\xe0\xce\x8e\xbb\xb2*\x8b\x8b\xf0\xceR\x15/I\xb6\xd0\xea\xbd\xec\x99\xb4 \x15n\xe0\xe4\xaf\x1d\xcd\x13\xfbz\x80\x0cM\xcd\xb9ktM\x1c_7,_\x88Q)0\xfaF\x8ayoQ\xa3\x93P^p\xc7\xfd\xa95?\xc6\xc2F\xe7*+\x95\xfdF\xf1\xb3\xc2\xd3\x8fS\xc9\xf0{\x01\xcc\xbe\xe2:\xf9\xd2CU\x99r\xcb\xcd\x8f,\xab\\\x80\x9fw#5?\xce\xd7\t8\x7f\x84\xe3\x7f\x7f\xddJ\xb4\xc7\xb9\x87z\xfaA9\x94*\x95A\xc1*\x88\xf7Z\x10C\xa4\xbb\x95C\xf7\x1f\x98\xae|\xeay\x0f\xcd?\x90\xe6\x8ej\xbfWy\xacW\xec\x8eJ\xd4\x0e\x1e\xa4!1\x7f\xb7M\xa6JX\xd6zxV9\x1e\x0b\xac\xe0a&\xd8\xa0\x82\xa8\n&x\xc9\xc4T\xff\xd0\xd3+\x8a\x9es\x06\x89\x9f\xc83\x0fc2\x08\xd3\xa4-\x16\xe2\xa3Ka@\'L\x02uk\xf7\xae.^\xef\t\x14.\x9b\xb2\x9e\xcf\xbc[\xe6\xf4\x87\xefd\xa7>\x04\xb0\xb0v\xf8\xd7\xe5\x98^\xf0\xcf\xe4\x92\x1f\x16\xe6\x03D\x14\xa3\x04w\xb9&f\xf3\x992\x00\x14\x19Fw*F\xae\x08dO\xf1\xbdq\x93\x1dE\xa8Q\xd9\xd5n\xcd\xb6,;\x8a\xae\xec\\\xd1\xd2\xee\xfd.\x93\x86(E\xab>\xe5\xb3^\xf6\x0b#hI\xf8\x19s\xa3\xa3\x97"A&@XaQ\xad\xf26\xf4\xffY\x92&\x93u\xbaE\xa6<*\x8d\xb6H\x9cpy\x10\xedK\x14\xfeNb\xe2A\xbb\x1d9\xa27\x80\x89s\x80*_\x0b\t\xe4\xf7\x837\xf0|\'\x98\\5\x8e\x96\x82-2\xbb\xad#\xf7z:\xd4\tj\x9d\xf6\xdc\xa8j?#\xf2\x18Z{\xf3XNJ\x9fs\xbf\x18\x08\xe4H\xcc\xadPtg\xc7\xd8\x12\xab\xbbp\xce\xf7f\x1a\x95z@\x0c\x81\x13\xa3\x8f\xcd\x95\xdd\xb1}w\x97\x96\xb8\xb1xY\xcc\x80\x02\xde\x12\xe4\xba\xdb\x0f=\xe5\nE\x95\xa8\xa60\x18.\xf4\xdb\xf9n"s=,\xf8\x93\xf1\x8bO\xd3\x84\x9dN\xcbp\xd9?\xdf\xc9\xd3\x9b?\xea\x89\x0b\xc3C**\xf7\x02{\x00[M*-\x17\x85P0f\x91\x00\xc9S\x13e\xc3\xf0\xae\x01\xaa?\x19$ru[:G\x94*\x13\xff\xe1\n\x19T\x97\xb5K\x97\x86\xd4\xff\x9a@+\xf7Gz<\xccCz8z\xed\x88T\x8d\x99\x92\xff\xf1rZ\xd2mr\x93\xcc\xd8\x8d\x8f^\xd0&Vr\xdcg\xdb\xf5\x11\x88Q\xe4\xe9\xe0)\xe9\xaf\xbdoH\xa8\x14\xfd\xba\xf7\x17\x1e\xb7\xb8+\x16\x920%x6\xeb\xe6\xc0Z\xb2\x11\x13\xe8G\x19\x1dV\xa9e\x7fs1\x7f1(\x12\\\x8e\xe5\x81\xa3\x19qF-(\xbe\'Jz\xf5\x86p\xafV\xef\x07\xe8\xd1~[\xcax\xee\xf3\xf7\x84-\xa8d\xd8I\xce:\x9e\xf0\xed\xc1\xcf\x9b\\xr\xb3@9Q\xa7]nmdL9|\x9d\xd3A\xf7\x07\xdb\xcf}o\xd8\xb6\xa0\xb4Ec\x8f}\xe5\x1b\x131\xee\xd3|\x9foZ\xe5\x87\xef\xf5\xec\xaa\x80\xd7\x1a\x98a\x97VZ\xaf\x1fJ87\xa0\x15Qk_V?\xf3:axd\xec\x98\x8f\xcc\xe6\xa3\xee\xdf[\x9e\xcc\xf2\xbc\x0b\'B\x86\xe3\x7fp\xa3`]\xc3\xf9z\x11\xfc\x81=\xd27&\xcd6\xcb\x87\xcd.,\xde(\xf0:\xbb\\\x0f\x8dWM\x92T\xd1\xe3\x1d*\x99Y\\\x03[\xd1\x144\xfaQ\xa75K$\xec\xa6\x9d\xd8\x8c)=\xefxH\xfbD\xd8\x82;\x10(\x90\xd1|\xe6TmX\x97\xcb\xe7\n\x11L\xa9\x16\xa5\xef\xf4\xe2o\x89\xacP\tS\x95=\xb5\xf9\xec\xf3\xaaTV\x8c\x0b\xc3\xdb\x85\xc5\x81\xd8F1\xab$\xa0\xce\\\xd8\x94,\xb8\xe2\xfc\xa2\xec\x85\xc8\xcc\x88\xff\x17j\x94\xcc\x96\xd3\x9b\x99\xdb\xb3\x03Tnw\xd7o\xdd\r\xfbt;\x9eG\xfb8\xf7\t(\xd4\x8f\xce\xac\x8a\x89T\x0ew\xf2\x0f}\xb8\x14\xa5x\x87\xaaSCx\xd6];\xc3\xf4\x03\xd4\x0b\x1b\xaerq\xb6@tA[\xa5\x0c\xde\r\xde\xf5\xcc%\xdd+\xa2y$@\xce\x81E\x16\x1a!\xec\x00\xf8\x96\xdd\x8e\xc8\xa8\x89\x0e>\xef\x88\xc8\xf8&\x1dR\'\xbe\x19\xf6\xe4\x01\xb1\x80\x04\x841%0jp\x17\x89\xd5l\x14\xd8\xd6\x91\xe9\xcc<2`0c\xed\x9c\x1f#\xc8\xc2\x1b|\xba\xfcc\x07\xa6EcG\xb1\xa8\x81\xcd\xb1y\x0c\x85~-\xe4\xa2\xf0+\xa7|>r\xa0\x0eu\xb6\x81\xc9\xd9\x04\xa7N(6\xadq\xa4Zle\x1a\x1d\xd8M\xc4\xfb\x92\xf7\x87dD\x15e\x9bZ\x9a\xcc\xf7|\x0b\x0e\x98\x18\xd9\x90D\xae\x11,2\xa1\x8d\xd5ovu\xfd~0X\x05\xaa\xcc\x95\x8d\x0e\x05y\xaf\x08\x17h~2!\xab\xccV\xc4l\xbb\xd6\x9c\xf6h\xfb\xb9Q\xa0\xc3\xeb\x13\')\x17g\xf7\x03%\xde\xf0c\xf1\xa1l\xfe\xcd,\xf1T,\x13\x8c\x98\x80\xe1|o>\xd5\x9c\x93G\xad^\x92R\xb0\xa3\xa2\x97\xf8Q\xdeoy\x1a^\xa5\x11\x93\xc9\xd8\xfc\xf8\x15\xb4S\xd8`\xca#Y\x8b\xa6{7\xb8\x15\xec\xa4\xd3\xa7\x9a(\x81\xd3\xfd5a\xaec\xe46rV0\xb2Ip\x8e$GL@G7\xa2B\x02$&q\xd4pw\xc8\xf8\xdd\x9a\xf8\x1b\x96_\xb6\xd0J\x870t\xb1\xd5\x19$\rn\xda\xa3\xab\xc7\x02P\xe1E\xb2v\xf4\xf6\x8e"\x08KU\xd86\xcb^\x89\xa4N)\xae1\xa5\x83\xcdR&\xa9\x01|>\x1c\xd1\x91\xb0\xf1\xf3\xf0\xe8Vv\x18L\x83\xf2B\xda\xd9e\xbb\xed\xef\xa9r\x17\xc6\xce:&7O\xb8^08\x0b\n\xdaz\xfbA\xdei\x16\xd5\xa96\xf3\x0e\xe2\x83 qX\x94\x10JA\xc3\xddz%t\x02s\xf61\xa8#\xce\r\xb2\xa8\x89\xe8\xe5[\xd5\xa5\xd1Vu\xb8\x1a-2\x0b\x12[v\x12>|\xb5\xe3\xbbczS\x03C\xe7\x84\xads\xb0\xa3\x1d\xe8^\xb1\x11\x18\xe1rx\x1aFx\x1azG\xf4\xea\x99\x8b\xb3@\xa0 FKA\xa6\xb90x\xc5B\x83\xf9\x10\xad\xf3=\xb0\x02\xbf\xa8F4\xb8\xc3,\xc1\x05\x94\xf2|\xa0\xc1\xe8\x8b;\xa5\x9cu\x86\xab-\xa2\xea,\xa2\x8dp\xd4\xf9\xc6#/Y\x00\x9f\xbc%\xa5\xf6^\xf7\x085\xb3\x12\x1fxQ\xe9\xd3\x0cN^\xca\xc1\x06\rS\xb8\xc7\x08eq\xb0\xbc\x16\xb6\xed\x9b\n$\x8a\x04\xc9\xb8\x90\xffr\xaa\xa8K\xbb\xc1\xb4\xba\x01M\xe2\xefq?\xe4\xd7b\xfaq\xe2\xc3\x98t\xd2\xf7\xad!\x83zz\xb3\x97\x05&w_UBvQC\xd9\x1e\x8fi}\xf1H|\x98a~\xb6t\x95\xf0cQ\xe1\xa8\xa6\xf9\x8cw\xdaIt\xba^)J"\x19\x1b\x9b)\xa8HEH\xc4\x9c\xe0\x05\xb6Y,\xb2\xd5\xef|\xfb\xdd4\xe1\xc8\x94!\x15\x0c8\xcb=\xfe\xb4(\xcb\x8c\xc8\x03\x01&p\x8f\xa2\xe6\xfd\xee\xce\xdc\x1e\x002U+\x0fm\x85\x91\x15\xa7\xda\xab\xd1\xb4O\x96\xe3\xce\x8c\xc4jF\xf2\x90\xfe A\x15{\xbc\xd0\x85\xd2\x06\x84\x0e\xba\xc1\xf4\x04\xca\x88\x83;\x97\r\x1cAL\xecp\xac)\xbd8\x1b\x8f\xc6#\xfd\xa9\xacV\xb1\xe6\xd6\x9c\xff\x0b\xc4h\x17\x1e\x03<N\xd4v.\x1d\x1dP\x1b\xca\xc5\xd1z\xb7C9\xd8\xa4pF\x02.\xd4\xd21h\x9b\xa72OQ\xd5F\xe4\xb0\x85\x1d\x1f3\xf0O\x1dz8\xc79\xa6\x1f\x9a\x80\x05%K\xee\x87\xfd\xd1P\xd5\xca\xb2\x95\xd5[i|\xb7\x165@\xe9\x94\xfa\x11D\xec\x1fW\xb3\xf8\xac\xc1;/\xdf\xabC\xb5Zz\x96\x1c\xe3c@\x7f\x12\xbdq\xf8\x9c\xda\x02!\xbf\xa4.\xe6{\xec\xb5.\xab\x9e\'\xe7\x17\x93d\xa4\xd8q\xf9\x13\xc9\x05\xc7K\x1f\xfel\xc7\xbfj\xfc\xb6\xdf\x0b\x17\xe2F\x83\x8e9\x05\xc3\xf9\xb2\x12\r\xf6\xcfk\x10\x80\xa9\x05+\xb5\x9a\xf0\xe4?\xb9K\xdf]\x1a\x9b\x9a\xa3<}\xcb1\xaf\xabQ\xcfenC\xc6\xc4\xc0_\xc3\x1cs\xcd\x9b\xf7\x81\xad\xc8\xd3\x89\xb5\xd2\x13\xd5\x89y@\xa4r\x8e\xd7Ph\x91\xdfj\x06\x8e\xc6\x9d*\x9b\x8b\xf7\xd80\xe9";\xa5\xd2\x88\xa4V\xd90\x060\x88\x99\xba\xef\x8bO~U\xdf;\xf1\x88c\xff\xf2(\xcf}p J\x03\x8cB\x9f"v\xf7\x8c\xf0\xde\xd6i:b\xc1h\xb5`\x8f\xe2\xa5\x11<v\x99\xf3\xdd#\xf62\\\xbb\xf8|\xc3\xad\xc9\xb8i\xc8\x0f~\x90\x8d\xc3)\x8bJ\xf5\xfb\xe5\xe4\x95\x17@q`|\xb2\x1d:\x8e\x87\x99\xa7\x97\xb2\x9d\xfb7r2\x88\xdd\xf3\xd7m-\x8e\x8ez\xad\x1a\xf2\x93\xa5\xec\xee\xecW\xdf\x8e\xc2\xfe\x1d\xbecX\x9eX\x7f\xfbQ7\xb0U\xa4\x18\x8e\x9f\x80\x85\x88i\x1a\xe5\x94\x1c\xfe\xdd{\xaa\x9e]\x81\xbc\xc8\xed>\x8f\x1eV\xc5\x16\xfc\xa8<"\xc5\x7f!\xb0*\x0b\x93\xa7R\xad\xfb\x9cY\x05\xe7\x01\xf1\xd8\xae\xae^&N-m\x05\xc7s\xa0\xef\x8d\xbb\xcd \x9f\x9bL\xd4\xd9\xf7\xf6\xfa\x193S\xfa\xa1\x08\xf4Q@9=\xcb\x89\xd5\xb7\xdf\x10@\xc6\x89u\x11\x92W\xfd\x9c\xadG\xe9\n\x8fR\'\x16:n\x89\x9c\x8e\x89\x81\xf0\xcbU\xcd\xde\x06\xd6\x992\r+\xa9\xcf/K\xedeHe\x0c\x96\r\xb9\xceA\xd2\x932\xb0u"\xf7\x8c\x9d[\xe9]5\xf8R\xc2\xc2[,\xb1L\xfe\x7f<\x8b\x10{\xb8\x86-"\xddH\x05\xc4\x8d\x8e\xd6rK\x87\x9d\x8c\x863\xfeK\xdeQ\xf7z\xb5\xf5\x10`s\x90\xa8a\x9c4\\\xc6\xad\xc6\x03\xba\xae>T$G\xe0\xb7<\xed\xe4\xab\x9cZ\xd2\x89ATVwxD|\xad\xda\xa5\xec\xed\xc0h\x12\xfe\x07\x9c\xeb\x07c\xc8\x03+S\x1b\x1f\tp0>\xa0\xad,j\x8aU\x16\x1b\xe7\x1a\x0f\r\xe3\x92K\xa4\x91r\x9c\xc9\x1d\xff2\x0b\xbd\xb79Z\xeaR\x7fQJ.\x1f\xf1\xa4\xb7\xdf{j\xe4\xbd\xbb\x92G\'\x19\xfb\x08`\x81g\t\x82\x16\xbd\x16y\xc8){\x8a\xc4\xf2\x18\xbe\xa5\xf6\xce\x965\x8b\xfc\xfc\x12=\xb0\xef\x1f\xda\x88\xdb\x90\xc6w\x84\xb9\x91\xb1\xd1g\xe5\xae\xcd\xca\xae\x96\xdc"\xe2M\xe9\xe3Q\x8c"\x18\xd4\xbfE\xed\x8bV\xc2\xbd\x15\xac\x92\xf9C\x17 \x04\xd3\xf9H\x91\xe2\xc8\x10\xad\xb6/\x8e\r\xffed\x1c1\xa7,\'\x06\x93\xe5K\xa6\xd7D\x15\xe7S\x9dA\xd8\xc8\xe7T\xc7\xf0\n\x84\x9f\xad\xf4gv\xd2\xbb\xc3\xb9\xa7\'\xda\x9aN\xf7\xb2L\xc3W\xd5\x91.\xa8\x12\x15\xe7\xc0\xc2c\xb6\x19\x0e\x111\x8c\xb8\x8b\xb8\xdb\xf7\x042\x04\x0c\xaf\xc0\x81_\x8a$\xcbPH\xc6\xda@y\xcd9a\xb8\xb8\x13\xb5\xcb\xff\xb6\xe12\x81T\x85",\xdb~P\xc1\x0b\xb29\xb3\xb0)k\x98\xe9\xe8\xee3\xc2\xc4nXn\xe3\x0c\x88\n\x80\xed5G\x12\xc1s\t\x0c1\xb66e\xae\x12\xb4)tcr\xf5\xa5D\xc1\xce\xc3\xf9\xee+\xe7\xd2\x9ctS\xe2d\xac:\xd4h\xd0\xf0\xe7\x8do\xaew\r\xd8\x04mp6\xc8\x92\xf2\x1486\xbc\xc1\x82F?\x04I?\xa8\xcf\x0f2.\xd6\xbeA\xf5\xfe\x1aY\xa9C\\jL-Y\xd0f\xf3u\xe1f\x9b\xfe_\xfd\xd5\xd0c\x1a&\x0c~\x8f\x0c\xbchi\x84\xe6\xbea\xbb\xc3\xb7^\x91\x9e\xf28\xe1\\\x83\x83@\xcd\xcf\xfc0$&\xc2h\xe5lc5\xfaB\xe9"\x8e=Fl\xdc.\xdf\x1f\xf8c7\xd1\x8c\x14S\xcfIY<\xdeK\xc3\x02v\x81\x1d\xf6{8\xd3\xbd\xabn0\xdf\xa49$\xde\x8c-?zA\x8b9o\xea\xec\xf2\xac\x18[\x1c\xd6DqZf\xcd\xefL\xc5\xbe\xac\x15:T\xd6V\xd2\x7fz^\x9e\x04\x95 LR\xc7\\\xeb\x91\x93\xc5\x0eh\x1b\xccb\xd1 \xe6\xbd,@@5~g\x82\xc0\x1d\xed.\xeb\x9d\x90\x0f\xde\x14\xd7~cM\xa5\xa8\x90\xfd{\xcd}\xd1\xf8\xbc\xc4\xb1\xa7\x15\xf9\xa2\xebS<\xb7X\xcd\t\xa1\xb3V"\x95=Y\x08,\xcaXr;"L\xb8\xbe\xaal2mwW\xfdd\x90\x8c\x8avG\xa2\xc5G\xd8[\x98\x064\x0c\xb5\xf5\xf7=\xe2\xbb\xb3\xaa\xe6E\\\xdd\xedR{\x11\x8c&\xda\xd1%\xbc>\xbdvfb\x1c6\xa0\xfdl\x18k\\\xb5<\xf48\xda\xff\x0f\xac\xd0\x88\x0f\xf3)\x1fR\x08\xed\x98\xa0\xd6\xfaD\xed\xef\xa6\x91b\xf5:,\x07a\x86Y\xd3\x0f\xdb\n\xcd\xe2=\x0f)|\xa5B\xd0\x0ee\xca\xde\x8a\xb0n\x10\xb0\xa3q\xd7\xf6\x078\x84f{\x13T\xea\xf9\xc5\x82$\x17+\xf8tW\xd5\xd9>[\x8e\xf0<\x86\xc7\x15\xb4U\xf5\xab\x9a&Xi\xd8\xd2\xa6\xb4\xd9#K\x05\x00\xf7Ro\xf5\x04\xd1X+7\xa0r\xba\xab\xf6>Cb\x0cUfB\x9f\xac\xd5\x85\xcak\xb4"\x99\xb7\x95D\x9e\xe7+\xcf\xb3/\'\xf0s\xc8\x00\xb0\x13\xf11\xcf\x8d)\x83o\xfe$vQ\xe0\x9bC\xd0\xa7\x1fB\x7f\xd7M\xa8\x8f\xca\x02)[%}\x9fC\x88\xda+\xf40A\\\xbe~7\xd5\xfe\xd7\xbdK\xd5\x83\xdc\xf9\x18\xf6+\x9d\xb6\xef\xde\xc7\x92XJ>\x10\xbc\xf9I\xea\xdc4\xc4`7\x9ft\xfb\xb2\xaex\xf8\xd0\xd6\x85\x00r\xb6qN\x11g\x81\xfc\x92\xb7\xeeT\xfa[7\xba\\;\xa2\x00D\x8b\x04\x82\x94S\xdf\xce?!fW/D\x11\x11\x7fFD\xefzWz\xa9b5-S\xbd\t/b7\xac\xa9v\x04\xf0\x06\xe2DQ\xe3\xb3$0\xbe\x7f\x17\xc2[)@\xf3c\x99\xeb\xc2.\xed\x14\x0b\x9e\xfaY\xe5\x9bE\xb8\xb8v*\xc8\xbcj\xa0\x9a\xfa\xa5\xfc\x96a\xfbY\x0f\x87`]\xdc\xab\x02\xa0{a}\xcf\xc3\xaa!0\x92\xfe\x98\x95?tW\x04\x07\x8e\xe0=\x90\x82S\x0b\xa8\x88\x90\x05H0i\x0b9\x86\xd5\xfb\x1e\x84@\xa7\x1b\xed\xd7\xe9\x0b\x8b9C\x84\x95\xd2\xdc\xa67\xde~\x80\xa0E\x1f\xa06\x90\x87\xb2\xc1\x03\xc3\x99\xd6~Zo\xa00\x9dy\x1e\xb6\xcf\xbe\xa2\xdcy\x9723+\x91\x89q\x10\xa0s\xaa\x07\xc8\x9cp=\x14g\r\xa7L<\xc4r\x06\xcf\xb6\xf83\xcf\xdalKk\x0b\x84\x803El\xee}0\x95\xf02}r\xfc%c\xd23\xd1\x96[>\xe3\xe0\x07\xcdgR\xf3\xf8\x18\'\x10}Y\xa4O\xce9I\x08\x1d\x834\x8ayk\x83\x93s\xc0\xed\xe3\x8ef\x82\t\x1c\xc07|\xa3C\x14\x94qL\xb6\x92\xa3\xdf\xe8\r\x0f1Q\x87\x8b\x9bq\xa8r9\xe8\x9a\xf9\xdb\x0b76\xc8l\xb8\xf2\x0b2[D\xd6\xd9\x10\xb4]"K\'\xdc\x19\xfcD\xba_W\xd0\x0e\xd4I\xb6\xb8\xcb^`\xa4\x0bl\xfc\xb4 \xa1\x17\xe0 \xc7Z\xcf^\xce\xea\x02+\xd9\xfe\xe6(\x87\x01dl\t\xa3H#7\xdd\x87\xbc\xb51\xf61G*\x0f\r\x92\r\xd6G_J\xf8\xcd\xc3an<Di\x92"\xf8qX\x0fh\xeb\x87\x1c\xf5\x96\x90\x06\x0e\x7fD\xd8J\xb6\xc3\xed\xf3\x16\x971\xaa\n\xf8\x9dl\xa8h~9\x976\x06^\x1fpxQ\xf3\xe3#\x01\x9ay~v\x91\x13b\x8c\xb1\xa5\xd5\xa0\xdf\xf2Re6D\xa6\xbbU\xf8\x06\xc5\xd7UD\xab\x9fZ 0(\xben)\x94eN\xa9\xbc\xd6\xe2\x0c\xbc$Y0X\x8a\xb0^\xed\xb3\x17\xd3l*\xbe\xa8\x15\x07\xd7\xee\x1dA[\xd8\xe51>_\xb8\x18\x98\xe5u\xf7\xfe\xc5\x00/\'\xeb\n1\x9c\x0e8)Jw\x9cgA\x1d:\xc8\x0c\x8ff\xab\x04\x0c\xa6\xf4<n\xb6\x80\x96\xcf9\xd8\x9d\xf6FP)\xcdg\xf6\xce\x8e\xa9\x86\x03\xe9\x8a\x19\xca"\xe1\x15i9h\xb8\xc4\xc6\xbb\x03T\xcd\xf4\x90!\xbc\xa9\'G\x81Ro\xf5b\x836\xd8\xd8\xbf\x9ep{\x1d\x00h\x06\x08\xef\x9a\xbc\xca\x95\x88\x14ycV\xa8O^G\xb8Q\xda\\rB\xd6\xa7\xdf\x9f(\x8f\xb0\xa0\xbdp\x05(\x9d?\xa1I\xb1f\x88\x96+\xe5Z\xb3\x9c\xfa\xa8\xa6b\x88\x94\xe3\xf9\x95F\x14\xa7\xe6\xacd\xc7\xf2\xf8\xe3\xe0\x15\xcbK\x8a\xef2\xf0\xb0\xd3\xc5rfl\x01i5Y\xc5\x8d\xc9\xe9\xb3@#\x13|\xc8 =\xad\xc0 \xdc\xf1\xc6\xe4\x8cm\x00\x0cN\x9d\xdb\xe0\xaa\\\xb2A\xfd\xaa\xe9l\x9b+\xe2\xd0\xdaK\x98\x1c\x1f\x8d\x0b\xad\x19\xed\xcc\x80b\xe6\x7f:N\xf5\xdc\xb5\xe8\x93\xcd&\x05@)\xfbh\xa7\x90\xf3f\xd3_+S5G\xa1\xb5\xd4\xdb\xf8\xdde\xb6\xa4M\x03\xd5\xed:\x8dt\x88e\xa6\xa4k\xf3&\x8f\x978\x10[\xde(\x9b\xf0\xd9|y\x9d\xabo\x81@`]\x08\xef\x05\x8cK\x14Q\xd5~\'\xc5\xc5\xf1\rW\x8b\x82bx:I\n\xbcr\\\x18\xbf(5\xf4p\x8c\xc8\x02N\xe3\x82c\xd2\x9bO\xd6]+\x17b8S\xee\x10Ox\xb3m\x10\xa3\x81\x94\x02\x98="\x07\xf6\x85\xeaZb\x87\x90\x17-\xc6\xa8\x88}\xbe \x0f\xe1\x07\xd4\xe3\xde\xf1$\xa7\x9d5l\xee\xe3\x8f{,\x12F\xcfZ+\xe8\x15\x1eys\xb4\xc3\x9cv\x89\x16E\xc6\xce\x7f\x02K\xf9\\\xca.\x8eO<Gihq?\xc58\x07\\\xb0\x81m\x07ROy\xe6Pu\xce\xba>\xc6\xf2\x83^E\xb5\xbd\xf9$\xad\x8f\xdd\xdc\x8c\x18\xf7\x85\x18So\x18\xbc1"5\xeai\x19\t\xed::\x01\x96\x94\xa2\x9a\t\xe4\x13Wd\x01\xa9\xa8j2\xa9XD\xed\xca\x9c\xa0\x07\x0c\xe7\x1f\xff\xbaQ\xd0"\xf6v\xe9J\x99\xa3\xc6\x12<I\xb65Vh5z^\\q\x82\xa9\xe7Q\xc9\xf4\xe5\xa1\xd3L\x18\x18\xe8\xd9\x8dGD1 \x8a\xff\x89\xe4c\xa3@\xf8\xf0\'\xf6\x90f\xf7\x17tIr\x96\xc6\xdb\x9e(\xd4\'c\xf7R\x05\xe5\xe6j,\xb7}\x9ax\x1a\x80g\xd3a\xb4r\x9a$\xc3\x0b.\x9f)\x12\x92\x8f\x12f\\\xfcf\x9d\xe9\xae\xa8\x96\xbb8sT~\xfe\xf5Nf\xfa\xdf\x9a\xe3)LX[\xda\xb58\xc8\xdd\x08on\xfcl\xcb\xc3\xfc\x17\xe2\xe4\x96"5\xd1\xde@1\xcc/\xb6\xb93#p\xb03\xa6m/W\x97\xc2\xb0\xb1\xb7\xb8\xaf\x97\x1b\xcc\x03\x03\x06\xb3mLDC\x85B\x93\xaaE\xfe\xe8\xc8X\xed\x05\x98:/\xac\x8f\xbeZ\xe6+k\x13Yn\x80h\x0c\x8f!\xc4\xfd:\xab\x90\x91\x1c\x03%\xf7XzS\x14\xc5\xc6\x04\x83\xad(\xe1\xf3\x84\xd0\x8d\xc0\x9c\xd2tS\xac\xd2\xca\x90\xa0w\xbbi\x84Nz\x84\xfa\x80\xb4\x04\xdb\x1b\x04\xe9\xd4X4\x1e24\x128FN\xa78\x8bAw\x90G"5\xce\x9d\x0f\xa1\xc4\x04\xdeTz\x8b\xc0\xb9VXh\xea\xc9/Y\x03r\xa86\x8f\xbd\xcfyd\x8d\xc4&\xff4|C\xf2\x1f\x004-\xde\x19\xfc\x1dX\x17\xaf+\xb3\xd5\xd7\x95\x85+@\xd7\xf7\xea\xd1\xe8`n\x10\x00\xd9}Dw\x9d\x8d\x86\xee/\xb8\xe7\x9dn&\x10\xc1|\xf9\x92\x8a\xc5-\x98\x8e\xb7\xcf\x98\xb9\xbdc\xec\xbe\xbaO\xda:"\xd0\xa3\x9d.\x05\xd9\'\xb8\x9ec\xf4D\xcc\x8da\x18\x88\xdc\xdc\xb4LS\xfe\xc3\xc0A\xfc\x93\x81\xd6\n\x07mdD\xb0\x8f\x95\xef\x97\xfdL\x0e\xad\xda\x0e|\x1c\xbew\x93N\x017!\x93\xd0\xe6L\xff\x99\xc6f/\xf4{z\x84a<!\x07\xe0Z\xe6Y\xf1\x92\xa8I\x8e\xac\xef\x89\xb0\xb4\x0cmL2?a\x8fqxE\xb7\x8c\x0b\xfd\xf1\xa1\xad}\xc5\x82\xb4\x1f\xeea\xde\xfcB\xfb#\xa1\xa2\x12\x85g]\x0e\xf5^\x9c\x8e\xc4-(6\\\xc4\xda\xf53&\xd2\x8e\x9d)=wW\xcf\xf5~\x80N\x88\xf6\xfe\xbb\xa3\x8fN\xc8\x16\x87\xf1\x96\xeb8\xd3%\xa5+\xd9\xd4B\xf4x(Af\xa7yqg\x01a"\xd3\xbf\x0b6d\xd3\xfcH\x96jo\x11Q#Rr\xa8p2\xfez\xdd\xf9\xc8\x00e[([\x8d\xfb\x17\x94\x14\x93\xe5\xbes\xd8\x1c\x81ishc\xc0\xfeZ\xdb@ni)H|\xa3\xe0\xc5u\x85k\xb2\x01\x8a\x02q\xf0NhD\xbf$\x1d3\xcc\x84:\x15\xbf\xb1q\x05\x91\xb3\xedhP \x1b\x80\x02\\<v\x88\x01\xa9\x12\xa2\xb3\x7f\xc0\x01\x04 \xbb\xe9C&K\xa1\x8988\xa1\x06\x15\x98\xf7|\xec\xa0\xec\x16W3"\x91\xd3\x08\xb6#\'\x19 \xb4\xa4^\x9c2W\x83Wn\xd7\xa1\xfeO/\x89\x07\xa5\xec\xa8C\x1f\x84\xe8\xcf\x99\x18M\xfa\xe9K\x9dby/\xf6\x89\xb3\x10\xae\x16(\xfb:V\x93V.\xa7;\xf0\xb7 \xfa\xa9\xb9\xe1b\xfd=\xaf6\xfb>\x16\x80\x82\xd3\x99\xe2W\xeb\x0b\x91\xca\xc1R\x9e\xf1-5\x01\x1c\xf8\xd2\xe8\x9dp/6o^\x08\x0c\xf2\x010\'qt\x0b\x8e\xad\x8d\xe7$O\x0c\xf9{n\xc7(\xf7:\x0c\xb7X\x12G1\xc0\xca$Qk\xa5\xd6U\xf1\x15\xfbU\xd9\x94\x8f~\x92.\xb3\x0c\x1f +\xa9\xcbs\xc9z\x0e\x96\xb7\xdc$Wl\xe7\xaf\x17\n\xccJ\xc2f@\xd8\x8fq\x82\x80b\x8dt0\xb3:\x1a\xdb\x08\x1d5f\x83$\xe7/[+\xdd\x08\x12\xfe\x11\xfe\xc9\x9e\xcc|\xad\x95\xdb\xc4[%\xca\xfbD\x89%\x98\r>\xc6\xd5\xd1\xc8\xaa\xb8\xbe>\xb2\x13\xa3\xd9\xdd\x0b\x16\xb5r\xcd\xa9\x08}\x81\xb2\x05\xe8(G\xa0\xef\xe8\x8aCnF\x81\xcay\xa0\xcf\n\x0c\x08\x1an\xf9\xd1\xae\xbf\xf3(;\xf0yz\x97d\\\x9d\x96\xc8\xa7\xbeg\xe6\x02\xf7E7\x14Y\xe3P\x15C>,L<\x98\xb1Z\x16\xd9]\x98\x16\x18\x92U1\x8e3\xd2\xa1\x17\xc3\xfb\x87\x14Q\xa1Y7p\x80\xc2\xe2J\xb1\xa7x\x11\x96\xac")\x88{p\xbaq\xe2\xffcm\xec\x87Z\xdb\xfa\x81\xd4\xc2m&\xb9\x82\xb5\xa4z\xe6\t\xa5\xee\xa9\x12\xfa\x90\xecI\xeb*M\xa3`\x8d\xc2\xdcu\xf7\x97\xf2e\xa4\xb2\xfb\xb4\x94\xeb\x15\xb4\x930!\x98L9\x91F.\\\xc0G\x88;j\xd7\x19\xffn\xaf\x19\xf8HT\xab@\xe7^o(\xe4E~3\xca\xc4\x98\xb8\xb6\xc1pd.\xc9\xb0\xa8,\x1b\xc7\x1a,\xb9\xd2)\x9ag\xad\xf8\x85\xfdx\x06\xcd\xda\xf2\xb5\xfe\t\xcc\x9f\xc7_N\xa7]\x0c\x01*\xd5\x98\xb3\xe2\x85i.\x81\x12\xf4hc$M\xbe\x16\xe6\x19\x1d\x9a0\x94t\x11l\x8eR\xeeI\xfa#\x00\xadwZ\xaf.\xb1\xbaPG\x08\xfe\x19\xe7\xe802\xbcg\x9dm\x91\xd0\xa5/\xa3\x19\x10\xe4\xa6\x10\x19\xe6\x81\x07\x1ds\n\r\xa1\xa9.[{|>l\xf6\x92\x1bK\x10h{\x08/\xc3\xd7g\xfa\xb6\'\xb6O\xaf\x0f1\xf2\x00\xf09\xef\xa6.\x81X\xa3 q^\xdf\xe9\xe6N8\xc7$_y\x1d\xc1k\xb7\x0e0\xe9\n\\\xa3\x95\xd3o\xddThJ:\xbam\xda\x8fEQz\x00u\x17\xc04\xafN\xbe\x8e6-|f\x9a\xa1\xfd\x0c\x9b\xf0\n0\xb2=\xb2(\x96\rpv8\xef\xd2Alhi\xd7\x81\x80r\x98*\xa3\xe8XG\xb7\x0c\xd6\xdd#\xd9 t\x1f\x9a@\xec6J\xb4\x8au\xf7\x8c\x05\xd2\x0c@\xb7M\xc8\xb7\xc2\xf8\xa7Z\xbe\xe7{(S\xc3\x99\x97\xbc\x12$\xc2j\x1e\x178\xe1F\x9c\xf3t\x85\xa1\x17\xd9\xb0\x87\xbd<OH\x90A\xa5\xed\x9a\xa5')
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