metasm 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +3 -3
  4. data/Rakefile +1 -1
  5. data/cortex.yaml +17 -0
  6. data/metasm/cpu/arm64/decode.rb +87 -11
  7. data/metasm/cpu/arm64/decompile.rb +142 -0
  8. data/metasm/cpu/arm64/opcodes.rb +53 -23
  9. data/metasm/cpu/arm64.rb +1 -0
  10. data/metasm/cpu/dwarf/debug.rb +39 -0
  11. data/metasm/cpu/dwarf/decode.rb +124 -0
  12. data/metasm/cpu/dwarf/decompile.rb +212 -0
  13. data/metasm/cpu/dwarf/encode.rb +49 -0
  14. data/metasm/cpu/dwarf/main.rb +37 -0
  15. data/metasm/cpu/dwarf/opcodes.rb +107 -0
  16. data/metasm/cpu/dwarf.rb +11 -0
  17. data/metasm/cpu/ia32/debug.rb +8 -0
  18. data/metasm/cpu/ia32/decode.rb +25 -1
  19. data/metasm/cpu/ia32/decompile.rb +205 -342
  20. data/metasm/cpu/mips/decode.rb +1 -1
  21. data/metasm/cpu/ppc/decode.rb +1 -1
  22. data/metasm/cpu/sh4/decode.rb +1 -1
  23. data/metasm/cpu/x86_64/decompile.rb +68 -0
  24. data/metasm/cpu/x86_64.rb +1 -0
  25. data/metasm/decode.rb +14 -0
  26. data/metasm/decompile.rb +51 -27
  27. data/metasm/disassemble.rb +24 -15
  28. data/metasm/dynldr.rb +23 -4
  29. data/metasm/encode.rb +11 -0
  30. data/metasm/exe_format/coff_encode.rb +6 -7
  31. data/metasm/exe_format/elf.rb +60 -2
  32. data/metasm/exe_format/elf_decode.rb +201 -6
  33. data/metasm/exe_format/shellcode.rb +39 -0
  34. data/metasm/gui/dasm_decomp.rb +1 -0
  35. data/metasm/os/emulator.rb +7 -0
  36. data/metasm/parse_c.rb +1 -1
  37. data/metasm.gemspec +1 -2
  38. data/metasm.rb +1 -1
  39. data/samples/disassemble-gui.rb +27 -11
  40. data/samples/disassemble.rb +9 -12
  41. data/samples/emudbg.rb +1 -1
  42. data/samples/factorize-headers-elfimports.rb +4 -1
  43. data/samples/lindebug.rb +16 -2
  44. data/tests/shellcode.rb +111 -0
  45. metadata +19 -107
  46. checksums.yaml.gz.sig +0 -0
  47. data.tar.gz.sig +0 -3
  48. metadata.gz.sig +0 -2
