polyfile-weave 0.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of polyfile-weave might be problematic. Click here for more details.

Files changed (585) hide show
  1. polyfile/__init__.py +15 -0
  2. polyfile/__main__.py +394 -0
  3. polyfile/arithmetic.py +27 -0
  4. polyfile/ast.py +114 -0
  5. polyfile/debugger.py +1039 -0
  6. polyfile/expressions.py +346 -0
  7. polyfile/fileutils.py +343 -0
  8. polyfile/html.py +135 -0
  9. polyfile/http/__init__.py +1 -0
  10. polyfile/http/defacto.py +37 -0
  11. polyfile/http/deprecated.py +51 -0
  12. polyfile/http/experimental.py +67 -0
  13. polyfile/http/http_11.py +548 -0
  14. polyfile/http/matcher.py +37 -0
  15. polyfile/http/structured_headers.py +48 -0
  16. polyfile/iterators.py +72 -0
  17. polyfile/jpeg.py +24 -0
  18. polyfile/kaitai/__init__.py +0 -0
  19. polyfile/kaitai/compiler.py +156 -0
  20. polyfile/kaitai/parser.py +312 -0
  21. polyfile/kaitai/parsers/__init__.py +0 -0
  22. polyfile/kaitai/parsers/aix_utmp.py +116 -0
  23. polyfile/kaitai/parsers/allegro_dat.py +367 -0
  24. polyfile/kaitai/parsers/andes_firmware.py +64 -0
  25. polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
  26. polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
  27. polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
  28. polyfile/kaitai/parsers/android_dto.py +138 -0
  29. polyfile/kaitai/parsers/android_img.py +319 -0
  30. polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
  31. polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
  32. polyfile/kaitai/parsers/android_sparse.py +237 -0
  33. polyfile/kaitai/parsers/android_super.py +401 -0
  34. polyfile/kaitai/parsers/apm_partition_table.py +196 -0
  35. polyfile/kaitai/parsers/apple_single_double.py +180 -0
  36. polyfile/kaitai/parsers/asn1_der.py +235 -0
  37. polyfile/kaitai/parsers/au.py +138 -0
  38. polyfile/kaitai/parsers/avantes_roh60.py +112 -0
  39. polyfile/kaitai/parsers/avi.py +296 -0
  40. polyfile/kaitai/parsers/bcd.py +111 -0
  41. polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
  42. polyfile/kaitai/parsers/blender_blend.py +334 -0
  43. polyfile/kaitai/parsers/bmp.py +780 -0
  44. polyfile/kaitai/parsers/bson.py +411 -0
  45. polyfile/kaitai/parsers/btrfs_stream.py +318 -0
  46. polyfile/kaitai/parsers/bytes_with_io.py +27 -0
  47. polyfile/kaitai/parsers/chrome_pak.py +194 -0
  48. polyfile/kaitai/parsers/code_6502.py +456 -0
  49. polyfile/kaitai/parsers/compressed_resource.py +217 -0
  50. polyfile/kaitai/parsers/cpio_old_le.py +154 -0
  51. polyfile/kaitai/parsers/cramfs.py +344 -0
  52. polyfile/kaitai/parsers/creative_voice_file.py +342 -0
  53. polyfile/kaitai/parsers/dbf.py +274 -0
  54. polyfile/kaitai/parsers/dcmp_0.py +664 -0
  55. polyfile/kaitai/parsers/dcmp_1.py +422 -0
  56. polyfile/kaitai/parsers/dcmp_2.py +312 -0
  57. polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
  58. polyfile/kaitai/parsers/dex.py +1086 -0
  59. polyfile/kaitai/parsers/dicom.py +4370 -0
  60. polyfile/kaitai/parsers/dime_message.py +201 -0
  61. polyfile/kaitai/parsers/dns_packet.py +569 -0
  62. polyfile/kaitai/parsers/doom_wad.py +654 -0
  63. polyfile/kaitai/parsers/dos_datetime.py +191 -0
  64. polyfile/kaitai/parsers/dos_mz.py +172 -0
  65. polyfile/kaitai/parsers/ds_store.py +513 -0
  66. polyfile/kaitai/parsers/dtb.py +310 -0
  67. polyfile/kaitai/parsers/dune_2_pak.py +126 -0
  68. polyfile/kaitai/parsers/edid.py +472 -0
  69. polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
  70. polyfile/kaitai/parsers/elf.py +2482 -0
  71. polyfile/kaitai/parsers/ethernet_frame.py +114 -0
  72. polyfile/kaitai/parsers/exif.py +723 -0
  73. polyfile/kaitai/parsers/ext2.py +537 -0
  74. polyfile/kaitai/parsers/fallout2_dat.py +187 -0
  75. polyfile/kaitai/parsers/fallout_dat.py +156 -0
  76. polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
  77. polyfile/kaitai/parsers/ftl_dat.py +90 -0
  78. polyfile/kaitai/parsers/genmidi_op2.py +161 -0
  79. polyfile/kaitai/parsers/gettext_mo.py +541 -0
  80. polyfile/kaitai/parsers/gif.py +492 -0
  81. polyfile/kaitai/parsers/gimp_brush.py +244 -0
  82. polyfile/kaitai/parsers/glibc_utmp.py +114 -0
  83. polyfile/kaitai/parsers/gltf_binary.py +132 -0
  84. polyfile/kaitai/parsers/google_protobuf.py +151 -0
  85. polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
  86. polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
  87. polyfile/kaitai/parsers/grub2_font.py +337 -0
  88. polyfile/kaitai/parsers/gzip.py +232 -0
  89. polyfile/kaitai/parsers/hashcat_restore.py +60 -0
  90. polyfile/kaitai/parsers/hccap.py +111 -0
  91. polyfile/kaitai/parsers/hccapx.py +103 -0
  92. polyfile/kaitai/parsers/heaps_pak.py +177 -0
  93. polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
  94. polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
  95. polyfile/kaitai/parsers/icmp_packet.py +136 -0
  96. polyfile/kaitai/parsers/ico.py +129 -0
  97. polyfile/kaitai/parsers/id3v1_1.py +220 -0
  98. polyfile/kaitai/parsers/id3v2_3.py +324 -0
  99. polyfile/kaitai/parsers/id3v2_4.py +423 -0
  100. polyfile/kaitai/parsers/ines.py +282 -0
  101. polyfile/kaitai/parsers/ipv4_packet.py +158 -0
  102. polyfile/kaitai/parsers/ipv6_packet.py +55 -0
  103. polyfile/kaitai/parsers/iso9660.py +544 -0
  104. polyfile/kaitai/parsers/java_class.py +1113 -0
  105. polyfile/kaitai/parsers/jpeg.py +361 -0
  106. polyfile/kaitai/parsers/luks.py +149 -0
  107. polyfile/kaitai/parsers/lzh.py +165 -0
  108. polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
  109. polyfile/kaitai/parsers/mach_o.py +3033 -0
  110. polyfile/kaitai/parsers/mach_o_fat.py +92 -0
  111. polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
  112. polyfile/kaitai/parsers/manifest.json +1 -0
  113. polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
  114. polyfile/kaitai/parsers/mcap.py +1015 -0
  115. polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
  116. polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
  117. polyfile/kaitai/parsers/microsoft_pe.py +765 -0
  118. polyfile/kaitai/parsers/mifare_classic.py +706 -0
  119. polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
  120. polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
  121. polyfile/kaitai/parsers/mozilla_mar.py +239 -0
  122. polyfile/kaitai/parsers/mp4.py +333 -0
  123. polyfile/kaitai/parsers/msgpack.py +467 -0
  124. polyfile/kaitai/parsers/nitf.py +1189 -0
  125. polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
  126. polyfile/kaitai/parsers/ogg.py +118 -0
  127. polyfile/kaitai/parsers/openpgp_message.py +993 -0
  128. polyfile/kaitai/parsers/packet_ppi.py +515 -0
  129. polyfile/kaitai/parsers/pcap.py +344 -0
  130. polyfile/kaitai/parsers/pcf_font.py +506 -0
  131. polyfile/kaitai/parsers/pcx.py +195 -0
  132. polyfile/kaitai/parsers/pcx_dcx.py +79 -0
  133. polyfile/kaitai/parsers/phar_without_stub.py +399 -0
  134. polyfile/kaitai/parsers/php_serialized_value.py +505 -0
  135. polyfile/kaitai/parsers/png.py +721 -0
  136. polyfile/kaitai/parsers/protocol_body.py +260 -0
  137. polyfile/kaitai/parsers/psx_tim.py +104 -0
  138. polyfile/kaitai/parsers/python_pickle.py +718 -0
  139. polyfile/kaitai/parsers/python_pyc_27.py +510 -0
  140. polyfile/kaitai/parsers/quake_mdl.py +441 -0
  141. polyfile/kaitai/parsers/quake_pak.py +112 -0
  142. polyfile/kaitai/parsers/quicktime_mov.py +634 -0
  143. polyfile/kaitai/parsers/rar.py +265 -0
  144. polyfile/kaitai/parsers/regf.py +569 -0
  145. polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
  146. polyfile/kaitai/parsers/resource_fork.py +611 -0
  147. polyfile/kaitai/parsers/respack.py +57 -0
  148. polyfile/kaitai/parsers/riff.py +409 -0
  149. polyfile/kaitai/parsers/rpm.py +964 -0
  150. polyfile/kaitai/parsers/rtcp_payload.py +579 -0
  151. polyfile/kaitai/parsers/rtp_packet.py +150 -0
  152. polyfile/kaitai/parsers/rtpdump.py +115 -0
  153. polyfile/kaitai/parsers/ruby_marshal.py +423 -0
  154. polyfile/kaitai/parsers/s3m.py +493 -0
  155. polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
  156. polyfile/kaitai/parsers/shapefile_index.py +174 -0
  157. polyfile/kaitai/parsers/shapefile_main.py +893 -0
  158. polyfile/kaitai/parsers/some_ip.py +209 -0
  159. polyfile/kaitai/parsers/some_ip_container.py +37 -0
  160. polyfile/kaitai/parsers/some_ip_sd.py +86 -0
  161. polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
  162. polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
  163. polyfile/kaitai/parsers/specpr.py +404 -0
  164. polyfile/kaitai/parsers/sqlite3.py +472 -0
  165. polyfile/kaitai/parsers/ssh_public_key.py +252 -0
  166. polyfile/kaitai/parsers/standard_midi_file.py +390 -0
  167. polyfile/kaitai/parsers/stl.py +111 -0
  168. polyfile/kaitai/parsers/sudoers_ts.py +201 -0
  169. polyfile/kaitai/parsers/swf.py +406 -0
  170. polyfile/kaitai/parsers/systemd_journal.py +361 -0
  171. polyfile/kaitai/parsers/tcp_segment.py +57 -0
  172. polyfile/kaitai/parsers/tga.py +213 -0
  173. polyfile/kaitai/parsers/tls_client_hello.py +293 -0
  174. polyfile/kaitai/parsers/tr_dos_image.py +322 -0
  175. polyfile/kaitai/parsers/tsm.py +198 -0
  176. polyfile/kaitai/parsers/ttf.py +1847 -0
  177. polyfile/kaitai/parsers/udp_datagram.py +42 -0
  178. polyfile/kaitai/parsers/uefi_te.py +236 -0
  179. polyfile/kaitai/parsers/uimage.py +198 -0
  180. polyfile/kaitai/parsers/utf8_string.py +137 -0
  181. polyfile/kaitai/parsers/vfat.py +410 -0
  182. polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
  183. polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
  184. polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
  185. polyfile/kaitai/parsers/vp8_ivf.py +112 -0
  186. polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
  187. polyfile/kaitai/parsers/wav.py +1014 -0
  188. polyfile/kaitai/parsers/websocket.py +167 -0
  189. polyfile/kaitai/parsers/windows_evt_log.py +304 -0
  190. polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
  191. polyfile/kaitai/parsers/windows_minidump.py +575 -0
  192. polyfile/kaitai/parsers/windows_resource_file.py +243 -0
  193. polyfile/kaitai/parsers/windows_shell_items.py +190 -0
  194. polyfile/kaitai/parsers/windows_systemtime.py +52 -0
  195. polyfile/kaitai/parsers/wmf.py +502 -0
  196. polyfile/kaitai/parsers/xar.py +181 -0
  197. polyfile/kaitai/parsers/xwd.py +189 -0
  198. polyfile/kaitai/parsers/zip.py +685 -0
  199. polyfile/kaitai/parsers/zisofs.py +158 -0
  200. polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
  201. polyfile/kaitaimatcher.py +113 -0
  202. polyfile/languagematcher.py +217 -0
  203. polyfile/logger.py +135 -0
  204. polyfile/magic.py +2983 -0
  205. polyfile/magic_defs/COPYING +29 -0
  206. polyfile/magic_defs/__init__.py +0 -0
  207. polyfile/magic_defs/acorn +102 -0
  208. polyfile/magic_defs/adi +13 -0
  209. polyfile/magic_defs/adventure +122 -0
  210. polyfile/magic_defs/aes +29 -0
  211. polyfile/magic_defs/algol68 +35 -0
  212. polyfile/magic_defs/allegro +9 -0
  213. polyfile/magic_defs/alliant +18 -0
  214. polyfile/magic_defs/alpha +32 -0
  215. polyfile/magic_defs/amanda +12 -0
  216. polyfile/magic_defs/amigaos +218 -0
  217. polyfile/magic_defs/android +259 -0
  218. polyfile/magic_defs/animation +1197 -0
  219. polyfile/magic_defs/aout +46 -0
  220. polyfile/magic_defs/apache +28 -0
  221. polyfile/magic_defs/apl +7 -0
  222. polyfile/magic_defs/apple +773 -0
  223. polyfile/magic_defs/application +7 -0
  224. polyfile/magic_defs/applix +13 -0
  225. polyfile/magic_defs/apt +52 -0
  226. polyfile/magic_defs/archive +2586 -0
  227. polyfile/magic_defs/aria +38 -0
  228. polyfile/magic_defs/arm +50 -0
  229. polyfile/magic_defs/asf +132 -0
  230. polyfile/magic_defs/assembler +18 -0
  231. polyfile/magic_defs/asterix +18 -0
  232. polyfile/magic_defs/att3b +41 -0
  233. polyfile/magic_defs/audio +1291 -0
  234. polyfile/magic_defs/avm +33 -0
  235. polyfile/magic_defs/basis +18 -0
  236. polyfile/magic_defs/beetle +7 -0
  237. polyfile/magic_defs/ber +65 -0
  238. polyfile/magic_defs/bflt +14 -0
  239. polyfile/magic_defs/bhl +10 -0
  240. polyfile/magic_defs/bioinformatics +178 -0
  241. polyfile/magic_defs/biosig +154 -0
  242. polyfile/magic_defs/blackberry +8 -0
  243. polyfile/magic_defs/blcr +25 -0
  244. polyfile/magic_defs/blender +50 -0
  245. polyfile/magic_defs/blit +24 -0
  246. polyfile/magic_defs/bm +10 -0
  247. polyfile/magic_defs/bout +11 -0
  248. polyfile/magic_defs/bsdi +33 -0
  249. polyfile/magic_defs/bsi +10 -0
  250. polyfile/magic_defs/btsnoop +13 -0
  251. polyfile/magic_defs/burp +7 -0
  252. polyfile/magic_defs/bytecode +41 -0
  253. polyfile/magic_defs/c-lang +110 -0
  254. polyfile/magic_defs/c64 +531 -0
  255. polyfile/magic_defs/cad +437 -0
  256. polyfile/magic_defs/cafebabe +107 -0
  257. polyfile/magic_defs/cbor +21 -0
  258. polyfile/magic_defs/ccf +14 -0
  259. polyfile/magic_defs/cddb +12 -0
  260. polyfile/magic_defs/chord +15 -0
  261. polyfile/magic_defs/cisco +12 -0
  262. polyfile/magic_defs/citrus +12 -0
  263. polyfile/magic_defs/clarion +27 -0
  264. polyfile/magic_defs/claris +48 -0
  265. polyfile/magic_defs/clipper +65 -0
  266. polyfile/magic_defs/clojure +30 -0
  267. polyfile/magic_defs/coff +98 -0
  268. polyfile/magic_defs/commands +201 -0
  269. polyfile/magic_defs/communications +22 -0
  270. polyfile/magic_defs/compress +461 -0
  271. polyfile/magic_defs/console +1213 -0
  272. polyfile/magic_defs/convex +69 -0
  273. polyfile/magic_defs/coverage +91 -0
  274. polyfile/magic_defs/cracklib +14 -0
  275. polyfile/magic_defs/crypto +31 -0
  276. polyfile/magic_defs/csv +8 -0
  277. polyfile/magic_defs/ctags +6 -0
  278. polyfile/magic_defs/ctf +23 -0
  279. polyfile/magic_defs/cubemap +8 -0
  280. polyfile/magic_defs/cups +56 -0
  281. polyfile/magic_defs/dact +11 -0
  282. polyfile/magic_defs/database +886 -0
  283. polyfile/magic_defs/dataone +47 -0
  284. polyfile/magic_defs/dbpf +15 -0
  285. polyfile/magic_defs/der +146 -0
  286. polyfile/magic_defs/diamond +12 -0
  287. polyfile/magic_defs/dif +33 -0
  288. polyfile/magic_defs/diff +41 -0
  289. polyfile/magic_defs/digital +59 -0
  290. polyfile/magic_defs/dolby +69 -0
  291. polyfile/magic_defs/dsf +25 -0
  292. polyfile/magic_defs/dump +96 -0
  293. polyfile/magic_defs/dwarfs +45 -0
  294. polyfile/magic_defs/dyadic +61 -0
  295. polyfile/magic_defs/ebml +8 -0
  296. polyfile/magic_defs/edid +11 -0
  297. polyfile/magic_defs/editors +43 -0
  298. polyfile/magic_defs/efi +15 -0
  299. polyfile/magic_defs/elf +379 -0
  300. polyfile/magic_defs/encore +22 -0
  301. polyfile/magic_defs/epoc +62 -0
  302. polyfile/magic_defs/erlang +21 -0
  303. polyfile/magic_defs/espressif +57 -0
  304. polyfile/magic_defs/esri +28 -0
  305. polyfile/magic_defs/etf +33 -0
  306. polyfile/magic_defs/fcs +9 -0
  307. polyfile/magic_defs/filesystems +2694 -0
  308. polyfile/magic_defs/finger +16 -0
  309. polyfile/magic_defs/firmware +133 -0
  310. polyfile/magic_defs/flash +62 -0
  311. polyfile/magic_defs/flif +36 -0
  312. polyfile/magic_defs/fonts +449 -0
  313. polyfile/magic_defs/forth +82 -0
  314. polyfile/magic_defs/fortran +9 -0
  315. polyfile/magic_defs/frame +62 -0
  316. polyfile/magic_defs/freebsd +164 -0
  317. polyfile/magic_defs/fsav +128 -0
  318. polyfile/magic_defs/fusecompress +12 -0
  319. polyfile/magic_defs/games +696 -0
  320. polyfile/magic_defs/gcc +17 -0
  321. polyfile/magic_defs/gconv +10 -0
  322. polyfile/magic_defs/gentoo +85 -0
  323. polyfile/magic_defs/geo +166 -0
  324. polyfile/magic_defs/geos +20 -0
  325. polyfile/magic_defs/gimp +77 -0
  326. polyfile/magic_defs/git +13 -0
  327. polyfile/magic_defs/glibc +21 -0
  328. polyfile/magic_defs/gnome +59 -0
  329. polyfile/magic_defs/gnu +173 -0
  330. polyfile/magic_defs/gnumeric +8 -0
  331. polyfile/magic_defs/gpt +240 -0
  332. polyfile/magic_defs/gpu +28 -0
  333. polyfile/magic_defs/grace +21 -0
  334. polyfile/magic_defs/graphviz +12 -0
  335. polyfile/magic_defs/gringotts +48 -0
  336. polyfile/magic_defs/guile +13 -0
  337. polyfile/magic_defs/hardware +12 -0
  338. polyfile/magic_defs/hitachi-sh +30 -0
  339. polyfile/magic_defs/hp +433 -0
  340. polyfile/magic_defs/human68k +26 -0
  341. polyfile/magic_defs/ibm370 +52 -0
  342. polyfile/magic_defs/ibm6000 +35 -0
  343. polyfile/magic_defs/icc +214 -0
  344. polyfile/magic_defs/iff +80 -0
  345. polyfile/magic_defs/images +4210 -0
  346. polyfile/magic_defs/inform +9 -0
  347. polyfile/magic_defs/intel +310 -0
  348. polyfile/magic_defs/interleaf +9 -0
  349. polyfile/magic_defs/island +10 -0
  350. polyfile/magic_defs/ispell +63 -0
  351. polyfile/magic_defs/isz +15 -0
  352. polyfile/magic_defs/java +52 -0
  353. polyfile/magic_defs/javascript +171 -0
  354. polyfile/magic_defs/jpeg +252 -0
  355. polyfile/magic_defs/json +8 -0
  356. polyfile/magic_defs/karma +9 -0
  357. polyfile/magic_defs/kde +11 -0
  358. polyfile/magic_defs/keepass +20 -0
  359. polyfile/magic_defs/kerberos +45 -0
  360. polyfile/magic_defs/kicad +85 -0
  361. polyfile/magic_defs/kml +34 -0
  362. polyfile/magic_defs/lammps +64 -0
  363. polyfile/magic_defs/lecter +6 -0
  364. polyfile/magic_defs/lex +12 -0
  365. polyfile/magic_defs/lif +50 -0
  366. polyfile/magic_defs/linux +557 -0
  367. polyfile/magic_defs/lisp +78 -0
  368. polyfile/magic_defs/llvm +22 -0
  369. polyfile/magic_defs/locoscript +12 -0
  370. polyfile/magic_defs/lua +31 -0
  371. polyfile/magic_defs/luks +126 -0
  372. polyfile/magic_defs/m4 +11 -0
  373. polyfile/magic_defs/mach +303 -0
  374. polyfile/magic_defs/macintosh +505 -0
  375. polyfile/magic_defs/macos +7 -0
  376. polyfile/magic_defs/magic +10 -0
  377. polyfile/magic_defs/magic.mgc +0 -0
  378. polyfile/magic_defs/mail.news +132 -0
  379. polyfile/magic_defs/make +21 -0
  380. polyfile/magic_defs/map +413 -0
  381. polyfile/magic_defs/maple +109 -0
  382. polyfile/magic_defs/marc21 +30 -0
  383. polyfile/magic_defs/mathcad +8 -0
  384. polyfile/magic_defs/mathematica +188 -0
  385. polyfile/magic_defs/matroska +17 -0
  386. polyfile/magic_defs/mcrypt +52 -0
  387. polyfile/magic_defs/measure +44 -0
  388. polyfile/magic_defs/mercurial +13 -0
  389. polyfile/magic_defs/metastore +8 -0
  390. polyfile/magic_defs/meteorological +53 -0
  391. polyfile/magic_defs/microfocus +21 -0
  392. polyfile/magic_defs/mime +9 -0
  393. polyfile/magic_defs/mips +120 -0
  394. polyfile/magic_defs/mirage +8 -0
  395. polyfile/magic_defs/misctools +140 -0
  396. polyfile/magic_defs/mkid +11 -0
  397. polyfile/magic_defs/mlssa +8 -0
  398. polyfile/magic_defs/mmdf +6 -0
  399. polyfile/magic_defs/modem +92 -0
  400. polyfile/magic_defs/modulefile +9 -0
  401. polyfile/magic_defs/motorola +71 -0
  402. polyfile/magic_defs/mozilla +37 -0
  403. polyfile/magic_defs/msdos +2304 -0
  404. polyfile/magic_defs/msooxml +68 -0
  405. polyfile/magic_defs/msvc +222 -0
  406. polyfile/magic_defs/msx +309 -0
  407. polyfile/magic_defs/mup +24 -0
  408. polyfile/magic_defs/music +17 -0
  409. polyfile/magic_defs/nasa +7 -0
  410. polyfile/magic_defs/natinst +24 -0
  411. polyfile/magic_defs/ncr +49 -0
  412. polyfile/magic_defs/neko +12 -0
  413. polyfile/magic_defs/netbsd +251 -0
  414. polyfile/magic_defs/netscape +26 -0
  415. polyfile/magic_defs/netware +11 -0
  416. polyfile/magic_defs/news +13 -0
  417. polyfile/magic_defs/nifty +202 -0
  418. polyfile/magic_defs/nim-lang +29 -0
  419. polyfile/magic_defs/nitpicker +14 -0
  420. polyfile/magic_defs/numpy +9 -0
  421. polyfile/magic_defs/oasis +12 -0
  422. polyfile/magic_defs/ocaml +14 -0
  423. polyfile/magic_defs/octave +6 -0
  424. polyfile/magic_defs/ole2compounddocs +760 -0
  425. polyfile/magic_defs/olf +98 -0
  426. polyfile/magic_defs/openfst +17 -0
  427. polyfile/magic_defs/opentimestamps +16 -0
  428. polyfile/magic_defs/oric +16 -0
  429. polyfile/magic_defs/os2 +186 -0
  430. polyfile/magic_defs/os400 +39 -0
  431. polyfile/magic_defs/os9 +80 -0
  432. polyfile/magic_defs/osf1 +10 -0
  433. polyfile/magic_defs/palm +156 -0
  434. polyfile/magic_defs/parix +13 -0
  435. polyfile/magic_defs/parrot +22 -0
  436. polyfile/magic_defs/pascal +39 -0
  437. polyfile/magic_defs/pbf +11 -0
  438. polyfile/magic_defs/pbm +8 -0
  439. polyfile/magic_defs/pc88 +24 -0
  440. polyfile/magic_defs/pc98 +77 -0
  441. polyfile/magic_defs/pci_ids +116 -0
  442. polyfile/magic_defs/pcjr +8 -0
  443. polyfile/magic_defs/pdf +51 -0
  444. polyfile/magic_defs/pdp +42 -0
  445. polyfile/magic_defs/perl +100 -0
  446. polyfile/magic_defs/pgf +52 -0
  447. polyfile/magic_defs/pgp +581 -0
  448. polyfile/magic_defs/pgp-binary-keys +388 -0
  449. polyfile/magic_defs/pkgadd +7 -0
  450. polyfile/magic_defs/plan9 +25 -0
  451. polyfile/magic_defs/playdate +57 -0
  452. polyfile/magic_defs/plus5 +18 -0
  453. polyfile/magic_defs/pmem +46 -0
  454. polyfile/magic_defs/polyfile_zip +5 -0
  455. polyfile/magic_defs/polyml +23 -0
  456. polyfile/magic_defs/printer +269 -0
  457. polyfile/magic_defs/project +10 -0
  458. polyfile/magic_defs/psdbms +14 -0
  459. polyfile/magic_defs/psl +14 -0
  460. polyfile/magic_defs/pulsar +13 -0
  461. polyfile/magic_defs/puzzle +17 -0
  462. polyfile/magic_defs/pwsafe +14 -0
  463. polyfile/magic_defs/pyramid +12 -0
  464. polyfile/magic_defs/python +305 -0
  465. polyfile/magic_defs/qt +30 -0
  466. polyfile/magic_defs/revision +66 -0
  467. polyfile/magic_defs/riff +840 -0
  468. polyfile/magic_defs/rinex +44 -0
  469. polyfile/magic_defs/ringdove +45 -0
  470. polyfile/magic_defs/rpi +52 -0
  471. polyfile/magic_defs/rpm +45 -0
  472. polyfile/magic_defs/rpmsg +7 -0
  473. polyfile/magic_defs/rst +11 -0
  474. polyfile/magic_defs/rtf +94 -0
  475. polyfile/magic_defs/ruby +55 -0
  476. polyfile/magic_defs/rust +21 -0
  477. polyfile/magic_defs/sc +7 -0
  478. polyfile/magic_defs/sccs +24 -0
  479. polyfile/magic_defs/scientific +144 -0
  480. polyfile/magic_defs/securitycerts +6 -0
  481. polyfile/magic_defs/selinux +24 -0
  482. polyfile/magic_defs/sendmail +37 -0
  483. polyfile/magic_defs/sequent +42 -0
  484. polyfile/magic_defs/sereal +35 -0
  485. polyfile/magic_defs/sgi +144 -0
  486. polyfile/magic_defs/sgml +161 -0
  487. polyfile/magic_defs/sharc +23 -0
  488. polyfile/magic_defs/sinclair +40 -0
  489. polyfile/magic_defs/sisu +18 -0
  490. polyfile/magic_defs/sketch +6 -0
  491. polyfile/magic_defs/smalltalk +25 -0
  492. polyfile/magic_defs/smile +34 -0
  493. polyfile/magic_defs/sniffer +482 -0
  494. polyfile/magic_defs/softquad +40 -0
  495. polyfile/magic_defs/sosi +40 -0
  496. polyfile/magic_defs/spec +21 -0
  497. polyfile/magic_defs/spectrum +184 -0
  498. polyfile/magic_defs/sql +288 -0
  499. polyfile/magic_defs/ssh +39 -0
  500. polyfile/magic_defs/ssl +20 -0
  501. polyfile/magic_defs/statistics +45 -0
  502. polyfile/magic_defs/subtitle +38 -0
  503. polyfile/magic_defs/sun +141 -0
  504. polyfile/magic_defs/svf +5 -0
  505. polyfile/magic_defs/sylk +36 -0
  506. polyfile/magic_defs/symbos +42 -0
  507. polyfile/magic_defs/sysex +429 -0
  508. polyfile/magic_defs/tcl +29 -0
  509. polyfile/magic_defs/teapot +6 -0
  510. polyfile/magic_defs/terminfo +63 -0
  511. polyfile/magic_defs/tex +141 -0
  512. polyfile/magic_defs/tgif +7 -0
  513. polyfile/magic_defs/ti-8x +239 -0
  514. polyfile/magic_defs/timezone +42 -0
  515. polyfile/magic_defs/tplink +95 -0
  516. polyfile/magic_defs/troff +38 -0
  517. polyfile/magic_defs/tuxedo +8 -0
  518. polyfile/magic_defs/typeset +8 -0
  519. polyfile/magic_defs/uf2 +72 -0
  520. polyfile/magic_defs/unicode +15 -0
  521. polyfile/magic_defs/unisig +12 -0
  522. polyfile/magic_defs/unknown +34 -0
  523. polyfile/magic_defs/usd +21 -0
  524. polyfile/magic_defs/uterus +16 -0
  525. polyfile/magic_defs/uuencode +28 -0
  526. polyfile/magic_defs/vacuum-cleaner +54 -0
  527. polyfile/magic_defs/varied.out +46 -0
  528. polyfile/magic_defs/varied.script +21 -0
  529. polyfile/magic_defs/vax +32 -0
  530. polyfile/magic_defs/vicar +17 -0
  531. polyfile/magic_defs/virtual +307 -0
  532. polyfile/magic_defs/virtutech +12 -0
  533. polyfile/magic_defs/visx +32 -0
  534. polyfile/magic_defs/vms +30 -0
  535. polyfile/magic_defs/vmware +6 -0
  536. polyfile/magic_defs/vorbis +155 -0
  537. polyfile/magic_defs/vxl +14 -0
  538. polyfile/magic_defs/warc +16 -0
  539. polyfile/magic_defs/weak +16 -0
  540. polyfile/magic_defs/web +18 -0
  541. polyfile/magic_defs/webassembly +17 -0
  542. polyfile/magic_defs/windows +1811 -0
  543. polyfile/magic_defs/wireless +7 -0
  544. polyfile/magic_defs/wordprocessors +630 -0
  545. polyfile/magic_defs/wsdl +23 -0
  546. polyfile/magic_defs/x68000 +25 -0
  547. polyfile/magic_defs/xdelta +13 -0
  548. polyfile/magic_defs/xenix +106 -0
  549. polyfile/magic_defs/xilinx +58 -0
  550. polyfile/magic_defs/xo65 +37 -0
  551. polyfile/magic_defs/xwindows +43 -0
  552. polyfile/magic_defs/yara +17 -0
  553. polyfile/magic_defs/zfs +96 -0
  554. polyfile/magic_defs/zilog +12 -0
  555. polyfile/magic_defs/zip +126 -0
  556. polyfile/magic_defs/zyxel +17 -0
  557. polyfile/nes.py +144 -0
  558. polyfile/nitf.py +15 -0
  559. polyfile/pdf.py +1264 -0
  560. polyfile/pickles.py +45 -0
  561. polyfile/polyfile.py +409 -0
  562. polyfile/profiling.py +115 -0
  563. polyfile/repl.py +624 -0
  564. polyfile/search.py +310 -0
  565. polyfile/serialization.py +323 -0
  566. polyfile/structmatcher.py +46 -0
  567. polyfile/structs.py +281 -0
  568. polyfile/templates/download.js +162 -0
  569. polyfile/templates/hexdump.css +268 -0
  570. polyfile/templates/hexdump.js +756 -0
  571. polyfile/templates/jquery-3.4.1.min.js +2 -0
  572. polyfile/templates/template.html +119 -0
  573. polyfile/wildcards.py +62 -0
  574. polyfile/zipmatcher.py +183 -0
  575. polyfile_weave-0.5.5.dist-info/METADATA +173 -0
  576. polyfile_weave-0.5.5.dist-info/RECORD +585 -0
  577. polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
  578. polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
  579. polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
  580. polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
  581. polymerge/__init__.py +1 -0
  582. polymerge/__main__.py +296 -0
  583. polymerge/cfg.py +127 -0
  584. polymerge/polymerge.py +227 -0
  585. polymerge/polytracker.py +190 -0
