[Biocorba-l] Bioperl biocorba server code checked in

Brad Chapman chapmanb@arches.uga.edu
Sat, 10 Feb 2001 08:50:00 -0500 (EST)


--+xndKkvbnB
Content-Type: text/plain; charset=us-ascii
Content-Description: message body text
Content-Transfer-Encoding: 7bit

[patches for bugs]
> Feel free to send them on-list ;) - I am hacking biocorba-server at the
> moment (between gene builds/assembly shit over at Ensembl) and would be
> happy to fix them...

Okee dokee :-). Below is the buffer that describes the changes I
fixed, and the stuff I found I couldn't fix. Six patches are also
attached. Thanks for checking this out.

> I'd love to see biopython/bioperl (and biojava for that
> matter) interoperability in-real-life...

I have been using biocorba to go between Biopython and Bioperl quite a 
bit in my research (if you can call my research real life :-). Have
been using a Bioperl SeqDB server to hold the Arabidopsis genome, and
been messing with it from there. The code is at:

http://www.bioinformatics.org/bradstuff/brad-moinmoin/moin.cgi/PgmlLibrary

if you are really into it. Most of the biocorba stuff needs an update
-- I'll hopefully be doing that soon now that I am going to have a
server that I can use :-)

Brad

Bug Buffer
==========
Fixed
-----
* PrimarySeq::subseq -- was trying to check max_request_length, but 
there wasn't any such thing. Just defined an internal hash value for
it, set to some arbitrary big number like 1Mb. 

* PrimarySeqDB::version -- getting seg-faults when trying to call
this. Problem was a reference to seqdb, instead of _seqdb. Also, the
database tries to return a version like 0.2, but it can't do this since
only longs are defined, so zero is always returned.

* PrimarySeqDB::get_PrimarySeq -- has the same problem with referencing
seqdb instead of _seqdb.

* PrimarySeqDB::get_PrimarySeq again -- There also doesn't seem to be
a function in the Bio::Index stuff to get a PrimarySeq directly from an
id. Instead, I got the Seq, and then got a primary seq from this.

* PrimarySeq::get_SeqFeatures_in_region_by_type -- Complaints about
Bio::Range not having a "new". Fixed by including use Bio::Range;

* SeqFeatureIterator::next -- wasn't checking for EndOfStream;

* SeqFeatureVector::elementAt -- wasn't turning the bioperl SeqFeature
object into a biocorba SeqFeature object.

* Seq::get_SeqFeatures_in_region[_by_type] -- was raising
UnableToProcess errors instead of OutOfRange errors.

* Seq::get_SeqFeatures_in_region[_by_type] -- trying to use 
range->contains on a SeqFeature object and not a range object. Changed
to create a range for the SeqFeature, and then check.

Not fixed
---------
* Seq::get_SeqFeatures_in_region/by_type -- All of these functions first
make a call to all_Features, which retrieves BioCorba objects, and not
bioperl objects. Then when you try to get a SeqFeature out of a Vector 
or Iterator created with these objects, the SeqFeature constructor will
die with: "Must have poa and seq into Seq Feature." I didn't want to get
too into this, since this would involve rewriting parts of these 
implementations -- I'm not sure about the best way to handle it.

* PrimarySeq/AnonymousSeq implementation -- one issue with the way you
implemented these as one class is that if a client tries to narrow a
PrimarySeq object to the AnonymousSeq interface (which it should be able
to do), the server will die since it has no AnonymousSeq implementation
to narrow to. The solution to this would be to implement AnonymousSeq
separately and then inherit from it with PrimarySeq.

* Unknown::query_interface -- Anything I do here causes the server to 
crash :-<. If you try to return anything but a CORBA::Object, ORBit
will complain about having problems marshalling the object, and if you
try to return a CORBA::Object, the server seg-faults. I don't know what
to do to just keep this from blowing up. Any thoughts?


--+xndKkvbnB
Content-Type: application/octet-stream
Content-Description: Base.pm diff
Content-Disposition: attachment;
	filename="Base.pm.diff"
Content-Transfer-Encoding: base64