@@ -0,0 +1,111 @@
1
+ # This file is part of Metasm, the Ruby assembly manipulation suite
2
+ # Copyright (C) 2006-2009 Yoann GUILLOT
3
+ #
4
+ # Licence is LGPL, see LICENCE in the top-level directory
5
+
6
+
7
+ require 'test/unit'
8
+ require 'metasm'
9
+
10
+ class TestShellcode < Test::Unit::TestCase
11
+ @@cpu = Metasm::Ia32.new
12
+
13
+ def assert_equal(a, b) super(b, a) end
14
+
15
+ def bin(s)
16
+ if s.respond_to?(:force_encoding)
17
+ s.force_encoding('BINARY')
18
+ else
19
+ s
20
+ end
21
+ end
22
+
23
+ def assemble(src)
24
+ Metasm::Shellcode.assemble(@@cpu, src).encode_string
25
+ end
26
+
27
+ # ---- define_data ----
28
+
29
+ def test_define_data_basic
30
+ assert_equal(Metasm::Shellcode.define_data("ABCD".b), 'db 0x41, 0x42, 0x43, 0x44')
31
+ end
32
+
33
+ def test_define_data_empty
34
+ assert_equal(Metasm::Shellcode.define_data("".b), '')
35
+ end
36
+
37
+ def test_define_data_nil
38
+ assert_equal(Metasm::Shellcode.define_data(nil), '')
39
+ end
40
+
41
+ def test_define_data_full_range
42
+ assert_equal(Metasm::Shellcode.define_data("\x00\x01\x9f\xa0\xff".b),
43
+ 'db 0x00, 0x01, 0x9f, 0xa0, 0xff')
44
+ end
45
+
46
+ def test_define_data_roundtrip_printable
47
+ src = Metasm::Shellcode.define_data("ABCD".b)
48
+ assert_equal(assemble(src), bin("ABCD"))
49
+ end
50
+
51
+ def test_define_data_roundtrip_full_range
52
+ bytes = (0..255).map(&:chr).join.b
53
+ src = Metasm::Shellcode.define_data(bytes)
54
+ assert_equal(assemble(src), bin(bytes))
55
+ end
56
+
57
+ # ---- define_cstring ----
58
+
59
+ def test_define_cstring_basic
60
+ assert_equal(Metasm::Shellcode.define_cstring("ABCD".b), 'db "ABCD", 0')
61
+ end
62
+
63
+ def test_define_cstring_empty
64
+ assert_equal(Metasm::Shellcode.define_cstring("".b), 'db 0')
65
+ end
66
+
67
+ def test_define_cstring_nil
68
+ assert_equal(Metasm::Shellcode.define_cstring(nil), 'db 0')
69
+ end
70
+
71
+ def test_define_cstring_escape_quote
72
+ assert_equal(Metasm::Shellcode.define_cstring("a\"b".b), 'db "a\"b", 0')
73
+ end
74
+
75
+ def test_define_cstring_escape_backslash
76
+ # input: one backslash; expected output: backslash-backslash inside string literal
77
+ assert_equal(Metasm::Shellcode.define_cstring("a\\b".b), 'db "a\\\\b", 0')
78
+ end
79
+
80
+ def test_define_cstring_mixed_printable_and_binary
81
+ assert_equal(Metasm::Shellcode.define_cstring("AB\x05CD".b),
82
+ 'db "AB", 0x05, "CD", 0')
83
+ end
84
+
85
+ def test_define_cstring_single_high_byte
86
+ assert_equal(Metasm::Shellcode.define_cstring("\xff".b), 'db 0xff, 0')
87
+ end
88
+
89
+ def test_define_cstring_roundtrip_printable
90
+ src = Metasm::Shellcode.define_cstring("ABCD".b)
91
+ assert_equal(assemble(src), bin("ABCD\x00"))
92
+ end
93
+
94
+ def test_define_cstring_roundtrip_with_binary
95
+ input = "AB\x05CD".b
96
+ src = Metasm::Shellcode.define_cstring(input)
97
+ assert_equal(assemble(src), bin(input + "\x00"))
98
+ end
99
+
100
+ def test_define_cstring_roundtrip_escapes
101
+ input = "a\"b\\c".b
102
+ src = Metasm::Shellcode.define_cstring(input)
103
+ assert_equal(assemble(src), bin(input + "\x00"))
104
+ end
105
+
106
+ def test_define_cstring_roundtrip_high_byte
107
+ input = "\xff".b
108
+ src = Metasm::Shellcode.define_cstring(input)
109
+ assert_equal(assemble(src), bin(input + "\x00"))
110
+ end
111
+ end
metadata CHANGED
@@ -1,114 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metasm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoann Guillot
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
14
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
15
- d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
16
- b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
17
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
18
- cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
19
- MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
20
- JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
21
- mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
22
- wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
23
- VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
24
- AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
25
- AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
26
- BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
27
- pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
28
- dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
29
- fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
30
- NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
31
- H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
32
- +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
33
- -----END CERTIFICATE-----
34
- - |
35
- -----BEGIN CERTIFICATE-----
36
- MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBl
37
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
38
- d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
39
- b3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYDVQQG
40
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
41
- cnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBT
42
- aWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8O
43
- Ea9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq
44
- 8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRp
45
- wsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/p
46
- fMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3
47
- jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczye
48
- n6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
49
- HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEEbTBr
50
- MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH
51
- MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
52
- RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj
53
- ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6
54
- Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww
55
- TwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
56
- d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrEuXsq
57
- CqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgP
58
- MA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTvMGHX
59
- fgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNLrddf
60
- RHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6Ro8Al
61
- EeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaKJAL+
62
- L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aTEAb8
63
- B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHv
64
- -----END CERTIFICATE-----
65
- - |
66
- -----BEGIN CERTIFICATE-----
67
- MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
68
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
69
- d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
70
- SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
71
- MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
72
- BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
73
- IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNTz4zvAy7h/vQp
74
- 4dr1txXHlABAagkwYYwTMCtHs5PXsJITx/5SAjx5swuaLfze5kPBNF2YImvFlOXY
75
- WaB+0PsOnXnaARsDZU683xFlj8izU6IN6VrAHzDLKFBzruJENrOJD/ikbEtbjO/q
76
- gFbmS9J9v5ohG/pcRSS0t4ZPAwymf8eCp6QsvOKK/Aymp1RhlRaP8N6N5CIpkhz1
77
- 9p968iCE+DjOXVYxcWE+jE/7uB1dbgrXykNBujMSS3GULOvVEY28n6NCmrPlo23g
78
- yRjYVJ2Vy14nBqnxDZ/yRIfWRVjWoT9TsAEbe9gY29oDpSCSs4wSmLQd5zGCpZ9h
79
- r0HDFB8CAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
80
- dQ5YMB0GA1UdDgQWBBTLBL7DTwumVEKtdCdpHVYMXOFeDzAOBgNVHQ8BAf8EBAMC
81
- B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
82
- L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
83
- L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
84
- MEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
85
- d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggrBgEFBQcBAQR4MHYw
86
- JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
87
- AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
88
- ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
89
- BQADggEBAN+GL5/myPWg7oH4mVrG7/OhXF1MoYQF0ddaNiqaweEHMuKJBQCVZRbL
90
- 37HojoKXXv2yyRJBCeTB+ojrxX+5PdLVZa0ss7toWzJ2A1poPXZ1eZvm5xeFD32z
91
- YQaTmmNWNI3PCDTyJ2PXUc+bDiNNwcZ7yc5o78UNRvp9Jxghya17Q76c9Ov9wvnv
92
- dxxQKWGOQy0m4fBrkyjAyH9Djjn81RbQrqYgPuhd5nD0HjN3VUQLhQbIJrk9TVs0
93
- EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
94
- 9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
95
- -----END CERTIFICATE-----
96
- date: 2021-07-02 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2026-05-20 00:00:00.000000000 Z
97
12
  dependencies:
