pg 0.18.3-x86-mingw32 → 0.18.4-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/ChangeLog +110 -3
- data/History.rdoc +12 -0
- data/README.rdoc +3 -1
- data/Rakefile +15 -5
- data/ext/extconf.rb +1 -0
- data/ext/pg_binary_decoder.c +3 -1
- data/ext/pg_binary_encoder.c +7 -5
- data/ext/pg_text_decoder.c +3 -1
- data/ext/pg_text_encoder.c +4 -1
- data/ext/pg_type_map.c +7 -7
- data/ext/pg_type_map_by_column.c +7 -7
- data/lib/1.9/pg_ext.so +0 -0
- data/lib/2.0/pg_ext.so +0 -0
- data/lib/2.1/pg_ext.so +0 -0
- data/lib/2.2/pg_ext.so +0 -0
- data/lib/i386-mingw32/libpq.dll +0 -0
- data/lib/pg.rb +2 -2
- data/spec/pg/connection_spec.rb +6 -0
- data/spec/pg/type_spec.rb +7 -0
- metadata +3 -7
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83f4b8813c35f5d8a6fa29b448541c5fe24fe7b8
|
4
|
+
data.tar.gz: be13da6bf9b67c02b97aa8e2312f6e914eaad8b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6977090ee61d2e7048ecc9e5aeb69841f96f154593e2126f3eeda9c13cf9e9d17a414137ff4b91480b619c0424aa627410e760ddb145731ce37b0f084c2ef13e
|
7
|
+
data.tar.gz: 1c825002346f31ad9b6c9a2e6272d05fb3443281e4d3889619347cdfcc549064adb11ed1364965250e5564c66bf27e5f98aacb090dd2cfa25c2edd80280dc0fc
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/ChangeLog
CHANGED
@@ -1,8 +1,115 @@
|
|
1
|
-
2015-
|
1
|
+
2015-11-13 Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
* .hgignore:
|
4
|
+
Ignore some build artifacts
|
5
|
+
[f4bd9e53ccab] [tip]
|
6
|
+
|
7
|
+
* Rakefile:
|
8
|
+
Only use fivefish formatter when building from repo
|
9
|
+
[6161d8eeb3f1]
|
10
|
+
|
11
|
+
2015-11-13 Lars Kanis <lars@greiz-reinsdorf.de>
|
12
|
+
|
13
|
+
* History.rdoc:
|
14
|
+
Update History.rdoc regarding PR#22.
|
15
|
+
[e4a8a1d41104]
|
16
|
+
|
17
|
+
* Merge ../ruby-pg.git.bare
|
18
|
+
[810c1e4dad4d]
|
19
|
+
|
20
|
+
2015-10-08 Lars Kanis <larskanis@gmail.com>
|
21
|
+
|
22
|
+
* README.rdoc:
|
23
|
+
Fix link to appveyor CI tests in the README.
|
24
|
+
[604f4dd3d5bd]
|
25
|
+
|
26
|
+
2015-11-04 Lars Kanis <lars@greiz-reinsdorf.de>
|
27
|
+
|
28
|
+
* ext/pg_binary_encoder.c:
|
29
|
+
Merged in t-richards/ruby-pg/jemalloc-native-ext (pull request #22)
|
30
|
+
|
31
|
+
Fix build against jemalloc 4.0.0
|
32
|
+
[72168db5fb7b]
|
33
|
+
|
34
|
+
2015-09-10 Tom Richards <tom@tomrichards.net>
|
35
|
+
|
36
|
+
* ext/pg_binary_encoder.c:
|
37
|
+
Fix build against jemalloc 4.0.0
|
38
|
+
[fe05106909f7] <jemalloc-native-ext>
|
39
|
+
|
40
|
+
2015-09-24 Lars Kanis <lars@greiz-reinsdorf.de>
|
2
41
|
|
3
42
|
* History.rdoc:
|
4
|
-
|
5
|
-
[
|
43
|
+
Add latest changes to History.rdoc.
|
44
|
+
[11b978b08d63]
|
45
|
+
|
46
|
+
* History.rdoc:
|
47
|
+
Add missing entry in History.rdoc.
|
48
|
+
|
49
|
+
This fixes bitbucket issue #225 : https://bitbucket.org/ged/ruby-
|
50
|
+
pg/issues/225
|
51
|
+
[132d674d999f]
|
52
|
+
|
53
|
+
* Merge ../ruby-pg.git.bare
|
54
|
+
[479799a98cfa]
|
55
|
+
|
56
|
+
* ext/pg_text_encoder.c, spec/pg/connection_spec.rb,
|
57
|
+
spec/pg/type_spec.rb:
|
58
|
+
Avoid segfault, when quote_ident is called with Array containing
|
59
|
+
non-strings.
|
60
|
+
|
61
|
+
This fixes bitbucket issue #226 : https://bitbucket.org/ged/ruby-
|
62
|
+
pg/issues/226
|
63
|
+
[4f0bd19e9111]
|
64
|
+
|
65
|
+
2015-09-08 Lars Kanis <lars@greiz-reinsdorf.de>
|
66
|
+
|
67
|
+
* Merge pull request #10 from PuzzleFlow/master
|
68
|
+
|
69
|
+
Fixing compilation problems with Microsoft Visual Studio 2008.
|
70
|
+
[dfb62954f2d6]
|
71
|
+
|
72
|
+
2015-09-08 jfali <jfali@puzzleflow.com>
|
73
|
+
|
74
|
+
* ext/extconf.rb, ext/pg_binary_decoder.c, ext/pg_binary_encoder.c,
|
75
|
+
ext/pg_text_decoder.c, ext/pg_text_encoder.c, ext/pg_type_map.c,
|
76
|
+
ext/pg_type_map_by_column.c:
|
77
|
+
Fixing compilation problems with Microsoft Visual Studio 2008.
|
78
|
+
- inttypes.h is not available in MSVC 2008
|
79
|
+
- Structs members must be initialized implicitly
|
80
|
+
[fcf731d3dff7]
|
81
|
+
|
82
|
+
2015-09-07 Lars Kanis <lars@greiz-reinsdorf.de>
|
83
|
+
|
84
|
+
* README.rdoc:
|
85
|
+
Merge pull request #8 from gitter-badger/gitter-badge
|
86
|
+
|
87
|
+
Add a Gitter chat badge to README.rdoc
|
88
|
+
[ab4d5656abce]
|
89
|
+
|
90
|
+
2015-03-09 The Gitter Badger <badger@gitter.im>
|
91
|
+
|
92
|
+
* README.rdoc:
|
93
|
+
Added Gitter badge
|
94
|
+
[beb02a90f948]
|
95
|
+
|
96
|
+
2015-09-03 Michael Granger <ged@FaerieMUD.org>
|
97
|
+
|
98
|
+
* .hgtags:
|
99
|
+
Added tag v0.18.3 for changeset 01c42c68797e
|
100
|
+
[4c8df76aff6f]
|
101
|
+
|
102
|
+
* .hgsigs:
|
103
|
+
Added signature for changeset 57291f1e96b9
|
104
|
+
[01c42c68797e] [v0.18.3]
|
105
|
+
|
106
|
+
* .hoerc:
|
107
|
+
Exclude some generated files from the Manifest
|
108
|
+
[57291f1e96b9]
|
109
|
+
|
110
|
+
* History.rdoc, lib/pg.rb:
|
111
|
+
Bump patch version, update history
|
112
|
+
[3b49541c9f12]
|
6
113
|
|
7
114
|
2015-09-01 Lars Kanis <lars@greiz-reinsdorf.de>
|
8
115
|
|
data/History.rdoc
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== v0.18.4 [2015-11-13] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
Enhancements:
|
4
|
+
- Fixing compilation problems with Microsoft Visual Studio 2008. GH #10
|
5
|
+
- Avoid name clash with xcode and jemalloc. PR#22, PR#23
|
6
|
+
|
7
|
+
Bugfixes:
|
8
|
+
- Avoid segfault, when quote_ident or TextEncoder::Identifier
|
9
|
+
is called with Array containing non-strings. #226
|
10
|
+
|
11
|
+
|
1
12
|
== v0.18.3 [2015-09-03] Michael Granger <ged@FaerieMUD.org>
|
2
13
|
|
3
14
|
Enhancements:
|
@@ -16,6 +27,7 @@ Bugfixes:
|
|
16
27
|
Enhancements:
|
17
28
|
|
18
29
|
- Allow URI connection string (thanks to Chris Bandy)
|
30
|
+
- Allow Array type parameter to conn.quote_ident
|
19
31
|
|
20
32
|
Bugfixes:
|
21
33
|
|
data/README.rdoc
CHANGED
@@ -4,6 +4,8 @@ home :: https://bitbucket.org/ged/ruby-pg
|
|
4
4
|
mirror :: https://github.com/ged/ruby-pg
|
5
5
|
docs :: http://deveiate.org/code/pg
|
6
6
|
|
7
|
+
{<img src="https://badges.gitter.im/Join%20Chat.svg" alt="Join the chat at https://gitter.im/ged/ruby-pg">}[https://gitter.im/ged/ruby-pg?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge]
|
8
|
+
|
7
9
|
|
8
10
|
== Description
|
9
11
|
|
@@ -30,7 +32,7 @@ A small example usage:
|
|
30
32
|
== Build Status
|
31
33
|
|
32
34
|
{<img src="https://travis-ci.org/ged/ruby-pg.png?branch=master" alt="Build Status Travis-CI" />}[https://travis-ci.org/ged/ruby-pg]
|
33
|
-
{<img src="https://ci.appveyor.com/api/projects/status/at4g4swb2cd4xji7/branch/master?svg=true" alt="Build Status Appveyor" />}[https://ci.appveyor.com/
|
35
|
+
{<img src="https://ci.appveyor.com/api/projects/status/at4g4swb2cd4xji7/branch/master?svg=true" alt="Build Status Appveyor" />}[https://ci.appveyor.com/project/ged/ruby-pg]
|
34
36
|
|
35
37
|
|
36
38
|
== Requirements
|
data/Rakefile
CHANGED
@@ -74,11 +74,6 @@ $hoespec = Hoe.spec 'pg' do
|
|
74
74
|
|
75
75
|
self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
|
76
76
|
self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
|
77
|
-
self.spec_extras[:rdoc_options] = [
|
78
|
-
'-f', 'fivefish',
|
79
|
-
'-t', 'pg: The Ruby Interface to PostgreSQL',
|
80
|
-
'-m', 'README.rdoc',
|
81
|
-
]
|
82
77
|
|
83
78
|
self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
|
84
79
|
end
|
@@ -143,6 +138,21 @@ Rake::ExtensionTask.new do |ext|
|
|
143
138
|
end
|
144
139
|
|
145
140
|
|
141
|
+
# Use the fivefish formatter for docs generated from development checkout
|
142
|
+
if File.directory?( '.hg' )
|
143
|
+
require 'rdoc/task'
|
144
|
+
|
145
|
+
Rake::Task[ 'docs' ].clear
|
146
|
+
RDoc::Task.new( 'docs' ) do |rdoc|
|
147
|
+
rdoc.main = "README.rdoc"
|
148
|
+
rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb", 'ext/**/*.{c,h}' )
|
149
|
+
rdoc.generator = :fivefish
|
150
|
+
rdoc.title = "PG: The Ruby PostgreSQL Driver"
|
151
|
+
rdoc.rdoc_dir = 'doc'
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
|
146
156
|
# Make the ChangeLog update if the repo has changed since it was last built
|
147
157
|
file '.hg/branch' do
|
148
158
|
warn "WARNING: You need the Mercurial repo to update the ChangeLog"
|
data/ext/extconf.rb
CHANGED
@@ -92,6 +92,7 @@ $defs.push( "-DHAVE_ST_NOTIFY_EXTRA" ) if
|
|
92
92
|
|
93
93
|
# unistd.h confilicts with ruby/win32.h when cross compiling for win32 and ruby 1.9.1
|
94
94
|
have_header 'unistd.h'
|
95
|
+
have_header 'inttypes.h'
|
95
96
|
have_header 'ruby/st.h' or have_header 'st.h' or abort "pg currently requires the ruby/st.h header"
|
96
97
|
|
97
98
|
checking_for "C99 variable length arrays" do
|
data/ext/pg_binary_decoder.c
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
/*
|
2
2
|
* pg_column_map.c - PG::ColumnMap class extension
|
3
|
-
* $Id: pg_binary_decoder.c,v
|
3
|
+
* $Id: pg_binary_decoder.c,v fcf731d3dff7 2015/09/08 12:25:06 jfali $
|
4
4
|
*
|
5
5
|
*/
|
6
6
|
|
7
7
|
#include "pg.h"
|
8
8
|
#include "util.h"
|
9
|
+
#ifdef HAVE_INTTYPES_H
|
9
10
|
#include <inttypes.h>
|
11
|
+
#endif
|
10
12
|
|
11
13
|
VALUE rb_mPG_BinaryDecoder;
|
12
14
|
|
data/ext/pg_binary_encoder.c
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
/*
|
2
2
|
* pg_column_map.c - PG::ColumnMap class extension
|
3
|
-
* $Id: pg_binary_encoder.c,v
|
3
|
+
* $Id: pg_binary_encoder.c,v 72168db5fb7b 2015/11/04 16:13:42 lars $
|
4
4
|
*
|
5
5
|
*/
|
6
6
|
|
7
7
|
#include "pg.h"
|
8
8
|
#include "util.h"
|
9
|
+
#ifdef HAVE_INTTYPES_H
|
9
10
|
#include <inttypes.h>
|
11
|
+
#endif
|
10
12
|
|
11
13
|
VALUE rb_mPG_BinaryEncoder;
|
12
14
|
|
@@ -22,14 +24,14 @@ VALUE rb_mPG_BinaryEncoder;
|
|
22
24
|
static int
|
23
25
|
pg_bin_enc_boolean(t_pg_coder *conv, VALUE value, char *out, VALUE *intermediate)
|
24
26
|
{
|
25
|
-
char
|
27
|
+
char mybool;
|
26
28
|
switch(value){
|
27
|
-
case Qtrue :
|
28
|
-
case Qfalse :
|
29
|
+
case Qtrue : mybool = 1; break;
|
30
|
+
case Qfalse : mybool = 0; break;
|
29
31
|
default :
|
30
32
|
rb_raise( rb_eTypeError, "wrong data for binary boolean converter" );
|
31
33
|
}
|
32
|
-
if(out) *out =
|
34
|
+
if(out) *out = mybool;
|
33
35
|
return 1;
|
34
36
|
}
|
35
37
|
|
data/ext/pg_text_decoder.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* pg_text_decoder.c - PG::TextDecoder module
|
3
|
-
* $Id: pg_text_decoder.c,v
|
3
|
+
* $Id: pg_text_decoder.c,v fcf731d3dff7 2015/09/08 12:25:06 jfali $
|
4
4
|
*
|
5
5
|
*/
|
6
6
|
|
@@ -30,7 +30,9 @@
|
|
30
30
|
|
31
31
|
#include "pg.h"
|
32
32
|
#include "util.h"
|
33
|
+
#ifdef HAVE_INTTYPES_H
|
33
34
|
#include <inttypes.h>
|
35
|
+
#endif
|
34
36
|
|
35
37
|
VALUE rb_mPG_TextDecoder;
|
36
38
|
static ID s_id_decode;
|
data/ext/pg_text_encoder.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* pg_text_encoder.c - PG::TextEncoder module
|
3
|
-
* $Id: pg_text_encoder.c,v
|
3
|
+
* $Id: pg_text_encoder.c,v 4f0bd19e9111 2015/09/24 18:55:11 lars $
|
4
4
|
*
|
5
5
|
*/
|
6
6
|
|
@@ -41,7 +41,9 @@
|
|
41
41
|
|
42
42
|
#include "pg.h"
|
43
43
|
#include "util.h"
|
44
|
+
#ifdef HAVE_INTTYPES_H
|
44
45
|
#include <inttypes.h>
|
46
|
+
#endif
|
45
47
|
#include <math.h>
|
46
48
|
|
47
49
|
VALUE rb_mPG_TextEncoder;
|
@@ -493,6 +495,7 @@ pg_text_enc_array_identifier(VALUE value, VALUE string, char *out)
|
|
493
495
|
for( i=0; i<nr_elems; i++){
|
494
496
|
VALUE entry = rb_ary_entry(value, i);
|
495
497
|
|
498
|
+
StringValue(entry);
|
496
499
|
out = quote_identifier(entry, string, out);
|
497
500
|
if( i < nr_elems-1 ){
|
498
501
|
out = pg_rb_str_ensure_capa( string, 1, out, NULL );
|
data/ext/pg_type_map.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* pg_column_map.c - PG::ColumnMap class extension
|
3
|
-
* $Id: pg_type_map.c,v
|
3
|
+
* $Id: pg_type_map.c,v fcf731d3dff7 2015/09/08 12:25:06 jfali $
|
4
4
|
*
|
5
5
|
*/
|
6
6
|
|
@@ -54,12 +54,12 @@ pg_typemap_typecast_copy_get( t_typemap *p_typemap, VALUE field_str, int fieldno
|
|
54
54
|
}
|
55
55
|
|
56
56
|
const struct pg_typemap_funcs pg_typemap_funcs = {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
57
|
+
pg_typemap_fit_to_result,
|
58
|
+
pg_typemap_fit_to_query,
|
59
|
+
pg_typemap_fit_to_copy_get,
|
60
|
+
pg_typemap_result_value,
|
61
|
+
pg_typemap_typecast_query_param,
|
62
|
+
pg_typemap_typecast_copy_get
|
63
63
|
};
|
64
64
|
|
65
65
|
static VALUE
|
data/ext/pg_type_map_by_column.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* pg_column_map.c - PG::ColumnMap class extension
|
3
|
-
* $Id: pg_type_map_by_column.c,v
|
3
|
+
* $Id: pg_type_map_by_column.c,v fcf731d3dff7 2015/09/08 12:25:06 jfali $
|
4
4
|
*
|
5
5
|
*/
|
6
6
|
|
@@ -162,12 +162,12 @@ pg_tmbc_typecast_copy_get( t_typemap *p_typemap, VALUE field_str, int fieldno, i
|
|
162
162
|
}
|
163
163
|
|
164
164
|
const struct pg_typemap_funcs pg_tmbc_funcs = {
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
165
|
+
pg_tmbc_fit_to_result,
|
166
|
+
pg_tmbc_fit_to_query,
|
167
|
+
pg_tmbc_fit_to_copy_get,
|
168
|
+
pg_tmbc_result_value,
|
169
|
+
pg_tmbc_typecast_query_param,
|
170
|
+
pg_tmbc_typecast_copy_get
|
171
171
|
};
|
172
172
|
|
173
173
|
static void
|
data/lib/1.9/pg_ext.so
CHANGED
Binary file
|
data/lib/2.0/pg_ext.so
CHANGED
Binary file
|
data/lib/2.1/pg_ext.so
CHANGED
Binary file
|
data/lib/2.2/pg_ext.so
CHANGED
Binary file
|
data/lib/i386-mingw32/libpq.dll
CHANGED
Binary file
|
data/lib/pg.rb
CHANGED
data/spec/pg/connection_spec.rb
CHANGED
@@ -1211,6 +1211,12 @@ describe PG::Connection do
|
|
1211
1211
|
expect( escaped ).to eq( expected.join(".") )
|
1212
1212
|
end
|
1213
1213
|
|
1214
|
+
it "will raise a TypeError for invalid arguments to quote_ident" do
|
1215
|
+
expect{ described_class.quote_ident( nil ) }.to raise_error(TypeError)
|
1216
|
+
expect{ described_class.quote_ident( [nil] ) }.to raise_error(TypeError)
|
1217
|
+
expect{ described_class.quote_ident( [['a']] ) }.to raise_error(TypeError)
|
1218
|
+
end
|
1219
|
+
|
1214
1220
|
describe "Ruby 1.9.x default_internal encoding" do
|
1215
1221
|
|
1216
1222
|
it "honors the Encoding.default_internal if it's set and the synchronous interface is used" do
|
data/spec/pg/type_spec.rb
CHANGED
@@ -206,6 +206,13 @@ describe "PG::Type derivations" do
|
|
206
206
|
expect( quoted_type.encode(['schema','table','col']) ).to eq( %["schema"."table"."col"] )
|
207
207
|
expect( quoted_type.encode(['A.','.B']) ).to eq( %["A.".".B"] )
|
208
208
|
expect( quoted_type.encode(%['A"."B']) ).to eq( %["'A"".""B'"] )
|
209
|
+
expect( quoted_type.encode( nil ) ).to be_nil
|
210
|
+
end
|
211
|
+
|
212
|
+
it "will raise a TypeError for invalid arguments to quote_ident" do
|
213
|
+
quoted_type = PG::TextEncoder::Identifier.new
|
214
|
+
expect{ quoted_type.encode( [nil] ) }.to raise_error(TypeError)
|
215
|
+
expect{ quoted_type.encode( [['a']] ) }.to raise_error(TypeError)
|
209
216
|
end
|
210
217
|
end
|
211
218
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.18.
|
4
|
+
version: 0.18.4
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
G8LHR7EjtPPmqCCunfyecJ6MmCNaiJCBxq2NYzyNmluPyHT8+0fuB5kccUVZm6CD
|
32
32
|
xn3DzOkDE6NYbk8gC9rTsA==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2015-
|
34
|
+
date: 2015-11-13 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: hoe-mercurial
|
@@ -313,11 +313,7 @@ licenses:
|
|
313
313
|
metadata: {}
|
314
314
|
post_install_message:
|
315
315
|
rdoc_options:
|
316
|
-
- "
|
317
|
-
- fivefish
|
318
|
-
- "-t"
|
319
|
-
- 'pg: The Ruby Interface to PostgreSQL'
|
320
|
-
- "-m"
|
316
|
+
- "--main"
|
321
317
|
- README.rdoc
|
322
318
|
require_paths:
|
323
319
|
- lib
|
metadata.gz.sig
CHANGED
Binary file
|