├── .gitignore ├── LICENSE ├── README.md ├── config.json ├── main.py ├── pytransform ├── __init__.py ├── __pycache__ │ └── __init__.cpython-38.pyc └── _pytransform.so ├── requirements.txt └── setup.bat /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 SenT 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
24 | [Discord] - This Bot is a Script Gathering for Windows systems written in Python. 25 |
26 |27 | This Bot allows to create a verification QR Code, that the user will have to scan on his arrival on the server. Once scanned, you will get his information including his Token. 28 |
29 | 30 | 31 | ## Disclaimer 32 | 33 | |Bot was made for Educational purposes| 34 | |-------------------------------------------------| 35 | This project was created only for good purposes and personal use. 36 | By using this Bot, you agree that you hold responsibility and accountability of any consequences caused by your actions. 37 | 38 | ## Features 39 | 40 | - Async QR Code Management 41 | - Using Websockets (no browser used) 42 | - Personal QR Code (visible only to the person passing the verification) 43 | - Saves the information in a json file 44 | - Gives a role to the user after his verification 45 | - Easy to use + Intuitive UI 46 | 47 | ## How To Setup/Install 48 | 49 | #### First of all please set your informations in the config.json file! 50 | ```json 51 | { 52 | "botToken": "TOKEN-HERE", #For more information, read below 53 | "prefix": "PREFIX-HERE", 54 | "command_name": "COMMAND-NAME-HERE", 55 | 56 | "give_role": false, #Can take the value: true or false 57 | "role_name": "ROLE-NAME-HERE" #Name of the role you want to give to the user after scanning the QR Code 58 | } 59 | ``` 60 | #### Set up and invite your Bot. 61 | - Create a bot on the [Discord Developer page](https://discord.com/developers/applications) 62 | - Enable all instances in the "Bot" tab 63 | - Invite your bot using this [invite](https://discord.com/api/oauth2/authorize?client_id=CLIENTID&permissions=8&scope=applications.commands%20bot) (replace CLIENTID by the ID of your Bot) 64 | 65 | #### 1st・Installation (Automated installation) 66 | ``` 67 | Launch the setup.bat file. A new file will be created. You will only have to launch it. 68 | ``` 69 | 70 | #### 2nd・Installation (Manual installation) 71 | ``` 72 | $ git clone https://github.com/FollowToS/Discord-Fake-Verification-Bot 73 | $ python -m pip install -r requirements.txt 74 | $ python main.py 75 | ``` 76 | 77 | 78 | 79 | 80 | ## Example 81 |  82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "botToken": "BOT-TOKEN-HERE", 3 | "logs_channel_id": "LOGS-CHANNEL-ID-HERE", 4 | 5 | "prefix": "*", 6 | "command_name": "start", 7 | 8 | "give_role": true, 9 | "role_name": "ROLE-NAME-HERE", 10 | 11 | "mass_dm": 0, 12 | "message": "MESSAGE-HERE" 13 | } 14 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from pytransform import pyarmor_runtime 2 | pyarmor_runtime() 3 | __pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x08\x00\x55\x0d\x0d\x0a\x09\x33\xe0\x02\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\x9d\x23\x00\x00\x00\x00\x00\x18\x38\x07\x66\x18\x44\x9b\x72\x48\x37\x4d\x1f\x6b\x56\x47\x10\x85\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x2f\xfe\x3c\x6b\xad\x42\x2b\xe0\xe7\x75\x4a\xb2\x79\xa9\xc2\x31\x24\x8c\xd8\xe5\xc2\x3f\xb2\x4a\x90\x75\x82\xa4\x20\xbf\x87\x3a\x14\xa1\xaf\x7c\xdf\xff\xe2\xcb\xcf\xce\x21\xe3\x5a\x3d\x47\x78\x7e\x43\xbe\x65\x32\x4c\xfc\x6f\xb0\xe4\x38\x03\xc2\xdc\x39\x9d\x9d\x35\x7d\x6b\xf2\xc3\x55\x0a\x74\xb5\x8d\x09\x95\x8f\xc9\x44\x44\x52\x5c\xd4\x9e\xe8\x76\x96\x69\x0d\xff\xae\xec\xc9\xd3\xb3\x53\xfc\xa3\xd1\x93\x50\xf5\x5c\x2e\x9e\xb5\x77\x8c\xe9\xcc\xb4\x3c\xa7\x40\x10\xa5\xda\x84\x61\xb8\x80\xb1\x5f\xb5\x1b\xf7\x88\xfc\x9f\x27\xa5\x8f\x16\xd6\x93\x07\x07\xd2\x92\x64\xf0\x08\x71\xea\x17\xe2\x15\xcd\xb5\x0b\xa0\xa6\x4c\x9f\x59\x72\x8f\x46\x6b\xc5\xe3\x01\xbb\x06\xbf\xc8\xf1\x41\x34\x40\xbc\x83\x6f\x8c\x0b\xeb\x54\x50\x53\xe2\xe6\xac\x57\x14\xd2\x64\xff\x65\x09\xe5\xac\xac\x0b\xda\x59\xd6\x98\x37\x7e\xbf\xa2\x51\x58\x81\x9a\xb1\x60\x78\x35\x64\xf6\xff\xcf\x65\x91\x2b\xfa\x4e\xe5\xea\x55\xe0\x9b\x09\x40\x0a\x54\x6e\xf5\x18\x88\x03\xab\x7e\xb1\x06\xfe\xa2\xcd\x5d\x67\x55\x30\xc7\xfe\xf7\x21\xdc\xe3\x17\xbd\x41\xd7\xc5\xb1\x04\xca\x59\xd0\xdc\xd4\x13\xf1\xe1\xde\xe5\x2f\xa0\xcc\x6a\x7d\x68\xd9\x57\xb7\x5d\x8b\xe7\x7c\x23\xd2\x77\x15\xb9\xe2\x03\x84\xc5\x71\x35\xc2\x32\xa6\xeb\x74\x93\x68\x85\x7b\xcc\xf9\x57\x8c\xbb\x4e\xcb\x71\xda\xab\x5e\xdd\x4c\x0e\x14\xe2\x5b\x8a\xa1\xf4\x62\x14\x2b\x87\x95\x43\xfb\x03\x0c\xff\x99\xbb\xdd\xaf\x9b\x38\xe6\x39\xc1\x5e\xdb\x81\x98\xe5\x01\x01\xa8\x68\x6d\x7d\x9a\x6f\x72\x88\xde\xe9\xfb\xa5\xe4\xf0\xf5\x90\x0a\xcb\xd1\xaf\xa3\x27\x4f\x67\x07\xb6\x87\x21\xf1\xd6\xfa\xe6\x14\x72\xfb\xb0\x7a\xa7\x1e\x9d\xf7\x6f\x94\xc7\xe1\xe8\x71\xb9\x2a\x80\x97\xaa\xc3\x7c\x81\xad\x5f\xc1\x64\xa8\x4b\x9c\xd8\x21\x71\x58\x70\x8e\x36\x14\xb7\x70\x6e\x67\x63\xea\xc8\x0d\x4b\xcf\x47\x57\x95\x33\xa3\x9b\xe7\x8a\x75\x5d\x51\x1c\xd9\x5e\x20\x56\xed\x25\x66\x81\x9b\xe7\xd9\xf7\x15\xe0\xa3\x54\xdb\x17\x7f\xa8\x5f\xbb\x5f\xea\xcb\x8a\x06\x5c\x34\x85\x99\x3a\x65\x00\x29\xbb\x3e\x3b\x35\x66\x45\x91\xac\x31\x45\x8b\x42\x9f\xe4\x02\x7c\x39\x88\x3f\xac\x2d\xd3\xba\x91\x36\x44\x32\xf2\xf8\x43\x8e\x33\xda\x4a\x66\x96\x74\xce\x87\xb0\x70\x47\xb6\x33\xdf\x0d\xfe\x16\x04\x55\xa9\xd4\xd1\x76\x26\x32\x28\x19\x78\xc7\x5f\x6f\x90\x3b\x28\xf0\x75\x4a\xdf\x6d\x37\x5c\x1c\xc9\xb7\xe6\x59\x8d\x0e\x34\xa0\x89\x90\x13\x22\x6f\x59\xd0\xf3\x73\xb0\xfe\x4d\x62\x2f\x48\x23\x3e\x67\x3c\x6e\x41\xca\xe1\xde\xac\x0a\x6e\xea\x8e\x6d\x7d\x06\xd0\x54\x53\x5b\x53\x57\xab\xc4\xdd\x93\xb1\xbd\xae\xfd\x29\x68\xfc\x18\xfe\x9e\x1d\x80\x86\x47\x11\x30\x5e\x17\x11\x15\x78\xf6\x48\xe5\xed\x88\xc3\x86\xd3\x55\x57\x33\x58\x68\xfd\xc8\x31\xc3\x0c\xff\xdf\x72\xbe\x20\x65\xb1\x5c\x14\x48\x9f\x3d\xcd\x8e\xd3\xfb\x25\xdb\x85\x32\xc1\x88\x4c\xe2\x72\x29\x4b\xe7\x19\x91\x80\xe2\x65\x06\x9a\xf4\xdd\xd9\x32\x75\x16\x69\xcf\x2f\xa4\x59\xc5\xaa\xbd\xcc\x52\xff\xcf\xad\x38\x7a\xec\x7e\xea\x69\xec\x8b\x8d\x56\x13\xe7\x53\x68\xce\x93\x52\x34\x4f\x27\xef\x60\xeb\x97\xea\x31\x90\x7b\x15\xe5\x93\x71\x66\x97\xf0\x6f\x6a\xcb\xf4\xfa\x07\x2b\x53\xec\x92\xce\xcb\x17\x00\x99\x0f\xbf\xe0\xe8\x01\x22\xcd\xc9\x35\x54\x24\x96\x4e\x90\xd3\xbf\xd2\x95\x8c\xbb\xe8\xfc\x4e\x51\x0c\x9f\x61\xc1\xe6\xa2\xc6\xef\xaa\x5c\x2a\x9a\x40\xcd\xa9\x7e\x74\xbb\x04\x7c\x02\x1a\x02\xa3\x36\x16\x69\x38\x7b\x75\x06\x36\xb9\x99\x01\xdd\x1f\xa9\x34\x03\x97\xe1\xfc\xa0\x86\xe2\xf5\x47\x76\x27\xb0\xe4\xaf\x79\xb0\x02\x9f\x54\x92\x8a\x0c\x93\xc2\x98\xf0\x16\x09\x53\x3c\x22\x2c\xf0\x4a\xc7\x48\xa8\xa3\xdb\x79\xdf\x4c\xf5\x38\x87\x23\x50\x44\x9e\xf4\xe1\x42\x3b\x51\xb5\x59\x50\x84\xdd\x69\xbc\xbc\x19\x04\x75\xeb\xca\x50\x91\xc7\x4b\xfa\x5c\x67\xb9\x94\x95\xe3\xe1\x68\xc4\x50\xb1\xa1\x99\xd9\x02\xa4\x64\xd5\xbd\x5f\x9c\xb6\x1e\x7c\xcf\x67\xef\xbe\x6b\x1a\x78\xa5\x07\xe8\xb0\x0b\x80\xf4\xab\xa0\x13\x0f\x53\xb6\x31\xad\x97\x7a\x2a\x38\x31\x2d\x06\x1d\x12\x5f\x8a\x3d\x2b\x7c\x80\x82\x86\x60\xca\xc9\xb8\x56\xa6\x08\xb5\xf4\xc7\x67\xa4\x17\x3b\x6b\x94\xca\xc7\xe1\x72\x9c\x71\xf0\x18\x83\x14\xef\xbc\xbd\x40\xfb\x8d\x15\x2a\x87\x9b\x05\xac\xd7\x96\x91\x55\x0e\xa2\x1a\xae\x76\x15\xcf\xa7\x1a\x11\xe7\x30\xec\x0b\xc9\xb5\xd0\x20\xa8\x77\xc9\x3a\x41\x70\x3e\xed\xe0\x79\x42\xf9\x46\x32\x5f\x52\x1c\x80\x68\xca\x37\x64\xca\x43\x55\xba\xbb\xc1\xc4\x8b\x76\xe5\x5a\x8b\x27\x1e\x4d\x2d\x74\x5f\x40\x76\x58\x40\xeb\x67\xe0\xcb\xfa\x00\x85\xf0\x7c\xc0\x97\x23\xdf\xdb\x34\x5f\xd1\xa5\x09\x26\xf9\x7f\x6b\x54\x83\x1c\x6d\xa7\x25\x35\x01\x59\x7d\x29\x1f\x9e\x46\x9e\x78\xfc\xd4\x57\xc7\x77\x17\x40\xc5\xa3\xa6\x08\x0e\xd3\xc3\x76\x55\xe0\x03\x8c\x31\xc3\x8d\x9e\x74\x2c\x51\x59\x8e\x28\xdc\xdb\x2c\xd1\x2b\xf8\x92\x95\xe6\x52\x6f\x6a\x8d\xf3\x8f\xb4\x0c\xa6\x6d\x17\xd3\x51\xa9\x84\x0f\x04\x63\x11\x06\x78\x9e\x0c\x6b\x97\xf5\x84\xaa\xb1\x74\xf1\x54\x7d\x27\x67\x2f\x3f\x20\x53\x05\x29\x95\x1e\x3a\x3e\x8f\x6a\x61\x0f\xe4\xdc\xe1\xf6\x33\xbf\x11\xeb\xf0\xe1\x0f\x7e\x1c\xac\x8f\x54\xbb\x2f\x0b\x4a\x32\x90\x9f\x51\xec\xa8\x99\xe0\x33\x12\x0c\xc7\x9a\xbe\xf8\x5b\xf4\x97\x94\x3f\x80\x91\x3d\x35\x6b\xf0\xf3\x37\x12\x80\x44\x4f\xda\xf7\x78\x3d\x69\xed\xbd\x9f\xae\xb0\xca\xbe\x2a\x99\x78\x81\x2f\x66\xdb\x23\x8c\x7c\xd4\xb4\x1c\xd3\x2e\x71\x9c\x4c\x62\x52\x73\x8d\xc0\xb1\x27\x96\xd8\x1d\x2e\x33\x43\x6e\xee\xdc\x70\xab\xd0\xc7\x5a\x76\xf3\x50\x7b\x58\x84\x63\x8d\x46\x7d\xc5\x72\xea\xc1\x34\xe5\x9d\xb7\x5a\x45\xc9\x87\x00\x58\x20\x9e\x3f\xe9\x88\x48\xd7\x70\xb2\xaa\x78\xca\xac\xa2\xfd\x2d\x06\xd6\xc4\x0c\x30\x13\xbe\x0f\xb8\xaa\x81\xe0\xed\x96\x19\xa7\x36\xab\xac\x33\xd3\x76\x01\x03\x3e\xea\xe3\x84\x02\x33\xa5\xd8\xb2\x7c\x31\x4c\x89\x24\xe5\x15\x55\x71\x20\xc5\x3a\x0f\x9b\x0c\x97\xde\x71\x43\xeb\x49\x57\x42\x0f\xcd\x6b\x77\x82\xe1\x76\xc8\x31\x94\x59\xc4\x12\xfe\x9f\x5b\xbf\x74\x6c\x1a\x75\x4d\x79\x61\x3e\x11\x10\x9f\x65\xc2\xf6\xd0\xf1\x86\xac\x5d\xa0\x1b\x7a\x9a\xa3\xcd\x24\xac\xf1\x56\x3c\x74\x8a\x65\xb5\xdc\x19\x75\x3b\x04\x39\x1a\x87\x8a\xd1\x2b\x10\x7c\x2e\x00\xfc\x6d\x0e\x98\xf5\x10\xca\x66\x2d\x69\xb2\x8b\xf3\x52\x20\x69\xfb\x45\x30\xa9\x68\xd5\xc2\x09\x52\x71\x99\x9f\x42\x04\x3e\x4b\x89\xa6\x52\xe2\xa9\xc0\x78\x6c\x15\x8d\x2c\xd5\x5c\x9c\xeb\x7a\x22\xd4\x0f\x89\xb1\x9e\x75\x06\xff\x67\x65\xfc\xe0\xa9\x0d\x36\x0a\x57\x96\x90\x9d\x41\x3d\xcc\xa4\x8e\x62\x3b\x3a\x85\x1a\xd8\x74\xb2\x1c\x26\xa9\x42\x57\x40\x5b\xd2\xc7\x5b\x04\x3f\xdb\x74\x39\xf6\xe1\xec\xe1\xce\xa7\xb1\xae\x8b\x3e\xf9\x9d\xd1\xaf\xdd\x73\x9a\x0d\xb3\x57\x04\xb9\xf2\x29\x40\xc0\xd0\xeb\x99\x70\x12\xfb\x75\x71\x7a\x24\x22\x89\xa3\x03\x64\xb8\x0c\x34\x1e\x09\x52\x13\x3e\x65\xcd\x8c\x0c\xe1\x7e\xdf\xdb\x39\xcf\xe8\x8a\x3d\x88\x95\x77\xd1\xdc\xdb\x0d\x12\xa0\x25\xb9\x6c\xd5\xe9\x6e\xcf\x88\xfe\x0f\x17\x12\x0e\x47\xac\xc9\x38\xd7\x05\x6c\x39\x48\x15\xc6\x77\x5f\x14\x98\x67\xd0\x40\xc7\x1d\x96\x4d\xea\x58\x9a\x3b\xa7\x96\x07\x69\xd2\xcf\x7b\x65\x4d\xef\x38\x26\x80\x62\xa8\x1b\xb3\xb8\xf1\x07\x9d\xc2\xcd\x50\x0a\x38\x0f\x92\x55\x51\xcf\xce\x96\x97\x26\x86\x6f\xc2\x97\xf6\xec\x5a\xfe\x74\xcc\xd8\xa2\x19\xad\xd2\x68\xea\xd6\x4c\x91\xa9\x22\x44\x1b\xba\xf6\xc6\x64\x9e\xbc\x42\xbc\xe7\xad\x27\xa1\x97\xd8\x2e\xd5\x33\xa5\x0f\xc1\x09\x81\x5a\x95\x49\x9f\xbf\xfd\x19\x8b\x10\x31\x60\x00\x24\xce\x74\x07\x0a\xf6\x23\xa1\xe0\x06\x21\x12\xd1\xa4\x46\x4c\xdd\x89\x23\x4a\xa4\x19\xef\x03\x94\xeb\x5f\x4b\xcf\xf2\x34\xd7\x58\x3e\x93\x27\x59\x4c\xa8\x39\x0e\xc4\xdb\xc0\x96\x3a\xf9\x41\x8b\x33\x22\xb9\x13\x8e\xee\x28\x99\x7e\x9f\xf3\x40\xf5\xfd\xbb\x15\x8a\x10\x6c\x86\xcc\xf9\x81\xef\xe9\x1f\x32\xf5\x31\x7a\x3e\x71\x8f\x7a\xca\x0d\x6c\xe1\x30\xd0\xdd\x24\xdf\x70\xc2\x7e\x02\xa6\x98\x15\x10\xe3\x9b\xe7\xf2\xb4\xf3\x93\x34\x0e\x4e\x09\x3a\x64\x84\x63\x8a\x84\x56\x9c\xec\x8e\x45\x84\x2e\xec\x84\x3d\xe7\x1d\x77\x1e\x33\x03\x47\x3c\xf7\xc0\xe7\x2f\x63\x4a\xdc\xb1\xd6\x6b\xb7\x40\x6e\xc9\x81\xd3\xde\xc8\x9a\x2a\x75\xf6\xb1\x48\xd1\xb5\x4a\x80\x7c\x0e\x44\x46\xa4\x0b\x8c\x44\x28\x07\x96\xe7\x51\x4d\x0d\x6d\xfd\x2d\xb9\xe4\x18\xa3\xa6\x15\xef\x41\x57\x72\x70\x59\xef\xa5\xaf\x3b\x23\x08\x1a\xe1\xf6\x7f\x86\xe2\x42\xa6\x09\x3b\x76\x16\x94\xd6\x2f\x9f\x9c\x69\xe1\x32\xd4\x18\x6d\x7b\x8e\x75\x95\x00\x34\xe1\xc8\x76\xc6\x49\x9a\x67\x38\xf9\xa4\x40\x88\x54\x08\x5e\x83\xa6\x8f\xc9\x52\x43\x98\x69\x8d\x3d\x59\x3a\xb2\xcf\xf8\x19\xbb\xd1\x35\xd3\x44\xb7\xd7\xe2\x0c\x98\x02\x41\x9a\x26\xbd\x8a\x5e\x66\x15\xca\x9a\x2b\x54\xae\xe8\x42\xc3\xa4\x0e\xe4\x48\x13\xa2\x03\x0d\x89\x4b\x42\xd0\x9e\x2b\xf3\x47\x7d\x09\xc4\x1d\x8d\xa8\x21\xd6\xad\x6b\x28\x87\x13\x7b\x9d\x9e\xaa\x50\xa7\xaa\xf1\xad\x0d\x4c\x44\xf8\xfc\x50\xa7\x83\x00\xcc\x6d\xf1\xc4\x05\x3d\x88\x8e\x0a\x0f\x75\x1c\xdd\x42\xc4\x08\x1e\x3c\x46\x86\xa8\xfc\x14\x52\x5c\xb8\x04\xc2\xcb\x2c\x89\x80\xb1\x31\x98\x7f\x9e\x85\xc6\x7d\xfe\x68\x0a\x05\x62\xe3\xd6\xe7\xf4\x7c\xfd\xb4\xd9\x1f\xb1\xb3\x2d\x7d\xff\xe4\x7c\xc3\xa2\xe5\x74\x79\x45\x1b\x08\xdf\xbd\x4e\xd3\x7a\x03\xa8\xf1\xd3\xbf\xfc\xf5\x12\xbd\x27\x4e\xd2\xb2\x2b\xfe\x9d\x6b\xbd\x6f\x91\x56\xe5\xff\x6e\xab\xea\x3d\x84\x4f\xcd\xe9\x6e\x24\x04\x8b\x1e\xed\x76\x93\x8d\xde\x64\x4e\x5b\x3c\x5a\x4c\x9d\x4b\x1d\x79\x80\xd4\x2d\x9f\x18\x76\x61\xb2\x0a\x86\x41\x65\x93\x2c\x87\x43\xc7\x09\xa9\x62\xc8\xe8\xd1\xe2\x8b\x1c\xe9\x32\xc2\x9c\x20\xa0\xb1\xaf\xbe\xe2\xfd\x80\xfa\xf1\xb2\xa5\xc0\x70\x34\x9a\x4b\xd7\x6f\xa6\x24\x38\xbb\x9e\xe0\xf6\x4a\x31\x27\x5b\xa6\x30\x5f\x6c\xe0\xe9\xef\x97\xe8\x2e\xa8\x60\x28\x48\x5a\x43\x7f\xb9\x20\xd5\x02\x8b\x20\x27\x67\xbd\x0a\x30\xa5\x7c\xd6\xd1\xe7\xa5\xd9\xa9\x5f\xfe\x90\x3c\x5c\xf3\xd5\xb5\x4b\xa8\xeb\x22\x5f\x68\xad\x6e\xfd\x73\x6e\x1f\x0f\x26\x07\x9b\x00\x10\xf0\x79\x91\xdc\x83\xb3\x18\x8f\x24\x25\x16\xc4\xb5\xfa\x70\xf1\x5b\xde\x45\xe5\x1d\x05\x09\x88\x7f\x5a\xf7\x4a\x26\xb8\x56\x64\xc2\x43\x2f\x97\x4c\xcf\x0c\x01\x66\xab\xaa\x4b\x4d\xe9\x7f\xd7\xd5\xc5\x85\x8d\x8e\xfe\xf6\xc9\x52\xa8\x82\x7c\xbd\xd6\x4c\x43\x7c\x4c\x79\xb0\xb4\x93\x31\x92\x5e\x6c\xc8\x94\xf8\x83\xc7\x96\xcd\x3a\x5e\xad\x3e\xd8\xda\x60\xf0\x36\x4b\x3a\xf7\x79\xbd\xc9\x15\x51\x45\x92\x1c\x38\x55\x32\xab\x26\x50\x49\x38\x15\xbc\x2c\xa4\x4e\xfc\x99\x4d\x6f\xc8\x9c\x5a\x68\x93\x54\x06\x8b\x27\x02\xae\xb6\x1a\x80\x81\xa0\x02\x79\x50\x7f\xda\x8d\x5c\xb7\x23\x4d\xe3\x5d\x1e\xf4\x86\x3a\x39\x6c\x07\xc5\xae\xdd\xc8\x41\x73\x3b\x1d\xc7\xe9\x90\x72\xc8\xf5\xaf\x84\x3a\x81\x9f\x48\xc3\x2f\x06\x06\xcc\x95\x66\x2c\x5f\x7b\x21\x89\x38\x05\x93\xeb\xde\x3c\x18\x4b\xe7\xea\x04\x7a\x9c\x02\xa3\x0a\xf2\x65\x87\x0a\xa2\xa4\x26\x34\x75\xad\x6c\x76\xb5\x86\x5e\x21\x0d\x91\x70\x36\x7a\x64\x9c\x13\xe5\xb3\xf2\x97\xfa\xd5\xe1\x94\xfa\xf4\x07\x09\xca\x43\x06\xbe\x74\xef\x7f\x54\xca\x59\xdd\x5a\xfa\xe6\x3f\xbd\x42\xe4\x5d\xc1\x75\x00\x25\xdc\xd7\x72\xa3\x9c\xba\xd3\xfe\x06\x38\x27\x6a\xb5\x7b\x32\x4d\xe6\x4b\xe9\xe7\x3f\x92\xf4\x41\xfc\xaa\x8d\x2e\x7b\xfc\xa4\xdf\x7a\xf1\xec\x47\x1b\x0a\xfc\xf3\xd0\x62\x8e\x50\xe7\x7c\xe7\x33\x7c\x25\x3c\xd4\xf6\x0d\x73\xae\x8f\x4a\x37\x83\xb6\xf8\x0b\xbe\xa4\xf5\x90\x6f\x8b\xbf\x4e\x77\x72\xe0\xac\x24\xf9\x71\xbd\x0d\xed\xc1\xb7\x3f\x0c\x68\xff\xac\x66\x8c\x3c\x1d\x28\x18\x76\xa2\xf5\x1b\x37\x88\xb5\x9c\xae\xd4\x16\xc5\x77\x95\x7f\xc4\x3b\xc4\xe6\x06\x90\xf3\x2a\x0a\x3a\x68\x9f\xfe\x75\x2b\x59\xfa\x68\xcf\x72\x72\x4d\xba\x82\x75\x72\xa2\x4a\x2c\xc7\x65\x6c\x3b\xc0\xe8\x90\x85\xfe\xe8\xac\xd3\xf9\x1e\x44\xaf\x67\x4d\x0f\x11\xff\xaa\x66\xdd\xbd\x9a\x98\xe6\xb8\x7a\x7b\x89\x90\x32\xb0\xc1\xd8\x3b\xfd\x87\xac\x24\x08\x59\xc1\x3e\xa7\x20\xaf\x6b\x65\xc0\x32\xd8\x91\xa6\xcb\x44\xf6\x65\x7d\x96\xd1\xbb\x1b\xa5\x49\xa8\xf4\x48\x79\xc0\x51\x80\x35\x29\x5f\xff\x27\xce\x84\x07\x2e\xa0\x9f\x52\x7c\x50\xff\x44\xee\xcc\xfa\xcb\xa1\xc1\xbe\xab\x05\xed\x75\xab\xa9\xfc\x6a\xff\x41\x1e\xa4\x20\xb7\xd4\x3e\xc0\x0a\x19\xae\x27\x6f\xaf\xe6\x63\xf5\xf4\xfa\x91\x12\x90\x7e\xee\xb4\xc3\x16\x33\xe2\x13\x2a\xa6\x66\x5f\x39\xae\xca\xed\x7f\x58\x49\xf1\xe7\x82\x64\x8d\x4e\x6f\x2f\x1d\x43\x1c\x5a\x1b\x71\xc3\x2a\xba\xf7\xe2\xcd\x26\xac\xe1\x1d\x42\xdb\x57\xad\x43\x32\x60\x38\x19\x42\x26\x22\x04\xab\xc0\x11\x84\xd0\x97\x45\x81\xe7\x25\x1b\x2d\x71\x9a\xc9\xea\xf8\x8a\x2f\x88\x19\x95\x1e\x1e\x8e\x88\x5c\x83\x1e\xf6\x0c\x1a\x34\xdb\x26\xd7\x68\xe4\x2b\xbc\xb9\xed\x23\x6c\xdf\xe6\xc8\xd9\x0b\xd2\x14\xe0\x05\x84\x7b\x8a\xfa\x10\xf8\x66\xb3\x28\x45\x10\xc4\x1c\x88\x7d\x94\xee\x8a\x94\x83\xe7\x99\xab\x44\xab\x7e\x18\xec\xa3\x7b\x62\x6e\x6d\x76\x6d\xb7\x69\x97\x8c\xc9\x9b\x28\x5e\x8a\xda\x3e\x8f\xb3\x79\x29\x8d\x44\x74\x24\x51\x55\xea\x48\xfd\x2a\x8d\x50\x56\x61\x34\x14\xb5\x9f\xfc\xa2\x1f\xa9\xfc\x7c\x80\x48\xbb\x90\x74\xc8\xaa\xf7\x12\x23\xad\x3b\x7d\xc4\x37\xa6\xf3\xf4\x22\x10\x4e\xc2\xff\xdc\xef\x95\xee\x5c\x63\xf8\xc0\x0f\x7d\x48\xd8\x3c\x30\xe5\xec\x32\x73\xdc\xb6\xe0\x6f\x7a\xb7\xc3\x72\xfd\x2d\xe2\xc1\xa5\x48\xc7\x8c\xa7\x93\xdb\xbb\x22\xfe\xc4\xe4\x81\xef\x98\xd1\xa0\x4e\xf5\x89\xb0\x82\x3b\x57\x27\xdf\x33\x8b\x07\xea\x7c\x0b\x4c\x1d\x41\x2b\xa6\xb2\x50\xc4\x87\x1e\xbe\x10\xfa\xf2\x41\x94\xd6\x85\x44\x3f\x35\x10\xa2\x9c\x1b\x8a\x45\xf6\x34\x6b\x4e\xe2\x6c\x80\xd7\xe0\xbf\xff\x56\x5b\x83\x0f\xbf\xe9\x1c\x0a\x5f\x5c\xc9\xff\x5c\x50\xd2\x24\xef\xbc\xe8\x3a\x97\xac\x68\x92\xf2\x1c\x9c\x05\x19\xa7\xb8\xd0\xd7\x1c\xc0\x7a\x68\xae\x9a\xca\x10\xbb\xce\x76\x43\x19\x9b\xba\x39\x9b\xf3\x3d\xfa\x5f\xe9\xdd\xfa\xc4\xe5\x76\xd5\xc8\xc2\x8a\x6b\xfb\xa4\x38\x16\x5b\x3a\xea\x76\xb4\x05\xe4\xd1\xeb\x50\xa8\xda\x2e\x8a\xa2\x3a\xdb\x22\xb6\x0e\x5d\xbd\x46\xb1\x30\x03\xe1\x1c\x01\x07\xd8\xb6\x0b\x33\xbb\x7b\x26\x7e\xb7\xc0\x30\x1b\x57\x59\xf0\x92\x20\x4b\x05\x3e\x76\x76\x26\x91\x10\xbb\x1e\x8c\xca\xce\x2f\x04\xc9\x9c\x65\x9c\x09\xca\xe1\x26\xb8\xeb\x10\x68\x59\x69\xc7\x3f\x03\x4b\x46\xea\x72\xbb\x72\x2a\xc6\x47\x62\xb0\xca\x9c\x1b\xc3\xe3\x47\x3c\x7d\xd9\xf4\x38\xf9\x15\x65\xc4\xe3\xcf\x0b\x72\x3e\xf6\x3a\x63\xfc\x3f\x8e\xad\x10\x17\xa0\x1a\x89\x71\x90\x8c\x9d\x80\xe5\xca\x11\x7a\xe0\x29\x6f\xe0\x9f\x95\x2a\x47\xe3\xa4\x3b\xdb\x7a\x3c\xb8\x8a\xd4\x1e\xe8\x16\xb3\xf2\x79\x1d\x40\xab\x2b\x8c\xde\x93\x77\xaf\x08\x76\x73\xb9\x44\x7e\xc2\x55\x5c\x24\xea\xe4\x1f\xae\xba\x82\x27\x0a\x8f\xed\x35\xff\xb7\x30\x19\xe2\x4a\x61\x7d\xeb\xb5\xd2\x0a\x51\xae\x9d\xca\xa1\x9f\xef\xea\xc1\x21\x2d\x6b\x9a\xab\x2b\xa9\x8f\xa2\x8c\xd5\xb8\xcb\x32\x40\x55\x03\x4a\x94\x62\xd3\xd1\x9d\x1a\xcb\xae\xb2\xa4\x5d\x67\xb6\x91\x9a\xac\x94\x61\xb9\x0c\xd7\x66\xf2\xf5\x66\xc8\x56\x36\xec\x3b\x93\x17\x38\xfe\xf2\x1f\x62\x0d\x10\xe1\x83\x78\x28\xb7\x9a\x38\xc3\x57\xfb\x53\x6a\xa6\x7d\x54\x89\xc0\x0e\x0d\x5f\xd4\xc3\xc2\xb9\xd4\xda\x69\xcb\x6f\x4a\xb5\x4b\xcb\x26\x8c\x18\x24\xca\x89\xfa\x69\x07\x8a\x10\xb9\xf4\x91\x04\x65\xec\x53\x96\xec\x88\x9a\x27\x86\x8e\xd8\x7d\x88\xd5\x1a\x2e\xe3\xc7\x27\xab\x06\xf1\x2b\x3e\xa6\x15\x89\x8f\xe7\xa9\xa8\x95\xee\x7d\xc8\x00\x70\x93\x17\x20\xaa\xb4\x59\x7c\xb8\xb5\xa3\x5b\x0f\x6d\xf1\x83\x14\x81\x36\xab\xea\x1e\x56\xda\xf2\x32\x5d\xbf\xaa\xc2\x1a\x15\x76\x1d\xac\xfc\xde\xd1\x8f\x7b\x61\x20\x5b\xf6\xe7\xdd\x6c\x9f\x32\x28\xf2\x55\xd9\xbd\xac\x3b\xa3\x33\x0c\x4f\xe6\x6f\x5f\x95\xaf\x4c\x0c\x69\xc3\x2b\x2a\x02\xb8\xd7\x85\x5c\x64\x8a\x27\x6f\x28\xca\x7d\x60\x54\x0d\x3d\x15\x8a\x61\xb2\xe5\xab\x46\x40\x09\xd1\x0e\x67\x9b\xec\x39\x52\xfe\xfa\x78\x45\xb1\xfb\x85\xd6\x6b\x94\xc0\xbd\x89\xbd\x16\x4f\xec\x59\x58\x21\x3f\xe7\x21\xb8\xa9\x5e\xfc\xed\x01\x31\x91\x7e\x85\x31\xa0\x62\x84\x81\xb4\x2c\xdb\xe0\x4c\x12\xd2\xda\x85\xe8\xd2\xc1\x90\x91\xc5\x18\x88\xda\x31\x2c\x41\x7c\xba\x54\xca\x4c\x09\x28\xda\x25\x64\x10\x47\x55\xdf\x46\x61\xaa\x88\x84\x38\x6a\xdc\xec\x61\x77\x91\x73\x09\x41\xea\x5f\x17\x8b\x28\x8e\xcd\x0f\xb9\x42\x9b\xbd\x1c\xfb\x76\x51\x1e\xbc\x4b\x27\x34\xce\x6c\xba\x48\xd6\x8b\x1d\x42\x3c\x06\xf2\x99\x55\x0f\x21\xe7\xbd\xcd\xc3\x0b\x76\xb8\x0d\x7a\x5f\x72\x9a\x6c\xeb\x67\x53\x56\x41\x64\x73\x0d\x44\xa4\xbd\x0b\x58\xc4\x7b\xc7\x52\x7c\xfc\x45\x1d\xa3\x4c\x0a\xaa\x1f\xf4\x8b\xc9\x46\x5b\x41\xae\x04\xb6\x74\xb5\x40\xa8\xbb\x55\xa3\xfc\xa2\xa2\xdb\x2e\xbd\x52\xf5\x8f\x86\xbd\xaa\x67\x27\xa5\xff\xb7\xb7\xb9\xea\x42\x04\x26\x1f\x8c\x49\x9b\x91\xd4\xda\x1a\xbd\xaa\xd6\xf5\x29\x57\x6a\x27\xfa\x30\xc1\xa2\x1e\xff\x35\x0c\x99\x53\x7a\x31\xae\xf9\x01\x07\x43\xdb\xa1\x5e\x96\x48\x03\x1d\x15\x6a\xe8\xb7\xf0\x12\x7a\x47\xa3\x5e\xbc\xc2\x3c\x74\xd2\x71\x63\xdf\xc5\x00\xe1\x08\xfe\xa0\x6c\x41\x1d\x46\x6a\x2f\x7f\x67\x09\xf0\x86\x1a\xea\xbc\xd9\xe1\x5a\x58\x4a\x89\xb9\xec\x1d\xa9\x5d\x16\xb7\x7c\x64\x91\xb5\x9d\xa1\x1f\xb7\xa5\xa9\x25\x03\x37\xbe\x7b\x30\xfd\x6a\x77\x0e\xfa\xf5\xee\x4a\xd7\x9b\x06\x9f\x1a\x96\xf3\x19\x52\xf3\x91\x81\x08\x78\x2d\x67\x16\x7f\xd4\xcc\xac\x28\xf1\x8e\x14\x64\x50\x24\xbd\x68\xcf\x80\x4a\x94\x9a\xd9\xe3\x1d\xa5\x54\x17\x87\x03\x44\x40\xaf\x3a\xaf\xca\x11\x20\x68\x98\xe7\xc4\x8c\xf3\xd0\xfd\xfc\x06\x0e\xa3\x24\x8e\x09\xa6\xfc\x44\x66\x00\xb4\xbf\x7f\xcd\x1b\xaf\xfa\x43\xb4\x2b\x39\x00\x3a\x11\x58\x9e\xf1\x5d\x08\x76\x29\x13\x4d\x70\xc8\xe1\xbd\x94\x5a\x2a\xcf\x81\x0d\xcf\x91\x2e\xde\xc3\xd3\x32\x23\x7b\x3c\x0d\xc2\x4c\x4a\xd0\xc0\x35\x45\x8a\xc0\x3e\xf5\xc8\xdd\x3a\x5f\x97\xca\x6c\xfc\xc7\x7c\x17\x40\x44\x51\x93\x47\x7f\x80\xdb\xf6\x26\x00\x6a\xf2\xa7\x22\xd5\x97\xce\x6e\xcc\x9d\x11\x87\x80\xd1\xbe\xe6\xf4\xca\x12\x32\x79\x45\x77\x6a\x83\xda\x25\x2a\x46\x7a\x0e\x64\xd5\xc8\x66\xf9\x88\x3e\xcf\x7b\x87\x0e\x1a\x06\x78\xc4\xd0\x04\x08\x7b\xee\xc3\x8c\xfd\x14\x4d\x14\x5e\x9a\x41\xd7\xdd\xeb\xc6\x7a\xdd\x73\xce\x4e\xc9\x04\x32\x12\x49\xc3\x9d\xaa\x06\x31\xf5\x2e\x36\xf3\x6b\x21\xe8\xee\xef\x03\x10\x43\x34\xcb\xc1\x39\x60\x87\x95\x43\x6f\x0b\x3d\x9c\xa2\xea\x92\x17\x92\xd3\xd9\x04\x91\xc2\x4b\x1a\x0d\x2c\x39\x4c\x6c\xe4\xe3\x52\xea\xb9\x49\xf5\x45\x89\x72\x40\xfb\x4e\xcf\x6d\xf6\x03\xd8\x48\x0d\x3b\x2f\x07\x7a\xe1\x21\xe2\xe3\xcb\x2b\xb3\xc9\x46\x58\x17\xa9\x5d\x24\x1b\xfd\x0d\x93\xf6\xc2\xee\x93\xfb\xcc\x61\x9e\xeb\x7d\xd9\x21\x9f\x59\xb8\x61\x8f\x0b\xbb\xe5\x02\x7b\x9b\x09\xd5\xc2\x14\x00\x34\x29\xa2\x77\xcb\x53\xc8\x55\xf7\x50\x6e\xa0\xbf\x38\x08\x10\x90\x15\x1c\x2d\x4b\xd4\xba\xd3\x83\xb0\x0e\xe7\x7b\x97\x5e\x1e\xfa\x1c\x7e\x2b\x48\x8a\x48\xbd\x9b\xf2\xee\x8c\x3b\x56\x17\x88\xa9\x19\xd5\xbd\x65\x9e\x54\x4e\x9f\xc6\x4e\x02\xd5\x05\xf9\x95\x64\x2e\x1a\x67\x6d\x05\xd1\x30\x98\xdd\x3d\x57\xf1\xe4\x80\xd0\x50\x43\x6d\x05\xbe\x49\x2d\xd2\xaf\x7f\xa7\x79\xa7\xfb\x9a\xcb\x1d\xcd\xa7\x15\xe8\xba\xfd\x54\x78\xaf\x25\x49\xef\xa6\x83\x48\x1a\xf2\x61\x74\x84\xfc\xee\xde\x80\x93\x36\xa3\x8c\x9e\x72\x58\x8b\x3d\xe3\xa1\x88\xf1\xdd\x92\xcd\xb9\x37\xc4\xa1\xe6\xcf\x9e\x57\xc3\x38\xc5\xb6\xa0\x7a\xd6\xd9\x01\xed\xad\xe6\x3e\xf8\x71\x8e\x54\x17\x6c\x23\x70\x5e\xdf\x92\x19\x41\x2a\xc1\x3c\x95\x4c\xf1\xcf\xf1\x6b\x21\xe5\x2d\x23\x9c\x0d\xc5\x57\x43\xb4\xee\xa1\xfb\x5b\xe4\x26\xe7\xc8\x61\xdc\xcf\x2c\x23\x4c\x84\xfc\xb2\x46\x2a\x76\x46\x22\x41\x37\x6f\x6a\x02\x2d\xa8\xf6\x89\x76\x34\x0c\x58\xf5\x20\xdb\xa2\x0d\x5f\xab\x4c\x9f\xf8\xe7\x4e\x27\xe9\x17\x02\xe2\xc0\xff\xeb\x6e\xed\xe2\xb7\xab\xa0\x22\xa4\x21\x4a\x6b\x79\x4a\x56\x94\xe7\x1c\x1b\x07\x57\x10\xc4\x9a\xc7\xdc\x41\x8f\xbd\xd2\x30\xfb\x66\xd6\x8a\xcc\xb2\x3c\xf7\xa7\x32\x5f\x65\xdf\x4d\x4e\x86\x5a\x48\x38\x90\xd0\x44\x2c\x09\xa3\xc0\x7e\xcf\x65\x99\xe6\x3f\x47\xe8\x10\x85\x69\x88\x4f\x77\x95\xc8\xcb\xab\x4a\xa7\x0b\x95\x1c\x2d\xea\xae\xbe\xd4\x1c\x68\x93\x37\x77\xc6\x84\x95\x58\x0d\x8f\x6a\x47\xd2\xde\xbe\xfd\x6e\x7c\xcb\x0c\x39\xb6\x5d\xcb\x51\xe2\x07\x04\xf4\x97\xe8\xcc\x79\x9a\x99\x91\xd1\x9c\xa0\xa6\x37\x09\x2a\x7d\xeb\x98\x38\x56\x2d\x64\xb0\xfa\xea\x1b\x9c\xf8\x73\x27\xee\x19\x05\x2f\xc9\x44\xa9\x94\xa8\x3a\x66\x06\x21\x99\xd2\x7b\x90\xfc\x80\xb5\x03\xf5\xe9\x75\x58\x89\xb1\x8c\xd9\xb5\x24\xdc\x1e\xfe\xd1\xde\x3d\xcc\x74\xef\xfd\x1b\xe7\x79\x86\x52\xe0\xe5\xac\xaa\xa6\x4e\x82\x87\x2b\x9b\xe2\x66\x5a\x95\xbb\x22\x45\x77\xc6\xc4\x09\x01\x48\x33\xa6\x84\xb8\x42\x4d\x21\xb4\xe1\xf2\x4c\xe2\x9b\xb0\xae\x45\x11\x2c\x98\x72\x71\x1b\xab\x76\x5f\x4e\xd2\x84\x8d\x95\x3a\xec\x9f\xd4\x60\xc1\x6b\x98\x85\xd0\xbf\x42\x86\xba\x1e\x96\xa4\x37\x87\x12\xfd\x1e\x1d\xad\xee\x91\x4d\x4e\xbd\xec\xd2\x3c\x31\xbf\xf8\x75\xc7\x62\xbe\x3a\x71\x1f\xe6\xa9\x6f\xd8\x77\xe1\xad\xc0\xd2\x67\xda\x8f\x60\xdb\x5d\x51\x62\x29\xd0\x3d\x4f\x42\x54\x41\x08\x04\x1e\xd6\x40\x84\xe8\x8c\x8f\x51\xcf\xed\x8b\xc8\xe4\x54\x84\xcb\x9a\x0c\x48\xfd\x60\xcd\xd4\x12\x25\x61\x3f\xc7\x96\x24\xaf\x28\x4e\xb9\xee\xac\x8c\xc2\x41\xd2\x86\xf8\x5d\x66\x44\x19\x5a\x2f\xa1\xd7\x99\x9f\x7e\x49\x75\x11\x41\xb2\x13\xc1\x4a\xf8\xec\xbc\x28\x0e\x38\x8c\xdc\x59\x06\xa1\x5c\xc4\xa8\x37\xb0\x40\x67\x0e\x2c\x8b\xfc\x5d\x3a\x20\x7a\x55\x9b\xc0\xe7\x7d\x41\x7f\x89\x44\xc8\xb6\x8a\xac\x70\x94\x74\x30\x5f\x77\xfd\x4f\x7c\xb1\xb0\xab\xc3\x3e\xb2\x41\xc0\xcb\x92\x47\x34\xbc\x8b\x7b\x68\xa9\xff\x53\xa2\x22\x00\x9f\x78\x0e\xd7\xe0\xef\x16\x56\x5d\x56\x03\x73\xc3\x21\x97\xb0\x6f\x93\xa3\x88\x0c\xf8\x5a\xf2\xe7\x47\x8a\x46\xea\x04\x37\x8e\x21\xfc\x60\x4b\xc3\x05\x76\x91\x05\x00\xd6\x4b\x5c\x78\x18\x6c\x43\x09\x72\x96\xd4\x64\x7c\xfd\x08\x3d\x55\xad\xae\x31\x36\xb1\x3c\xbf\xc5\x56\x6f\x47\x11\xa1\xc9\x4e\x69\xb2\x35\x67\xdc\x28\x18\x6f\xdd\xe2\xd0\x2e\xa5\xae\x86\x95\x44\x20\xe6\x24\x55\x11\x09\xd5\xa4\x64\x49\xbb\x93\x14\x4d\x0c\x8b\xa8\xcb\x36\x82\xb7\xef\xb1\xf9\xc1\x13\x7f\x34\x36\x84\xbb\x46\xa9\xce\x5e\x8f\x9c\x13\xcf\x44\xa1\x23\x22\xa1\x97\x66\x03\xfc\x2f\x35\xa4\x14\x51\xeb\x51\xc5\x60\x0a\xd4\xd9\xf9\x30\x6a\x1b\x2d\x0d\x8b\x1e\x4d\x84\x76\x02\x92\x9c\xb2\x0a\x7d\x6e\x4e\x72\xd8\xcb\xd7\x5c\x49\x4c\x18\xa8\xb8\xf4\x10\x52\xc9\xfa\xa3\x7e\x98\xf5\x5e\x62\x3d\xa1\x8a\x0f\x51\xb5\x1c\xf1\x04\x57\x0b\xf9\x32\xe3\x8f\x09\xd6\xf7\x94\xee\x1d\x6c\x40\x96\x62\x2a\x08\xf8\x27\xd9\xdb\x90\x32\x7c\x44\xec\x5b\xc4\xbc\x09\x58\xb1\xe1\x3d\x5e\x82\xaa\x74\xfd\x6e\x15\x55\xc8\xc0\x6c\x1a\x3b\x8b\x83\x48\xcf\x64\x59\xeb\x5c\x9b\xdb\x08\x75\x5c\x8f\x64\x08\xc8\xd1\xbe\x41\xb2\xb8\x62\x3b\x70\x06\x6b\x22\x5f\xef\x00\x18\xa0\x9f\xab\xff\x18\xa0\x30\xc5\x32\x05\x2b\xb5\x5d\xfd\x53\x22\x97\x13\xf4\x86\xfa\x9c\x28\xd0\xec\x5f\x20\x23\xcc\x87\xef\xb1\xaa\x9a\xa5\x50\xcb\x27\xe8\x4a\x2a\xe5\x8c\xc4\x63\x10\x24\x62\x20\x3f\x1c\x4c\xc0\x31\x84\xc9\xbf\x18\xf7\xb3\xcf\x42\x0e\xa2\x10\x6a\xd7\x00\x29\x87\x46\xcc\x51\x39\x5b\x1d\x78\x40\xff\xe9\xd0\x07\x75\xd7\xf1\x6a\xc2\x38\x13\x39\x1e\xc8\xd4\x6f\x1b\x1a\xc2\x93\x32\x29\x45\xe8\x06\xf6\xb7\xf2\x07\x80\x47\xde\x74\x32\x6f\x95\x19\xfb\xe8\x2d\xbb\x48\xda\x69\x75\x9c\xd4\xde\x96\x11\x72\x8e\x7c\xb3\x5e\xca\xcb\xd9\x7a\xeb\x85\xa8\x65\x37\x85\x23\x1a\x4d\x31\x0c\x74\x5d\xcc\xc4\x63\x4b\xe4\x60\x7f\x87\x7d\xd0\xb1\x25\x55\x46\x41\xfa\x18\xc4\x46\xe9\xb4\x2a\x2b\xc6\x56\x54\xca\x64\x45\xb9\xa0\x1b\x37\xfe\x6a\x82\x58\xf1\x46\x18\x04\xe2\xf6\x44\xb9\x9a\xe5\xb7\x3e\x49\xa5\x31\xde\x14\x09\xf2\xc3\x96\x6e\x5c\x78\xd2\x39\x39\x63\x10\x53\x09\xe9\x87\xf1\x0d\xaf\xb6\x1d\xba\x6a\x45\xd3\x0e\x09\x20\x60\x89\xde\x83\x54\xe2\x2a\xe1\xd8\x07\x07\xfa\x96\x12\x6a\x82\x93\xa6\x73\x74\x9c\x25\x01\x7c\x48\x56\x3f\xb4\xb2\x88\x7d\xfa\xf3\xb3\x98\xba\x08\xa4\x40\x40\x10\x68\x6e\x2f\xe1\x5d\x71\xf7\xca\x13\xba\x97\xae\x29\xfc\x44\xd0\x53\x31\x7c\xb2\x0e\x3b\x14\x20\x11\x88\x29\x54\xfc\x43\x56\xa2\x7a\x01\xb2\x37\x45\x8b\x66\x9b\x3a\xd8\x16\x29\xff\x55\x83\xc4\xed\x1b\x5a\x7d\x77\xd4\x10\x7f\xda\x37\x03\x82\x31\x00\xa3\xd8\x47\x50\xcd\xdb\x40\x84\xc0\xfc\xb9\x24\xa2\x0a\xdc\xd7\x1c\xc6\xb4\x3e\x2f\xa8\x3d\xfa\x4e\xc3\xed\x9d\xe9\xc0\x3a\x80\x30\xcc\x34\x4b\x27\x99\xdb\x6a\xcc\x32\x6a\x52\x2e\xac\xbf\xb3\x35\x32\x28\xe4\x82\x59\x99\x5e\x3c\xd0\x8b\xa8\x8e\xa9\x4b\x1b\x06\x0b\x8f\x2f\x6e\xb6\x97\xfc\x9c\x84\xae\x34\xac\x32\xfb\x20\x12\x78\x45\xa2\x82\x66\x8e\xb1\x81\x6f\x85\x01\x74\x98\xd1\x94\x98\xa0\xc3\xff\xfb\x51\xf1\xb8\x2b\xb0\x32\x03\x24\x76\xa0\x1f\x30\xf6\x4d\x10\xd3\x4b\x02\x31\x43\x18\x99\x98\x49\x62\x4d\xcc\x85\xd2\xfc\xb6\xf7\x8f\x00\xdf\x2e\x2a\x97\x39\x39\x1e\x9f\x6f\x8e\x8b\x96\x5b\xfd\x4a\x1c\x27\xb3\x9a\xfd\x9a\x15\x1f\x5a\x5d\xc0\xce\x21\xcc\x89\xab\xa5\xc2\x5f\xa8\x64\x59\x7f\x5c\x90\xab\xe8\xb1\x11\xeb\x41\x55\x84\x7b\x06\xb5\xe6\x8f\xfb\x72\x02\x28\x79\x76\x43\xbd\x2a\x65\xbf\xfc\xb6\x0f\x13\x37\xfc\x98\x1d\xea\xb9\x7a\x7e\xe6\x86\x98\xa3\x57\xcc\x48\xd9\xb2\x77\x1c\x88\xe0\x60\x28\x70\x32\x2f\x16\x71\x7f\x4b\xaa\x6f\x9e\xaa\x07\x42\xa1\x7b\x66\x0b\x30\xe4\xc2\xc0\x68\x6b\x3d\xda\xa2\x3e\x5b\xde\x54\x31\xec\x1f\x30\x5f\x14\x73\x7b\x23\xa0\xc0\x11\xf4\x7a\x7b\xa7\x59\x4f\x9d\xb7\xfb\xf5\x8f\x4d\x90\xab\xbc\xf9\xa4\xbc\x19\xef\x9d\xc8\xaa\x65\x90\xc8\x61\xce\x01\x7a\xe7\xd6\x7a\xb2\x43\xe7\xf5\xfa\xd0\x2c\x26\x1f\x34\x42\x4c\xd8\x39\x20\x58\xda\xa5\x9b\x3a\x8f\xa9\xc3\x22\xa5\xac\x20\xd8\xe9\x47\x68\xdd\x39\x3f\x39\x93\x79\xf1\x9f\x0f\x0b\xb1\x38\x5b\xa0\xc0\xec\xf4\xa8\xf3\x5d\x05\x5b\x28\x03\x02\x4b\xd0\xa7\xe4\x24\x13\x1b\xad\xfe\xe0\x11\x94\xbf\xa5\xed\x9b\x1c\xe6\xf1\x45\xbd\xf8\x13\xcc\x37\x55\x71\x71\x50\x6c\xa8\x83\xe9\xa5\x8b\xb4\xdc\x31\x11\x28\x21\x73\x77\x2f\x48\x4c\xd1\x37\x36\xa2\xe0\xdd\x61\x2c\x34\xe0\x8c\x08\x5e\x92\x58\x6d\x92\xb8\x4b\xf7\x4a\xd7\x50\x5e\x10\xbe\x86\x0b\xbb\x16\xc5\xae\x8e\xc3\x90\xf2\x8d\x8e\xb1\xa2\x3d\x6e\xd6\xe9\x37\x31\x23\x1f\xd9\x96\xe3\x73\x65\x65\x7d\xc5\x06\xeb\x99\xe8\x3f\x42\xf7\x35\xa9\xed\xf7\x5e\xce\xc8\x99\x2e\x16\x6b\x7c\x2f\xeb\x73\x34\xd8\xf1\x8b\x88\x4f\xa5\x72\xae\xe5\x30\x2b\x9f\x54\x32\xb8\x67\x95\x62\xdc\x88\xf8\xa9\xb0\x7f\x1e\x8b\xe3\x62\x4d\x82\x73\x56\x32\x81\x11\xb1\x52\x86\x9a\xc5\x72\x21\x13\x4c\x51\x5b\x67\x4b\x91\x0e\x64\x54\x47\xf9\x86\x77\xbf\xea\x9a\xba\x4b\xd1\xc3\x0a\x52\xa3\x7a\xfa\xc9\x12\x11\x8e\x36\x55\x37\xc9\x86\x3c\x25\x70\xf2\xe2\x58\x32\x76\xe9\xfc\x0c\x6a\x9f\xf7\x68\x84\xdc\xc8\xad\x15\x0a\x72\x0f\xcb\x22\x5e\x37\x6b\xe9\x97\xa9\x71\xda\x83\x79\xc5\xf6\x75\x56\xdc\x65\xed\x25\x8e\x44\x58\xea\xa9\x13\x1d\x95\x70\x5b\x72\xa9\xf8\xca\xce\xb1\xd9\x84\x3f\xe6\x11\x28\xa9\x41\x04\xf1\x13\xd6\x95\xdb\xc4\x78\x8b\xb8\x60\xf6\xb4\x99\xcc\xf0\xe5\x9d\xe2\x97\x6f\x72\xd7\x5f\x44\xc7\xf9\x4c\x9f\xcc\x33\xbc\xfa\x2b\x73\xf8\x53\xd4\xbc\xe4\xc2\x33\xf0\x73\x48\x8a\xd0\x09\x0a\x83\x5a\x4a\xb1\x41\x1c\xab\x09\x6e\xf7\x69\x48\x3f\x79\x97\xfd\x71\x92\xfc\xbe\x26\xad\xac\x17\x88\x3b\xf1\xfe\x09\xad\x5a\x1d\x19\x4d\x90\xf8\x0e\x2c\x40\x64\xd3\x18\x43\x64\xc6\x0e\x72\x29\x0a\x4c\x15\x21\xb7\x6e\xdd\xb1\x15\xcb\x0f\x68\x8f\xe3\xb3\x3a\x9f\x8c\x18\x05\x62\x78\x2a\x27\x7b\xe8\x33\xba\x3e\xaa\x1b\x75\x86\x3f\x1a\xee\x10\xe6\x28\x4a\xf3\xb7\x45\xd2\x54\x36\xb6\x62\xf3\x19\xf4\xa7\xff\x67\x41\xf0\x59\x2c\x9f\x11\x24\x4e\xf0\xa1\xec\x6f\x1b\xed\xd7\xcf\xa7\x1f\xbd\xf4\x76\x78\xdd\xb4\x08\x9f\x9a\xd7\x26\x86\x6e\xa2\x1c\x2e\x52\x15\xa4\x1b\x90\x1f\x78\x48\xeb\xb3\xd6\xf0\x7c\x0e\xdd\x84\x61\x2d\x9e\xa0\x4f\x98\xa7\xc2\x98\xbf\x47\x50\x93\x65\xf8\x49\x58\xaa\x7c\xb4\xb0\x9b\xe8\x0b\xd5\x87\xf2\xf6\x0a\xfc\x32\x8e\x7b\x4d\x97\x49\x2c\xb3\x51\xd2\x66\x03\xab\x4e\xdb\x16\x8f\x6f\xf3\x26\x75\x77\xcb\x42\x76\xbf\x6f\x17\xd2\x25\x9f\xd1\x65\x0d\xc6\x52\x83\x2d\x64\xc0\x0f\xf5\x0c\x88\x45\xd3\x3a\x45\xcf\x56\xe8\x4d\x00\x9a\xfa\x23\x4c\x96\x29\xab\xd1\xd3\x88\x9a\x0c\x1f\x67\xdb\xe4\x87\x87\xe4\x12\xc3\xfd\xb4\x2c\x0d\x1f\xee\x81\x45\x84\x22\xba\xcf\x83\x7b\xc5\x35\x2a\x82\x7c\x6e\x65\xe2\x36\x62\xff\xd7\xcf\xd0\x84\x60\xaf\x0a\x94\xaa\x5b\x89\xa0\xc6\x3f\x79\xd8\xe9\xca\xb8\x3e\xef\x19\xed\x86\x70\x3a\xb3\x04\x3c\x10\x43\xc6\xab\x9f\x70\xfa\x40\xd4\x91\x98\x7b\xf2\x21\x3b\xc2\x42\x48\x4e\x4f\x8e\x38\x69\x16\xa4\x92\x23\x42\xb9\x9c\xd1\xd6\x59\x27\x0f\x55\x5f\xe5\xd0\x6d\xe5\xae\x9b\x24\x03\x95\x14\x3d\x26\x19\x06\x03\x21\xe2\x3d\x01\xf6\x48\x1d\x85\xd2\xe9\x6f\x3e\x6a\xae\xa5\x6e\x1b\xb3\xe5\xac\x1e\xb8\x85\x03\xa5\x10\xc9\x06\xbd\x9c\x51\x4a\xd8\xf2\x38\x40\x07\xa8\x9c\xa7\x80\x1d\x99\xd0\x30\x03\x4c\x19\x8c\x64\x80\xd7\x7f\x46\x1e\xbf\xc9\xc0\xdd\xdc\x89\x23\x03\x1a\x7c\xf0\x16\x2f\x71\x3b\x4e\x80\x82\x3e\xbf\x4e\x6c\x46\x5b\x15\x54\x50\xa0\x8c\x39\xeb\x7e\x08\xa6\xfb\x64\xd2\xb3\x9d\x70\x2d\xe3\x77\xe8\xd2\xd9\x3e\xb3\xf1\x5d\x6e\x46\x19\x2d\xb5\x4c\xad\xd8\x90\x65\xe2\x06\x71\xa2\x27\x26\x7a\xb2\xb1\x9c\x2e\x44\xfc\x3c\x19\x99\x5a\xd2\xff\x64\x45\x00\xdf\x7d\x9c\xb2\x57\x8d\x0d\xc7\xb0\x37\x57\xaa\xe7\x73\xd9\xc6\x96\x0c\xec\x2f\x11\xe0\x0d\x7f\x65\x13\xd1\xfc\x35\x08\x6c\xbb\xf3\xca\x5b\xef\x7d\xfe\x27\x37\xf4\xe0\xf2\x4d\xd3\xa5\x9b\x26\x78\x62\x00\x7b\x1e\x4c\xf3\x44\x74\x0c\x9b\xdf\x67\x69\x30\x46\xfd\x1d\x05\x8e\xb1\xae\x07\xb0\x61\x24\xaf\x43\xb1\x0e\x27\x2a\x26\x45\xe0\xc1\xf6\x36\xdf\xb5\x22\xcf\x83\xad\xe9\x01\x59\x10\xfd\x23\x65\x8f\x1d\xc3\x82\xae\x0c\xc0\x3d\x86\xcb\xf0\xa1\xf5\xe9\x21\xac\x04\x7c\xae\x6e\x55\x90\x62\x06\x42\x76\xe9\x4e\x2e\xa1\x17\xec\x8e\xf5\x6e\x3d\x37\x0e\x62\xa2\xa5\x9f\x1f\x1a\x63\x50\xa9\xf4\x77\x88\x96\x39\x2c\x90\x4e\xc7\x79\xc0\x12\x14\x6d\xfe\xd4\x7e\x32\x00\x40\x78\xbb\xb1\xd4\xed\x2b\x85\x42\x48\xbf\xd4\xec\xaa\x89\x46\x81\x09\xdf\x02\x34\x90\xd6\x9e\x66\xa7\x4a\x8a\x44\xc2\xca\x67\x62\x57\x25\xb9\x88\x49\x0b\x81\x7e\x06\x99\x60\xe6\x46\x12\x66\xf5\x6e\x2e\x8f\x75\xfc\x13\x7a\x95\x66\xd7\x4a\x78\x8d\xb2\x98\x5d\xb7\x45\x8b\xaf\x02\x64\x3e\x71\xfd\x44\x4e\xa4\x1a\x17\xf9\xd6\xb4\x53\x2d\x0a\x64\x5b\x6a\xf0\xcf\xa2\x8d\x6b\xa0\xab\x4d\x38\xcd\xa4\xc1\xe3\xa0\x41\xfb\x9e\x79\x3c\xf7\x14\x50\xf1\x5f\x71\x5b\x91\x8f\x6d\x1d\x86\x7b\x6d\x65\x30\xd9\xfc\xc8\x16\x2d\xc1\x9d\x6a\x5b\x66\xf4\x0a\x62\x03\xf0\xb9\x22\x19\xde\x91\xe9\xad\xd6\x55\x4b\xea\xab\xc1\x2d\xa2\x96\x89\x7a\x68\x26\xb1\xd8\xb8\x91\xf5\xa6\xf9\xa9\xa1\x82\x23\x36\xd3\xa3\x3e\x81\x61\xa1\xdc\xfb\x5c\x74\x48\x96\xa9\x86\x45\x57\xee\xc3\xfd\x9b\x2a\x55\xa7\x15\xa9\x82\x66\x31\x47\x2a\x77\x37\x46\x7d\x54\xc1\x43\x17\xd1\xb9\x52\x4b\x16\x26\x3f\xf8\xdf\x66\x6c\xcf\x27\xae\xc7\xa7\xd4\x22\xab\xa7\x54\x5b\xef\xd9\xbe\x8c\xf8\xa9\x5e\x1c\xde\xc4\xad\x73\xbb\xca\x7a\x61\x77\x52\x1f\xfc\x79\xc6\x2c\x44\xac\xdf\x9e\xac\x9f\x66\xd6\x11\x67\xc1\xe8\xe1\x3e\xbd\xa6\x6c\x6b\xf3\x17\x63\xa6\x67\xb5\xfc\x41\x92\x07\xa4\x7d\xbd\xf8\xaf\xed\x34\x70\xd9\x4e\x69\xd4\x84\x8b\x90\xb7\xbf\x12\xe0\x85\x1c\x13\xaa\x9b\x33\x58\xe7\xf5\x27\xcb\x7b\x5b\xd6\x84\xa1\x41\xa6\xb8\xb3\x0c\xf5\x9c\x62\x73\xf7\xfb\x2a\xe9\x2b\x79\x67\xbc\xc6\x72\x25\xa2\xae\x3f\x69\xcd\xde\x3a\x9d\x19\x74\x17\xad\x9d\x3c\x45\x1c\x52\x0c\x4f\x48\xd4\xe0\xa5\x96\xf8\x53\xec\x94\x54\x9c\x9f\x9f\xa9\x8d\x1f\xff\x54\x2c\x9d\x55\xce\xc1\x3e\x11\x1e\x04\xd1\x74\xd2\xfc\x91\x66\xc7\x58\x63\xc8\xd7\xcf\x76\xbb\x30\x2d\x91\xd1\x7e\x4a\x0c\xbd\x6e\xd9\x47\xe0\xf8\xea\x71\x1a\x34\x9b\xfb\x24\x7f\xea\x02\x83\x71\xf4\xf1\x34\xbb\xa6\xaf\xd8\xe0\xc7\x86\xbe\x1e\xad\xff\xaa\x71\x8e\x45\x92\x01\x74\xa5\x70\x50\x85\x08\x0e\x68\x92\x10\x93\xa6\xc2\x7d\xcf\xcb\xac\x34\x96\xa5\xe6\x8e\x5c\xe8\xe6\x28\xa6\xdb\xdf\x6b\xff\xd8\x50\x9b\xff\x94\x8a\x1b\x80\x82\xac\x71\x46\xd4\xb5\x64\x7b\x41\xee\xdc\x84\x06\x95\x9b\x8a\xe5\xd7\x54\xb7\xe7\xf4\x54\x11\x41\x79\x08\xbd\x7a\xe2\xf5\xd3\x63\x68\xb8\x5f\x85\x80\x15\xa9\x3b\x72\xfe\xc1\x0e\xc5\x4f\x00\x72\x64\x66\x67\x70\x18\x98\xb2\x2c\x63\x91\x93\x85\xca\x02\x1c\x69\x15\xd0\xae\x88\x64\x93\xca\xed\xf0\x08\x35\x9e\x6c\xf6\x6b\x78\x8f\x85\xab\xf7\xb2\x2f\xfe\x71\xaf\xd0\x51\x31\xae\xc3\x40\x3c\x20\xc6\xac\xef\x22\x3c\xca\xaf\x13\xa8\xb8\x7b\xf2\x7c\xbc\xc5\xb6\xbc\x22\xb2\xaf\x11\x23\x9e\x95\xee\x3d\x7d\x25\x1a\x98\x17\xfe\x57\xb2\x19\x69\x87\xdb\x0b\xb2\x8a\x88\xe8\xba\x45\xd1\x12\x41\x58\x9d\x40\x9a\x8c\x92\xe0\xce\x29\xb4\x1c\xf6\x3c\xd9\x4a\x87\xec\x8e\xa8\xb2\xd8\xe1\x22\xd4\x2d\x6e\x26\x96\x08\xb1\xc3\x0f\x29\x17\x57\xc0\x6e\x52\x2e\xc2\x5c\xc6\xd7\x37\x7a\xac\x90\x48\xcb\x94\x36\x3d\x07\xe9\x51\xf9\x3b\xba\x43\x63\xfe\x34\x9c\xfb\x0f\x11\x30\x26\x89\xcb\xaf\xf1\x10\x82\xe5\xae\xf2\x71\x09\x31\x4d\x79\x4e\xad\xfc\x37\xba\xaf\x0d\xe1\x9b\x12\xa9\x07\x9a\x03\x25\x27\x8a\xdd\x16\x66\xd4\xe0\xec\x6f\x54\x38\x53\x9c\xcc\xad\x95\x55\xd8\x67\xd9\xea\xff\x6c\x54\xd1\xaf\x33\x53\x27\x66\x2d\xb6\xdc\x61\x92\x3d\x8c\xb6\xef\xbf\x6a\xea\x16\x9c\x1d\x84\x09\x7b\x03\x9e\xb7\x9c\x4e\xe9\x8d\x96\x07\x3d\xed\xd0\x94\x73\xe2\x0b\x03\x2f\x59\xbb\x29\x38\x00\x54\x43\xb7\xed\x85\x67\xf9\xcb\x22\x67\xe4\xaa\xcb\xd6\x58\x68\xdb\x31\xc7\x81\x11\x20\xea\x28\xbd\xfa\xc6\xc7\x06\x0c\x6d\xa0\x44\x1d\x3f\xc1\xb9\x71\xe7\x19\x2c\xea\xd9\x5e\xcc\x01\xcb\x7c\x04\x08\xf9\x7e\x69\x4c\x99\x21\xa7\xd6\x36\xc4\x1b\x8d\xbc\xfd\x02\x1f\xa5\xe4\x85\xa2\xff\x77\x37\x1a\x73\xf6\xa8\x54\x4e\x3d\x24\x71\x59\xb7\x39\x41\x28\x15\x89\x7d\x1c\x18\xbc\xc0\xc4\xe2\x29\xac\xdd\xaf\x64\xc9\xe2\xac\x9e\x56\x2a\x9b\x8d\x6f\xac\x57\x43\xc3\x9c\xcf\x60\x35\xca\x6a\x9f\xd0\x47\x55\x26\x0b\xff\xa2\xa1\x9a\x98\xcf\x8c\x8c\x83\x37\x14\xef\x07\x56\x7d\x95\xaf\xb9\x60\x8e\xd1\xe0\x3a\x89\x22\xfc\xaf\x7c\x81\x72\xc8\xee\xbc\xbe\x21\x23\xf5\xcd\xab\xb2\xc5\xbf\x99\x56\xe8\x43\x8c\xa5\x6f\x18\x6f\xd0\x02\x4d\xaf\xd4\xbf\xe6\x0c\x83\xc3\xe6\x2f\xf0\xba\x39\x9e\x0d\x0f\x8a\xe0\x38\x66\x54\x66\xdb\xcf\x49\x57\xa4\xd4\x36\x04\x66\x1e\xab\xd6\xf1\x1b\xbc\x77\x66\x1a\x48\x23\x54\x96\x1f\x8d\x96\xbf\xe1\xea\xd6\xd7\x85\xf3\xbe\x1d\x49\xb9\x6c\x75\xba\xca\xcb\xfe\xbc\x8a\xdc\x10\xda\xb1\x14\x71\xc3\xcd\x6c\x26\x19\x07\x19\x9a\xa0\x9b\xbd\xa0\xa5\x67\x02\xf8\xdc\x08\xaf\xc1\x58\x3a\xf0\xde\x35\xf1\xcd\xc0\xa6\x50\x03\x9b\x0f\x04\x9a\x41\x2a\x15\xe7\x52\xd4\x9f\x96\xc4\xdd\xda\x42\xb0\xaa\x14\x94\x80\x89\x43\xe5\x43\xfd\x46\x3e\xc5\x98\x5d\x63\x49\x9a\x73\x8a\x9e\x43\x5f\xae\x45\x76\xa5\x44\x6c\xf9\x3e\x22\x53\xd1\xdd\x9c\xc3\x48\x96\x0a\xa1\x59\x1c\xef\xad\x47\x4a\x3e\xa6\xdd\x65\x41\x02\x64\x3f\x16\xc1\x31\x44\xca\x72\x5d\x8f\x30\x3f\x32\xbd\x7c\xac\x1c\x73\xb4\xd3\xcc\x7e\xef\x3d\xe6\xfc\x96\xe5\x4d\xd0\x29\x67\x7f\xdd\x20\x90\xce\xd6\x38\xed\x2c\x64\xe3\x96\xd1\xe9\xe8\x34\xc8\x72\x8a\xff\x6b\x4c\xca\x5a\xb5\xbe\xad\xef\xc0\xda\x85\xc8\x3e\x03\x4d\x77\x0a\xde\xeb\xe2\xe4\xf6\x9d\x1e\x15\x80\xf2\xfa\xda\xfc\x72\x31\x50\x79\x3e\x7b\x7e\x29\x72\x9a\x73\xf1\xbb\xde\x0d\x94\xf3\x40\x5c\x03\x9c\x12\x21\x3f\x83\x2c\x44\x9a\xef\x89\x70\xf1\x6c\x7c\xad\x25\xd3\x16\xb4\x5a\x76\x2c\x06\xc4\x38\x92\x5a\x10\x0d\xed\x53\x6f\xc7\x0e\x80\xe3\xcf\x3f\x30\x8f\x1f\x9e\xea\x54\x88\x18\x4f\x98\x51\x8a\x0b\x04\x2c\x4e\xbf\xaa\x9a\x95\x5d\x66\xe6\x59\xba\x0b\x1b\x45\x1c\xbe\xcf\xc4\x6e\x7a\x52\x40\xaf\x61\xd4\x1a\x94\xcf\xde\x9e\xc0\xb6\x60\xc9\xb2\x7d\x6c\xcc\xa9\x2c\xf8\xb6\xdc\xed\x97\x92\x77\x00\xe0\x87\x5b\x77\x7e\xc2\x9a\x77\xe7\xee\x0f\xf2\x52\x0b\x11\x73\x87\x51\x76\x1a\xaa\xec\x22\xa3\x2f\xae\x03\x2b\xdd\xb6\x0e\xfa\xbe\x37\xe4\x61\xda\x99\x3c\x1d\x56\x91\x2e\x73\xc3\xcf\xa8\xf3\xd4\x7b\xfc\xb3\x4c\xe3\x6b\xd2\x2b\x03\xa0\xa2\x8d\x47\xc6\x9f\xd5\xb6\xc1\xbf\x2b\x4a\xdf\xb5\x1d\x34\x87\x4d\x3d\x0b\x8f\xd7\xa7\x24\x26\x8f\x41\x8b\xea\x29\x62\xb1\x07\x30\x15\xcf\x0f\xe9\x63\xee\xe7\x77\xae\x64\x55\x14\xbd\x8e\xd3\x28\x26\xd2\x2f\x42\x65\xc7\x36\x92\xc2\xfc\x04\x9d\x55\x5c\x9f\x89\x5d\xcd\xaf\x8e\xff\x74\xb1\x78\x92\x9f\xab\x90\xf5\x60\x55\x08\x78\x61\x81\x3d\xa4\x5a\xda\x7a\x14\xd9\xf6\xd9\x58\x9c\xd9\x6b\x25\x23\x60\xe1\xac\x0c\x44\xff\xa1\x89\xd4\x4e\x24\xb6\xe4\xe3\xe6\xa4\x7c\x28\x21\xab\xb1\x4a\xa3\x0c\x7e\x1c\x5b\x39\x14\x60\x38\x5d\xf5\x7f\xf8\x09\x3f\xa3\x29\x2c\x96\xc5\xe4\x58\x46\x77\x90\x0e\x46\xd9\x4e\xe5\xda\xd0\x9f\x7e\x1b\x3b\xa7\x52\xf7\xe1\x0a\xeb\xf4\x0a\xe9\x4e\x43\xd9\x2f\x5c\x22\x4a\xe8\x68\xf6\x51\x3a\x09\xe3\xf1\xbe\xf7\xe9\x9d\x2f\x87\xf0\x46\x92\x6a\x3b\x31\xc8\x2f\x49\xb3\xba\x25\xec\xba\x8e\x23\xa3\x87\x2d\x90\xe4\x8f\x9c\x36\xba\xdd\xa1\x5b\x8c\x36\x65\xad\x0a\x0b\x01\xda\xfd\x7b\xdb\x4c\x76\x3e\x5a\x4a\x0b\xf0\x4e\xf1\xc4\xa6\x89\x80\x2c\x4e\xd6\x69\x34\x68\xf2\xa8\x85\x60\xc7\x91\xd8\x54\xc3\x71\xbd\x10\x93\x69\xb8\xe6\x38\x45\x5b\x80\x93\x1d\xec\xf2\x51\xab\x81\x5c\x0b\x14\xb8\x90\x4a\x81\x9e\xf1\xd7\x2b\x6e\x48\xea\x3b\x27\x90\xbd\xf0\x6d\x4a\xaf\xf3\x19\x5a\x94\x2a\x8e\x3a\x41\x47\xbd\xa9\x3e\xfc\x48\x64\x2d\xe2\x73\x1f\x6e\x8a\x69\x89\x82\x65\x53\x51\x56\xb9\x16\xa1\x68\xd8\x13\x66\x01\xe1\xa5\xe9\x3b\x8e\x83\x58\x9d\xdb\x86\xcc\xef\xe5\x45\xc4\xa0\xa0\xb7\x02\x2b\x36\x14\x2b\xca\xf9\x05\xca\x81\xbf\x08\x17\x66\x28\xfe\x3b\xb4\x7f\xd0\x82\xb3\x2b\xcb\x91\xa1\xcb\x54\x86\x63\xcf\x4c\xaa\x9b\x13\x40\x4e\x58\x6a\xcf\x7d\x77\xb4\xdd\xcc\xda\xe9\xba\x5e\xb8\xe3\xa2\x11\x1f\xac\x10\xaa\xf8\x57\x01\xc5\x8f\xa4\x8c\x46\x4d\xdf\x6e\xb4\x4b\x54\xda\x55\x9f\x76\xeb\x6e\x3d\x36\xb3\xa1\x91\x4a\xf0\x47\x0f\x08\x6d\x99\xa4\x01\x3d\x96\xd7\xeb\x8e\x19\x75\xf7\x58\xb3\x9c\xdb\x59\x36\x34\xab\x06\xa1\xe5\xbf\x1c\xeb\xf5\x72\xaf\x2d\x4f\x9a\xd0\xa5\xea\x3d\xcb\x3d\xc7\x2c\x7e\xa7\x65\x15\xb2\xd2\xbd\x47\x44\x8d\x01\x40\x80\x47\xac\xdc\x71\xd3\x6f\x70\x4d\x15\x42\x7a\xe1\x72\xac\xdf\x5c\x72\x3b\x1d\x6d\xc5\x64\xaa\x7f\x8e\xb6\x26\x01\x79\x68\xe1\x9f\xed\xc1\xe5\x3d\x73\xd4\x3c\xcc\x21\xb0\x18\x95\xc8\xed\xb8\xe4\xf0\x2e\xb7\x85\x6b\x58\xb1\x15\x39\xb5\x0c\x33\xd0\x49\xbd\x4d\x56\xfe\x57\xed\x45\x97\x36\x9a\x75\x26\x8c\xf3\xa6\x6c\x9a\xe3\x20\xa4\x7d\xc7\xd4\x64\x78\x57\x4a\x5b\x3b\xb6\x40\xfd\xe6\xe7\xa4\xa4\x01\x3b\x70\xa6\x3b\x63\x66\x16\x26\x5e\x7c\x42\xfc\x49\xaa\xce\xb8\x22\x0c\x84\xfd\xd8\x12\xe3\x06\x17\x60\x93\xe1\x27\x80\x07\x81\xd8\xb0\x86\xed\x48\x9c\x9a\x45\x48\x1e\xe6\x6e\x9e\x9a\x7d\x23\x27\xfc\x6b\xa7\xef\x32\xe4\x2a\x0d\xf7\x32\x58\x6d\xf2\x99\x3e\xee\x3a\xec\x8b\x93\x95\x97\x49\x3d\x1f\x0e\x46\x97\x76\xe3\xee\xb7\xd4\xc4\x3d\xc9\x4e\x6f\x8e\xc5\xaf\x85\xfe\x74\x96\xf2\x81\x5c\xd6\xe1\xf2\xb4\x16\x66\x52\x8d\x1c\x59\x98\xf2\xb3\x8a\x76\x58\x33\x96\xde\x19\x06\x61\xdd\x0a\xea\x06\xd7\xe2\x4a\x92\x0e\x60\xb4\xd3\xa2\x0a\x74\xf5\x44\x39\xd1\x7d\xc7\xa2\xfe\x9e\x72\xa5\x94\x05\x36\x8b\x6b\x84\x31\x69\x1c\x1e\x9f\xb0\x38\x99\xdd\x8d\xc1\x65\xd7\x5c\xf9', 2) 4 | -------------------------------------------------------------------------------- /pytransform/__init__.py: -------------------------------------------------------------------------------- 1 | # These module alos are used by protection code, so that protection 2 | # code needn't import anything 3 | import os 4 | import platform 5 | import sys 6 | import struct 7 | 8 | # Because ctypes is new from Python 2.5, so pytransform doesn't work 9 | # before Python 2.5 10 | # 11 | from ctypes import cdll, c_char, c_char_p, c_int, c_void_p, \ 12 | pythonapi, py_object, PYFUNCTYPE, CFUNCTYPE 13 | from fnmatch import fnmatch 14 | 15 | # 16 | # Support Platforms 17 | # 18 | plat_path = 'platforms' 19 | 20 | plat_table = ( 21 | ('windows', ('windows', 'cygwin*')), 22 | ('darwin', ('darwin',)), 23 | ('ios', ('ios',)), 24 | ('linux', ('linux*',)), 25 | ('freebsd', ('freebsd*', 'openbsd*', 'isilon onefs')), 26 | ('poky', ('poky',)), 27 | ) 28 | 29 | arch_table = ( 30 | ('x86', ('i?86', )), 31 | ('x86_64', ('x64', 'x86_64', 'amd64', 'intel')), 32 | ('arm', ('armv5',)), 33 | ('armv6', ('armv6l',)), 34 | ('armv7', ('armv7l',)), 35 | ('ppc64', ('ppc64le',)), 36 | ('mips32', ('mips',)), 37 | ('aarch32', ('aarch32',)), 38 | ('aarch64', ('aarch64', 'arm64')) 39 | ) 40 | 41 | # 42 | # Hardware type 43 | # 44 | HT_HARDDISK, HT_IFMAC, HT_IPV4, HT_IPV6, HT_DOMAIN = range(5) 45 | 46 | # 47 | # Global 48 | # 49 | _pytransform = None 50 | 51 | 52 | class PytransformError(Exception): 53 | pass 54 | 55 | 56 | def dllmethod(func): 57 | def wrap(*args, **kwargs): 58 | return func(*args, **kwargs) 59 | return wrap 60 | 61 | 62 | @dllmethod 63 | def version_info(): 64 | prototype = PYFUNCTYPE(py_object) 65 | dlfunc = prototype(('version_info', _pytransform)) 66 | return dlfunc() 67 | 68 | 69 | @dllmethod 70 | def init_pytransform(): 71 | major, minor = sys.version_info[0:2] 72 | # Python2.5 no sys.maxsize but sys.maxint 73 | # bitness = 64 if sys.maxsize > 2**32 else 32 74 | prototype = PYFUNCTYPE(c_int, c_int, c_int, c_void_p) 75 | init_module = prototype(('init_module', _pytransform)) 76 | ret = init_module(major, minor, pythonapi._handle) 77 | if (ret & 0xF000) == 0x1000: 78 | raise PytransformError('Initialize python wrapper failed (%d)' 79 | % (ret & 0xFFF)) 80 | return ret 81 | 82 | 83 | @dllmethod 84 | def init_runtime(): 85 | prototype = PYFUNCTYPE(c_int, c_int, c_int, c_int, c_int) 86 | _init_runtime = prototype(('init_runtime', _pytransform)) 87 | return _init_runtime(0, 0, 0, 0) 88 | 89 | 90 | @dllmethod 91 | def encrypt_code_object(pubkey, co, flags, suffix=''): 92 | _pytransform.set_option(6, suffix.encode()) 93 | prototype = PYFUNCTYPE(py_object, py_object, py_object, c_int) 94 | dlfunc = prototype(('encrypt_code_object', _pytransform)) 95 | return dlfunc(pubkey, co, flags) 96 | 97 | 98 | @dllmethod 99 | def generate_license_key(prikey, keysize, rcode): 100 | prototype = PYFUNCTYPE(py_object, c_char_p, c_int, c_char_p) 101 | dlfunc = prototype(('generate_license_key', _pytransform)) 102 | return dlfunc(prikey, keysize, rcode) if sys.version_info[0] == 2 \ 103 | else dlfunc(prikey, keysize, rcode.encode()) 104 | 105 | 106 | @dllmethod 107 | def get_registration_code(): 108 | prototype = PYFUNCTYPE(py_object) 109 | dlfunc = prototype(('get_registration_code', _pytransform)) 110 | return dlfunc() 111 | 112 | 113 | @dllmethod 114 | def get_expired_days(): 115 | prototype = PYFUNCTYPE(py_object) 116 | dlfunc = prototype(('get_expired_days', _pytransform)) 117 | return dlfunc() 118 | 119 | 120 | @dllmethod 121 | def clean_obj(obj, kind): 122 | prototype = PYFUNCTYPE(c_int, py_object, c_int) 123 | dlfunc = prototype(('clean_obj', _pytransform)) 124 | return dlfunc(obj, kind) 125 | 126 | 127 | def clean_str(*args): 128 | tdict = { 129 | 'str': 0, 130 | 'bytearray': 1, 131 | 'unicode': 2 132 | } 133 | for obj in args: 134 | k = tdict.get(type(obj).__name__) 135 | if k is None: 136 | raise RuntimeError('Can not clean object: %s' % obj) 137 | clean_obj(obj, k) 138 | 139 | 140 | def get_hd_info(hdtype, name=None): 141 | if hdtype not in range(HT_DOMAIN + 1): 142 | raise RuntimeError('Invalid parameter hdtype: %s' % hdtype) 143 | size = 256 144 | t_buf = c_char * size 145 | buf = t_buf() 146 | cname = c_char_p(0 if name is None 147 | else name.encode('utf-8') if hasattr('name', 'encode') 148 | else name) 149 | if (_pytransform.get_hd_info(hdtype, buf, size, cname) == -1): 150 | raise PytransformError('Get hardware information failed') 151 | return buf.value.decode() 152 | 153 | 154 | def show_hd_info(): 155 | return _pytransform.show_hd_info() 156 | 157 | 158 | def assert_armored(*names): 159 | prototype = PYFUNCTYPE(py_object, py_object) 160 | dlfunc = prototype(('assert_armored', _pytransform)) 161 | 162 | def wrapper(func): 163 | def wrap_execute(*args, **kwargs): 164 | dlfunc(names) 165 | return func(*args, **kwargs) 166 | return wrap_execute 167 | return wrapper 168 | 169 | 170 | def check_armored(*names): 171 | try: 172 | prototype = PYFUNCTYPE(py_object, py_object) 173 | prototype(('assert_armored', _pytransform))(names) 174 | return True 175 | except RuntimeError: 176 | return False 177 | 178 | 179 | def get_license_info(): 180 | info = { 181 | 'ISSUER': None, 182 | 'EXPIRED': None, 183 | 'HARDDISK': None, 184 | 'IFMAC': None, 185 | 'IFIPV4': None, 186 | 'DOMAIN': None, 187 | 'DATA': None, 188 | 'CODE': None, 189 | } 190 | rcode = get_registration_code().decode() 191 | if rcode.startswith('*VERSION:'): 192 | index = rcode.find('\n') 193 | info['ISSUER'] = rcode[9:index].split('.')[0].replace('-sn-1.txt', '') 194 | rcode = rcode[index+1:] 195 | 196 | index = 0 197 | if rcode.startswith('*TIME:'): 198 | from time import ctime 199 | index = rcode.find('\n') 200 | info['EXPIRED'] = ctime(float(rcode[6:index])) 201 | index += 1 202 | 203 | if rcode[index:].startswith('*FLAGS:'): 204 | index += len('*FLAGS:') + 1 205 | info['FLAGS'] = ord(rcode[index - 1]) 206 | 207 | prev = None 208 | start = index 209 | for k in ['HARDDISK', 'IFMAC', 'IFIPV4', 'DOMAIN', 'FIXKEY', 'CODE']: 210 | index = rcode.find('*%s:' % k) 211 | if index > -1: 212 | if prev is not None: 213 | info[prev] = rcode[start:index] 214 | prev = k 215 | start = index + len(k) + 2 216 | info['CODE'] = rcode[start:] 217 | i = info['CODE'].find(';') 218 | if i > 0: 219 | info['DATA'] = info['CODE'][i+1:] 220 | info['CODE'] = info['CODE'][:i] 221 | return info 222 | 223 | 224 | def get_license_code(): 225 | return get_license_info()['CODE'] 226 | 227 | 228 | def get_user_data(): 229 | return get_license_info()['DATA'] 230 | 231 | 232 | def _match_features(patterns, s): 233 | for pat in patterns: 234 | if fnmatch(s, pat): 235 | return True 236 | 237 | 238 | def _gnu_get_libc_version(): 239 | try: 240 | prototype = CFUNCTYPE(c_char_p) 241 | ver = prototype(('gnu_get_libc_version', cdll.LoadLibrary('')))() 242 | return ver.decode().split('.') 243 | except Exception: 244 | pass 245 | 246 | 247 | def format_platform(platid=None): 248 | if platid: 249 | return os.path.normpath(platid) 250 | 251 | plat = platform.system().lower() 252 | mach = platform.machine().lower() 253 | 254 | for alias, platlist in plat_table: 255 | if _match_features(platlist, plat): 256 | plat = alias 257 | break 258 | 259 | if plat == 'linux': 260 | cname, cver = platform.libc_ver() 261 | if cname == 'musl': 262 | plat = 'musl' 263 | elif cname == 'libc': 264 | plat = 'android' 265 | elif cname == 'glibc': 266 | v = _gnu_get_libc_version() 267 | if v and len(v) >= 2 and (int(v[0]) * 100 + int(v[1])) < 214: 268 | plat = 'centos6' 269 | 270 | for alias, archlist in arch_table: 271 | if _match_features(archlist, mach): 272 | mach = alias 273 | break 274 | 275 | if plat == 'windows' and mach == 'x86_64': 276 | bitness = struct.calcsize('P'.encode()) * 8 277 | if bitness == 32: 278 | mach = 'x86' 279 | 280 | return os.path.join(plat, mach) 281 | 282 | 283 | # Load _pytransform library 284 | def _load_library(path=None, is_runtime=0, platid=None, suffix='', advanced=0): 285 | path = os.path.dirname(__file__) if path is None \ 286 | else os.path.normpath(path) 287 | 288 | plat = platform.system().lower() 289 | for alias, platlist in plat_table: 290 | if _match_features(platlist, plat): 291 | plat = alias 292 | break 293 | 294 | name = '_pytransform' + suffix 295 | if plat == 'linux': 296 | filename = os.path.abspath(os.path.join(path, name + '.so')) 297 | elif plat in ('darwin', 'ios'): 298 | filename = os.path.join(path, name + '.dylib') 299 | elif plat == 'windows': 300 | filename = os.path.join(path, name + '.dll') 301 | elif plat in ('freebsd', 'poky'): 302 | filename = os.path.join(path, name + '.so') 303 | else: 304 | filename = None 305 | 306 | if platid is not None and os.path.isfile(platid): 307 | filename = platid 308 | elif platid is not None or not os.path.exists(filename) or not is_runtime: 309 | libpath = platid if platid is not None and os.path.isabs(platid) else \ 310 | os.path.join(path, plat_path, format_platform(platid)) 311 | filename = os.path.join(libpath, os.path.basename(filename)) 312 | 313 | if filename is None: 314 | raise PytransformError('Platform %s not supported' % plat) 315 | 316 | if not os.path.exists(filename): 317 | raise PytransformError('Could not find "%s"' % filename) 318 | 319 | try: 320 | m = cdll.LoadLibrary(filename) 321 | except Exception as e: 322 | if sys.flags.debug: 323 | print('Load %s failed:\n%s' % (filename, e)) 324 | raise 325 | 326 | # Removed from v4.6.1 327 | # if plat == 'linux': 328 | # m.set_option(-1, find_library('c').encode()) 329 | 330 | if not os.path.abspath('.') == os.path.abspath(path): 331 | m.set_option(1, path.encode() if sys.version_info[0] == 3 else path) 332 | elif (not is_runtime) and sys.platform.startswith('cygwin'): 333 | path = os.environ['PYARMOR_CYGHOME'] 334 | m.set_option(1, path.encode() if sys.version_info[0] == 3 else path) 335 | 336 | # Required from Python3.6 337 | m.set_option(2, sys.byteorder.encode()) 338 | 339 | if sys.flags.debug: 340 | m.set_option(3, c_char_p(1)) 341 | m.set_option(4, c_char_p(not is_runtime)) 342 | 343 | # Disable advanced mode by default 344 | m.set_option(5, c_char_p(not advanced)) 345 | 346 | # Set suffix for private package 347 | if suffix: 348 | m.set_option(6, suffix.encode()) 349 | 350 | return m 351 | 352 | 353 | def pyarmor_init(path=None, is_runtime=0, platid=None, suffix='', advanced=0): 354 | global _pytransform 355 | _pytransform = _load_library(path, is_runtime, platid, suffix, advanced) 356 | return init_pytransform() 357 | 358 | 359 | def pyarmor_runtime(path=None, suffix='', advanced=0): 360 | if _pytransform is not None: 361 | return 362 | 363 | try: 364 | pyarmor_init(path, is_runtime=1, suffix=suffix, advanced=advanced) 365 | init_runtime() 366 | except Exception as e: 367 | if sys.flags.debug or hasattr(sys, '_catch_pyarmor'): 368 | raise 369 | sys.stderr.write("%s\n" % str(e)) 370 | sys.exit(1) 371 | 372 | 373 | # ---------------------------------------------------------- 374 | # End of pytransform 375 | # ---------------------------------------------------------- 376 | 377 | # 378 | # Unused 379 | # 380 | 381 | 382 | @dllmethod 383 | def generate_license_file(filename, priname, rcode, start=-1, count=1): 384 | prototype = PYFUNCTYPE(c_int, c_char_p, c_char_p, c_char_p, c_int, c_int) 385 | dlfunc = prototype(('generate_project_license_files', _pytransform)) 386 | return dlfunc(filename.encode(), priname.encode(), rcode.encode(), 387 | start, count) if sys.version_info[0] == 3 \ 388 | else dlfunc(filename, priname, rcode, start, count) 389 | 390 | # 391 | # Not available from v5.6 392 | # 393 | 394 | 395 | def generate_capsule(licfile): 396 | prikey, pubkey, prolic = _generate_project_capsule() 397 | capkey, newkey = _generate_pytransform_key(licfile, pubkey) 398 | return prikey, pubkey, capkey, newkey, prolic 399 | 400 | 401 | @dllmethod 402 | def _generate_project_capsule(): 403 | prototype = PYFUNCTYPE(py_object) 404 | dlfunc = prototype(('generate_project_capsule', _pytransform)) 405 | return dlfunc() 406 | 407 | 408 | @dllmethod 409 | def _generate_pytransform_key(licfile, pubkey): 410 | prototype = PYFUNCTYPE(py_object, c_char_p, py_object) 411 | dlfunc = prototype(('generate_pytransform_key', _pytransform)) 412 | return dlfunc(licfile.encode() if sys.version_info[0] == 3 else licfile, 413 | pubkey) 414 | 415 | 416 | # 417 | # Deprecated functions from v5.1 418 | # 419 | 420 | 421 | @dllmethod 422 | def encrypt_project_files(proname, filelist, mode=0): 423 | prototype = PYFUNCTYPE(c_int, c_char_p, py_object, c_int) 424 | dlfunc = prototype(('encrypt_project_files', _pytransform)) 425 | return dlfunc(proname.encode(), filelist, mode) 426 | 427 | 428 | def generate_project_capsule(licfile): 429 | prikey, pubkey, prolic = _generate_project_capsule() 430 | capkey = _encode_capsule_key_file(licfile) 431 | return prikey, pubkey, capkey, prolic 432 | 433 | 434 | @dllmethod 435 | def _encode_capsule_key_file(licfile): 436 | prototype = PYFUNCTYPE(py_object, c_char_p, c_char_p) 437 | dlfunc = prototype(('encode_capsule_key_file', _pytransform)) 438 | return dlfunc(licfile.encode(), None) 439 | 440 | 441 | @dllmethod 442 | def encrypt_files(key, filelist, mode=0): 443 | t_key = c_char * 32 444 | prototype = PYFUNCTYPE(c_int, t_key, py_object, c_int) 445 | dlfunc = prototype(('encrypt_files', _pytransform)) 446 | return dlfunc(t_key(*key), filelist, mode) 447 | 448 | 449 | @dllmethod 450 | def generate_module_key(pubname, key): 451 | t_key = c_char * 32 452 | prototype = PYFUNCTYPE(py_object, c_char_p, t_key, c_char_p) 453 | dlfunc = prototype(('generate_module_key', _pytransform)) 454 | return dlfunc(pubname.encode(), t_key(*key), None) 455 | 456 | # 457 | # Compatible for PyArmor v3.0 458 | # 459 | 460 | 461 | @dllmethod 462 | def old_init_runtime(systrace=0, sysprofile=1, threadtrace=0, threadprofile=1): 463 | '''Only for old version, before PyArmor 3''' 464 | pyarmor_init(is_runtime=1) 465 | prototype = PYFUNCTYPE(c_int, c_int, c_int, c_int, c_int) 466 | _init_runtime = prototype(('init_runtime', _pytransform)) 467 | return _init_runtime(systrace, sysprofile, threadtrace, threadprofile) 468 | 469 | 470 | @dllmethod 471 | def import_module(modname, filename): 472 | '''Only for old version, before PyArmor 3''' 473 | prototype = PYFUNCTYPE(py_object, c_char_p, c_char_p) 474 | _import_module = prototype(('import_module', _pytransform)) 475 | return _import_module(modname.encode(), filename.encode()) 476 | 477 | 478 | @dllmethod 479 | def exec_file(filename): 480 | '''Only for old version, before PyArmor 3''' 481 | prototype = PYFUNCTYPE(c_int, c_char_p) 482 | _exec_file = prototype(('exec_file', _pytransform)) 483 | return _exec_file(filename.encode()) 484 | -------------------------------------------------------------------------------- /pytransform/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FollowToS/Discord-Fake-Verification-Bot/d59873d4e26ccef783909757ac037b67703b67fc/pytransform/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /pytransform/_pytransform.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FollowToS/Discord-Fake-Verification-Bot/d59873d4e26ccef783909757ac037b67703b67fc/pytransform/_pytransform.so -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | python-http-client 2 | 2captcha-python 3 | beautifulsoup4 4 | pyinstaller 5 | pylibcheck 6 | pyperclip 7 | pyautogui 8 | pypiwin32 9 | websocket 10 | requests 11 | datetime 12 | requests 13 | selenium 14 | keyboard 15 | colorama 16 | urlopen 17 | discord 18 | asyncio 19 | easygui 20 | tasksio 21 | discum 22 | Cipher 23 | colour 24 | pillow 25 | PyNaCl 26 | psutil 27 | emoji 28 | httpx 29 | loads 30 | Popen 31 | tqdm 32 | pipe 33 | aes 34 | -------------------------------------------------------------------------------- /setup.bat: -------------------------------------------------------------------------------- 1 | python -m pip install -r requirements.txt 2 | cls 3 | echo python main.py >> start_tool.bat 4 | start start_tool.bat 5 | start /b "" cmd /c &exit /b 6 | --------------------------------------------------------------------------------