KioqIEJhc2UucG0ub3JpZwlGcmkgRmViICA5IDE0OjU1OjU5IDIwMDEKLS0tIEJhc2UucG0J
V2VkIEZlYiAgNyAyMDowNjo1MiAyMDAxCioqKioqKioqKioqKioqKgoqKiogNjcsNzQgKioq
KgogIHVzZSBzdHJpY3Q7CiAgCiAgdXNlIEJpbzo6Um9vdDo6Um9vdEk7CiAgCiEgQElTQSA9
IHF3KEJpbzo6Um9vdDo6Um9vdEkpOwogIAogIHN1YiBuZXcgewogICAgICBteSAoJGNsYXNz
LCBAYXJncykgPSBAXzsKLS0tIDY3LDc1IC0tLS0KICB1c2Ugc3RyaWN0OwogIAogIHVzZSBC
aW86OlJvb3Q6OlJvb3RJOworIHVzZSBDT1JCQTo6T1JCaXQ7CiAgCiEgQElTQSA9IHF3KEdO
T01FOjpVbmtub3duIEJpbzo6Um9vdDo6Um9vdEkpOwogIAogIHN1YiBuZXcgewogICAgICBt
eSAoJGNsYXNzLCBAYXJncykgPSBAXzsKKioqKioqKioqKioqKioqCioqKiAxNTAsMTU2ICoq
KioKICAKICA9Y3V0CiAgCiEgc3ViIHF1ZXJ5X2ludGVyZmFjZSB7IHJldHVybiAkX1swXTsg
fQogIAogID1oZWFkMiBnZXRfYWN0aXZhdGVkX29iamVjdF9yZWZlcmVuY2UKICAKLS0tIDE1
MSwxNjAgLS0tLQogIAogID1jdXQKICAKISBzdWIgcXVlcnlfaW50ZXJmYWNlIHsKISAgIG15
ICgkc2VsZiwgJHJlcG9pZCkgPSBAXzsKISAgIHJldHVybiBuZXcgQ09SQkE6Ok9iamVjdDsK
ISB9CiAgCiAgPWhlYWQyIGdldF9hY3RpdmF0ZWRfb2JqZWN0X3JlZmVyZW5jZQogIAo=

--+xndKkvbnB
Content-Type: application/octet-stream
Content-Description: PrimarySeq.pm diff
Content-Disposition: attachment;
	filename="PrimarySeq.pm.diff"
Content-Transfer-Encoding: base64

