nweiz@google.com
884404dca2
Add an OutputStream.closed getter.
...
BUG=3603
Review URL: https://chromiumcodereview.appspot.com//10832188
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@10455 260f80e4-7a28-3924-810f-c04153c831b5
2012-08-09 20:09:19 +00:00
whesse@google.com
015c40188c
Add .fromPath constructors to File and Directory.
...
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10639004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@9024 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-22 10:36:20 +00:00
floitsch@google.com
a51dc25968
Make isUtc a getter, change some method names in Date. Weekday is now 1 based.
...
isUtc is now a getter.
Date.hours -> Date.hour
Date.minutes -> Date.minute
Date.seconds -> Date.second
Date.milliseconds -> Date.millisecond
Date.fromEpoch -> Date.fromMillisecondsSinceEpoch
Date.value -> Date.millisecondsSinceEpoch
Date.MON == 1 (up to Date.SUN == 7).
Fixes issue 3444, 1985.
Review URL: https://chromiumcodereview.appspot.com//10538105
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8899 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-20 11:43:46 +00:00
whesse@google.com
c914f33159
Make sure that _FileInputStream._fillBuffer is not entered again before it finishes.
...
Also fix a bug where _fillBuffer did not reset _position correctly.
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10533110
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8553 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-12 16:06:12 +00:00
whesse@google.com
2d68705170
Fix file buffering code that uses RemoveRange on a fixed-length Uint8 array.
...
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10544110
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8548 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-12 14:00:06 +00:00
whesse@google.com
31f1777851
Add buffering to _FileInputStream implementation.
...
Revert "Revert dart:io file InputStream buffering to fix bugs in it."
Recommits r8435, r8401, r8396, r8395, with additional fixes.
BUG=3434
TEST=
Review URL: https://chromiumcodereview.appspot.com//10542102
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8537 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-12 10:55:51 +00:00
ager@google.com
a0c90242b8
Add missing closed check to random access file.
...
R=iposva@google.com
BUG=
TEST=standalone/io/file_error_test
Review URL: https://chromiumcodereview.appspot.com//10536112
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8525 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-12 07:28:29 +00:00
whesse@google.com
118a9ad7e7
Revert dart:io file InputStream buffering to fix bugs in it. Reverts r8435, r8401, r8396, r8395.
...
BUG=dart:3450, dart:3434
TEST=
Review URL: https://chromiumcodereview.appspot.com//10537077
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8441 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-08 14:39:02 +00:00
whesse@google.com
842194bd39
Fix dart:io File.openInputStream input stream to cancel outstanding onData events when EOF reached.
...
BUG=
TEST=standalone/io/file_test
Review URL: https://chromiumcodereview.appspot.com//10543078
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8435 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-08 12:05:53 +00:00
sgjesse@google.com
b5995d1d9b
Add method flush to output stream
...
R=ager@google.com
BUG=dart:1407
TEST=tests/standalone/src/io/FileOutputStreamTest.dart
Review URL: https://chromiumcodereview.appspot.com//9969202
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8422 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-08 07:56:15 +00:00
whesse@google.com
ada680e28f
Change FileInputStream to only call onClosed callback when underlying file has been closed. Change standalone/io/file_test to check this.
...
TBR=ricow@google.com
BUG=
TEST=standalone/io/file_test
Review URL: https://chromiumcodereview.appspot.com//10546051
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8401 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-07 16:43:41 +00:00
whesse@google.com
4b1c96b722
Remove erroneous assert from dart:io's File class.
...
BUG=
TEST=standalone/io/file_test.dart
Review URL: https://chromiumcodereview.appspot.com//10537053
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8396 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-07 14:23:16 +00:00
whesse@google.com
b939ba1480
Add buffering to File.openInputStream, so that the entire file is not read in at once.
...
BUG=dart:3334
TEST=
Review URL: https://chromiumcodereview.appspot.com//10536029
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8395 260f80e4-7a28-3924-810f-c04153c831b5
2012-06-07 13:44:31 +00:00
ager@google.com
379695ee2b
Implement File.lastModified.
...
R=sgjesse@google.com ,ajohnsen@google.com
BUG=dartbug/2988
TEST=standalone/io/file*
Review URL: https://chromiumcodereview.appspot.com//10443008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7945 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-24 13:10:02 +00:00
ager@google.com
169e2ae549
Finish file 'fuzzer' and fix issues.
...
- One integer extraction issue.
- Changed to using nativeport.call().transform to make sure that exceptions during the processing of the reply are propagated to the future.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10411053
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7843 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-22 09:52:36 +00:00
ager@google.com
a47410bbed
Reland: Add more API fuzzing and fix the issues encountered.
...
Only change from original code review is the closing of files
opened in the test.
- Fixed integer checks in a couple of places.
- Added closed checks to async operations.
More changes like this coming but I'm splitting the work up to not
make the review too large.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10414021
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7790 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-21 10:52:01 +00:00
ager@google.com
330aa1ab66
Revert "Add more API fuzzing and fix the issues encountered."
...
I know what is wrong but don't have the time to fix it right now.
I open a lot of files that are not closed and therefore the directory
cannot be deleted on Windows. Will fix ASAP.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10398053
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7684 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-16 13:02:48 +00:00
ager@google.com
ceb6a9b621
Add more API fuzzing and fix the issues encountered.
...
- Fixed integer checks in a couple of places.
- Added closed checks to async operations.
More changes like this coming but I'm splitting the work up to not
make the review too large.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10382194
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7683 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-16 12:52:10 +00:00
ager@google.com
5fb75d3952
Change dart:io to use Future for one-shot operations.
...
This appears to be what a lot of our users are doing and it is the
style used in our other libraries.
Noteworthy changes:
- File and Directory objects are now immutable.
- Directory.list returns an active lister object.
- Write operations on files return futures and the
onNoPendingWrites handler is gone. The same
functionality is there by using 'then' on the
future returned from the last write operation.
- Process starting is now done with static methods:
-- Process.start yields an InteractiveProcess.
-- Process.run yields a Future<ProcessResult>
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10392023
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7529 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-11 06:09:42 +00:00
cshapiro@google.com
1472427af8
Revert "Revert "Implement {Int,Uint}{8,16,32,64} and Float{32,64} typed arrays.""
...
This reverts commit 63480a81fccbde001494dd535cd06a8fa02ed261.
Review URL: https://chromiumcodereview.appspot.com//10379018
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7352 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-04 23:16:09 +00:00
ager@google.com
4cbcc366bb
Fix inconsistent file error messages.
...
R=iposva@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10361003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7273 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-03 11:48:19 +00:00
ager@google.com
c2e4045ecd
Fix type assertion error in dart:io File library.
...
R=sgjesse@google.com
BUG=dartbug.com/2776
Review URL: https://chromiumcodereview.appspot.com//10265023
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7179 260f80e4-7a28-3924-810f-c04153c831b5
2012-05-01 06:32:17 +00:00
ager@google.com
29a3df3e1a
Add the name of the file to exceptions on failed file operations.
...
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10270012
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7155 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-30 13:40:10 +00:00
ager@google.com
a638ccc0f7
Make sure that errors are thrown when there is no error handler
...
on a FileInputStream.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//10206023
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7075 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-27 12:01:17 +00:00
sgjesse@google.com
33565cd64a
Change the error handling in dart:io
...
1. Change the argument on all onError handlers from Exception to
Dynamic
2. Throw an exception if an error ocours and there is no error handler
present for handling it.
For sockets there is the complication that an error on a socket is
reported to the socket error handler, and each of the stream error
handlers. The solution to this is to throw an exception if there was
no error handler on either the socket or one of the streams.
Fixed a number of bugs in tests revealed by errors no longer being
silently ignored.
R=ager@google.com
BUG=none
TEST=tests/standalone/src/io/*
Review URL: https://chromiumcodereview.appspot.com//10173024
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@6994 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-26 08:12:17 +00:00
ager@google.com
f366f9d913
Make it an error to call close twice on a file using the async API.
...
This is to make it consistent with the sync API.
Additionally, fix situations where a non-exception was passed to
error handlers on File objects.
R=sgjesse@google.com
BUG=dartbug.com/2451
TEST=standalone/io/File*
Review URL: https://chromiumcodereview.appspot.com//10095009
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@6564 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-16 11:32:03 +00:00
ager@google.com
aba2e48950
Support length operation without opening file.
...
Use fstat instead of multiple seek calls to get length of
opened files.
R=sgjesse@google.com
BUG=dartbug.com/1592
TEST=standalone/io/File*Test
Review URL: https://chromiumcodereview.appspot.com//10065013
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@6459 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-12 11:47:32 +00:00
ager@google.com
c6a91ef4b6
Remove check whether async has been used from File objects.
...
It makes it hard to use libraries and doesn't really help.
R=sgjesse@google.com
BUG=dartbug.com/2426
TEST=
Review URL: https://chromiumcodereview.appspot.com//10054005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@6400 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-11 09:27:53 +00:00
sgjesse@google.com
471f1c772c
Add error handling to directory
...
The directory object now has error handling like the rest of the
dart:io. The added tests to some extend overlaps with some of the
tests in DirectpryTest.dart, but I found it better to have error tests
in a single place.
I removed a few type checks sitting in the C++ code for the native
functions as for file we currently don't have them. I have opened
issue 2305 regarding where to do type checks for dart:io native
functions.
R=ager@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9773018
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5866 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-27 08:50:35 +00:00
sgjesse@google.com
cdc29b23f0
Add error handling to random access file
...
Now all both sync and async methods on File and RandomAccessFile
should have correct error handling.
Changed readByte and readByteSync to return -1 instead of
reporting an error when end of file is reached. It seems to make
the most sense.
The amount of boiler-plate code in both the native functions and
native port functions in file.cc is growing. Maybe we should
consider some refactoring, e.g. with a table of the expected
argument types for each native port functions together with known
position of the FILE* argument.
R=ager@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9839053
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5812 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-26 05:54:49 +00:00
sgjesse@google.com
7fa9f1fe88
Add error handling to socket streams
...
Change the streams onError callbacks to get an Exception argument on
all streams.
Added actual error handling to the socket streams.
As it is difficult to determine where an error should be reported I
decided to call all the registered onError callbacks, that is on the
socket itself and on both input and output stream.
Did some additional cleanup of the naming of OnError argument in some tests.
R=ager@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9812007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5717 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-21 14:40:15 +00:00
iposva@google.com
5ee85db5f4
Reapply part of r5325.
...
- Fix use of String operator + in IO libraries.
Previously reviewed as part of https://chromiumcodereview.appspot.com/9690003
Review URL: https://chromiumcodereview.appspot.com//9725001
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5597 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-16 22:19:23 +00:00
whesse@google.com
d51bb2b427
Fix some minor static type issues in dart:io implementation.
...
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9703023
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5514 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-15 09:34:51 +00:00
sgjesse@google.com
84836f8c56
Error reporting on File in dart:io
...
This implements consistent error reporting on all methods on File in dart:io. The async onError method is called with an exception argument which is the same exception as would have been thrown from the corresponding sync method.
The one method on Directory which already did this has been updated as well.
R=ager@google.com
BUG=none
TEST=tests/standalone/src/io/FileTest.dart, tests/standalone/src/io/FileInvalidArgumentsTest.dart
Review URL: https://chromiumcodereview.appspot.com//9630012
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5396 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-13 13:00:47 +00:00
sigmund@google.com
2b5952ac6c
SendPort + ReceivePort changes:
...
- document what are valid messages in SendPort.send
- change SendPort.call to return a future of the reply
- remove ReceivePort.singleShot
Review URL: https://chromiumcodereview.appspot.com//9652001
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5368 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-12 22:52:36 +00:00
iposva@google.com
993cd03e41
- Fix build by rolling back r5324, r5325.
...
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5333 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-12 16:31:12 +00:00
iposva@google.com
8ca5ba4d15
- Fix use of String operator + in corelib and standalone libraries.
...
Review URL: https://chromiumcodereview.appspot.com//9690003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5325 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-12 15:26:55 +00:00
sgjesse@google.com
4491ea144d
Add writeString method to OutputStream
...
All output streams now supports writeString which takes the encoding
to be used when transforming the string into a sequence of bytes.
This change also introduces an Encoding interface and Encodings class
as a repository for the supported encodings. Currently this is only
UTF-8, ISO-8859-1 and ASCII. All methods in dart:io which previously
used a String to represent the encoding now uses objects implementing
Encoding.
In this change dart:io is still using the internal UTF-8 encoder used
by the HTTP implementation. I will look into using the one in dart:utf
in a separate change.
R=ager@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9653026
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5231 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-09 13:49:20 +00:00
ager@google.com
b2b123d24b
Update Timer API to take the callback as the last parameter.
...
This makes the code easier to read when the callback actually does
work:
new Timer(1000, (t) {
// do
// lots
// of
// stuff
});
Also, it is more consistent with the rest of the APIs.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9597015
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4945 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-05 12:43:41 +00:00
ager@google.com
242bba108b
Reapply dart:io API changes.
...
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9568004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4790 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-01 10:07:35 +00:00
ager@google.com
fd31551ca4
Revert "Rename blahHandler to onBlah throughout dart:io."
...
D'oh! I need to update the test binaries as well. Reverting, building
and putting back in again.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9570004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4785 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-01 09:43:15 +00:00
ager@google.com
40e0bceab5
Rename blahHandler to onBlah throughout dart:io.
...
Additionally, change all single-shot methods to take their callback as an argument instead of registering it on the object.
I have attempted to find all uses in the repo but there might
be some firefighting to do when this lands.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9500002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4784 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-01 09:36:04 +00:00
ager@google.com
f1b2e219ce
Fix close callback on FileInputStreams.
...
Not waiting for the underlying file to actually close before
setting streamMarkedClosed can lead to too early close callbacks.
R=sgjesse@google.com
BUG=dart:1922
TEST=standalone/FileTest.dart
Review URL: https://chromiumcodereview.appspot.com//9540009
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4754 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-29 15:42:19 +00:00
ager@google.com
4d94b5c4d9
Move back to having File.open{Input,Output}Stream return the stream directly.
...
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9487005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4677 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-28 12:28:42 +00:00
whesse@google.com
87466eccdd
Fix type warnings in dart:io library.
...
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9494004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4672 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-28 11:09:41 +00:00
ager@google.com
acc7252c25
Fix type warning.
...
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9487003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4663 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-28 08:51:07 +00:00
ager@google.com
103804d7f2
Make FileInputStream and FileOutputStream actually asynchronous.
...
Use the async API of the underlying file.
This also means that openInputStream and openOutputStream can
directly return the stream without performing IO. I'll do that
change as a follow-up.
R=sgjesse@google.com
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com//9474004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4662 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-28 08:38:25 +00:00
ager@google.com
e286176171
Implement File.{readAsBytes, readAsText, readAsLines}.
...
Convenience methods to use if all you care about is getting the
entire contents of a file.
R=sgjesse@google.com
BUG=1579
TEST=standalone/FileTest
Review URL: https://chromiumcodereview.appspot.com//9452014
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4568 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-24 13:31:38 +00:00
sgjesse@google.com
5a38a88099
Port async file operations to be using native ports instead or an isolate
...
R=ager@google.com
Review URL: https://chromiumcodereview.appspot.com//9415043
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4520 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-23 11:11:48 +00:00
ager@google.com
7e4a36278f
Implement File.directory() and File.directorySync() to get
...
containing directory for a file.
BUG=dart:1618
TEST=standalone/FileTest
Review URL: https://chromiumcodereview.appspot.com//9416096
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4464 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-22 16:18:39 +00:00