polyfile/structs.py ADDED
@@ -0,0 +1,281 @@
1
+ import sys
2
+ from abc import ABCMeta, abstractmethod
3
+ from collections import OrderedDict
4
+ from enum import Enum
5
+ import struct as python_struct
6
+ from typing import BinaryIO, Optional, Tuple, Type, TypeVar, Union
7
+
8
+ if sys.version_info < (3, 7):
9
+ from typing import Dict as OrderedDictType
10
+ elif sys.version_info < (3, 9):
11
+ # typing.OrderedDict was added in Python 3.7
12
+ from typing import OrderedDict as OrderedDictType
13
+ else:
14
+ # In Python 3.9 and newer, collections.OrderedDict is subscriptable
15
+ OrderedDictType = OrderedDict
16
+
17
+
18
+ class Endianness(Enum):
19
+ NATIVE = "="
20
+ LITTLE = "<"
21
+ BIG = ">"
22
+ NETWORK = "!"
23
+
24
+
25
+ class SizeReference:
26
+ def __init__(self, size_member_name: str):
27
+ self.size_member_name: str = size_member_name
28
+
29
+ def __str__(self):
30
+ return self.size_member_name
31
+
32
+
33
+ T = TypeVar("T")
34
+
35
+
36
+ class AnnotatedType(ABCMeta):
37
+ endianness: Optional[Endianness] = None
38
+
39
+ def __class_getitem__(mcs, endianness: Optional[Endianness]) -> "AnnotatedType":
40
+ name = mcs.__name__
41
+ if endianness is not None:
42
+ name = f"{name}{endianness.name}"
43
+ else:
44
+ name = f"{name}DefaultEndianness"
45
+ ret = type(name, (AnnotatedType,), {
46
+ "endianness": endianness
47
+ })
48
+ return ret
49
+
50
+
51
+ def struct_fmt_int(size: int, signed: bool) -> str:
52
+ if size == 1:
53
+ fmt = "b"
54
+ elif size == 2:
55
+ fmt = "h"
56
+ elif size == 4:
57
+ fmt = "i"
58
+ elif size == 8:
59
+ fmt = "q"
60
+ else:
61
+ raise TypeError(f"Unsupported struct integer size: {size}")
62
+ if not signed:
63
+ fmt = fmt.upper()
64
+ return fmt
65
+
66
+
67
+ class AnnotatedSizeType(AnnotatedType):
68
+ size: Union[int, SizeReference]
69
+
70
+ def __class_getitem__(mcs: T, size: Union[int, str, SizeReference]) -> T:
71
+ if isinstance(size, str):
72
+ size = SizeReference(size)
73
+ name = f"{mcs.__name__}{size!s}"
74
+ return type(name, (mcs,), {
75
+ "endianness": None,
76
+ "size": size
77
+ })
78
+
79
+
80
+ IntTypeArgs = Union[
81
+ Tuple[Union[int, str, SizeReference], bool],
82
+ Tuple[Union[int, str, SizeReference], bool, Optional[Endianness]]
83
+ ]
84
+
85
+
86
+ class AnnotatedIntType(AnnotatedType):
87
+ size: Union[int, SizeReference]
88
+ signed: bool
89
+
90
+ def __class_getitem__(mcs: T, args: IntTypeArgs) -> T:
91
+ if len(args) == 3:
92
+ size, signed, endianness = args
93
+ elif len(args) == 2:
94
+ size, signed = args
95
+ endianness = None
96
+ else:
97
+ raise TypeError(f"{mcs.__name__}[{','.join(map(repr, args))}] must have either two or three arguments")
98
+ if isinstance(size, str):
99
+ size = SizeReference(size)
100
+ if endianness is None:
101
+ endianness_name = "DefaultEndianness"
102
+ else:
103
+ endianness_name = endianness.name
104
+ if signed:
105
+ signed_name = "Signed"
106
+ else:
107
+ signed_name = "Unsigned"
108
+ name = f"{signed_name}{mcs.__name__}{endianness_name}{size!s}"
109
+ endianness_type = super().__class_getitem__(endianness)
110
+ return type(name, (mcs, endianness_type), {
111
+ "size": size,
112
+ "signed": signed
113
+ })
114
+
115
+ def __str__(self):
116
+ if self.endianness is not None:
117
+ s = f"{self.endianness.name.lower()} endian "
118
+ else:
119
+ s = ""
120
+ s = f"{s}{self.size}-byte "
121
+ if not self.signed:
122
+ s = f"{s}un"
123
+ s = f"{s}signed integer"
124
+ return s
125
+
126
+
127
+ class Field(metaclass=AnnotatedType):
128
+ start_offset: int
129
+ num_bytes: int
130
+
131
+ @classmethod
132
+ @abstractmethod
133
+ def read(cls: Type[T], struct: "Struct", field_name: str, stream: BinaryIO, endianness: Endianness) -> T:
134
+ raise NotImplementedError()
135
+
136
+
137
+ class IntField(int, Field, metaclass=AnnotatedIntType):
138
+ def __class_getitem__(cls: T, args: IntTypeArgs) -> T:
139
+ if not isinstance(args[0], int):
140
+ raise TypeError("An int field must have a constant integer size")
141
+
142
+ class BoundIntField(cls, metaclass=AnnotatedIntType[args]):
143
+ pass
144
+
145
+ return BoundIntField
146
+
147
+ @classmethod
148
+ def read(cls: Type[T], struct: "Struct", field_name: str, stream: BinaryIO, endianness: Endianness) -> T:
149
+ data = stream.read(cls.size)
150
+ if len(data) != cls.size:
151
+ raise StructReadError(f"Reached the end of stream while expecting {cls!s} for "
152
+ f"{struct.__class__.__name__}.{field_name}")
153
+ try:
154
+ return cls(python_struct.unpack(f"{endianness.value}{struct_fmt_int(cls.size, cls.signed)}", data)[0])
155
+ except python_struct.error:
156
+ raise StructReadError(f"Error unpacking {cls!s} from {data!r} for {struct.__class__.__name__}.{field_name}")
157
+
158
+
159
+ class ByteField(bytes, Field, metaclass=AnnotatedSizeType):
160
+ def __class_getitem__(cls: T, size: Union[str, int, SizeReference]) -> T:
161
+ class BoundByteField(cls, metaclass=AnnotatedSizeType[size]):
162
+ pass
163
+ return BoundByteField
164
+
165
+ @classmethod
166
+ def read(cls: Type[T], struct: "Struct", field_name: str, stream: BinaryIO, endianness: Endianness) -> T:
167
+ if isinstance(cls.size, SizeReference):
168
+ if not hasattr(struct, cls.size.size_member_name):
169
+ raise StructReadError(f"{struct.__class__.__name__}.{field_name} has a size bound to field "
170
+ f"{cls.size.size_member_name!r}, which does not exist")
171
+ size: int = getattr(struct, cls.size.size_member_name)
172
+ if size is None or not isinstance(size, int):
173
+ raise StructReadError(f"{struct.__class__.__name__}.{field_name} has a size bound to "
174
+ f"{struct.__class__.__name__}.{field_name}={size}, which is not an int")
175
+ else:
176
+ size = cls.size
177
+ data = stream.read(size)
178
+ if len(data) != size:
179
+ raise StructReadError(f"Reached the end of stream while expecting {size} bytes for "
180
+ f"{struct.__class__.__name__}.{field_name}")
181
+ return cls(data)
182
+
183
+
184
+ Int8 = IntField[1, True]
185
+ Int16 = IntField[2, True]
186
+ Int32 = IntField[4, True]
187
+ Int64 = IntField[8, True]
188
+ UInt8 = IntField[1, False]
189
+ UInt16 = IntField[2, False]
190
+ UInt32 = IntField[4, False]
191
+ UInt64 = IntField[8, False]
192
+ Int8BE = IntField[1, True, Endianness.BIG]
193
+ Int16BE = IntField[2, True, Endianness.BIG]
194
+ Int32BE = IntField[4, True, Endianness.BIG]
195
+ Int64BE = IntField[8, True, Endianness.BIG]
196
+ UInt8BE = IntField[1, False, Endianness.BIG]
197
+ UInt16BE = IntField[2, False, Endianness.BIG]
198
+ UInt32BE = IntField[4, False, Endianness.BIG]
199
+ UInt64BE = IntField[8, False, Endianness.BIG]
200
+ Int8LE = IntField[1, True, Endianness.LITTLE]
201
+ Int16LE = IntField[2, True, Endianness.LITTLE]
202
+ Int32LE = IntField[4, True, Endianness.LITTLE]
203
+ Int64LE = IntField[8, True, Endianness.LITTLE]
204
+ UInt8LE = IntField[1, False, Endianness.LITTLE]
205
+ UInt16LE = IntField[2, False, Endianness.LITTLE]
206
+ UInt32LE = IntField[4, False, Endianness.LITTLE]
207
+ UInt64LE = IntField[8, False, Endianness.LITTLE]
208
+
209
+
210
+ class Constant(ByteField):
211
+ constant: bytes
212
+
213
+ def __class_getitem__(cls: T, to_match: bytes) -> T:
214
+ c = super().__class_getitem__(len(to_match))
215
+ setattr(c, "constant", to_match)
216
+ return c
217
+
218
+ @classmethod
219
+ def read(cls: Type[T], struct: "Struct", field_name: str, stream: BinaryIO, endianness: Endianness) -> T:
220
+ ret = super().read(struct, field_name, stream, endianness)
221
+ if ret != cls.constant:
222
+ raise StructReadError(f"Expected {cls.constant!r} but instead found {ret!r} while parsing "
223
+ f"{struct.__class__.__name__}.{field_name}")
224
+ return ret
225
+
226
+
227
+ class StructMeta(ABCMeta):
228
+ fields: OrderedDictType[str, Type[Field]]
229
+
230
+ def __init__(cls, name, bases, clsdict):
231
+ cls.fields = OrderedDict()
232
+ if "__annotations__" in clsdict:
233
+ for field_name, field_type in clsdict["__annotations__"].items():
234
+ if isinstance(field_type, type) and issubclass(field_type, Field):
235
+ if field_name in cls.fields:
236
+ raise TypeError(f"Invalid redeclaration of struct field {field_name} in {cls.__name__}")
237
+ cls.fields[field_name] = field_type
238
+ super().__init__(name, bases, clsdict)
239
+
240
+
241
+ class StructError(RuntimeError):
242
+ pass
243
+
244
+
245
+ class StructReadError(StructError):
246
+ pass
247
+
248
+
249
+ class Struct(metaclass=StructMeta):
250
+ endianness: Endianness = Endianness.NATIVE
251
+ start_offset: int
252
+ num_bytes: int
253
+
254
+ @classmethod
255
+ def read(cls: Type[T], stream: BinaryIO) -> T:
256
+ ret = cls()
257
+ setattr(ret, "start_offset", stream.tell())
258
+ for field_name, field in cls.fields.items():
259
+ if field.__class__.endianness is not None:
260
+ endianness = field.__class__.endianness
261
+ else:
262
+ endianness = cls.endianness
263
+ offset_before = stream.tell()
264
+ value = field.read(ret, field_name, stream, endianness)
265
+ setattr(ret, field_name, value)
266
+ setattr(value, "start_offset", offset_before)
267
+ setattr(value, "num_bytes", stream.tell() - offset_before)
268
+ setattr(ret, "num_bytes", stream.tell() - ret.start_offset)
269
+ return ret
270
+
271
+
272
+ if __name__ == "__main__":
273
+ from io import BytesIO
274
+
275
+ class Test(Struct):
276
+ foo: UInt8LE
277
+ bar: Int32LE
278
+ data: ByteField["foo"]
279
+
280
+ test = Test.read(BytesIO(b"\x03234567890"))
281
+ print(test.foo, test.bar, test.data)
@@ -0,0 +1,162 @@
1
+ //download.js v4.2, by dandavis; 2008-2016. [CCBY2] see http://danml.com/download.html for tests/usage
2
+ // v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime
3
+ // v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs
4
+ // v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling.
5
+ // v4 adds AMD/UMD, commonJS, and plain browser support
6
+ // v4.1 adds url download capability via solo URL argument (same domain/CORS only)
7
+ // v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors
8
+ // https://github.com/rndme/download
9
+
10
+ (function (root, factory) {
11
+ if (typeof define === 'function' && define.amd) {
12
+ // AMD. Register as an anonymous module.
13
+ define([], factory);
14
+ } else if (typeof exports === 'object') {
15
+ // Node. Does not work with strict CommonJS, but
16
+ // only CommonJS-like environments that support module.exports,
17
+ // like Node.
18
+ module.exports = factory();
19
+ } else {
20
+ // Browser globals (root is window)
21
+ root.download = factory();
22
+ }
23
+ }(this, function () {
24
+
25
+ return function download(data, strFileName, strMimeType) {
26
+
27
+ var self = window, // this script is only for browsers anyway...
28
+ defaultMime = "application/octet-stream", // this default mime also triggers iframe downloads
29
+ mimeType = strMimeType || defaultMime,
30
+ payload = data,
31
+ url = !strFileName && !strMimeType && payload,
32
+ anchor = document.createElement("a"),
33
+ toString = function(a){return String(a);},
34
+ myBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString),
35
+ fileName = strFileName || "download",
36
+ blob,
37
+ reader;
38
+ myBlob= myBlob.call ? myBlob.bind(self) : Blob ;
39
+
40
+ if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback
41
+ payload=[payload, mimeType];
42
+ mimeType=payload[0];
43
+ payload=payload[1];
44
+ }
45
+
46
+
47
+ if(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument
48
+ fileName = url.split("/").pop().split("?")[0];
49
+ anchor.href = url; // assign href prop to temp anchor
50
+ if(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path:
51
+ var ajax=new XMLHttpRequest();
52
+ ajax.open( "GET", url, true);
53
+ ajax.responseType = 'blob';
54
+ ajax.onload= function(e){
55
+ download(e.target.response, fileName, defaultMime);
56
+ };
57
+ setTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return:
58
+ return ajax;
59
+ } // end if valid url?
60
+ } // end if url?
61
+
62
+
63
+ //go ahead and download dataURLs right away
64
+ if(/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)){
65
+
66
+ if(payload.length > (1024*1024*1.999) && myBlob !== toString ){
67
+ payload=dataUrlToBlob(payload);
68
+ mimeType=payload.type || defaultMime;
69
+ }else{
70
+ return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs:
71
+ navigator.msSaveBlob(dataUrlToBlob(payload), fileName) :
72
+ saver(payload) ; // everyone else can save dataURLs un-processed
73
+ }
74
+
75
+ }//end if dataURL passed?
76
+
77
+ blob = payload instanceof myBlob ?
78
+ payload :
79
+ new myBlob([payload], {type: mimeType}) ;
80
+
81
+
82
+ function dataUrlToBlob(strUrl) {
83
+ var parts= strUrl.split(/[:;,]/),
84
+ type= parts[1],
85
+ decoder= parts[2] == "base64" ? atob : decodeURIComponent,
86
+ binData= decoder( parts.pop() ),
87
+ mx= binData.length,
88
+ i= 0,
89
+ uiArr= new Uint8Array(mx);
90
+
91
+ for(i;i<mx;++i) uiArr[i]= binData.charCodeAt(i);
92
+
93
+ return new myBlob([uiArr], {type: type});
94
+ }
95
+
96
+ function saver(url, winMode){
97
+
98
+ if ('download' in anchor) { //html5 A[download]
99
+ anchor.href = url;
100
+ anchor.setAttribute("download", fileName);
101
+ anchor.className = "download-js-link";
102
+ anchor.innerHTML = "downloading...";
103
+ anchor.style.display = "none";
104
+ document.body.appendChild(anchor);
105
+ setTimeout(function() {
106
+ anchor.click();
107
+ document.body.removeChild(anchor);
108
+ if(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(anchor.href);}, 250 );}
109
+ }, 66);
110
+ return true;
111
+ }
112
+
113
+ // handle non-a[download] safari as best we can:
114
+ if(/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent)) {
115
+ url=url.replace(/^data:([\w\/\-\+]+)/, defaultMime);
116
+ if(!window.open(url)){ // popup blocked, offer direct download:
117
+ if(confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")){ location.href=url; }
118
+ }
119
+ return true;
120
+ }
121
+
122
+ //do iframe dataURL download (old ch+FF):
123
+ var f = document.createElement("iframe");
124
+ document.body.appendChild(f);
125
+
126
+ if(!winMode){ // force a mime that will download:
127
+ url="data:"+url.replace(/^data:([\w\/\-\+]+)/, defaultMime);
128
+ }
129
+ f.src=url;
130
+ setTimeout(function(){ document.body.removeChild(f); }, 333);
131
+
132
+ }//end saver
133
+
134
+
135
+
136
+
137
+ if (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL)
138
+ return navigator.msSaveBlob(blob, fileName);
139
+ }
140
+
141
+ if(self.URL){ // simple fast and modern way using Blob and URL:
142
+ saver(self.URL.createObjectURL(blob), true);
143
+ }else{
144
+ // handle non-Blob()+non-URL browsers:
145
+ if(typeof blob === "string" || blob.constructor===toString ){
146
+ try{
147
+ return saver( "data:" + mimeType + ";base64," + self.btoa(blob) );
148
+ }catch(y){
149
+ return saver( "data:" + mimeType + "," + encodeURIComponent(blob) );
150
+ }
151
+ }
152
+
153
+ // Blob but not URL support:
154
+ reader=new FileReader();
155
+ reader.onload=function(e){
156
+ saver(this.result);
157
+ };
158
+ reader.readAsDataURL(blob);
159
+ }
160
+ return true;
161
+ }; /* end download() */
162
+ }));
@@ -0,0 +1,268 @@
1
+ body {
2
+ margin: 30px;
3
+ font-family: sans-serif;
4
+ }
5
+
6
+ .tree {
7
+ margin: 1em;
8
+ display: inline-block;
9
+ vertical-align: top;
10
+ overflow-y: auto;
11
+ height: 80vh;
12
+ }
13
+
14
+ .tree input {
15
+ position: absolute;
16
+ clip: rect(0, 0, 0, 0);
17
+ }
18
+
19
+ .tree input ~ ul { display: none; }
20
+
21
+ .tree input:checked ~ ul { display: block; }
22
+
23
+ .tree li {
24
+ line-height: 1.2;
25
+ position: relative;
26
+ padding: 0 0 1em 1em;
27
+ }
28
+
29
+ .tree ul { padding-inline-start: 0px; }
30
+
31
+ .tree ul li { padding: 1em 0 0 1em; list-style-type: none; }
32
+
33
+ .tree > li:last-child { padding-bottom: 0; }
34
+
35
+ .tree_label {
36
+ position: relative;
37
+ display: inline-block;
38
+ background: #fff;
39
+ }
40
+
41
+ label.tree_label { cursor: pointer; }
42
+
43
+ label.tree_label:hover { color: #666; }
44
+
45
+ .tree_label:hover > .download {
46
+ display: block;
47
+ float: right;
48
+ }
49
+
50
+ .download {
51
+ display: none;
52
+ color: blue;
53
+ padding-left: 1em;
54
+ padding-right: 1em;
55
+ }
56
+
57
+ label.tree_label:before {
58
+ background: #000;
59
+ color: #fff;
60
+ position: relative;
61
+ z-index: 1;
62
+ float: left;
63
+ margin: 0 1em 0 -2em;
64
+ width: 1em;
65
+ height: 1em;
66
+ border-radius: 1em;
67
+ content: '+';
68
+ text-align: center;
69
+ line-height: .9em;
70
+ }
71
+
72
+ :checked ~ label.tree_label:before { content: '–'; }
73
+
74
+ .tree li:before {
75
+ position: absolute;
76
+ top: 0;
77
+ bottom: 0;
78
+ left: -.5em;
79
+ display: block;
80
+ width: 0;
81
+ border-left: 1px solid #777;
82
+ content: "";
83
+ }
84
+
85
+ .tree_label:after {
86
+ position: absolute;
87
+ top: 0;
88
+ left: -1.5em;
89
+ display: block;
90
+ height: 0.5em;
91
+ width: 1em;
92
+ border-bottom: 1px solid #777;
93
+ border-left: 1px solid #777;
94
+ border-radius: 0 0 0 .3em;
95
+ content: '';
96
+ }
97
+
98
+ label.tree_label:after { border-bottom: 0; }
99
+
100
+ :checked ~ label.tree_label:after {
101
+ border-radius: 0 .3em 0 0;
102
+ border-top: 1px solid #777;
103
+ border-right: 1px solid #777;
104
+ border-bottom: 0;
105
+ border-left: 0;
106
+ bottom: 0;
107
+ top: 0.5em;
108
+ height: auto;
109
+ }
110
+
111
+ .tree li:last-child:before {
112
+ height: 1em;
113
+ bottom: auto;
114
+ }
115
+
116
+ .tree > li:last-child:before { display: none; }
117
+
118
+ .tree_custom {
119
+ display: block;
120
+ background: #eee;
121
+ padding: 1em;
122
+ border-radius: 0.3em;
123
+ }
124
+
125
+ .hexeditor {
126
+ font-family: monospace;
127
+ display: inline-block;
128
+ vertical-align:top;
129
+ overflow-x: auto;
130
+ height: 80vh;
131
+ overflow-y: hidden;
132
+ }
133
+
134
+ .hexeditor .hexdump {
135
+ padding: 0px;
136
+ vertical-align: top;
137
+ display: inline-block;
138
+ }
139
+
140
+ .hexeditor .bytes {
141
+ padding: 0px;
142
+ padding-right: 2em;
143
+ vertical-align: top;
144
+ display: inline-block;
145
+ }
146
+
147
+ .readablebyteswrapper {
148
+ padding: 0px;
149
+ padding-right: 2em;
150
+ vertical-align: top;
151
+ display: inline-block;
152
+ max-width: 300px;
153
+ overflow: auto;
154
+ height: 100%;
155
+ }
156
+
157
+ .byte {
158
+ display: inline-block;
159
+ text-align: center;
160
+ }
161
+
162
+ .hexeditor .hexdump .byte {
163
+ width: 30px;
164
+ }
165
+
166
+ .hexeditor .bytes .byte {
167
+ width: 10px;
168
+ }
169
+
170
+ .byterow {
171
+ display: inline-block;
172
+ height: 1.1em;
173
+ color: gray;
174
+ }
175
+
176
+ .highlighted {
177
+ background-color: #42bff5;
178
+ color: white;
179
+ }
180
+
181
+ .manually-focused {
182
+ background-color: #FF0000;
183
+ color: white;
184
+ }
185
+
186
+ .cursor {
187
+ background-color: #0000FF;
188
+ color: white;
189
+ cursor: none;
190
+ }
191
+
192
+ .byteline {
193
+ height: 1.2em;
194
+ }
195
+
196
+ .rawdump {
197
+ font-family: monospace;
198
+ }
199
+
200
+ .scrollbar {
201
+ min-height: 80vh;
202
+ }
203
+
204
+ .hexeditor .scrollcontainer {
205
+ overflow-y: scroll;
206
+ display: inline-block;
207
+ width: 3em;
208
+ vertical-align: top;
209
+ height: 100%;
210
+ }
211
+
212
+ .hexeditor .scrollcapture {
213
+ display: inline-block;
214
+ vertical-align: top;
215
+ }
216
+
217
+ .searchresult {
218
+ -webkit-box-shadow:0 0 20px #FFFF00;
219
+ -moz-box-shadow: 0 0 20px #FFFF00;
220
+ box-shadow:0 0 20px #FFFF00;
221
+ background-color:#FFFF00;
222
+ }
223
+
224
+ .overlay {
225
+ position: fixed;
226
+ top: 0;
227
+ bottom: 0;
228
+ left: 0;
229
+ right: 0;
230
+ background: rgba(0, 0, 0, 0.7);
231
+ transition: opacity 500ms;
232
+ visibility: hidden;
233
+ opacity: 0;
234
+ }
235
+ .overlay:target {
236
+ visibility: visible;
237
+ opacity: 1;
238
+ }
239
+ .popup {
240
+ margin: 70px auto;
241
+ padding: 20px;
242
+ background: #fff;
243
+ border-radius: 5px;
244
+ width: 60%;
245
+ position: relative;
246
+ transition: all 5s ease-in-out;
247
+ }
248
+ .popup h2 {
249
+ margin-top: 0;
250
+ color: #333;
251
+ }
252
+ .popup .close {
253
+ position: absolute;
254
+ top: 20px;
255
+ right: 30px;
256
+ transition: all 200ms;
257
+ font-size: 30px;
258
+ font-weight: bold;
259
+ text-decoration: none;
260
+ color: #333;
261
+ }
262
+ .popup .close:hover {
263
+ color: #06D85F;
264
+ }
265
+ .popup .content {
266
+ max-height: 30%;
267
+ overflow: auto;
268
+ }