KioqIFByaW1hcnlTZXEucG0ub3JpZwlGcmkgRmViICA5IDE0OjU1OjU5IDIwMDEKLS0tIFBy
aW1hcnlTZXEucG0JV2VkIEZlYiAgNyAxOTo0MjozMCAyMDAxCioqKioqKioqKioqKioqKgoq
KiogODEsODYgKioqKgotLS0gODEsOTEgLS0tLQogICAgICB9CiAgICAgICRzZWxmLT5fc2Vx
KCRzZXEpOwogICAgICAkc2VsZi0+aXNfY2lyY3VsYXIoMCk7CisgCisgICAgICMgbmVlZCB0
byBkZWZpbmUgc29tZSBraW5kIG9mIG1heCByZXF1ZXN0IGxlbmd0aCBmb3Igc3Vic2Vxcwor
ICAgICAjIHRoaXMgaXMgYXJiaXRyYXJ5CisgICAgICRzZWxmLT57J21heF9yZXF1ZXN0X2xl
bmd0aCd9ID0gMTAwMDAwMDsKKyAKICAgICAgcmV0dXJuICRzZWxmOwogIH0KICAKKioqKioq
KioqKioqKioqCioqKiAxNzYsMTkxICoqKioKICA9Y3V0CiAgCiAgc3ViIHN1YnNlcSB7CiEg
ICAgIG15ICgkc2VsZiwkc3RhcnQsJGVuZCkgPSBAXzsKICAgICAgaWYoICFkZWZpbmVkICRl
bmQgfHwgIWRlZmluZWQgJHN0YXJ0IHx8ICgkZW5kIDwgJHN0YXJ0KSApIHsKICAJJHN0YXJ0
ID0gJycgaWYoICFkZWZpbmVkICRzdGFydCk7CiAgCSRlbmQgPSAnJyBpZiggIWRlZmluZWQg
JGVuZCk7CiAgCXRocm93IG9yZzo6YmlvY29yYmE6OnNlcWNvcmU6Ok91dE9mUmFuZ2UKICAJ
ICAgIChyZWFzb249PiJzdGFydCBpcyBub3QgYmVmb3JlIGVuZCAoJHN0YXJ0LCRlbmQiKTsK
ISAgICAgfSBlbHNpZiggKCRlbmQgLSAkc3RhcnQgKSA+ICRzZWxmLT5tYXhfcmVxdWVzdF9s
ZW5ndGggKSB7CiAgCXRocm93IG9yZzo6YmlvY29yYmE6OnNlcWNvcmU6OlJlcXVlc3RUb29M
YXJnZQogIAkgICAgKHJlYXNvbj0+ICgkZW5kLSRzdGFydCkgLiAiIGlzIGxhcmdlciB0aGFu
IG1heCByZXF1ZXN0IGxlbmd0aCIsIAohIAkgICAgIHN1Z2dlc3RlZF9zaXplPT4kc2VsZi0+
bWF4X3JlcXVlc3RfbGVuZ3RoKTsKICAgICAgfSAKICAKICAgICAgbXkgJHJldDsKLS0tIDE4
MSwxOTcgLS0tLQogID1jdXQKICAKICBzdWIgc3Vic2VxIHsKISAgICAgbXkgKCRzZWxmLCAk
c3RhcnQsICRlbmQpID0gQF87CiEgCiAgICAgIGlmKCAhZGVmaW5lZCAkZW5kIHx8ICFkZWZp
bmVkICRzdGFydCB8fCAoJGVuZCA8ICRzdGFydCkgKSB7CiAgCSRzdGFydCA9ICcnIGlmKCAh
ZGVmaW5lZCAkc3RhcnQpOwogIAkkZW5kID0gJycgaWYoICFkZWZpbmVkICRlbmQpOwogIAl0
aHJvdyBvcmc6OmJpb2NvcmJhOjpzZXFjb3JlOjpPdXRPZlJhbmdlCiAgCSAgICAocmVhc29u
PT4ic3RhcnQgaXMgbm90IGJlZm9yZSBlbmQgKCRzdGFydCwkZW5kIik7CiEgICAgIH0gZWxz
aWYoICgkZW5kIC0gJHN0YXJ0ICkgPiAkc2VsZi0+eydtYXhfcmVxdWVzdF9sZW5ndGgnfSAp
IHsKICAJdGhyb3cgb3JnOjpiaW9jb3JiYTo6c2VxY29yZTo6UmVxdWVzdFRvb0xhcmdlCiAg
CSAgICAocmVhc29uPT4gKCRlbmQtJHN0YXJ0KSAuICIgaXMgbGFyZ2VyIHRoYW4gbWF4IHJl
cXVlc3QgbGVuZ3RoIiwKISAJICAgICBzdWdnZXN0ZWRfc2l6ZT0+JHNlbGYtPnsnbWF4X3Jl
cXVlc3RfbGVuZ3RoJ30pOwogICAgICB9CiAgCiAgICAgIG15ICRyZXQ7CioqKioqKioqKioq
KioqKgoqKiogMjY1LDI3MSAqKioqCi0tLSAyNzEsMjg2IC0tLS0KICAKICBzdWIgcHJpbWFy
eV9pZCB7CiAgICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgICMgWFhYIFRoaXMgaXMgdWds
eSAtLSB3ZSByZWFjaCBpbnRvIHRoZSBpbnRlcm5hbCBoYXNoIG9mIEJpbzo6U2VxIHRvCisg
ICAgICMgY2hlY2sgd2hldGhlciBvciBub3QgdGhlcmUgaXMgYSBwcmltYXJ5IGlkIGRlZmlu
ZWQuIFdlIGRvbid0IHdhbnQKKyAgICAgIyB0byByZXR1cm4gdGhlIHN0cmluZ2lmaWVkIGhh
cyB0aGF0IEJpbzo6U2VxIGdpdmVzIGJhY2sgaWYgdGhlcmUgaXMKKyAgICAgIyBubyBpZCAt
LSB3ZSdsbCByZXR1cm4gInVua25vd24iIGxpa2UgYWNjZXNzaW9uX251bWJlciBkb2VzLiBN
YXliZQorICAgICAjIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBjaGVjayBpZiB0aGUgaWQg
ZXhpc3RzIG9yIG5vdC4uLgorICAgICBpZiAoIWV4aXN0cyAkc2VsZi0+X3NlcS0+eydwcmlt
YXJ5X2lkJ30pIHsKKyAgICAgICByZXR1cm4gInVua25vd24iOworICAgICB9IGVsc2Ugewog
ICAgICAgIHJldHVybiAkc2VsZi0+X3NlcS0+cHJpbWFyeV9pZCgpOworICAgICB9CiAgfQog
IAogID1oZWFkMSBQcml2YXRlIE1ldGhvZHMK