98
- - !ruby/object:Gem::Dependency
99
- name: bundler
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: '1.7'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: '1.7'
112
13
  - !ruby/object:Gem::Dependency
113
14
  name: rake
114
15
  requirement: !ruby/object:Gem::Requirement
@@ -154,6 +55,7 @@ files:
154
55
  - README
155
56
  - Rakefile
156
57
  - TODO
58
+ - cortex.yaml
157
59
  - doc/code_organisation.txt
158
60
  - doc/const_missing.txt
159
61
  - doc/core/DynLdr.txt
@@ -191,6 +93,7 @@ files:
191
93
  - metasm/cpu/arm64.rb
192
94
  - metasm/cpu/arm64/debug.rb
193
95
  - metasm/cpu/arm64/decode.rb
96
+ - metasm/cpu/arm64/decompile.rb
194
97
  - metasm/cpu/arm64/encode.rb
195
98
  - metasm/cpu/arm64/main.rb
196
99
  - metasm/cpu/arm64/opcodes.rb
@@ -210,6 +113,13 @@ files:
210
113
  - metasm/cpu/dalvik/decode.rb
211
114
  - metasm/cpu/dalvik/main.rb
212
115
  - metasm/cpu/dalvik/opcodes.rb
116
+ - metasm/cpu/dwarf.rb
117
+ - metasm/cpu/dwarf/debug.rb
118
+ - metasm/cpu/dwarf/decode.rb
119
+ - metasm/cpu/dwarf/decompile.rb
120
+ - metasm/cpu/dwarf/encode.rb
121
+ - metasm/cpu/dwarf/main.rb
122
+ - metasm/cpu/dwarf/opcodes.rb
213
123
  - metasm/cpu/ebpf.rb
