├── .gitignore ├── .travis.yml ├── LICENSE ├── Makefile ├── README.md ├── base ├── adb_usb.ini ├── adbkey └── adbkey.pub └── templates ├── Dockerfile ├── Makefile ├── config.ini ├── snapshot.expect ├── snapshot.sh ├── start.sh └── take_snapshot.sh /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | services: 3 | - docker 4 | 5 | before_script: 6 | - make lint 7 | script: 8 | - make build 9 | 10 | before_deploy: 11 | - make login 12 | - make tag 13 | deploy: 14 | provider: script 15 | script: make push 16 | on: 17 | branch: master 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /usr/bin/env bash 2 | VERSIONS ?= android-16 android-17 android-18 android-19 android-21 android-22 android-23 android-24 android-25 android-26 android-27 android-28 3 | 4 | generate: 5 | for version in $(VERSIONS); do \ 6 | mkdir -p ./build/$$version ; \ 7 | sed "s/{{ platform }}/$$version/g" templates/Dockerfile > build/$$version/Dockerfile ; \ 8 | sed "s/{{ platform }}/$$version/g" templates/config.ini > build/$$version/config.ini ; \ 9 | sed "s/{{ platform }}/$$version/g" templates/start.sh > build/$$version/start.sh ; \ 10 | sed "s/{{ platform }}/$$version/g" templates/Makefile > build/$$version/Makefile ; \ 11 | sed "s/{{ platform }}/$$version/g" templates/snapshot.sh > build/$$version/snapshot.sh ; \ 12 | sed "s/{{ platform }}/$$version/g" templates/snapshot.expect > build/$$version/snapshot.expect ; \ 13 | sed "s/{{ platform }}/$$version/g" templates/take_snapshot.sh > build/$$version/take_snapshot.sh ; \ 14 | cp base/* ./build/$$version ; \ 15 | done 16 | 17 | clean: 18 | rm -rf ./build 19 | 20 | build: generate 21 | for version in $(VERSIONS); do \ 22 | $(MAKE) -C build/$$version build; \ 23 | done 24 | 25 | lint: generate 26 | for version in $(VERSIONS); do \ 27 | $(MAKE) -C build/$$version lint; \ 28 | done 29 | 30 | snapshot: generate build 31 | for version in $(VERSIONS); do \ 32 | $(MAKE) -C build/$$version snapshot; \ 33 | done 34 | 35 | tag: generate 36 | for version in $(VERSIONS); do \ 37 | $(MAKE) -C build/$$version tag; \ 38 | done 39 | 40 | login: 41 | @docker login -u "$(DOCKER_USER)" -p "$(DOCKER_PASS)" "$(PROXY)" 42 | 43 | push: login 44 | for version in $(VERSIONS); do \ 45 | $(MAKE) -C build/$$version push; \ 46 | done 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-emulator-android 2 | docker-emulator-android is one of the components of [android-farm](https://github.com/agoda-com/android-farm). It runs android emulator with hardware acceleration in a container. 3 | 4 | # Features 5 | - Compatible with [OpenSTF](https://openstf.io) 6 | - Optimized for performance 7 | - hardware acceleration using KVM 8 | - QEMU 2 9 | - Changing emulator spec is supported by 10 | - overriding config.ini variables using `ANDROID_CONFIG` 11 | - overriding emulator cmd args using `EMULATOR_OPTS` and `QEMU_OPTS` 12 | - overriding adb ports using `CONSOLE_PORT (default 5554)`, `ADB_PORT (default 5555)` 13 | - VNC server (port 5900) 14 | - Google API's enabled 15 | 16 | # Usage 17 | For example to run default emulator options with Marshmallow (API 23): 18 | ```console 19 | $ docker run --rm --privileged -e ANDROID_ARCH="x86" -v /dev/kvm:/dev/kvm agoda-com/docker-emulator-android-23:latest 20 | $ adb connect VIP:5555 21 | ``` 22 | 23 | If you want to start different configuration of device, for example a 7 inch tablet, you need to override `config.ini` variables: 24 | 25 | ```console 26 | $ docker run --rm --privileged -e ANDROID_ARCH="x86" -e ANDROID_CONFIG="skin.name=600x1024;hw.lcd.density=160;hw.lcd.height=600;hw.lcd.width=1024;hw.device.name=7in WSVGA (Tablet);avd.ini.displayname=7 WSVGA (Tablet) API 23;" -v /dev/kvm:/dev/kvm agoda-com/docker-emulator-android-23:latest 27 | ``` 28 | 29 | For all the options available please check the [official documentation](https://developer.android.com/studio/run/emulator-commandline.html) 30 | 31 | # Building 32 | 33 | ```console 34 | $ export DOCKER_USER=user 35 | $ export DOCKER_PASS=password 36 | $ make PROXY=docker-registry-url/ build tag login push # eg PROXY=registry.hub.docker.com 37 | ``` 38 | 39 | # License 40 | 41 | docker-emulator-android is open source and available under the [Apache License, Version 2.0](LICENSE). 42 | 43 | Android SDK components are available under the [Android Software Development Kit License](https://developer.android.com/studio/terms.html) 44 | -------------------------------------------------------------------------------- /base/adb_usb.ini: -------------------------------------------------------------------------------- 1 | # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. 2 | # USE 'android update adb' TO GENERATE. 3 | # 1 USB VENDOR ID PER LINE. 4 | 0x0502 5 | 0x058f 6 | 0x05ac 7 | 0x0e79 8 | 0x0b05 9 | 0x1031 10 | 0x1219 11 | 0x413c 12 | 0x0489 13 | 0x0f1c 14 | 0x04c5 15 | 0x091e 16 | 0x0414 17 | 0x18d1 18 | 0x109b 19 | 0x0bb4 20 | 0x12d1 21 | 0x8087 22 | 0x2314 23 | 0x2420 24 | 0x24e3 25 | 0x29a9 26 | 0x2116 27 | 0x0482 28 | 0x1949 29 | 0x17ef 30 | 0x2006 31 | 0x1004 32 | 0x25e3 33 | 0x22b8 34 | 0x0409 35 | 0x2080 36 | 0x0955 37 | 0x2257 38 | 0x10a9 39 | 0x1d4d 40 | 0x0471 41 | 0x04da 42 | 0x1662 43 | 0x05c6 44 | 0x0408 45 | 0x1f53 46 | 0x04e8 47 | 0x04dd 48 | 0x054c 49 | 0x0fce 50 | 0x1bbb 51 | 0x2340 52 | 0x0451 53 | 0x0930 54 | 0xe040 55 | 0x1ebf 56 | 0x19d2 57 | 0x02ef 58 | 0x1265 59 | 0x3230 60 | 0x2396 61 | 0x2716 62 | 0x2717 63 | 0x271e 64 | 0x2722 65 | 0x2726 66 | 0x03eb 67 | 0x273c 68 | 0x2746 69 | 0x2747 70 | 0x03ee 71 | 0x2755 72 | 0x03f0 73 | 0x2768 74 | 0x277f 75 | 0x2780 76 | 0x2781 77 | 0x03f4 78 | 0x2788 79 | 0x2789 80 | 0x278a 81 | 0x279f 82 | 0x27a0 83 | 0x27a5 84 | 0x27a6 85 | 0x27a9 86 | 0x27aa 87 | 0x27bf 88 | 0x27c1 89 | 0x03fc 90 | 0x03fd 91 | 0x0403 92 | 0x040a 93 | 0x040b 94 | 0x040d 95 | 0x040e 96 | 0x0411 97 | 0x0416 98 | 0x041e 99 | 0x0421 100 | 0x0424 101 | 0x042f 102 | 0x0430 103 | 0x0438 104 | 0x043d 105 | 0x0440 106 | 0x044e 107 | 0x0457 108 | 0x0458 109 | 0x045b 110 | 0x045e 111 | 0x0461 112 | 0x0463 113 | 0x0468 114 | 0x046b 115 | 0x046d 116 | 0x0474 117 | 0x047e 118 | 0x047f 119 | 0x0483 120 | 0x048d 121 | 0x0499 122 | 0x04a4 123 | 0x04a7 124 | 0x04a9 125 | 0x04b0 126 | 0x04b1 127 | 0x04b4 128 | 0x04b5 129 | 0x04b7 130 | 0x04b8 131 | 0x04b9 132 | 0x04bb 133 | 0x04ca 134 | 0x04cb 135 | 0x04cc 136 | 0x04d8 137 | 0x04d9 138 | 0x04e2 139 | 0x04e6 140 | 0x04eb 141 | 0x04ec 142 | 0x04f2 143 | 0x04f7 144 | 0x04f9 145 | 0x04fc 146 | 0x04fe 147 | 0x0501 148 | 0x0507 149 | 0x050d 150 | 0x0516 151 | 0x0519 152 | 0x051a 153 | 0x051d 154 | 0x0520 155 | 0x0522 156 | 0x0525 157 | 0x0531 158 | 0x053f 159 | 0x0550 160 | 0x0557 161 | 0x0559 162 | 0x056a 163 | 0x0572 164 | 0x0576 165 | 0x057b 166 | 0x057c 167 | 0x0582 168 | 0x0584 169 | 0x059f 170 | 0x05a9 171 | 0x05ad 172 | 0x3923 173 | 0x05be 174 | 0x05c1 175 | 0x05c8 176 | 0x05ca 177 | 0x05da 178 | 0x05dc 179 | 0x05e0 180 | 0x05e3 181 | 0x05e5 182 | 0x05f5 183 | 0x05f9 184 | 0x05ff 185 | 0x0603 186 | 0x0609 187 | 0x060f 188 | 0x0611 189 | 0x0613 190 | 0x0619 191 | 0x062e 192 | 0x0639 193 | 0x064b 194 | 0x064c 195 | 0x064e 196 | 0x064f 197 | 0x0655 198 | 0x0656 199 | 0x0657 200 | 0x0658 201 | 0x065f 202 | 0x0660 203 | 0x0661 204 | 0x066a 205 | 0x067b 206 | 0x0690 207 | 0x0693 208 | 0x0699 209 | 0x06a3 210 | 0x06a4 211 | 0x06ad 212 | 0x06ae 213 | 0x06b8 214 | 0x06bc 215 | 0x06bf 216 | 0x06c4 217 | 0x06c8 218 | 0x06d3 219 | 0x06de 220 | 0x070a 221 | 0x070e 222 | 0x0711 223 | 0x0718 224 | 0x072e 225 | 0x0736 226 | 0x0764 227 | 0x0766 228 | 0x076b 229 | 0x0777 230 | 0x0779 231 | 0x0781 232 | 0x0791 233 | 0x07a2 234 | 0x07b3 235 | 0x07b4 236 | 0x07b7 237 | 0x07ca 238 | 0x07cc 239 | 0x07cf 240 | 0x07da 241 | 0x07df 242 | 0x07f7 243 | 0x07f9 244 | 0x080a 245 | 0x0835 246 | 0x0840 247 | 0x086f 248 | 0x0887 249 | 0x0897 250 | 0x08b9 251 | 0x08bb 252 | 0x08c7 253 | 0x08e4 254 | 0x08e6 255 | 0x08ff 256 | 0x0906 257 | 0x0909 258 | 0x090c 259 | 0x0922 260 | 0x093a 261 | 0x093b 262 | 0x093e 263 | 0x0951 264 | 0x0957 265 | 0x095b 266 | 0x095d 267 | 0x6000 268 | 0x09a4 269 | 0x09a8 270 | 0x09ab 271 | 0x09c2 272 | 0x09cc 273 | 0x09cf 274 | 0x09d9 275 | 0x09da 276 | 0x0a12 277 | 0x0a17 278 | 0x0a21 279 | 0x0a47 280 | 0x0a4c 281 | 0x0a50 282 | 0x0a5c 283 | 0x0a6b 284 | 0x0a7d 285 | 0x0a81 286 | 0x0a8e 287 | 0x0a8f 288 | 0x0aa7 289 | 0x0aad 290 | 0x0ac3 291 | 0x0ac8 292 | 0x0ae3 293 | 0x0af0 294 | 0x0b1e 295 | 0x0b21 296 | 0x0b23 297 | 0x0b4e 298 | 0x0b54 299 | 0x0b57 300 | 0x0b6a 301 | 0x0b95 302 | 0x0b97 303 | 0x0bb5 304 | 0x0bc2 305 | 0x0bda 306 | 0x0bdb 307 | 0x0be4 308 | 0x0bee 309 | 0x0c06 310 | 0x0c0b 311 | 0x0c24 312 | 0x0c39 313 | 0x0c45 314 | 0x0c56 315 | 0x0c59 316 | 0x0c62 317 | 0x0c68 318 | 0x0c76 319 | 0x0c89 320 | 0x0cad 321 | 0x0cc4 322 | 0x0cd9 323 | 0x8086 324 | 0x0cde 325 | 0x0cf2 326 | 0x0d17 327 | 0x0d19 328 | 0x0d41 329 | 0x0d4a 330 | 0x0d4b 331 | 0x0d51 332 | 0x0d61 333 | 0x0d71 334 | 0x0d7c 335 | 0x0d87 336 | 0x0d8c 337 | 0x0d90 338 | 0x0da7 339 | 0x0db0 340 | 0x0dd1 341 | 0x0dd2 342 | 0x0dd4 343 | 0x0dea 344 | 0x0e23 345 | 0x0e39 346 | 0x0e3a 347 | 0x0e4a 348 | 0x0e5b 349 | 0x0e6a 350 | 0x0e72 351 | 0x0e8c 352 | 0x0e8d 353 | 0x0e9b 354 | 0x0ea0 355 | 0x0eb2 356 | 0x0ec2 357 | 0x0ec3 358 | 0x0ec6 359 | 0x0ece 360 | 0x0ee4 361 | 0x0f08 362 | 0x0f2e 363 | 0x0f32 364 | 0x0f38 365 | 0x0f4c 366 | 0x0f52 367 | 0x0f53 368 | 0x0f54 369 | 0x0f60 370 | 0x0f68 371 | 0x0f69 372 | 0x0f8b 373 | 0x0f97 374 | 0x0fb8 375 | 0x0ff7 376 | 0x1026 377 | 0x102f 378 | 0x1038 379 | 0x1048 380 | 0x104c 381 | 0x1057 382 | 0x1058 383 | 0x1059 384 | 0x105c 385 | 0x105d 386 | 0x1083 387 | 0x1084 388 | 0x108b 389 | 0x108c 390 | 0x108e 391 | 0x10aa 392 | 0x10ab 393 | 0x10ae 394 | 0x10bb 395 | 0x10cd 396 | 0x10d6 397 | 0x1112 398 | 0x111e 399 | 0x112e 400 | 0x1130 401 | 0x114b 402 | 0x114d 403 | 0x115b 404 | 0x1175 405 | 0x1199 406 | 0x119a 407 | 0x11aa 408 | 0x11b0 409 | 0x1223 410 | 0x124b 411 | 0x125f 412 | 0x1262 413 | 0x126c 414 | 0x126d 415 | 0x1281 416 | 0x1286 417 | 0x1294 418 | 0x12ab 419 | 0x12b8 420 | 0x12d2 421 | 0x12d7 422 | 0x132b 423 | 0x1348 424 | 0x1370 425 | 0x137d 426 | 0x13ca 427 | 0x13d3 428 | 0x13dc 429 | 0x13fa 430 | 0x13fd 431 | 0x13fe 432 | 0x140e 433 | 0x1419 434 | 0x1421 435 | 0x1429 436 | 0x147a 437 | 0x1487 438 | 0x148e 439 | 0x14ad 440 | 0x14af 441 | 0x14b0 442 | 0x14cd 443 | 0x1500 444 | 0x1516 445 | 0x151c 446 | 0x152d 447 | 0x152e 448 | 0x1540 449 | 0x154b 450 | 0x154d 451 | 0x154e 452 | 0x1568 453 | 0x1570 454 | 0x157b 455 | 0x1586 456 | 0x1598 457 | 0x15a2 458 | 0x15a8 459 | 0x15aa 460 | 0x15c9 461 | 0x15e0 462 | 0x160d 463 | 0x1612 464 | 0x163e 465 | 0x1679 466 | 0x16a5 467 | 0x16ac 468 | 0x16cc 469 | 0x1724 470 | 0x1736 471 | 0x173a 472 | 0x1748 473 | 0x174c 474 | 0x176e 475 | 0x1771 476 | 0x1772 477 | 0x1782 478 | 0x1788 479 | 0x17be 480 | 0x17cf 481 | 0x17e9 482 | 0x17f5 483 | 0x1829 484 | 0x1831 485 | 0x1899 486 | 0x189b 487 | 0x18e3 488 | 0x1915 489 | 0x192f 490 | 0x1930 491 | 0x1931 492 | 0x1946 493 | 0x1957 494 | 0x1989 495 | 0x199d 496 | 0x19b9 497 | 0x19e8 498 | 0x1a0a 499 | 0x1a25 500 | 0x1a35 501 | 0x1a36 502 | 0x1a40 503 | 0x1a4a 504 | 0x1a6e 505 | 0x1a79 506 | 0x1a7b 507 | 0x1a82 508 | 0x1a8a 509 | 0x1a8b 510 | 0x1a98 511 | 0x1a99 512 | 0x1aae 513 | 0x1acb 514 | 0x1ad1 515 | 0x1aed 516 | 0x1aee 517 | 0x1aef 518 | 0x1b36 519 | 0x1b48 520 | 0x1b65 521 | 0x1b6b 522 | 0x1b88 523 | 0x1b8e 524 | 0x1b8f 525 | 0x1b99 526 | 0x1bc4 527 | 0x1bce 528 | 0x1bcf 529 | 0x1bf6 530 | 0x1c10 531 | 0x1c27 532 | 0x1c31 533 | 0x1c3d 534 | 0x1c8e 535 | 0x1c98 536 | 0x1cb0 537 | 0x1cb3 538 | 0x1cb4 539 | 0x1cbe 540 | 0x1cde 541 | 0x1d0a 542 | 0x1d29 543 | 0x1d42 544 | 0x1d45 545 | 0x1d5c 546 | 0x1d5d 547 | 0x1d69 548 | 0x1d77 549 | 0x1d80 550 | 0x1d85 551 | 0x1da0 552 | 0x1dcc 553 | 0x1ddf 554 | 0x1df2 555 | 0x1e10 556 | 0x1e33 557 | 0x1e47 558 | 0x1e4e 559 | 0x1e73 560 | 0x1e8a 561 | 0x1e91 562 | 0x1ea3 563 | 0x1eb7 564 | 0x1ec7 565 | 0x1ec9 566 | 0x1eda 567 | 0x1ee6 568 | 0x1ef3 569 | 0x1f28 570 | 0x1f29 571 | 0x1f31 572 | 0x1f3c 573 | 0x1f75 574 | 0x1f89 575 | 0x1f8a 576 | 0x1fb4 577 | 0x1fb5 578 | 0x1fc9 579 | 0x1fec 580 | 0x1ff5 581 | 0x2001 582 | 0x200d 583 | 0x201c 584 | 0x2028 585 | 0x205c 586 | 0x2066 587 | 0x2074 588 | 0x207d 589 | 0x208e 590 | 0x2095 591 | 0x2096 592 | 0x20af 593 | 0x20c0 594 | 0x20c2 595 | 0x20f7 596 | 0x2109 597 | 0x212c 598 | 0x212d 599 | 0x212e 600 | 0x2147 601 | 0x214c 602 | 0x2166 603 | 0x2173 604 | 0x2174 605 | 0x2176 606 | 0x2188 607 | 0x21b3 608 | 0x21b5 609 | 0x21c4 610 | 0x21d3 611 | 0x21e9 612 | 0x21f7 613 | 0x2205 614 | 0x2207 615 | 0x2230 616 | 0x2234 617 | 0x2270 618 | 0x227f 619 | 0x2287 620 | 0x2289 621 | 0x228a 622 | 0x22a9 623 | 0x22ab 624 | 0x22c8 625 | 0x22db 626 | 0x22fd 627 | 0x22ff 628 | 0x2313 629 | 0x2315 630 | 0x2317 631 | 0x2326 632 | 0x2330 633 | 0x234c 634 | 0x2358 635 | 0x2359 636 | 0x235a 637 | 0x235b 638 | 0x236c 639 | 0x23ac 640 | 0x23cd 641 | 0x23d6 642 | 0x23e0 643 | 0x2400 644 | 0x2406 645 | 0x2407 646 | 0x241a 647 | 0x241b 648 | 0x244c 649 | 0x2453 650 | 0x2454 651 | 0x2455 652 | 0x2477 653 | 0x247c 654 | 0x248b 655 | 0x24a6 656 | 0x24ce 657 | 0x24cf 658 | 0x24d0 659 | 0x24ed 660 | 0x2509 661 | 0x252b 662 | 0x2535 663 | 0x2537 664 | 0x2567 665 | 0x2575 666 | 0x2579 667 | 0x2588 668 | 0x2591 669 | 0x259b 670 | 0x259c 671 | 0x259d 672 | 0x25a4 673 | 0x25ab 674 | 0x25b2 675 | 0x25b3 676 | 0x25c3 677 | 0x25c7 678 | 0x25d3 679 | 0x25e1 680 | 0x25f2 681 | 0x25fb 682 | 0x25fc 683 | 0x260e 684 | 0x2614 685 | 0x2619 686 | 0x261a 687 | 0x261b 688 | 0x261c 689 | 0x262a 690 | 0x262b 691 | 0x2633 692 | 0x264a 693 | 0x2668 694 | 0x2671 695 | 0x2676 696 | 0x2679 697 | 0x267b 698 | 0x2686 699 | 0x2691 700 | 0x269b 701 | 0x26a8 702 | 0x26b0 703 | 0x26bd 704 | 0x26bf 705 | 0x26cb 706 | 0x26f5 707 | 0x2700 708 | 0x270c 709 | 0x270e 710 | 0x270f 711 | 0x2a45 712 | 0x0001 713 | 0x0002 714 | 0x0003 715 | 0x0004 716 | 0x0053 717 | 0x0079 718 | 0x0105 719 | 0x0145 720 | 0x0204 721 | 0x0218 722 | 0x02ad 723 | 0x0300 724 | 0x0324 725 | 0x0325 726 | 0x0386 727 | 0x03da 728 | 0x03e8 729 | 0x03e9 730 | 0x03ea 731 | 0x03ec 732 | 0x03ed 733 | 0x03f1 734 | 0x03f2 735 | 0x03f3 736 | 0x03f5 737 | 0x03f8 738 | 0x03f9 739 | 0x03fb 740 | 0x03fe 741 | 0x0400 742 | 0x0401 743 | 0x0402 744 | 0x0404 745 | 0x0405 746 | 0x0406 747 | 0x0407 748 | 0x040c 749 | 0x040f 750 | 0x0412 751 | 0x0413 752 | 0x0417 753 | 0x0418 754 | 0x0419 755 | 0x041a 756 | 0x041b 757 | 0x041d 758 | 0x041f 759 | 0x0420 760 | 0x0422 761 | 0x0423 762 | 0x0425 763 | 0x0426 764 | 0x0427 765 | 0x0428 766 | 0x0429 767 | 0x042a 768 | 0x042b 769 | 0x042c 770 | 0x042d 771 | 0x042e 772 | 0x0431 773 | 0x0432 774 | 0x0433 775 | 0x0434 776 | 0x0435 777 | 0x0436 778 | 0x0437 779 | 0x0439 780 | 0x043e 781 | 0x043f 782 | 0x0441 783 | 0x0442 784 | 0x0443 785 | 0x0445 786 | 0x0446 787 | 0x0447 788 | 0x044a 789 | 0x044b 790 | 0x044c 791 | 0x044d 792 | 0x044f 793 | 0x0450 794 | 0x0452 795 | 0x0453 796 | 0x0454 797 | 0x0455 798 | 0x0456 799 | 0x0459 800 | 0x045a 801 | 0x045d 802 | 0x0460 803 | 0x0464 804 | 0x0467 805 | 0x046a 806 | 0x046c 807 | 0x046e 808 | 0x046f 809 | 0x0472 810 | 0x0473 811 | 0x0475 812 | 0x0476 813 | 0x0477 814 | 0x0478 815 | 0x0479 816 | 0x047a 817 | 0x047b 818 | 0x047c 819 | 0x047d 820 | 0x0480 821 | 0x0481 822 | 0x0484 823 | 0x0485 824 | 0x0486 825 | 0x0487 826 | 0x0488 827 | 0x048a 828 | 0x048c 829 | 0x048f 830 | 0x0490 831 | 0x0491 832 | 0x0492 833 | 0x0493 834 | 0x0495 835 | 0x0496 836 | 0x0497 837 | 0x0498 838 | 0x049a 839 | 0x049b 840 | 0x049c 841 | 0x049d 842 | 0x049f 843 | 0x04a0 844 | 0x04a1 845 | 0x04a2 846 | 0x04a3 847 | 0x04a5 848 | 0x04a6 849 | 0x04a8 850 | 0x04aa 851 | 0x04ab 852 | 0x04ac 853 | 0x04ad 854 | 0x04af 855 | 0x04b3 856 | 0x04b6 857 | 0x04ba 858 | 0x04bd 859 | 0x04be 860 | 0x04bf 861 | 0x04c1 862 | 0x04c2 863 | 0x04c3 864 | 0x04c4 865 | 0x04c6 866 | 0x04c7 867 | 0x04c8 868 | 0x04cd 869 | 0x04ce 870 | 0x04cf 871 | 0x04d0 872 | 0x04d1 873 | 0x04d2 874 | 0x04d3 875 | 0x04d4 876 | 0x04d5 877 | 0x04d6 878 | 0x04d7 879 | 0x04db 880 | 0x04dc 881 | 0x04de 882 | 0x04df 883 | 0x04e1 884 | 0x04e3 885 | 0x04e4 886 | 0x04e5 887 | 0x04e7 888 | 0x04e9 889 | 0x04ea 890 | 0x04ed 891 | 0x04ef 892 | 0x04f0 893 | 0x04f1 894 | 0x04f3 895 | 0x04f4 896 | 0x04f5 897 | 0x04f6 898 | 0x04f8 899 | 0x04fa 900 | 0x04fb 901 | 0x04fd 902 | 0x04ff 903 | 0x0500 904 | 0x0503 905 | 0x0504 906 | 0x0506 907 | 0x0508 908 | 0x0509 909 | 0x050a 910 | 0x050b 911 | 0x050c 912 | 0x050e 913 | 0x050f 914 | 0x0510 915 | 0x0511 916 | 0x0512 917 | 0x0513 918 | 0x0514 919 | 0x0515 920 | 0x0517 921 | 0x0518 922 | 0x051b 923 | 0x051c 924 | 0x051e 925 | 0x051f 926 | 0x0521 927 | 0x0523 928 | 0x0524 929 | 0x0526 930 | 0x0527 931 | 0x0528 932 | 0x0529 933 | 0x052a 934 | 0x052b 935 | 0x052c 936 | 0x052d 937 | 0x052e 938 | 0x052f 939 | 0x0530 940 | 0x0532 941 | 0x0533 942 | 0x0534 943 | 0x0535 944 | 0x0536 945 | 0x0537 946 | 0x0538 947 | 0x0539 948 | 0x053a 949 | 0x053b 950 | 0x053c 951 | 0x053d 952 | 0x053e 953 | 0x0540 954 | 0x0541 955 | 0x0543 956 | 0x0544 957 | 0x0545 958 | 0x0546 959 | 0x0547 960 | 0x0548 961 | 0x0549 962 | 0x054a 963 | 0x054b 964 | 0x054d 965 | 0x054e 966 | 0x054f 967 | 0x0551 968 | 0x0552 969 | 0x0553 970 | 0x0554 971 | 0x0555 972 | 0x0556 973 | 0x0558 974 | 0x055a 975 | 0x055b 976 | 0x055c 977 | 0x055d 978 | 0x055e 979 | 0x055f 980 | 0x0560 981 | 0x0561 982 | 0x0562 983 | 0x0563 984 | 0x0564 985 | 0x0565 986 | 0x0566 987 | 0x0567 988 | 0x0568 989 | 0x0569 990 | 0x056b 991 | 0x056c 992 | 0x056d 993 | 0x056e 994 | 0x056f 995 | 0x0570 996 | 0x0571 997 | 0x0573 998 | 0x0574 999 | 0x0575 1000 | 0x0577 1001 | 0x0578 1002 | 0x0579 1003 | 0x057a 1004 | 0x057d 1005 | 0x057e 1006 | 0x057f 1007 | 0x0580 1008 | 0x0581 1009 | 0x0583 1010 | 0x0585 1011 | 0x0586 1012 | 0x0587 1013 | 0x0588 1014 | 0x0589 1015 | 0x058a 1016 | 0x058b 1017 | 0x058c 1018 | 0x058d 1019 | 0x058e 1020 | 0x0590 1021 | 0x0591 1022 | 0x0592 1023 | 0x0593 1024 | 0x0594 1025 | 0x0595 1026 | 0x0596 1027 | 0x0597 1028 | 0x0598 1029 | 0x0599 1030 | 0x059a 1031 | 0x059b 1032 | 0x059c 1033 | 0x059d 1034 | 0x059e 1035 | 0x05a0 1036 | 0x05a1 1037 | 0x05a2 1038 | 0x05a3 1039 | 0x05a4 1040 | 0x05a5 1041 | 0x05a6 1042 | 0x05a7 1043 | 0x05a8 1044 | 0x05aa 1045 | 0x05ab 1046 | 0x05ae 1047 | 0x05af 1048 | 0x05b0 1049 | 0x05b1 1050 | 0x05b4 1051 | 0x05b5 1052 | 0x05b6 1053 | 0x05b7 1054 | 0x05b8 1055 | 0x05b9 1056 | 0x05ba 1057 | 0x05bb 1058 | 0x05bc 1059 | 0x05bd 1060 | 0x05bf 1061 | 0x05c0 1062 | 0x05c2 1063 | 0x05c5 1064 | 0x05c7 1065 | 0x05c9 1066 | 0x05cb 1067 | 0x05cc 1068 | 0x05cd 1069 | 0x05ce 1070 | 0x05cf 1071 | 0x05d0 1072 | 0x05d1 1073 | 0x05d2 1074 | 0x05d3 1075 | 0x05d5 1076 | 0x05d6 1077 | 0x05d7 1078 | 0x05d8 1079 | 0x05d9 1080 | 0x05db 1081 | 0x05dd 1082 | 0x05df 1083 | 0x05e1 1084 | 0x05e2 1085 | 0x05e4 1086 | 0x05e6 1087 | 0x05e8 1088 | 0x05e9 1089 | 0x05eb 1090 | 0x05ec 1091 | 0x05ee 1092 | 0x05ef 1093 | 0x05f0 1094 | 0x05f1 1095 | 0x05f2 1096 | 0x05f3 1097 | 0x05f6 1098 | 0x05f7 1099 | 0x05fa 1100 | 0x05fc 1101 | 0x05fd 1102 | 0x05fe 1103 | 0x0600 1104 | 0x0601 1105 | 0x0602 1106 | 0x0604 1107 | 0x0605 1108 | 0x0606 1109 | 0x0607 1110 | 0x0608 1111 | 0x060a 1112 | 0x060b 1113 | 0x060c 1114 | 0x060d 1115 | 0x060e 1116 | 0x0610 1117 | 0x0614 1118 | 0x0615 1119 | 0x0616 1120 | 0x0617 1121 | 0x0618 1122 | 0x061a 1123 | 0x061b 1124 | 0x061c 1125 | 0x061d 1126 | 0x061e 1127 | 0x0620 1128 | 0x0621 1129 | 0x0622 1130 | 0x0623 1131 | 0x0624 1132 | 0x0625 1133 | 0x0626 1134 | 0x0627 1135 | 0x0628 1136 | 0x0629 1137 | 0x062a 1138 | 0x062b 1139 | 0x062c 1140 | 0x062d 1141 | 0x062f 1142 | 0x0631 1143 | 0x0633 1144 | 0x0634 1145 | 0x0635 1146 | 0x0636 1147 | 0x0638 1148 | 0x063a 1149 | 0x063b 1150 | 0x063c 1151 | 0x063d 1152 | 0x063e 1153 | 0x063f 1154 | 0x0640 1155 | 0x0641 1156 | 0x0642 1157 | 0x0644 1158 | 0x0645 1159 | 0x0646 1160 | 0x0647 1161 | 0x0648 1162 | 0x0649 1163 | 0x064d 1164 | 0x0650 1165 | 0x0651 1166 | 0x0652 1167 | 0x0653 1168 | 0x0654 1169 | 0x0659 1170 | 0x065a 1171 | 0x065b 1172 | 0x065e 1173 | 0x0662 1174 | 0x0663 1175 | 0x0664 1176 | 0x0665 1177 | 0x0667 1178 | 0x0668 1179 | 0x0669 1180 | 0x066b 1181 | 0x066d 1182 | 0x066e 1183 | 0x066f 1184 | 0x0670 1185 | 0x0672 1186 | 0x0673 1187 | 0x0674 1188 | 0x0675 1189 | 0x0676 1190 | 0x0677 1191 | 0x0678 1192 | 0x067c 1193 | 0x067d 1194 | 0x067e 1195 | 0x067f 1196 | 0x0680 1197 | 0x0681 1198 | 0x0682 1199 | 0x0684 1200 | 0x0685 1201 | 0x0686 1202 | 0x068a 1203 | 0x068b 1204 | 0x068e 1205 | 0x0694 1206 | 0x0698 1207 | 0x069a 1208 | 0x069b 1209 | 0x069d 1210 | 0x069e 1211 | 0x069f 1212 | 0x06a2 1213 | 0x06a5 1214 | 0x06a7 1215 | 0x06a8 1216 | 0x06a9 1217 | 0x06aa 1218 | 0x06ac 1219 | 0x06af 1220 | 0x06b9 1221 | 0x06ba 1222 | 0x06bb 1223 | 0x06bd 1224 | 0x06be 1225 | 0x06c2 1226 | 0x06c5 1227 | 0x06c6 1228 | 0x06c9 1229 | 0x06ca 1230 | 0x06cb 1231 | 0x06cc 1232 | 0x06cd 1233 | 0x06ce 1234 | 0x06cf 1235 | 0x06d0 1236 | 0x06d1 1237 | 0x06d4 1238 | 0x06d5 1239 | 0x06d6 1240 | 0x06d7 1241 | 0x06d8 1242 | 0x06da 1243 | 0x06db 1244 | 0x06dc 1245 | 0x06e0 1246 | 0x06e1 1247 | 0x06e4 1248 | 0x06e6 1249 | 0x06ea 1250 | 0x06eb 1251 | 0x06ef 1252 | 0x06f0 1253 | 0x06f1 1254 | 0x06f2 1255 | 0x06f6 1256 | 0x06f7 1257 | 0x06f8 1258 | 0x06f9 1259 | 0x06fa 1260 | 0x06fc 1261 | 0x06fd 1262 | 0x06fe 1263 | 0x0701 1264 | 0x0703 1265 | 0x0705 1266 | 0x0706 1267 | 0x0707 1268 | 0x0708 1269 | 0x0709 1270 | 0x070d 1271 | 0x0710 1272 | 0x0713 1273 | 0x0714 1274 | 0x0717 1275 | 0x0719 1276 | 0x071b 1277 | 0x071c 1278 | 0x071d 1279 | 0x071e 1280 | 0x0723 1281 | 0x0726 1282 | 0x0729 1283 | 0x072f 1284 | 0x0731 1285 | 0x0732 1286 | 0x0733 1287 | 0x0734 1288 | 0x0735 1289 | 0x0738 1290 | 0x073a 1291 | 0x073b 1292 | 0x073c 1293 | 0x073d 1294 | 0x073e 1295 | 0x0745 1296 | 0x0746 1297 | 0x0747 1298 | 0x0748 1299 | 0x0749 1300 | 0x074a 1301 | 0x074b 1302 | 0x074c 1303 | 0x074d 1304 | 0x074e 1305 | 0x0755 1306 | 0x0757 1307 | 0x075b 1308 | 0x0763 1309 | 0x0765 1310 | 0x0767 1311 | 0x0768 1312 | 0x0769 1313 | 0x076a 1314 | 0x076c 1315 | 0x076d 1316 | 0x076e 1317 | 0x076f 1318 | 0x0770 1319 | 0x0771 1320 | 0x0772 1321 | 0x0774 1322 | 0x0775 1323 | 0x0776 1324 | 0x0778 1325 | 0x077a 1326 | 0x077b 1327 | 0x077c 1328 | 0x077d 1329 | 0x077f 1330 | 0x0780 1331 | 0x0782 1332 | 0x0783 1333 | 0x0784 1334 | 0x0785 1335 | 0x0789 1336 | 0x078b 1337 | 0x078c 1338 | 0x078e 1339 | 0x0790 1340 | 0x0792 1341 | 0x0793 1342 | 0x0794 1343 | 0x0795 1344 | 0x0796 1345 | 0x0797 1346 | 0x0798 1347 | 0x0799 1348 | 0x079b 1349 | 0x079d 1350 | 0x07a1 1351 | 0x07a3 1352 | 0x07a4 1353 | 0x07a6 1354 | 0x07aa 1355 | 0x07ab 1356 | 0x07af 1357 | 0x07b0 1358 | 0x07b1 1359 | 0x07b2 1360 | 0x07b5 1361 | 0x07b6 1362 | 0x07b8 1363 | 0x07bc 1364 | 0x07bd 1365 | 0x07be 1366 | 0x07c0 1367 | 0x07c1 1368 | 0x07c4 1369 | 0x07c5 1370 | 0x07c6 1371 | 0x07c7 1372 | 0x07c8 1373 | 0x07c9 1374 | 0x07cb 1375 | 0x07cd 1376 | 0x07d0 1377 | 0x07d1 1378 | 0x07d2 1379 | 0x07d3 1380 | 0x07d5 1381 | 0x07d7 1382 | 0x07de 1383 | 0x07e1 1384 | 0x07e2 1385 | 0x07e3 1386 | 0x07e4 1387 | 0x07e5 1388 | 0x07e6 1389 | 0x07e7 1390 | 0x07e8 1391 | 0x07ea 1392 | 0x07eb 1393 | 0x07ec 1394 | 0x07ee 1395 | 0x07ef 1396 | 0x07f2 1397 | 0x07f6 1398 | 0x07fa 1399 | 0x07fd 1400 | 0x07ff 1401 | 0x0801 1402 | 0x0802 1403 | 0x0803 1404 | 0x0809 1405 | 0x080b 1406 | 0x080c 1407 | 0x080d 1408 | 0x0810 1409 | 0x0813 1410 | 0x0819 1411 | 0x081a 1412 | 0x081b 1413 | 0x081c 1414 | 0x081e 1415 | 0x0822 1416 | 0x0825 1417 | 0x0826 1418 | 0x0827 1419 | 0x0828 1420 | 0x0829 1421 | 0x082d 1422 | 0x0830 1423 | 0x0832 1424 | 0x0833 1425 | 0x0839 1426 | 0x083a 1427 | 0x083f 1428 | 0x0841 1429 | 0x0844 1430 | 0x0846 1431 | 0x084d 1432 | 0x084e 1433 | 0x084f 1434 | 0x0850 1435 | 0x0851 1436 | 0x0852 1437 | 0x0853 1438 | 0x0854 1439 | 0x0856 1440 | 0x0858 1441 | 0x0859 1442 | 0x085a 1443 | 0x085c 1444 | 0x0862 1445 | 0x0863 1446 | 0x0864 1447 | 0x0867 1448 | 0x086a 1449 | 0x086c 1450 | 0x086e 1451 | 0x0870 1452 | 0x0871 1453 | 0x0873 1454 | 0x0874 1455 | 0x0879 1456 | 0x087c 1457 | 0x087d 1458 | 0x087e 1459 | 0x087f 1460 | 0x0880 1461 | 0x0883 1462 | 0x0885 1463 | 0x0886 1464 | 0x088b 1465 | 0x088c 1466 | 0x088e 1467 | 0x0892 1468 | 0x089c 1469 | 0x089d 1470 | 0x089e 1471 | 0x089f 1472 | 0x08a5 1473 | 0x08a8 1474 | 0x08ae 1475 | 0x08b4 1476 | 0x08b7 1477 | 0x08b8 1478 | 0x08bd 1479 | 0x08c3 1480 | 0x08c4 1481 | 0x08c8 1482 | 0x08c9 1483 | 0x08ca 1484 | 0x08cd 1485 | 0x08ce 1486 | 0x08cf 1487 | 0x08d1 1488 | 0x08d3 1489 | 0x08d4 1490 | 0x08d8 1491 | 0x08d9 1492 | 0x08dd 1493 | 0x08de 1494 | 0x08df 1495 | 0x08e3 1496 | 0x08e5 1497 | 0x08e7 1498 | 0x08e8 1499 | 0x08e9 1500 | 0x08ea 1501 | 0x08ec 1502 | 0x08ed 1503 | 0x08ee 1504 | 0x08f0 1505 | 0x08f1 1506 | 0x08f2 1507 | 0x08f5 1508 | 0x08f6 1509 | 0x08f7 1510 | 0x08f8 1511 | 0x08f9 1512 | 0x08fa 1513 | 0x08fb 1514 | 0x08fc 1515 | 0x08fd 1516 | 0x0900 1517 | 0x0901 1518 | 0x0908 1519 | 0x090a 1520 | 0x090b 1521 | 0x090d 1522 | 0x090e 1523 | 0x090f 1524 | 0x0910 1525 | 0x0911 1526 | 0x0912 1527 | 0x0915 1528 | 0x0917 1529 | 0x0919 1530 | 0x0920 1531 | 0x0921 1532 | 0x0923 1533 | 0x0924 1534 | 0x0925 1535 | 0x0927 1536 | 0x0928 1537 | 0x0929 1538 | 0x092a 1539 | 0x092b 1540 | 0x092f 1541 | 0x0931 1542 | 0x0932 1543 | 0x0933 1544 | 0x0934 1545 | 0x0936 1546 | 0x0939 1547 | 0x093c 1548 | 0x093d 1549 | 0x093f 1550 | 0x0940 1551 | 0x0941 1552 | 0x0942 1553 | 0x0943 1554 | 0x0944 1555 | 0x0945 1556 | 0x0948 1557 | 0x094b 1558 | 0x094d 1559 | 0x094f 1560 | 0x0954 1561 | 0x0956 1562 | 0x0958 1563 | 0x0959 1564 | 0x095a 1565 | 0x095c 1566 | 0x0967 1567 | 0x0968 1568 | 0x096e 1569 | 0x0971 1570 | 0x0973 1571 | 0x0974 1572 | 0x0975 1573 | 0x0976 1574 | 0x0977 1575 | 0x0978 1576 | 0x0979 1577 | 0x097a 1578 | 0x097b 1579 | 0x097c 1580 | 0x097d 1581 | 0x097e 1582 | 0x097f 1583 | 0x0981 1584 | 0x0984 1585 | 0x0985 1586 | 0x0986 1587 | 0x098c 1588 | 0x098d 1589 | 0x098e 1590 | 0x098f 1591 | 0x0993 1592 | 0x0996 1593 | 0x099a 1594 | 0x09a3 1595 | 0x09a5 1596 | 0x09a6 1597 | 0x09a7 1598 | 0x09a9 1599 | 0x09aa 1600 | 0x09ae 1601 | 0x09b2 1602 | 0x09b3 1603 | 0x09b4 1604 | 0x09b5 1605 | 0x09bc 1606 | 0x09be 1607 | 0x09bf 1608 | 0x09c0 1609 | 0x09c1 1610 | 0x09c3 1611 | 0x09c4 1612 | 0x09c5 1613 | 0x09cd 1614 | 0x09ce 1615 | 0x09d1 1616 | 0x09d2 1617 | 0x09d3 1618 | 0x09d7 1619 | 0x09db 1620 | 0x09dc 1621 | 0x09dd 1622 | 0x09df 1623 | 0x09e1 1624 | 0x09e5 1625 | 0x09e6 1626 | 0x09e7 1627 | 0x09e8 1628 | 0x09e9 1629 | 0x09eb 1630 | 0x09ef 1631 | 0x09f3 1632 | 0x09f5 1633 | 0x09f6 1634 | 0x09f7 1635 | 0x09f8 1636 | 0x09f9 1637 | 0x09fa 1638 | 0x09fb 1639 | 0x09ff 1640 | 0x0a00 1641 | 0x0a01 1642 | 0x0a07 1643 | 0x0a0b 1644 | 0x0a11 1645 | 0x0a13 1646 | 0x0a14 1647 | 0x0a15 1648 | 0x0a16 1649 | 0x0a18 1650 | 0x0a19 1651 | 0x0a22 1652 | 0x0a27 1653 | 0x0a2c 1654 | 0x0a34 1655 | 0x0a35 1656 | 0x0a39 1657 | 0x0a3a 1658 | 0x0a3c 1659 | 0x0a3d 1660 | 0x0a3f 1661 | 0x0a43 1662 | 0x0a46 1663 | 0x0a48 1664 | 0x0a4b 1665 | 0x0a4d 1666 | 0x0a4e 1667 | 0x0a4f 1668 | 0x0a51 1669 | 0x0a52 1670 | 0x0a53 1671 | 0x0a5a 1672 | 0x0a5b 1673 | 0x0a5d 1674 | 0x0a5f 1675 | 0x0a62 1676 | 0x0a66 1677 | 0x0a67 1678 | 0x0a68 1679 | 0x0a69 1680 | 0x0a6c 1681 | 0x0a6d 1682 | 0x0a6e 1683 | 0x0a6f 1684 | 0x0a70 1685 | 0x0a71 1686 | 0x0a72 1687 | 0x0a7e 1688 | 0x0a80 1689 | 0x0a82 1690 | 0x0a83 1691 | 0x0a84 1692 | 0x0a85 1693 | 0x0a86 1694 | 0x0a8d 1695 | 0x0a90 1696 | 0x0a91 1697 | 0x0a92 1698 | 0x0a93 1699 | 0x0a94 1700 | 0x0aa3 1701 | 0x0aa4 1702 | 0x0aa5 1703 | 0x0aa6 1704 | 0x0aa8 1705 | 0x0aa9 1706 | 0x0aaa 1707 | 0x0aab 1708 | 0x0aac 1709 | 0x0aae 1710 | 0x0aaf 1711 | 0x0ab0 1712 | 0x0ab1 1713 | 0x0aba 1714 | 0x0abe 1715 | 0x0abf 1716 | 0x0ac4 1717 | 0x0ac5 1718 | 0x0ac6 1719 | 0x0ac7 1720 | 0x0ac9 1721 | 0x0aca 1722 | 0x0acc 1723 | 0x0acd 1724 | 0x0ace 1725 | 0x0acf 1726 | 0x0ad0 1727 | 0x0ad1 1728 | 0x0ad2 1729 | 0x0ada 1730 | 0x0ae4 1731 | 0x0ae7 1732 | 0x0ae8 1733 | 0x0ae9 1734 | 0x0aea 1735 | 0x0aeb 1736 | 0x0aec 1737 | 0x0af6 1738 | 0x0af7 1739 | 0x0af9 1740 | 0x0afc 1741 | 0x0afd 1742 | 0x0afe 1743 | 0x0aff 1744 | 0x0b00 1745 | 0x0b0b 1746 | 0x0b0c 1747 | 0x0b0d 1748 | 0x0b0e 1749 | 0x0b0f 1750 | 0x0b10 1751 | 0x0b11 1752 | 0x0b1f 1753 | 0x0b20 1754 | 0x0b22 1755 | 0x0b24 1756 | 0x0b27 1757 | 0x0b28 1758 | 0x0b2c 1759 | 0x0b30 1760 | 0x0b33 1761 | 0x0b37 1762 | 0x0b38 1763 | 0x0b39 1764 | 0x0b3a 1765 | 0x0b3b 1766 | 0x0b3c 1767 | 0x0b3e 1768 | 0x0b41 1769 | 0x0b43 1770 | 0x0b47 1771 | 0x0b48 1772 | 0x0b49 1773 | 0x0b4b 1774 | 0x0b4d 1775 | 0x0b50 1776 | 0x0b51 1777 | 0x0b52 1778 | 0x0b56 1779 | 0x0b59 1780 | 0x0b5a 1781 | 0x0b5f 1782 | 0x0b60 1783 | 0x0b61 1784 | 0x0b62 1785 | 0x0b63 1786 | 0x0b64 1787 | 0x0b65 1788 | 0x0b69 1789 | 0x0b6f 1790 | 0x0b70 1791 | 0x0b71 1792 | 0x0b72 1793 | 0x0b73 1794 | 0x0b75 1795 | 0x0b79 1796 | 0x0b7a 1797 | 0x0b7b 1798 | 0x0b7c 1799 | 0x0b7d 1800 | 0x0b81 1801 | 0x0b84 1802 | 0x0b85 1803 | 0x0b86 1804 | 0x0b87 1805 | 0x0b88 1806 | 0x0b89 1807 | 0x0b8c 1808 | 0x0b96 1809 | 0x0b98 1810 | 0x0b99 1811 | 0x0b9b 1812 | 0x0b9d 1813 | 0x0b9f 1814 | 0x0baf 1815 | 0x0bb0 1816 | 0x0bb1 1817 | 0x0bb2 1818 | 0x0bb3 1819 | 0x0bb6 1820 | 0x0bb7 1821 | 0x0bb8 1822 | 0x0bb9 1823 | 0x0bba 1824 | 0x0bbb 1825 | 0x0bbc 1826 | 0x0bbd 1827 | 0x0bc0 1828 | 0x0bc1 1829 | 0x0bc3 1830 | 0x0bc4 1831 | 0x0bc5 1832 | 0x0bc6 1833 | 0x0bc7 1834 | 0x0bc8 1835 | 0x0bc9 1836 | 0x0bca 1837 | 0x0bcb 1838 | 0x0bd7 1839 | 0x0bdc 1840 | 0x0bdd 1841 | 0x0be2 1842 | 0x0be3 1843 | 0x0be5 1844 | 0x0be6 1845 | 0x0bed 1846 | 0x0bef 1847 | 0x0bf0 1848 | 0x0bf1 1849 | 0x0bf2 1850 | 0x0bf6 1851 | 0x0bf7 1852 | 0x0bf8 1853 | 0x0bfd 1854 | 0x0c04 1855 | 0x0c05 1856 | 0x0c07 1857 | 0x0c08 1858 | 0x0c09 1859 | 0x0c0a 1860 | 0x0c12 1861 | 0x0c15 1862 | 0x0c16 1863 | 0x0c17 1864 | 0x0c18 1865 | 0x0c19 1866 | 0x0c1a 1867 | 0x0c1b 1868 | 0x0c1c 1869 | 0x0c22 1870 | 0x0c23 1871 | 0x0c25 1872 | 0x0c26 1873 | 0x0c27 1874 | 0x0c2e 1875 | 0x0c35 1876 | 0x0c36 1877 | 0x0c37 1878 | 0x0c38 1879 | 0x0c3a 1880 | 0x0c3b 1881 | 0x0c3c 1882 | 0x0c3d 1883 | 0x0c3e 1884 | 0x0c44 1885 | 0x0c46 1886 | 0x0c4a 1887 | 0x0c4b 1888 | 0x0c4c 1889 | 0x0c52 1890 | 0x0c53 1891 | 0x0c54 1892 | 0x0c55 1893 | 0x0c57 1894 | 0x0c58 1895 | 0x0c5a 1896 | 0x0c5e 1897 | 0x0c60 1898 | 0x0c63 1899 | 0x0c64 1900 | 0x0c65 1901 | 0x0c66 1902 | 0x0c67 1903 | 0x0c6c 1904 | 0x0c70 1905 | 0x0c72 1906 | 0x0c74 1907 | 0x0c77 1908 | 0x0c78 1909 | 0x0c79 1910 | 0x0c7a 1911 | 0x0c86 1912 | 0x0c88 1913 | 0x0c8a 1914 | 0x0c8b 1915 | 0x0c8c 1916 | 0x0c8d 1917 | 0x0c8e 1918 | 0x0c8f 1919 | 0x0c94 1920 | 0x0c98 1921 | 0x0c99 1922 | 0x0c9a 1923 | 0x0c9b 1924 | 0x0c9d 1925 | 0x0ca2 1926 | 0x0ca3 1927 | 0x0ca4 1928 | 0x0ca5 1929 | 0x0ca6 1930 | 0x0ca7 1931 | 0x0cae 1932 | 0x0caf 1933 | 0x0cb0 1934 | 0x0cb1 1935 | 0x0cb6 1936 | 0x0cb7 1937 | 0x0cb8 1938 | 0x0cba 1939 | 0x0cbb 1940 | 0x0cbc 1941 | 0x0cbd 1942 | 0x0cbe 1943 | 0x0cbf 1944 | 0x0cc0 1945 | 0x0cc1 1946 | 0x0cc2 1947 | 0x0cc3 1948 | 0x0cc5 1949 | 0x0cc6 1950 | 0x0cc7 1951 | 0x0cc8 1952 | 0x0cc9 1953 | 0x0cca 1954 | 0x0ccb 1955 | 0x0ccc 1956 | 0x0ccd 1957 | 0x0cd4 1958 | 0x0cd5 1959 | 0x0cd7 1960 | 0x0cd8 1961 | 0x0ce5 1962 | 0x0ce9 1963 | 0x0cf1 1964 | 0x0cf3 1965 | 0x0cf4 1966 | 0x0cf5 1967 | 0x0cf6 1968 | 0x0cf7 1969 | 0x0cf8 1970 | 0x0cf9 1971 | 0x0cfa 1972 | 0x0cfc 1973 | 0x0cff 1974 | 0x0d06 1975 | 0x0d08 1976 | 0x0d0b 1977 | 0x0d0c 1978 | 0x0d0d 1979 | 0x0d0e 1980 | 0x0d0f 1981 | 0x0d10 1982 | 0x0d11 1983 | 0x0d12 1984 | 0x0d13 1985 | 0x0d14 1986 | 0x0d15 1987 | 0x0d16 1988 | 0x0d18 1989 | 0x0d28 1990 | 0x0d32 1991 | 0x0d33 1992 | 0x0d34 1993 | 0x0d35 1994 | 0x0d3a 1995 | 0x0d3c 1996 | 0x0d3d 1997 | 0x0d3e 1998 | 0x0d3f 1999 | 0x0d40 2000 | 0x0d42 2001 | 0x0d46 2002 | 0x0d49 2003 | 0x0d4c 2004 | 0x0d4d 2005 | 0x0d4e 2006 | 0x0d4f 2007 | 0x0d50 2008 | 0x0d53 2009 | 0x0d54 2010 | 0x0d55 2011 | 0x0d56 2012 | 0x0d57 2013 | 0x0d5c 2014 | 0x0d5e 2015 | 0x0d5f 2016 | 0x0d60 2017 | 0x0d62 2018 | 0x0d63 2019 | 0x0d64 2020 | 0x0d65 2021 | 0x0d66 2022 | 0x0d67 2023 | 0x0d68 2024 | 0x0d69 2025 | 0x0d6a 2026 | 0x0d6b 2027 | 0x0d70 2028 | 0x0d72 2029 | 0x0d73 2030 | 0x0d76 2031 | 0x0d77 2032 | 0x0d78 2033 | 0x0d7a 2034 | 0x0d7b 2035 | 0x0d7d 2036 | 0x0d7e 2037 | 0x0d7f 2038 | 0x0d80 2039 | 0x0d81 2040 | 0x0d83 2041 | 0x0d89 2042 | 0x0d8a 2043 | 0x0d8b 2044 | 0x0d8d 2045 | 0x0d8e 2046 | 0x0d8f 2047 | 0x0d96 2048 | 0x0d97 2049 | 0x0d98 2050 | 0x0d99 2051 | 0x0d9a 2052 | 0x0d9b 2053 | 0x0d9c 2054 | 0x0d9d 2055 | 0x0d9e 2056 | 0x0d9f 2057 | 0x0da0 2058 | 0x0da1 2059 | 0x0da2 2060 | 0x0da3 2061 | 0x0da4 2062 | 0x0da8 2063 | 0x0dab 2064 | 0x0dad 2065 | 0x0db1 2066 | 0x0db2 2067 | 0x0db3 2068 | 0x0db4 2069 | 0x0db7 2070 | 0x0dbc 2071 | 0x0dbe 2072 | 0x0dbf 2073 | 0x0dc0 2074 | 0x0dc1 2075 | 0x0dc3 2076 | 0x0dc4 2077 | 0x0dc5 2078 | 0x0dc6 2079 | 0x0dc7 2080 | 0x0dcd 2081 | 0x0dd0 2082 | 0x0dd3 2083 | 0x0dd5 2084 | 0x0dd7 2085 | 0x0dd8 2086 | 0x0dd9 2087 | 0x0dda 2088 | 0x0ddb 2089 | 0x0ddd 2090 | 0x0dde 2091 | 0x0de0 2092 | 0x0ded 2093 | 0x0dee 2094 | 0x0def 2095 | 0x0df4 2096 | 0x0df6 2097 | 0x0df7 2098 | 0x0dfa 2099 | 0x0dfc 2100 | 0x0e03 2101 | 0x0e08 2102 | 0x0e0b 2103 | 0x0e0c 2104 | 0x0e0f 2105 | 0x0e16 2106 | 0x0e17 2107 | 0x0e1b 2108 | 0x0e20 2109 | 0x0e21 2110 | 0x0e22 2111 | 0x0e25 2112 | 0x0e26 2113 | 0x0e30 2114 | 0x0e34 2115 | 0x0e35 2116 | 0x0e36 2117 | 0x0e38 2118 | 0x0e3b 2119 | 0x0e41 2120 | 0x0e44 2121 | 0x0e48 2122 | 0x0e4c 2123 | 0x0e50 2124 | 0x0e55 2125 | 0x0e56 2126 | 0x0e5a 2127 | 0x0e5c 2128 | 0x0e5d 2129 | 0x0e5e 2130 | 0x0e66 2131 | 0x0e67 2132 | 0x0e6f 2133 | 0x0e70 2134 | 0x0e75 2135 | 0x0e7b 2136 | 0x0e7e 2137 | 0x0e82 2138 | 0x0e83 2139 | 0x0e8f 2140 | 0x0e90 2141 | 0x0e91 2142 | 0x0e92 2143 | 0x0e93 2144 | 0x0e95 2145 | 0x0e96 2146 | 0x0e97 2147 | 0x0e98 2148 | 0x0e99 2149 | 0x0e9a 2150 | 0x0e9c 2151 | 0x0e9f 2152 | 0x0ea6 2153 | 0x0ea7 2154 | 0x0ea8 2155 | 0x0ead 2156 | 0x0eb0 2157 | 0x0eb1 2158 | 0x0eb3 2159 | 0x0eb7 2160 | 0x0ebe 2161 | 0x0ebf 2162 | 0x0ec0 2163 | 0x0ec1 2164 | 0x0ec4 2165 | 0x0ec5 2166 | 0x0ec7 2167 | 0x0ecd 2168 | 0x0ecf 2169 | 0x0ed1 2170 | 0x0ed2 2171 | 0x0ed3 2172 | 0x0ed5 2173 | 0x0eda 2174 | 0x0edf 2175 | 0x0ee0 2176 | 0x0ee1 2177 | 0x0ee2 2178 | 0x0ee3 2179 | 0x0eee 2180 | 0x0eef 2181 | 0x0ef0 2182 | 0x0ef1 2183 | 0x0ef2 2184 | 0x0ef3 2185 | 0x0ef4 2186 | 0x0ef5 2187 | 0x0ef6 2188 | 0x0ef7 2189 | 0x0efd 2190 | 0x0efe 2191 | 0x0f06 2192 | 0x0f0c 2193 | 0x0f0d 2194 | 0x0f0e 2195 | 0x0f11 2196 | 0x0f12 2197 | 0x0f13 2198 | 0x0f18 2199 | 0x0f19 2200 | 0x0f1b 2201 | 0x0f1d 2202 | 0x0f21 2203 | 0x0f22 2204 | 0x0f23 2205 | 0x0f24 2206 | 0x0f2d 2207 | 0x0f2f 2208 | 0x0f30 2209 | 0x0f31 2210 | 0x0f37 2211 | 0x0f3d 2212 | 0x0f41 2213 | 0x0f42 2214 | 0x0f44 2215 | 0x0f4b 2216 | 0x0f4d 2217 | 0x0f4e 2218 | 0x0f55 2219 | 0x0f5c 2220 | 0x0f5d 2221 | 0x0f5f 2222 | 0x0f61 2223 | 0x0f62 2224 | 0x0f63 2225 | 0x0f6a 2226 | 0x0f6e 2227 | 0x0f73 2228 | 0x0f7c 2229 | 0x0f7d 2230 | 0x0f7e 2231 | 0x0f88 2232 | 0x0f8c 2233 | 0x0f8d 2234 | 0x0f8e 2235 | 0x0f8f 2236 | 0x0f98 2237 | 0x0f9c 2238 | 0x0f9e 2239 | 0x0fa3 2240 | 0x0fa4 2241 | 0x0fa5 2242 | 0x0fa7 2243 | 0x0fa8 2244 | 0x0faf 2245 | 0x0fb0 2246 | 0x0fb1 2247 | 0x0fb2 2248 | 0x0fb6 2249 | 0x0fb9 2250 | 0x0fba 2251 | 0x0fbb 2252 | 0x0fc1 2253 | 0x0fc2 2254 | 0x0fc5 2255 | 0x0fc6 2256 | 0x0fca 2257 | 0x0fcf 2258 | 0x0fd0 2259 | 0x0fd1 2260 | 0x0fd4 2261 | 0x0fd5 2262 | 0x0fd9 2263 | 0x0fdc 2264 | 0x0fe0 2265 | 0x0fe4 2266 | 0x0fe5 2267 | 0x0fe6 2268 | 0x0fe9 2269 | 0x0fea 2270 | 0x0feb 2271 | 0x0fec 2272 | 0x0fed 2273 | 0x0fee 2274 | 0x0fef 2275 | 0x0ff6 2276 | 0x0ffc 2277 | 0x0fff 2278 | 0x1000 2279 | 0x1001 2280 | 0x1003 2281 | 0x1005 2282 | 0x1006 2283 | 0x1009 2284 | 0x100a 2285 | 0x100b 2286 | 0x100d 2287 | 0x1010 2288 | 0x1011 2289 | 0x1012 2290 | 0x1013 2291 | 0x1014 2292 | 0x1015 2293 | 0x1016 2294 | 0x1017 2295 | 0x1019 2296 | 0x1020 2297 | 0x1022 2298 | 0x1025 2299 | 0x1027 2300 | 0x1028 2301 | 0x1029 2302 | 0x102a 2303 | 0x102b 2304 | 0x102c 2305 | 0x102d 2306 | 0x1032 2307 | 0x1033 2308 | 0x1039 2309 | 0x103d 2310 | 0x1043 2311 | 0x1044 2312 | 0x1046 2313 | 0x104b 2314 | 0x104d 2315 | 0x104f 2316 | 0x1050 2317 | 0x1053 2318 | 0x1054 2319 | 0x1055 2320 | 0x1056 2321 | 0x105e 2322 | 0x105f 2323 | 0x1060 2324 | 0x1063 2325 | 0x1065 2326 | 0x106a 2327 | 0x106c 2328 | 0x106d 2329 | 0x106e 2330 | 0x106f 2331 | 0x1076 2332 | 0x107b 2333 | 0x107d 2334 | 0x107e 2335 | 0x107f 2336 | 0x1082 2337 | 0x108a 2338 | 0x1099 2339 | 0x109a 2340 | 0x109f 2341 | 0x10a0 2342 | 0x10a3 2343 | 0x10ac 2344 | 0x10af 2345 | 0x10b5 2346 | 0x10b8 2347 | 0x10bc 2348 | 0x10bd 2349 | 0x10bf 2350 | 0x10c4 2351 | 0x10c5 2352 | 0x10c6 2353 | 0x10cb 2354 | 0x10cc 2355 | 0x10ce 2356 | 0x10cf 2357 | 0x10d1 2358 | 0x10d4 2359 | 0x10d5 2360 | 0x10de 2361 | 0x10df 2362 | 0x10e0 2363 | 0x10e1 2364 | 0x10e2 2365 | 0x10ec 2366 | 0x10f0 2367 | 0x10f1 2368 | 0x10f5 2369 | 0x10fb 2370 | 0x10fd 2371 | 0x1100 2372 | 0x1101 2373 | 0x1108 2374 | 0x110a 2375 | 0x1110 2376 | 0x1111 2377 | 0x1113 2378 | 0x112a 2379 | 0x112f 2380 | 0x1131 2381 | 0x1132 2382 | 0x1136 2383 | 0x113c 2384 | 0x113d 2385 | 0x1141 2386 | 0x1142 2387 | 0x1145 2388 | 0x1146 2389 | 0x1147 2390 | 0x114c 2391 | 0x114f 2392 | 0x1162 2393 | 0x1163 2394 | 0x1164 2395 | 0x1165 2396 | 0x1166 2397 | 0x1167 2398 | 0x1168 2399 | 0x116e 2400 | 0x116f 2401 | 0x117d 2402 | 0x117e 2403 | 0x1182 2404 | 0x1183 2405 | 0x1184 2406 | 0x1188 2407 | 0x1189 2408 | 0x118f 2409 | 0x1190 2410 | 0x1191 2411 | 0x1196 2412 | 0x1197 2413 | 0x1198 2414 | 0x119b 2415 | 0x11a0 2416 | 0x11a3 2417 | 0x11ab 2418 | 0x11c5 2419 | 0x11db 2420 | 0x11e6 2421 | 0x11f5 2422 | 0x11f6 2423 | 0x11f7 2424 | 0x1203 2425 | 0x1209 2426 | 0x120e 2427 | 0x120f 2428 | 0x1210 2429 | 0x121e 2430 | 0x1230 2431 | 0x1233 2432 | 0x1234 2433 | 0x1235 2434 | 0x1241 2435 | 0x124a 2436 | 0x124c 2437 | 0x125c 2438 | 0x1260 2439 | 0x1264 2440 | 0x1266 2441 | 0x1267 2442 | 0x126e 2443 | 0x126f 2444 | 0x1274 2445 | 0x1275 2446 | 0x1278 2447 | 0x1283 2448 | 0x1291 2449 | 0x1292 2450 | 0x1293 2451 | 0x129b 2452 | 0x12a7 2453 | 0x12ba 2454 | 0x12c4 2455 | 0x12d6 2456 | 0x12e6 2457 | 0x12ef 2458 | 0x12f5 2459 | 0x12f7 2460 | 0x12fd 2461 | 0x12ff 2462 | 0x1307 2463 | 0x1308 2464 | 0x1310 2465 | 0x1312 2466 | 0x131d 2467 | 0x132a 2468 | 0x1342 2469 | 0x1345 2470 | 0x1347 2471 | 0x134c 2472 | 0x134e 2473 | 0x1357 2474 | 0x1366 2475 | 0x136b 2476 | 0x1371 2477 | 0x1376 2478 | 0x137b 2479 | 0x1385 2480 | 0x138a 2481 | 0x138e 2482 | 0x1390 2483 | 0x1391 2484 | 0x1395 2485 | 0x1397 2486 | 0x1398 2487 | 0x13ad 2488 | 0x13b0 2489 | 0x13b1 2490 | 0x13b2 2491 | 0x13b3 2492 | 0x13ba 2493 | 0x13be 2494 | 0x13cf 2495 | 0x13d0 2496 | 0x13d1 2497 | 0x13d2 2498 | 0x13dd 2499 | 0x13e1 2500 | 0x13e5 2501 | 0x13e6 2502 | 0x13ea 2503 | 0x13ec 2504 | 0x13ee 2505 | 0x1400 2506 | 0x1402 2507 | 0x1403 2508 | 0x1410 2509 | 0x1415 2510 | 0x142a 2511 | 0x142b 2512 | 0x1430 2513 | 0x1431 2514 | 0x1435 2515 | 0x1436 2516 | 0x143c 2517 | 0x1443 2518 | 0x1453 2519 | 0x1456 2520 | 0x1457 2521 | 0x145f 2522 | 0x1460 2523 | 0x1461 2524 | 0x1462 2525 | 0x1472 2526 | 0x147e 2527 | 0x147f 2528 | 0x1482 2529 | 0x1484 2530 | 0x1485 2531 | 0x148f 2532 | 0x1491 2533 | 0x1497 2534 | 0x1498 2535 | 0x149a 2536 | 0x14aa 2537 | 0x14ae 2538 | 0x14b2 2539 | 0x14c0 2540 | 0x14c2 2541 | 0x14c8 2542 | 0x14d8 2543 | 0x14dd 2544 | 0x14e1 2545 | 0x14e5 2546 | 0x14ea 2547 | 0x14ed 2548 | 0x14f7 2549 | 0x1501 2550 | 0x1509 2551 | 0x1513 2552 | 0x1514 2553 | 0x1518 2554 | 0x1520 2555 | 0x1524 2556 | 0x1527 2557 | 0x1529 2558 | 0x1532 2559 | 0x1546 2560 | 0x154a 2561 | 0x1554 2562 | 0x1557 2563 | 0x156f 2564 | 0x157e 2565 | 0x1582 2566 | 0x1587 2567 | 0x158d 2568 | 0x158e 2569 | 0x15a4 2570 | 0x15a9 2571 | 0x15ad 2572 | 0x15ba 2573 | 0x15c0 2574 | 0x15c2 2575 | 0x15c5 2576 | 0x15c6 2577 | 0x15c8 2578 | 0x15ca 2579 | 0x15d5 2580 | 0x15d9 2581 | 0x15dc 2582 | 0x15e1 2583 | 0x15e4 2584 | 0x15e8 2585 | 0x15e9 2586 | 0x15ec 2587 | 0x15f4 2588 | 0x1604 2589 | 0x1606 2590 | 0x1608 2591 | 0x160a 2592 | 0x1614 2593 | 0x1619 2594 | 0x1621 2595 | 0x1628 2596 | 0x162a 2597 | 0x162f 2598 | 0x1630 2599 | 0x1631 2600 | 0x1645 2601 | 0x1649 2602 | 0x164a 2603 | 0x164c 2604 | 0x1657 2605 | 0x165b 2606 | 0x1660 2607 | 0x1668 2608 | 0x1669 2609 | 0x1677 2610 | 0x1680 2611 | 0x1681 2612 | 0x1682 2613 | 0x1684 2614 | 0x1685 2615 | 0x1686 2616 | 0x1687 2617 | 0x1688 2618 | 0x168c 2619 | 0x1690 2620 | 0x1696 2621 | 0x1697 2622 | 0x16a6 2623 | 0x16ab 2624 | 0x16b4 2625 | 0x16b5 2626 | 0x16c0 2627 | 0x16ca 2628 | 0x16d0 2629 | 0x16d3 2630 | 0x16d5 2631 | 0x16d6 2632 | 0x16d8 2633 | 0x16dc 2634 | 0x16df 2635 | 0x16f0 2636 | 0x16f5 2637 | 0x1706 2638 | 0x1707 2639 | 0x170b 2640 | 0x170d 2641 | 0x1725 2642 | 0x1726 2643 | 0x172f 2644 | 0x1733 2645 | 0x1737 2646 | 0x1740 2647 | 0x1743 2648 | 0x174f 2649 | 0x1753 2650 | 0x1759 2651 | 0x1761 2652 | 0x1776 2653 | 0x177f 2654 | 0x1781 2655 | 0x1784 2656 | 0x1787 2657 | 0x1796 2658 | 0x1797 2659 | 0x1799 2660 | 0x179d 2661 | 0x17a0 2662 | 0x17a4 2663 | 0x17a5 2664 | 0x17a7 2665 | 0x17b3 2666 | 0x17ba 2667 | 0x17c3 2668 | 0x17cc 2669 | 0x17d0 2670 | 0x17d3 2671 | 0x17eb 2672 | 0x17f6 2673 | 0x1809 2674 | 0x1822 2675 | 0x1832 2676 | 0x183d 2677 | 0x1843 2678 | 0x1849 2679 | 0x1852 2680 | 0x1854 2681 | 0x185b 2682 | 0x1861 2683 | 0x1862 2684 | 0x1870 2685 | 0x1871 2686 | 0x1873 2687 | 0x187c 2688 | 0x187f 2689 | 0x1892 2690 | 0x1894 2691 | 0x1897 2692 | 0x18a4 2693 | 0x18a5 2694 | 0x18b1 2695 | 0x18b4 2696 | 0x18b6 2697 | 0x18b7 2698 | 0x18c5 2699 | 0x18cd 2700 | 0x18d5 2701 | 0x18d9 2702 | 0x18dd 2703 | 0x18e8 2704 | 0x18ea 2705 | 0x18ec 2706 | 0x18fd 2707 | 0x1908 2708 | 0x190d 2709 | 0x1914 2710 | 0x1926 2711 | 0x1934 2712 | 0x1941 2713 | 0x1943 2714 | 0x1951 2715 | 0x1953 2716 | 0x1954 2717 | 0x195d 2718 | 0x1967 2719 | 0x196b 2720 | 0x1970 2721 | 0x1975 2722 | 0x1976 2723 | 0x1977 2724 | 0x198f 2725 | 0x1990 2726 | 0x1995 2727 | 0x199e 2728 | 0x199f 2729 | 0x19a8 2730 | 0x19ab 2731 | 0x19af 2732 | 0x19b2 2733 | 0x19b4 2734 | 0x19b5 2735 | 0x19b6 2736 | 0x19ca 2737 | 0x19cf 2738 | 0x19e1 2739 | 0x19ef 2740 | 0x19f7 2741 | 0x19fa 2742 | 0x19ff 2743 | 0x1a08 2744 | 0x1a12 2745 | 0x1a1d 2746 | 0x1a2a 2747 | 0x1a32 2748 | 0x1a41 2749 | 0x1a44 2750 | 0x1a4b 2751 | 0x1a61 2752 | 0x1a6a 2753 | 0x1a6d 2754 | 0x1a6f 2755 | 0x1a7c 2756 | 0x1a81 2757 | 0x1a86 2758 | 0x1a89 2759 | 0x1a8d 2760 | 0x1a90 2761 | 0x1aa4 2762 | 0x1aa5 2763 | 0x1aa6 2764 | 0x1ab1 2765 | 0x1ad4 2766 | 0x1adb 2767 | 0x1ae4 2768 | 0x1ae7 2769 | 0x1b04 2770 | 0x1b0e 2771 | 0x1b1c 2772 | 0x1b20 2773 | 0x1b22 2774 | 0x1b26 2775 | 0x1b27 2776 | 0x1b28 2777 | 0x1b32 2778 | 0x1b3b 2779 | 0x1b3f 2780 | 0x1b47 2781 | 0x1b59 2782 | 0x1b5a 2783 | 0x1b72 2784 | 0x1b73 2785 | 0x1b75 2786 | 0x1b76 2787 | 0x1b80 2788 | 0x1b86 2789 | 0x1b8c 2790 | 0x1b8d 2791 | 0x1b96 2792 | 0x1b98 2793 | 0x1ba1 2794 | 0x1ba2 2795 | 0x1ba4 2796 | 0x1ba6 2797 | 0x1ba8 2798 | 0x1bad 2799 | 0x1bae 2800 | 0x1bc5 2801 | 0x1bd0 2802 | 0x1bd5 2803 | 0x1bde 2804 | 0x1bef 2805 | 0x1bf0 2806 | 0x1bf5 2807 | 0x1bfd 2808 | 0x1c02 2809 | 0x1c04 2810 | 0x1c0d 2811 | 0x1c13 2812 | 0x1c1a 2813 | 0x1c1b 2814 | 0x1c1f 2815 | 0x1c20 2816 | 0x1c21 2817 | 0x1c22 2818 | 0x1c26 2819 | 0x1c34 2820 | 0x1c37 2821 | 0x1c3e 2822 | 0x1c40 2823 | 0x1c49 2824 | 0x1c4f 2825 | 0x1c6b 2826 | 0x1c6c 2827 | 0x1c73 2828 | 0x1c77 2829 | 0x1c78 2830 | 0x1c79 2831 | 0x1c7a 2832 | 0x1c7b 2833 | 0x1c87 2834 | 0x1c88 2835 | 0x1c89 2836 | 0x1c9e 2837 | 0x1ca0 2838 | 0x1cac 2839 | 0x1cbf 2840 | 0x1cc0 2841 | 0x1cca 2842 | 0x1ccd 2843 | 0x1cd4 2844 | 0x1cd5 2845 | 0x1cd6 2846 | 0x1cdf 2847 | 0x1ce0 2848 | 0x1ce1 2849 | 0x1cfc 2850 | 0x1cfd 2851 | 0x1d03 2852 | 0x1d07 2853 | 0x1d08 2854 | 0x1d09 2855 | 0x1d0b 2856 | 0x1d14 2857 | 0x1d17 2858 | 0x1d19 2859 | 0x1d1f 2860 | 0x1d20 2861 | 0x1d50 2862 | 0x1d57 2863 | 0x1d5b 2864 | 0x1d6b 2865 | 0x1de1 2866 | 0x1e0e 2867 | 0x1e17 2868 | 0x1e1d 2869 | 0x1e1f 2870 | 0x1e29 2871 | 0x1e3d 2872 | 0x1e41 2873 | 0x1e54 2874 | 0x1e68 2875 | 0x1e71 2876 | 0x1e74 2877 | 0x1e7d 2878 | 0x1ebb 2879 | 0x1edb 2880 | 0x1ee8 2881 | 0x1ef6 2882 | 0x1f44 2883 | 0x1f4d 2884 | 0x1f82 2885 | 0x1f84 2886 | 0x1f87 2887 | 0x1f9b 2888 | 0x1fbd 2889 | 0x1fde 2890 | 0x1fe7 2891 | 0x2002 2892 | 0x2013 2893 | 0x2019 2894 | 0x2040 2895 | 0x2047 2896 | 0x2087 2897 | 0x20a0 2898 | 0x20b1 2899 | 0x20b3 2900 | 0x20b7 2901 | 0x20df 2902 | 0x20f4 2903 | 0x2101 2904 | 0x2162 2905 | 0x2184 2906 | 0x21a1 2907 | 0x21d6 2908 | 0x2222 2909 | 0x2227 2910 | 0x2233 2911 | 0x2237 2912 | 0x22a6 2913 | 0x22b9 2914 | 0x22ba 2915 | 0x2304 2916 | 0x2318 2917 | 0x2341 2918 | 0x2373 2919 | 0x2375 2920 | 0x2478 2921 | 0x2632 2922 | 0x2650 2923 | 0x2659 2924 | 0x2730 2925 | 0x2735 2926 | 0x2770 2927 | 0x2821 2928 | 0x2899 2929 | 0x28f3 2930 | 0x2c02 2931 | 0x2c1a 2932 | 0x2fb2 2933 | 0x3125 2934 | 0x3176 2935 | 0x3275 2936 | 0x3334 2937 | 0x3340 2938 | 0x3504 2939 | 0x3538 2940 | 0x3579 2941 | 0x3636 2942 | 0x3838 2943 | 0x40bb 2944 | 0x4101 2945 | 0x4102 2946 | 0x4146 2947 | 0x4242 2948 | 0x4317 2949 | 0x4348 2950 | 0x4572 2951 | 0x4586 2952 | 0x4670 2953 | 0x4752 2954 | 0x4757 2955 | 0x4766 2956 | 0x4855 2957 | 0x4971 2958 | 0x5032 2959 | 0x5041 2960 | 0x50c2 2961 | 0x5173 2962 | 0x5219 2963 | 0x5345 2964 | 0x544d 2965 | 0x5543 2966 | 0x5555 2967 | 0x55aa 2968 | 0x5656 2969 | 0x595a 2970 | 0x5986 2971 | 0x5a57 2972 | 0x601a 2973 | 0x6189 2974 | 0x6253 2975 | 0x636c 2976 | 0x6472 2977 | 0x6547 2978 | 0x6615 2979 | 0x6666 2980 | 0x6677 2981 | 0x6891 2982 | 0x695c 2983 | 0x6993 2984 | 0x6a75 2985 | 0x7104 2986 | 0x726c 2987 | 0x734c 2988 | 0x7392 2989 | 0x80ee 2990 | 0x8282 2991 | 0x8341 2992 | 0x9016 2993 | 0x9022 2994 | 0x9148 2995 | 0x9710 2996 | 0x99fa 2997 | 0x9ac4 2998 | 0xa128 2999 | 0xa168 3000 | 0xa600 3001 | 0xa727 3002 | 0xabcd 3003 | 0xc251 3004 | 0xcace 3005 | 0xd209 3006 | 0xe4e4 3007 | 0xeb03 3008 | 0xeb1a 3009 | 0xeb2a 3010 | 0xf003 3011 | 0xf4ec 3012 | 0x22a4 3013 | 0x2b4c 3014 | -------------------------------------------------------------------------------- /base/adbkey: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDGZTSw8To7S/tN 3 | etbRl420qlPpkBIs/3LRLIn34xmjnQzf70sTk5ZIHrQI73suMbO8T9mbo/4M5n+k 4 | aeWEES36E9vDVtO4riJjWNFxAgzHu2bzFto0Fk6ADp4cCfNIc2gBfSh/4Le6Pvl8 5 | 7d4ZE78HHUU8LXPKt8mN8F7inizKXNIsKValZyHr3rIg2H/NXxrBjP9P43IHzPsG 6 | Z4MhmDBvyBlvhCjcE2EQKwiThj1u26Kdm4bTKXX1lefzHm6dzRC/85D+HzWfBgup 7 | Jdfb3EE8RRm/8dPKRuE9d9MQu8WottWTVPwL40Vp3bKgJzsbhWiCesGoXr75dfFl 8 | SNk4CGV1AgMBAAECggEAAnhgH5PhVbusdVqCMjng2c8FHHNexpCnrVMQpLV/LDpY 9 | XrFsDeJYjK1VMIdK0VhtFHsqCnYQQ7ja/gETioFsQSDeK6B5ImOIqhQBB5cu8Y2z 10 | ynMOZHeiopWMAm1dShmlwd79EhqKLxd5o8SSb11/k2cZ5ZXrSyrep5XGmKu/gwV/ 11 | OC1uetBULTlC1t3AumLzCYhGVL1+bpB9tXqYJ42ELOctcevCNhGnn8zBHNGR4fSG 12 | 9QdA9Bzab5iaOKCIhIiXYHyAny5GTRo144kr0FyhMfaneDeikmafn/0fj55JnyPC 13 | PKLjss18JURUDuUTSVt/iSvO9fiq4nP5HRJsZiwgQQKBgQDxxtFcL2CxEwO+C4N5 14 | oHVTVzhXiaFsMSEKM29Cc9zRBDt2tWClRAXzylVv2DGEdXzs2ADTKFy1BryCelUe 15 | V9xGt4lyR07Sf0namhAOp3NvCVNr/WKD/6ew38DRHh+ClUsuEM1OjL2HoyAhT9+U 16 | oZBtqzhxplNh4xabQj9Mz3rovwKBgQDSEQ+dhXUwXCs/Vma4U+qWUrQSH2kvO2bV 17 | 2mdtLnZwOs+p6XKICkpixvhyl1omTLE/UrbxWyyU3tZRAfYhgdP0XIfj1UcjUcVK 18 | 3S8WhxgE1iDqWW3PJxwLJ4Tz6T8CoMqYU77J1BwINQXvrMl5yqblTCuu0nmGxmrE 19 | PYkWQr2qywKBgDhIKARlowSVgJGE7J4rlCRKcXsvNryQ0zgksQmvHwApFA6WOmE+ 20 | bIRL3YejtCM5llMsFUUSaEJbxxY4lAf0O/raTsyjfN3Tc8XHh2Vh5aU7bof8/Cnu 21 | IYMzExebA4rKZi3bC2/1o0kn2BrpFQrscUqWSRVruo1W57RMv5+JzPrRAoGAZeTK 22 | q0Cp+Fwsyhsx1iU2O9Y/7C56SePJXOAEnQwVfRi51BQdbul27XTP3F2X5835h9qq 23 | TGZKOKfiUwbdiaE822HqtFOmnvYx+b9R8N50gxwOeT4Jqpqw2qQ/tEQmQTMXMk4k 24 | 1CdjtYNqrrgkPkRTMhQBeFo1gm9KKIgkr7yN3YMCgYBrRZPdWMxV6EOTSlZrbC14 25 | Vxw4OboqTkDaQMFk8AZDcCfm+b3PM1y22yDp6/B5mNk5VYaNWAAGS956onE68dpr 26 | WymhKxo6LZ0teqwP4oJgJduBYN6kkPh70LBtfanuzO6hIKkDAiUKVBfH3RzIKKhi 27 | iD5ARoDOri+IHtn12TiLfQ== 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /base/adbkey.pub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agoda-com/docker-emulator-android/6bf51f101d3185986f7313e0d0bd565ed7b7c9f5/base/adbkey.pub -------------------------------------------------------------------------------- /templates/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | MAINTAINER Anton Malinskiy "anton@malinskiy.com" 4 | 5 | # Set up insecure default key 6 | COPY adbkey adbkey.pub adb_usb.ini /root/.android/ 7 | 8 | ENV LINK_ANDROID_SDK=https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip \ 9 | LANG=en_US.UTF-8 \ 10 | LANGUAGE=en_US:en \ 11 | LC_ALL=en_US.UTF-8 \ 12 | ANDROID_HOME=/opt/android-sdk-linux \ 13 | PATH="$PATH:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools:/opt/android-sdk-linux/tools/bin:/opt/android-sdk-linux/emulator" 14 | 15 | RUN dpkg --add-architecture i386 && \ 16 | echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic main restricted universe multiverse" > /etc/apt/sources.list && \ 17 | echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list && \ 18 | echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-security main restricted universe multiverse" >> /etc/apt/sources.list && \ 19 | echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list && \ 20 | apt-get update && \ 21 | DEBIAN_FRONTEND=noninteractive apt-get install -yq software-properties-common libstdc++6:i386 zlib1g:i386 libncurses5:i386 \ 22 | locales ca-certificates apt-transport-https curl unzip redir iproute2 \ 23 | openjdk-8-jdk xvfb x11vnc fluxbox nano libpulse0 telnet expect\ 24 | --no-install-recommends && \ 25 | locale-gen en_US.UTF-8 && \ 26 | # Install Android SDK 27 | curl -L $LINK_ANDROID_SDK > /tmp/android-sdk-linux.zip && \ 28 | unzip -q /tmp/android-sdk-linux.zip -d /opt/android-sdk-linux/ && \ 29 | rm /tmp/android-sdk-linux.zip && \ 30 | # Customized steps per specific platform 31 | yes | sdkmanager --no_https --licenses && \ 32 | yes | sdkmanager emulator tools platform-tools "platforms;{{ platform }}" "system-images;{{ platform }};google_apis;x86" --verbose | uniq && \ 33 | echo no | avdmanager create avd -n "x86" --package "system-images;{{ platform }};google_apis;x86" --tag google_apis && \ 34 | # Unfilter devices (now local because CI downloads from github are unstable) 35 | # curl -o /root/.android/adb_usb.ini https://raw.githubusercontent.com/apkudo/adbusbini/master/adb_usb.ini && \ 36 | DEBIAN_FRONTEND=noninteractive apt-get purge -yq unzip openjdk-8-jdk && \ 37 | # Convert large partitions to qcow2 to save space 38 | qemu-img convert -O qcow2 -c /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/system.img /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/system.qcow2 && \ 39 | mv /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/system.qcow2 /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/system.img && \ 40 | qemu-img convert -O qcow2 -c /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/userdata.img /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/userdata.qcow2 && \ 41 | mv /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/userdata.qcow2 /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/userdata.img && \ 42 | qemu-img resize /root/.android/avd/x86.avd/userdata.img 2G && \ 43 | e2fsck -fy /root/.android/avd/x86.avd/userdata.img && \ 44 | resize2fs /root/.android/avd/x86.avd/userdata.img && \ 45 | qemu-img convert -O qcow2 -c /root/.android/avd/x86.avd/userdata.img /root/.android/avd/x86.avd/userdata.qcow2 && \ 46 | mv /root/.android/avd/x86.avd/userdata.qcow2 /root/.android/avd/x86.avd/userdata.img && \ 47 | (qemu-img convert -O qcow2 -c /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/vendor.img /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/vendor.qcow2 && \ 48 | mv /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/vendor.qcow2 /opt/android-sdk-linux/system-images/{{ platform }}/google_apis/x86/vendor.img || true) && \ 49 | # Clean up 50 | apt-get -yq autoremove && \ 51 | apt-get clean && \ 52 | apt-get autoclean && \ 53 | rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 54 | 55 | COPY config.ini /root/.android/avd/x86.avd/config.ini 56 | 57 | # Expose adb 58 | EXPOSE 5037 5554 5555 5900 59 | 60 | # Add script 61 | COPY start.sh /start.sh 62 | RUN chmod +x /start.sh 63 | CMD ["/start.sh"] 64 | -------------------------------------------------------------------------------- /templates/Makefile: -------------------------------------------------------------------------------- 1 | OWNER=agoda 2 | IMAGE_NAME=docker-emulator-{{ platform }} 3 | VCS_REF=`git rev-parse --short HEAD` 4 | IMAGE_VERSION ?= 1.0.0 5 | PROXY ?= 6 | QNAME=$(PROXY)$(OWNER)/$(IMAGE_NAME) 7 | 8 | GIT_TAG=$(QNAME):$(VCS_REF) 9 | BUILD_TAG=$(QNAME):$(IMAGE_VERSION) 10 | LATEST_TAG=$(QNAME):latest 11 | 12 | SNAPSHOT_IMAGE_NAME=docker-emulator-snapshot-{{ platform }} 13 | SNAPSHOT_QNAME=$(PROXY)$(OWNER)/$(SNAPSHOT_IMAGE_NAME) 14 | SNAPSHOT_GIT_TAG=$(SNAPSHOT_QNAME):$(VCS_REF) 15 | SNAPSHOT_BUILD_TAG=$(SNAPSHOT_QNAME):$(IMAGE_VERSION) 16 | SNAPSHOT_LATEST_TAG=$(SNAPSHOT_QNAME):latest 17 | 18 | ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) 19 | 20 | build: 21 | docker build \ 22 | --build-arg VCS_REF=$(VCS_REF) \ 23 | --build-arg IMAGE_VERSION=$(IMAGE_VERSION) \ 24 | -t $(LATEST_TAG) $(ROOT_DIR) 25 | 26 | snapshot: 27 | bash $(ROOT_DIR)/take_snapshot.sh $(LATEST_TAG) $(SNAPSHOT_LATEST_TAG) 28 | 29 | lint: 30 | docker run -it --rm -v "$(ROOT_DIR)/Dockerfile:/Dockerfile:ro" redcoolbeans/dockerlint 31 | 32 | tag: 33 | docker tag $(LATEST_TAG) $(BUILD_TAG) 34 | docker tag $(LATEST_TAG) $(GIT_TAG) 35 | docker tag $(SNAPSHOT_LATEST_TAG) $(SNAPSHOT_BUILD_TAG) 36 | docker tag $(SNAPSHOT_LATEST_TAG) $(SNAPSHOT_GIT_TAG) 37 | 38 | push: 39 | docker push $(GIT_TAG) 40 | docker push $(BUILD_TAG) 41 | docker push $(LATEST_TAG) 42 | docker push $(SNAPSHOT_GIT_TAG) 43 | docker push $(SNAPSHOT_BUILD_TAG) 44 | docker push $(SNAPSHOT_LATEST_TAG) 45 | -------------------------------------------------------------------------------- /templates/config.ini: -------------------------------------------------------------------------------- 1 | avd.ini.encoding=UTF-8 2 | AvdId=x86 3 | PlayStore.enabled=true 4 | abi.type=x86 5 | avd.ini.displayname=x86 6 | disk.dataPartition.size=800M 7 | hw.accelerometer=yes 8 | hw.audioInput=no 9 | hw.battery=yes 10 | hw.camera.back=none 11 | hw.camera.front=none 12 | hw.cpu.arch=x86 13 | hw.cpu.ncore=2 14 | hw.dPad=no 15 | hw.device.hash2=MD5:1be89bc42ec9644d4b77968b23474980 16 | hw.device.manufacturer=Google 17 | hw.device.name=Nexus 5X 18 | hw.gps=yes 19 | hw.gpu.enabled=on 20 | hw.gpu.mode=swiftshader_indirect 21 | hw.initialOrientation=Portrait 22 | hw.keyboard=no 23 | hw.lcd.density=160 24 | hw.mainKeys=no 25 | hw.ramSize=1536 26 | hw.sensors.orientation=yes 27 | hw.sensors.proximity=yes 28 | hw.trackBall=no 29 | image.sysdir.1=system-images/{{ platform }}/google_apis/x86/ 30 | runtime.network.latency=none 31 | runtime.network.speed=full 32 | showDeviceFrame=no 33 | skin.dynamic=yes 34 | skin.name=480x800 35 | skin.path=_no_skin 36 | skin.path.backup=_no_skin 37 | tag.display=Google APIs 38 | tag.id=google_apis 39 | vm.heapSize=192 40 | -------------------------------------------------------------------------------- /templates/snapshot.expect: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | set timeout -1 3 | set TOKEN [lindex $argv 0]; 4 | spawn telnet localhost 5554 5 | expect "OK" 6 | send -- "auth $TOKEN\r" 7 | expect "OK" 8 | send -- "avd snapshot del default_boot\r" 9 | expect "OK" 10 | send -- "avd snapshot save default\r" 11 | expect "OK" 12 | send "exit\r" 13 | -------------------------------------------------------------------------------- /templates/snapshot.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function save { 4 | local token=$(cat /root/.emulator_console_auth_token) 5 | expect -f /snapshot.expect $token 6 | } 7 | 8 | function clean_up { 9 | echo "Cleaning up" 10 | rm /tmp/.X1-lock 11 | 12 | kill $XVFB_PID 13 | exit 14 | } 15 | 16 | echo "Starting emulator" 17 | trap clean_up SIGHUP SIGINT SIGTERM 18 | export DISPLAY=:1 19 | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/android-sdk-linux/emulator/lib64/qt/lib:/opt/android-sdk-linux/emulator/lib64/libstdc++:/opt/android-sdk-linux/emulator/lib64:/opt/android-sdk-linux/emulator/lib64/gles_swiftshader 20 | Xvfb :1 +extension GLX +extension RANDR +extension RENDER +extension XFIXES -screen 0 1024x768x24 & 21 | XVFB_PID=$! 22 | 23 | cd /opt/android-sdk-linux/emulator 24 | LIBGL_DEBUG=verbose ./qemu/linux-x86_64/qemu-system-x86_64 -avd x86 -snapshot default -no-snapshot-save & 25 | EMULATOR_PID=$! 26 | 27 | adb wait-for-device 28 | 29 | boot_completed=`adb -e shell getprop sys.boot_completed 2>&1` 30 | timeout=0 31 | until [ "X${boot_completed:0:1}" = "X1" ]; do 32 | sleep 1 33 | boot_completed=`adb shell getprop sys.boot_completed 2>&1 | head -n 1` 34 | echo "Read boot_completed property: <$boot_completed>" 35 | let "timeout += 1" 36 | if [ $timeout -gt 300 ]; then 37 | echo "Failed to start emulator" 38 | exit 1 39 | fi 40 | done 41 | 42 | sleep 5 43 | 44 | save 45 | adb emu kill 46 | 47 | # Doesn't work: triggers cold boot 48 | # qemu-img convert -O qcow2 -c /root/.android/avd/x86.avd/userdata-qemu.img /root/.android/avd/x86.avd/userdata-qemu.img_qcow2 49 | # mv /root/.android/avd/x86.avd/userdata-qemu.img_qcow2 /root/.android/avd/x86.avd/userdata-qemu.img 50 | 51 | # Moving adb binary away so that stopping adb server with delay will release the emulator and will make it available for external connections 52 | mv /opt/android-sdk-linux/platform-tools/adb /opt/android-sdk-linux/platform-tools/_adb 53 | 54 | echo "Great Scott!" 55 | clean_up 56 | -------------------------------------------------------------------------------- /templates/start.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | console_port=$CONSOLE_PORT 3 | adb_port=$ADB_PORT 4 | adb_server_port=$ADB_SERVER_PORT 5 | emulator_opts=$EMULATOR_OPTS 6 | 7 | if [ -z "$console_port" ] 8 | then 9 | console_port="5554" 10 | fi 11 | if [ -z "$adb_port" ] 12 | then 13 | adb_port="5555" 14 | fi 15 | if [ -z "$adb_server_port" ] 16 | then 17 | adb_server_port="5037" 18 | fi 19 | if [ -z "$emulator_opts" ] 20 | then 21 | emulator_opts="-screen multi-touch -no-boot-anim -noaudio -nojni -netfast -verbose -camera-back none -camera-front none -skip-adb-auth -snapshot default -no-snapshot-save" 22 | fi 23 | 24 | # Detect ip and forward ADB ports outside to outside interface 25 | ip=$(ip addr list eth0|grep "inet "|cut -d' ' -f6|cut -d/ -f1) 26 | redir --laddr=$ip --lport=$adb_server_port --caddr=127.0.0.1 --cport=$adb_server_port & 27 | redir --laddr=$ip --lport=$console_port --caddr=127.0.0.1 --cport=$console_port & 28 | redir --laddr=$ip --lport=$adb_port --caddr=127.0.0.1 --cport=$adb_port & 29 | 30 | function clean_up { 31 | echo "Cleaning up" 32 | rm /tmp/.X1-lock 33 | 34 | kill $XVFB_PID 35 | kill $FLUXBOX_PID 36 | kill $VNC_PID 37 | exit 38 | } 39 | 40 | trap clean_up SIGHUP SIGINT SIGTERM 41 | export DISPLAY=:1 42 | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/android-sdk-linux/emulator/lib64/qt/lib:/opt/android-sdk-linux/emulator/lib64/libstdc++:/opt/android-sdk-linux/emulator/lib64:/opt/android-sdk-linux/emulator/lib64/gles_swiftshader 43 | Xvfb :1 +extension GLX +extension RANDR +extension RENDER +extension XFIXES -screen 0 1024x768x24 & 44 | XVFB_PID=$! 45 | sleep 1 && fluxbox -display ":1.0" & 46 | FLUXBOX_PID=$! 47 | sleep 2 && x11vnc -display :1 -nopw -forever & 48 | VNC_PID=$! 49 | 50 | # Set up and run emulator 51 | # qemu references bios by relative path 52 | cd /opt/android-sdk-linux/emulator 53 | 54 | CONFIG="/root/.android/avd/x86.avd/config.ini" 55 | CONFIGTMP=${CONFIG}.tmp 56 | 57 | if [ -n "$ANDROID_CONFIG" ]; 58 | then 59 | IFS=';' read -ra OPTS <<< "$ANDROID_CONFIG" 60 | for OPT in "${OPTS[@]}"; do 61 | IFS='=' read -ra KV <<< "$OPT" 62 | KEY=${KV[0]} 63 | VALUE=${KV[1]} 64 | mv ${CONFIG} ${CONFIGTMP} 65 | cat ${CONFIGTMP} | grep -v ${KEY}= > ${CONFIG} 66 | echo ${OPT} >> ${CONFIG} 67 | done 68 | fi 69 | 70 | echo "emulator_opts: $emulator_opts" 71 | 72 | LIBGL_DEBUG=verbose ./qemu/linux-x86_64/qemu-system-x86_64 -avd x86 -ports $console_port,$adb_port $emulator_opts -qemu $QEMU_OPTS 73 | -------------------------------------------------------------------------------- /templates/take_snapshot.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | image_name=$1 6 | snapshot_image_name=$2 7 | 8 | docker rm -f emulator || true 9 | 10 | docker run -d -t --name emulator --rm --privileged -v /dev/kvm:/dev/kvm -e ANDROID_ARCH="x86" $image_name bash 11 | 12 | docker cp snapshot.sh emulator:/snapshot.sh 13 | docker cp snapshot.expect emulator:/snapshot.expect 14 | docker exec -t emulator bash -c "bash /snapshot.sh; exit" 15 | echo "Creating new image" 16 | docker commit -m "Snapshot!" --change "CMD [\"/start.sh\"]" emulator $snapshot_image_name 17 | docker rm -f emulator 18 | --------------------------------------------------------------------------------