Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Bugs

[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds

 

 

First page Previous page 1 2 Next page Last page  View All Python bugs RSS feed   Index | Next | Previous | View Threaded


report at bugs

Apr 19, 2012, 3:58 PM

Post #1 of 30 (105 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds

Larry Hastings <larry [at] hastings> added the comment:

Sorry about the delay; laptop died, finally dealt with reviving the data off it. Also: fixed spelling error in title.

----------
title: add st_*time_ns fileds to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds -> add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 24, 2012, 3:05 PM

Post #2 of 30 (98 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

Attached is round 1 of my patch adding the ns= parameter to utime, futimes, and lutimes.

Some notes:

* I admit the "see utime for use of times and ns" documentation dodge
(for both Doc and docstring) is lazy. Yet I'm still hoping to get
away with it.
* I removed futimens because it's now extraneous.
* I didn't add ns= to utimensat or futimesat. That's because I'm hoping to get rid of them via #14626. (And lutimes too, come to think of it!) I hereby promise that if they survive to June 15th I'll add ns= support
before 3.3 hits beta.
* At last, shutil.copystat (and therefore shutil.copy2) now *exactly*
preserves timestamps. :D

----------
keywords: +patch
Added file: http://bugs.python.org/file25354/larry.utime.ns.1.patch

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 24, 2012, 3:10 PM

Post #3 of 30 (98 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

STINNER Victor <victor.stinner [at] gmail> added the comment:

> I removed futimens because it's now extraneous.

futimens() has nice feature: it is possible to only update atime only update mtime, or use "now" as the new atime and/or mtime.

3882 If *_nsec is specified as UTIME_NOW, the timestamp is updated to the\n\
3883 current time.\n\
3884 If *_nsec is specified as UTIME_OMIT, the timestamp is not updated.

os.utimensat() has the same feature. Is it possible that os.utimensat() is not available whereas os.futimens() is availalble?

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 24, 2012, 3:15 PM

Post #4 of 30 (102 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

> futimens() has nice feature: it is possible to only update atime
> only update mtime, or use "now" as the new atime and/or mtime.

YAGNI. Worst case, you can use call futimes twice, once with no args, then fstat() it to get the current-ish time and rewrite the fields selectively.

Do you have code where you selectively use UTIME_NOW for only one of the two fields?

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 24, 2012, 5:10 PM

Post #5 of 30 (99 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

Second round of my patch, incorporating nearly all of Victor's suggestions. Thanks, Victor!

----------
Added file: http://bugs.python.org/file25356/larry.utime.ns.2.patch

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 26, 2012, 2:48 AM

Post #6 of 30 (94 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

Anybody else? I guess I'm gonna juuuust miss Alpha 3, but if nobody has any other objections I'll check this in today (Thursday).

If you want me to hold off just let me know.

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 26, 2012, 11:59 AM

Post #7 of 30 (97 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Changes by Arfrever Frehtes Taifersar Arahesis <Arfrever.FTA [at] GMail>:


----------
title: add st_*time_ns fileds to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds -> add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 26, 2012, 12:30 PM

Post #8 of 30 (93 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

FYI, Martin was replying to Guido's comment from more than a month ago, when I posted revision #2 of my first patch series. By sheer coincidence I posted revision #2 of a new patch series yesterday. But Reitveld worked fine for that!

Anyway--no comments? Normally I find the patch review process akin to getting pecked to death by ducks. It's hard to believe this one might go in after only one revision. Somebody pinch me!

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

Apr 29, 2012, 10:57 AM

Post #9 of 30 (93 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

STINNER Victor <victor.stinner [at] gmail> added the comment:

Failure on x86 OpenIndiana 3.x:

FAIL: test_stat_attributes (test.test_os.StatAttributeTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/export/home/buildbot/32bits/3.x.cea-indiana-x86/build/Lib/test/test_os.py", line 240, in test_stat_attributes
self.check_stat_attributes(self.fname)
File "/export/home/buildbot/32bits/3.x.cea-indiana-x86/build/Lib/test/test_os.py", line 199, in check_stat_attributes
self.assertEqual(floaty, nanosecondy)
AssertionError: 133572199178458 != 133572199178457

http://www.python.org/dev/buildbot/all/builders/x86%20OpenIndiana%203.x/builds/3494/steps/test/logs/stdio

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 12:31 AM

Post #10 of 30 (87 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Roundup Robot <devnull [at] psf> added the comment:

New changeset bba131e48852 by Larry Hastings in branch 'default':
Issue #14127: Add ns= parameter to utime, futimes, and lutimes.
http://hg.python.org/cpython/rev/bba131e48852

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 12:37 AM

Post #11 of 30 (87 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

@haypo: Thanks for pointing that out buildbot failure! The OpenIndiana buildbot was bit by a rounding error. I fixed it by adding in a fudge factor it--I snuck in one last change just now. I weakened the unit test as follows:

- self.assertEqual(floaty, nanosecondy)
+ self.assertAlmostEqual(floaty, nanosecondy, delta=2)

Also: I'm leaving this issue open for now, to remind myself to add ns= to utimensat and futimesat if they're still alive on June 15th.

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 1:18 AM

Post #12 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

STINNER Victor <victor.stinner [at] gmail> added the comment:

> The OpenIndiana buildbot was bit by a rounding error.

How do we have rounding issue with only integers?

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 1:24 AM

Post #13 of 30 (87 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

We don't!

The test that failed compares the ns_[amc]time and ns_[amc]time_ns fields to ensure they're roughly equivalent. Note that the former fields are floats, which by now ought not to be news to you.

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 5:57 AM

Post #14 of 30 (87 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

STINNER Victor <victor.stinner [at] gmail> added the comment:

http://www.python.org/dev/buildbot/all/builders/AMD64%20OpenIndiana%203.x/builds/3388/steps/test/logs/stdio

ERROR: test_copy2_symlinks (test.test_shutil.TestShutil)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/export/home/buildbot/64bits/3.x.cea-indiana-amd64/build/Lib/test/test_shutil.py",
line 328, in test_copy2_symlinks
shutil.copy2(src_link, dst, symlinks=True)
File "/export/home/buildbot/64bits/3.x.cea-indiana-amd64/build/Lib/shutil.py",
line 193, in copy2
copystat(src, dst, symlinks=symlinks)
File "/export/home/buildbot/64bits/3.x.cea-indiana-amd64/build/Lib/shutil.py",
line 157, in copystat
utime_func(dst, ns=(st.st_atime_ns, st.st_mtime_ns))
TypeError: _nop() got an unexpected keyword argument 'ns'

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 12:57 PM

Post #15 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Roundup Robot <devnull [at] psf> added the comment:

New changeset cdc4e0f8135d by Larry Hastings in branch 'default':
Issue #14127: Fix no-op stub for platforms that lack some "os" functions.
http://hg.python.org/cpython/rev/cdc4e0f8135d

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 5:16 PM

Post #16 of 30 (87 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Richard Oudkerk <shibturn [at] gmail> added the comment:

bba131e48852 causes crashes on Windows.

The attached patch fixes the crash and makes test_os pass for me.

However, using "PyErr_ExceptionMatches(PyExc_RuntimeError)" to check whether to try again using narrow strings is ugly. Maybe utime_read_time_arguments() should be changed to have three possible return values.

----------
nosy: +sbt
Added file: http://bugs.python.org/file25448/utime-hack.patch

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 3, 2012, 11:22 PM

Post #17 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

> bba131e48852 causes crashes on Windows.
>
> The attached patch fixes the crash and makes test_os pass for me.
>
> However, using "PyErr_ExceptionMatches(PyExc_RuntimeError)" to check
> whether to try again using narrow strings is ugly. Maybe
> utime_read_time_arguments() should be changed to have three possible
> return values.

I appreciate the feedback, and the patch. And I agree--we should be able to find a better fix than that particular band-aid. Can we hold off on checking in a patch for now?

TBH I don't understand why it should crash, and therefore how your patch helps. Trying again using narrow strings should always work; indeed, the code did that before I touched it. Can you describe how it crashes?

(p.s. Considering that I can't test on Windows myself, I'm pretty happy that the code works as well as it does!)

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 12:51 AM

Post #18 of 30 (89 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Richard Oudkerk <shibturn [at] gmail> added the comment:

> TBH I don't understand why it should crash, and therefore how your patch
> helps. Trying again using narrow strings should always work; indeed, the
> code did that before I touched it. Can you describe how it crashes?

The important part of the patch is the removal of the "!" in

if (!utime_read_time_arguments(&ua)) {

Without that change, if utime_read_time_arguments(&ua) fails then the unicode path is wrongly chosen. Then PyUnicode_AsUnicode(upath) is called when upath has not been initialized.

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 1:03 AM

Post #19 of 30 (88 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Richard Oudkerk <shibturn [at] gmail> added the comment:

Without the check for RuntimeError

os.utime("foo", times=(5,5), ns=(5,5))

raises

TypeError("TypeError: 'str' does not support the buffer interface")

because we have fallen through to the narrow path. The correct error is

RuntimeError("utime: you may specify either 'times' or 'ns' but not both")

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 2:17 AM

Post #20 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

Let me recap, just to make sure I have it straight. There are two errors on Windows:

* The ! on (what is currently) line 3770 is wrong:
if (!utime_read_time_arguments(&ua)) {

* If you pass in a Unicode string but also pass in both times and ns,
you get the wrong error: effectively it's complaining that the string
is not narrow, when it should be complaining about having both times
and ns.

For the former, obviously removing the ! is correct. But I like your idea of making the utime_read_time_argument() return value tell you what happened; that's what the Windows code needs to know.

So here it is! Please see the attached patch.

----------
Added file: http://bugs.python.org/file25451/larry.utime.win32.bugfix.1.patch

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 2:30 AM

Post #21 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Richard Oudkerk <shibturn [at] gmail> added the comment:

> Let me recap, just to make sure I have it straight. There are two errors
> on Windows:

That's right. The patch looks good and passes for me on Windows.

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 2:32 AM

Post #22 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Roundup Robot <devnull [at] psf> added the comment:

New changeset fc5d2f4291ac by Larry Hastings in branch 'default':
Issue #14127: Fix two bugs with the Windows implementation.
http://hg.python.org/cpython/rev/fc5d2f4291ac

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 3:48 AM

Post #23 of 30 (85 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Richard Oudkerk <shibturn [at] gmail> added the comment:

There is another problem causing a fatal error in test_posix on Unix.

The attached patch fixes it: *ua->path should be decrefed not ua->path.

----------
Added file: http://bugs.python.org/file25452/utime_read_time_arguments.patch

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 3:52 AM

Post #24 of 30 (86 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Larry Hastings <larry [at] hastings> added the comment:

Looks good to me. You're a core contributor, yes? If not let me know and I'll commit it.

Though I must admit I'm baffled how I haven't seen that crash. I've run the unit tests a zillion times on this patch.

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com


report at bugs

May 4, 2012, 3:57 AM

Post #25 of 30 (87 views)
Permalink
[issue14127] add st_*time_ns fields to os.stat(), add ns keyword to os.*utime*(), os.*utimens*() expects a number of nanoseconds [In reply to]

Richard Oudkerk <shibturn [at] gmail> added the comment:

> Looks good to me. You're a core contributor, yes? If not let me know and
> I'll commit it.

I will commit.

> Though I must admit I'm baffled how I haven't seen that crash. I've run
> the unit tests a zillion times on this patch.

Were you running test_posix or only test_os?

----------

_______________________________________
Python tracker <report [at] bugs>
<http://bugs.python.org/issue14127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com

First page Previous page 1 2 Next page Last page  View All Python bugs RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.