--+xndKkvbnB
Content-Type: application/octet-stream
Content-Description: PrimarySeqDB.pm diff
Content-Disposition: attachment;
	filename="PrimarySeqDB.pm.diff"
Content-Transfer-Encoding: base64

KioqIFByaW1hcnlTZXFEQi5wbS5vcmlnCUZyaSBGZWIgIDkgMTQ6NTU6NTkgMjAwMQotLS0g
UHJpbWFyeVNlcURCLnBtCUZyaSBGZWIgIDkgMDU6NDQ6MTQgMjAwMQoqKioqKioqKioqKioq
KioKKioqIDExOSwxMjUgKioqKgogIAogIHN1YiB2ZXJzaW9uIHsKICAgICAgbXkgJHNlbGYg
PSBzaGlmdDsKISAgICAgcmV0dXJuICRzZWxmLT5zZXFkYi0+X3ZlcnNpb247CiAgfQogIAog
ID1oZWFkMiBnZXRfUHJpbWFyeVNlcVZlY3RvcgotLS0gMTE5LDEyNSAtLS0tCiAgCiAgc3Vi
IHZlcnNpb24gewogICAgICBteSAkc2VsZiA9IHNoaWZ0OwohICAgICByZXR1cm4gJHNlbGYt
Pl9zZXFkYi0+X3ZlcnNpb247CiAgfQogIAogID1oZWFkMiBnZXRfUHJpbWFyeVNlcVZlY3Rv
cgoqKioqKioqKioqKioqKioKKioqIDE1OSwxNjkgKioqKgogIHN1YiBnZXRfUHJpbWFyeVNl
cSB7CiAgICAgICMgdGhyb3dzIChVbmFibGVUb1Byb2Nlc3MpCiAgICAgIG15ICgkc2VsZiwk
aWQpID0gQF87CiEgICAgIG15ICRzZXEgPSAkc2VsZi0+c2VxZGItPmdldF9QcmltYXJ5U2Vx
X2J5X3ByaW1hcnlfaWQoJGlkKTsKICAgICAgCiEgICAgIGlmKCBkZWZpbmVkICRzZXEgKSB7
CiAgCW15ICRzZXJ2YW50ID0gbmV3IEJpbzo6Q29yYmFTZXJ2ZXI6OlByaW1hcnlTZXEoJy1w
b2EnID0+ICRzZWxmLT5wb2EsIAohIAkJCQkJCSctc2VxJyA9PiAkc2VxKTsKICAJcmV0dXJu
ICRzZXJ2YW50LT5nZXRfYWN0aXZhdGVkX29iamVjdF9yZWZlcmVuY2U7CiAgICAgIH0gZWxz
ZSB7CiAgCXRocm93IG9yZzo6YmlvY29yYmE6OnNlcWNvcmU6OlVuYWJsZVRvUHJvY2Vzcwot
LS0gMTU5LDE3MCAtLS0tCiAgc3ViIGdldF9QcmltYXJ5U2VxIHsKICAgICAgIyB0aHJvd3Mg
KFVuYWJsZVRvUHJvY2VzcykKICAgICAgbXkgKCRzZWxmLCRpZCkgPSBAXzsKISAgICAgbXkg
JHNlcSA9ICRzZWxmLT5fc2VxZGItPmdldF9TZXFfYnlfcHJpbWFyeV9pZCgkaWQpOwohICAg
ICBteSAkcF9zZXEgPSAkc2VxLT5wcmltYXJ5X3NlcSgpOwogICAgICAKISAgICAgaWYoIGRl
ZmluZWQgJHBfc2VxICkgewogIAlteSAkc2VydmFudCA9IG5ldyBCaW86OkNvcmJhU2VydmVy
OjpQcmltYXJ5U2VxKCctcG9hJyA9PiAkc2VsZi0+cG9hLCAKISAJCQkJCQkgICAgICAgJy1z
ZXEnID0+ICRwX3NlcSk7CiAgCXJldHVybiAkc2VydmFudC0+Z2V0X2FjdGl2YXRlZF9vYmpl
Y3RfcmVmZXJlbmNlOwogICAgICB9IGVsc2UgewogIAl0aHJvdyBvcmc6OmJpb2NvcmJhOjpz
ZXFjb3JlOjpVbmFibGVUb1Byb2Nlc3MK