214
124
  - metasm/cpu/ebpf/debug.rb
215
125
  - metasm/cpu/ebpf/decode.rb
@@ -283,6 +193,7 @@ files:
283
193
  - metasm/cpu/x86_64/compile_c.rb
284
194
  - metasm/cpu/x86_64/debug.rb
285
195
  - metasm/cpu/x86_64/decode.rb
196
+ - metasm/cpu/x86_64/decompile.rb
286
197
  - metasm/cpu/x86_64/encode.rb
287
198
  - metasm/cpu/x86_64/main.rb
288
199
  - metasm/cpu/x86_64/opcodes.rb
@@ -460,12 +371,13 @@ files:
460
371
  - tests/mips.rb
461
372
  - tests/parse_c.rb
462
373
  - tests/preprocessor.rb
374
+ - tests/shellcode.rb
463
375
  - tests/x86_64.rb
464
376
  homepage: http://metasm.cr0.org
465
377
  licenses:
466
378
  - LGPL-2.1
467
379
  metadata: {}
468
- post_install_message:
380
+ post_install_message:
469
381
  rdoc_options: []
470
382
  require_paths:
471
383
  - "."
@@ -480,9 +392,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
480
392
  - !ruby/object:Gem::Version
481
393
  version: '0'
482
394
  requirements: []
483
- rubyforge_project:
484
- rubygems_version: 2.7.10
485
- signing_key:
395
+ rubygems_version: 3.4.19
396
+ signing_key:
486
397
  specification_version: 4
487
398
  summary: Metasm is a cross-architecture assembler, disassembler, linker, and debugger.
488
399
  test_files:
@@ -498,4 +409,5 @@ test_files:
498
409
  - tests/mips.rb
499
410
  - tests/parse_c.rb
500
411
  - tests/preprocessor.rb
412
+ - tests/shellcode.rb
501
413
  - tests/x86_64.rb
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
@@ -1,3 +0,0 @@
1
- ���C���k#D6�Z?���bH��;Ӏ�3|L�\=�;�}F�3�� `ܦ�5���*c
2
- ܋�b�Q����Ol�zn�iq�jEȈ=�>S(�h���e�̭��i������C��!}�F�LN� �Q��c
3
- �]�N�V�9| �m��ks4��%�gi�X�ژ��� �X���L�ه�>տ$DB��y%rˆ�u(j�q�:X�U�F�R8��(.�_!�M��n�@�����^tE �u$�S0�~R֡ڻ�
metadata.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- 5������Yp��hީ��-}�ۈ} V-N�{8CynM N ʹ��*��7ӽY�/�Z@S�����%R��b|�-��ݣea-���tJȯ��� L�jZ� ��Tz�ޡv�E۹�N�C���[T$��ܹt4�gx@��b1nIȐ�=e����o��RH���m���]�Z)�
2
- ?�5��:*��,ʩ'��q�T�#M��향�3s�<~_��}��O��W�4�]q�M.�Q�e�vc\��Z�qHYO�w1n��xh""