--+xndKkvbnB
Content-Type: application/octet-stream
Content-Description: Seq.pm diff
Content-Disposition: attachment;
	filename="Seq.pm.diff"
Content-Transfer-Encoding: base64

KioqIFNlcS5wbS5vcmlnCUZyaSBGZWIgIDkgMTQ6NTU6NTkgMjAwMQotLS0gU2VxLnBtCUZy
aSBGZWIgIDkgMTQ6NDg6MTkgMjAwMQoqKioqKioqKioqKioqKioKKioqIDczLDc4ICoqKioK
LS0tIDczLDc5IC0tLS0KICB1c2UgQmlvOjpDb3JiYVNlcnZlcjo6UHJpbWFyeVNlcTsKICB1
c2UgQmlvOjpDb3JiYVNlcnZlcjo6U2VxRmVhdHVyZTsKICB1c2UgQmlvOjpDb3JiYVNlcnZl
cjo6U2VxRmVhdHVyZVZlY3RvcjsKKyB1c2UgQmlvOjpSYW5nZTsKICAKICBASVNBID0gcXco
UE9BX29yZzo6YmlvY29yYmE6OnNlcWNvcmU6OlNlcSBCaW86OkNvcmJhU2VydmVyOjpQcmlt
YXJ5U2VxKTsKICAKKioqKioqKioqKioqKioqCioqKiAxMDQsMTA5ICoqKioKLS0tIDEwNSwx
MTEgLS0tLQogICAgICB9CiAgICAgIG15ICRzID0gbmV3IEJpbzo6Q29yYmFTZXJ2ZXI6OlNl
cUZlYXR1cmVWZWN0b3IoJy1wb2EnICAgPT4gJHNlbGYtPnBvYSwKICAJCQkJCQkgICctaXRl
bXMnID0+IFxAc2YpOworIAogICAgICByZXR1cm4gJHMtPmdldF9hY3RpdmF0ZWRfb2JqZWN0
X3JlZmVyZW5jZSgpOwogIH0KICAKKioqKioqKioqKioqKioqCioqKiAxNTMsMTY2ICoqKioK
ICAgICAgaWYoICRzdGFydCA+ICRzZWxmLT5sZW5ndGggfHwgJHN0YXJ0IDw9IDAgfHwgCiAg
CSRlbmQgPiAkc2VsZi0+bGVuZ3RoIHx8ICRlbmQgPD0gMCB8fCAKICAJJGVuZCA8ICRzdGFy
dCkgewohIAl0aHJvdyAgb3JnOjpiaW9jb3JiYTo6c2VxY29yZTo6VW5hYmxlVG9Qcm9jZXNz
IChyZWFzb249PiJyZXF1ZXN0ZWQgcmVnaW9uICgkc3RhcnQuLiRlbmQpIGlzIG5vdCB2YWxp
ZCBmb3IgdGhpcyBzZXEgKDEuLiIuICRzZWxmLT5sZW5ndGguIikuIik7CQogICAgICB9IAog
ICAgICBteSAkcmFuZ2UgPSBuZXcgQmlvOjpSYW5nZSgtc3RhcnQgPT4gJHN0YXJ0LAogIAkJ
CSAgICAgICAtZW5kICAgPT4gJGVuZCk7CiAgICAgIG15IEBmZWF0c190b19yZXQ7CiAgICAg
IHdoaWxlKCAkaXRlci0+aGFzX21vcmUgKSB7CiAgCW15ICRzZiA9ICRpdGVyLT5uZXh0Owoh
IAlpZiggJHJhbmdlLT5jb250YWlucygkc2YpICkgewogIAkgICAgcHVzaCBAZmVhdHNfdG9f
cmV0LCRzZjsKICAJfQogICAgICB9Ci0tLSAxNTUsMTcwIC0tLS0KICAgICAgaWYoICRzdGFy
dCA+ICRzZWxmLT5sZW5ndGggfHwgJHN0YXJ0IDw9IDAgfHwgCiAgCSRlbmQgPiAkc2VsZi0+
bGVuZ3RoIHx8ICRlbmQgPD0gMCB8fCAKICAJJGVuZCA8ICRzdGFydCkgewohIAl0aHJvdyBv
cmc6OmJpb2NvcmJhOjpzZXFjb3JlOjpPdXRPZlJhbmdlKHJlYXNvbiA9PiAicmVxdWVzdGVk
IHJlZ2lvbiAoJHN0YXJ0Li4kZW5kKSBpcyBub3QgdmFsaWQgZm9yIHRoaXMgc2VxICgxLi4i
LiAkc2VsZi0+bGVuZ3RoLiIpLiIpOwkKICAgICAgfSAKICAgICAgbXkgJHJhbmdlID0gbmV3
IEJpbzo6UmFuZ2UoLXN0YXJ0ID0+ICRzdGFydCwKICAJCQkgICAgICAgLWVuZCAgID0+ICRl
bmQpOwogICAgICBteSBAZmVhdHNfdG9fcmV0OwogICAgICB3aGlsZSggJGl0ZXItPmhhc19t
b3JlICkgewogIAlteSAkc2YgPSAkaXRlci0+bmV4dDsKISAgICAgICAgIG15ICRzZl9yYW5n
ZSA9IG5ldyBCaW86OlJhbmdlKC1zdGFydCA9PiAkc2YtPnN0YXJ0LAohICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLWVuZCA9PiAkc2YtPmVuZCk7CiEgCWlmKCAk
cmFuZ2UtPmNvbnRhaW5zKCRzZl9yYW5nZSkgKSB7CiAgCSAgICBwdXNoIEBmZWF0c190b19y
ZXQsJHNmOwogIAl9CiAgICAgIH0KKioqKioqKioqKioqKioqCioqKiAxOTAsMTk2ICoqKioK
ICAgICAgaWYoICRzdGFydCA+ICRzZWxmLT5sZW5ndGggfHwgJHN0YXJ0IDw9IDAgfHwgCiAg
CSRlbmQgPiAkc2VsZi0+bGVuZ3RoIHx8ICRlbmQgPD0gMCB8fCAKICAJJGVuZCA8ICRzdGFy
dCkgewohIAl0aHJvdyAgb3JnOjpiaW9jb3JiYTo6c2VxY29yZTo6VW5hYmxlVG9Qcm9jZXNz
IChyZWFzb249PiJyZXF1ZXN0ZWQgcmVnaW9uICgkc3RhcnQuLiRlbmQpIGlzIG5vdCB2YWxp
ZCBmb3IgdGhpcyBzZXEgKDEuLiIuICRzZWxmLT5sZW5ndGguIikuIik7CQogICAgICB9IAog
IAogICAgICBteSAkcmFuZ2UgPSBuZXcgQmlvOjpSYW5nZSgtc3RhcnQgPT4gJHN0YXJ0LAot
LS0gMTk0LDIwMCAtLS0tCiAgICAgIGlmKCAkc3RhcnQgPiAkc2VsZi0+bGVuZ3RoIHx8ICRz
dGFydCA8PSAwIHx8IAogIAkkZW5kID4gJHNlbGYtPmxlbmd0aCB8fCAkZW5kIDw9IDAgfHwg
CiAgCSRlbmQgPCAkc3RhcnQpIHsKISAJdGhyb3cgb3JnOjpiaW9jb3JiYTo6c2VxY29yZTo6
T3V0T2ZSYW5nZShyZWFzb249PiJyZXF1ZXN0ZWQgcmVnaW9uICgkc3RhcnQuLiRlbmQpIGlz
IG5vdCB2YWxpZCBmb3IgdGhpcyBzZXEgKDEuLiIuICRzZWxmLT5sZW5ndGguIikuIik7CQog
ICAgICB9IAogIAogICAgICBteSAkcmFuZ2UgPSBuZXcgQmlvOjpSYW5nZSgtc3RhcnQgPT4g
JHN0YXJ0LAoqKioqKioqKioqKioqKioKKioqIDE5OCwyMDQgKioqKgogIAkJCSAgICAgICAK
ICAgICAgd2hpbGUoICRpdGVyLT5oYXNfbW9yZSApIHsKICAJbXkgJHNmID0gJGl0ZXItPm5l
eHQ7CiEgCWlmKCAkcmFuZ2UtPmNvbnRhaW5zKCRzZikgJiYgCiAgCSAgICAkc2YtPnR5cGUg
PX4gLyR0eXBlL2kgKSB7CiAgCSAgICBwdXNoIEBmZWF0c190b19yZXQsJHNmOwogIAl9Ci0t
LSAyMDIsMjEwIC0tLS0KICAKICAgICAgd2hpbGUoICRpdGVyLT5oYXNfbW9yZSApIHsKICAJ
bXkgJHNmID0gJGl0ZXItPm5leHQ7CiEgICAgICAgICBteSAkc2ZfcmFuZ2UgPSBuZXcgQmlv
OjpSYW5nZSgtc3RhcnQgPT4gJHNmLT5zdGFydCwKISAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1lbmQgPT4gJHNmLT5lbmQpOwohIAlpZiggJHJhbmdlLT5jb250
YWlucygkc2ZfcmFuZ2UpICYmIAogIAkgICAgJHNmLT50eXBlID1+IC8kdHlwZS9pICkgewog
IAkgICAgcHVzaCBAZmVhdHNfdG9fcmV0LCRzZjsKICAJfQo=

--+xndKkvbnB
Content-Type: application/octet-stream
Content-Description: SeqFeatureIterator.pm diff
Content-Disposition: attachment;
	filename="SeqFeatureIterator.pm.diff"
Content-Transfer-Encoding: base64

KioqIFNlcUZlYXR1cmVJdGVyYXRvci5wbS5vcmlnCUZyaSBGZWIgIDkgMTQ6NTU6NTkgMjAw
MQotLS0gU2VxRmVhdHVyZUl0ZXJhdG9yLnBtCUZyaSBGZWIgIDkgMTQ6NDg6NDcgMjAwMQoq
KioqKioqKioqKioqKioKKioqIDk3LDEwMyAqKioqCiAgCiAgc3ViIGhhc19tb3JlIHsKICAg
ICAgbXkgKCRzZWxmKSA9IEBfOwohICAgICByZXR1cm4oICRzZWxmLT57J19wb2ludGVyJ30g
PCBzY2FsYXIgQHskc2VsZi0+X2VsZW1lbnRzfSApOwogIH0KICAKICA9aGVhZDIgbmV4dAot
LS0gOTcsMTAzIC0tLS0KICAKICBzdWIgaGFzX21vcmUgewogICAgICBteSAoJHNlbGYpID0g
QF87CiEgICAgIHJldHVybigkc2VsZi0+eydfcG9pbnRlcid9IDwgc2NhbGFyIEB7JHNlbGYt
Pl9lbGVtZW50c30pOwogIH0KICAKICA9aGVhZDIgbmV4dAoqKioqKioqKioqKioqKioKKioq
IDExMiwxMjEgKioqKgotLS0gMTEyLDEyOSAtLS0tCiAgCiAgc3ViIG5leHQgewogICAgICBt
eSAoJHNlbGYpID0gQF87CisgCisgICAgICMgY2hlY2sgdG8gYmUgc3VyZSB3ZSBzdGlsbCBo
YXZlIGl0ZW1zIHRvIHJldHVybgorICAgICBpZiAoISAkc2VsZi0+aGFzX21vcmUoKSkgewor
ICAgICAgIHRocm93IG9yZzo6YmlvY29yYmE6OnNlcWNvcmU6OkVuZE9mU3RyZWFtOworICAg
ICB9CisgCiAgICAgIG15ICRpdGVtID0gJHNlbGYtPl9lbGVtZW50cy0+WyRzZWxmLT57J19w
b2ludGVyJ31dOwogICAgICAkc2VsZi0+eydfcG9pbnRlcid9Kys7CisgCiAgICAgIG15ICRz
ID0gbmV3IEJpbzo6Q29yYmFTZXJ2ZXI6OlNlcUZlYXR1cmUoJy1wb2EnID0+ICRzZWxmLT5w
b2EsCiAgCQkJCQkgICAgICctc2VxZmVhdHVyZScgPT4gJGl0ZW0pOworIAogICAgICByZXR1
cm4gJHMtPmdldF9hY3RpdmF0ZWRfb2JqZWN0X3JlZmVyZW5jZTsKICB9CiAgCg==

--+xndKkvbnB
Content-Type: application/octet-stream
Content-Description: SeqFeatureVector.pm diff
Content-Disposition: attachment;
	filename="SeqFeatureVector.pm.diff"
Content-Transfer-Encoding: base64

KioqIFNlcUZlYXR1cmVWZWN0b3IucG0ub3JpZwlGcmkgRmViICA5IDE0OjU1OjU5IDIwMDEK
LS0tIFNlcUZlYXR1cmVWZWN0b3IucG0JRnJpIEZlYiAgOSAxNDo0OTowMiAyMDAxCioqKioq
KioqKioqKioqKgoqKiogMTEyLDEyMiAqKioqCiAgCiAgc3ViIGVsZW1lbnRBdCB7CiAgICAg
IG15ICgkc2VsZiwkaW5kZXgpID0gQF87CiEgICAgIGlmKCAkaW5kZXggPiAkc2VsZi0+c2l6
ZSB8fCAkaW5kZXggPCAwICkgewogIAl0aHJvdyBvcmc6OmJpb2NvcmJhOjpzZXFjb3JlOjpP
dXRPZlJhbmdlIAogIAkgICAgcmVhc29uID0+ICJpbmRleCAkaW5kZXggaXMgb3V0IG9mIHJh
bmdlICgwLCIuJHNlbGYtPnNpemUuIikuIjsKICAgICAgfQohICAgICByZXR1cm4gJHNlbGYt
PnsnX2VsZW1lbnRzJ30tPlskaW5kZXhdOwogIH0KICAKICA9aGVhZDIgaXRlcmF0b3IKLS0t
IDExMiwxMjcgLS0tLQogIAogIHN1YiBlbGVtZW50QXQgewogICAgICBteSAoJHNlbGYsJGlu
ZGV4KSA9IEBfOwohICAgICBpZiggJGluZGV4ID4gJHNlbGYtPnNpemUgfHwgJGluZGV4IDwg
MCB8fCAkc2VsZi0+c2l6ZSA9PSAwKSB7CiAgCXRocm93IG9yZzo6YmlvY29yYmE6OnNlcWNv
cmU6Ok91dE9mUmFuZ2UgCiAgCSAgICByZWFzb24gPT4gImluZGV4ICRpbmRleCBpcyBvdXQg
b2YgcmFuZ2UgKDAsIi4kc2VsZi0+c2l6ZS4iKS4iOwogICAgICB9CiEgICAgIG15ICRpdGVt
ID0gJHNlbGYtPnsnX2VsZW1lbnRzJ30tPlskaW5kZXhdOwohIAohICAgICBteSAkcyA9IG5l
dyBCaW86OkNvcmJhU2VydmVyOjpTZXFGZWF0dXJlKCctcG9hJyA9PiAkc2VsZi0+cG9hLAoh
IAkJCQkJICAgICAnLXNlcWZlYXR1cmUnID0+ICRpdGVtKTsKISAKISAgICAgcmV0dXJuICRz
LT5nZXRfYWN0aXZhdGVkX29iamVjdF9yZWZlcmVuY2U7CiAgfQogIAogID1oZWFkMiBpdGVy
YXRvcgo=

--+xndKkvbnB--