[CM] Looking for code critique.

Steven Jones plewto@gmail.com
Mon, 6 Aug 2007 03:18:23 -0500


------=_Part_178286_22675335.1186388303472
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

I'm just learning CLM and seek advice. First some background, I have
years of experience with Nyquist and thus XLISP, not so much with
Common Lisp.  With Nyquist I have striven to write reusable code
whenever possible.  As an exercise I have attempted to write a
reusable delayed onset LFO in CLM.  The resulting code is in the
attachment.  I have also attached code for common envelope contours.
A few "utility" functions are defined outside of these files but have
fairly obvious use.

A few questions:
1) XLISP does not have a package system and I'm still a little unsure
how packages work. In envutil.lisp I have defined the envutil package.
For such simple code would it be better to simply use the CLM package?
 In dlfo I have to explicitly call envutil:dasr.  Is there any way to
"expose" dasr such that I no longer need the package prefix?

2) In Nyquist I would have defined dlfo as a function. After some
experiments I defined two functions for CLM, one to create the lfo and
associated envelope objects, the other (actually a macro) to combine
these two objects within an instrument body. Is this a typical
approach with CLM?

3) So far the test instruments I have defined have a duration argument
but no start time argument. The start time defaults to 0 within the
instrument definition. Once I get into scoring compositions would this
lack of explicit start time come back to haunt me?

Thanks much in advance
Steven Jones

------=_Part_178286_22675335.1186388303472
Content-Type: application/octet-stream; name=envutil.lisp
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f50nyc31
Content-Disposition: attachment; filename="envutil.lisp"

OzsgbGlzcC9lbnZ1dGlsLmxpc3AKOzsgVmVyc2lvbiAwMC4wMC4wMiAwNC1BdWctMjAwNwo7OyBW
ZXJzaW9uIDAwLjAwLjAxIDAzLUF1Zy0yMDA3Cjs7Cjs7IFByb3ZpZGVzIGNvbW1vbiBlbnZlbG9w
ZXMgYW5kIGVudmVsb3BlIG1hbmlwdWxhdGlvbiBmb3IgQ0xNLiBFbnZlbG9wZXMgYXJlCjs7IG1v
c3RseSBkZWZpbmVkIGFzIGxpc3Qgb2YgYnJlYWstcG9pbnQgcGFpcnMgKHQwIHYwIHQxIHYxIC4u
LiB0biB2bikgd2hlcmUKOzsgdmkgaXMgdmFsdWUgYXQgdGltZSB0aS4gVGltZSB2YWx1ZXMgTVVT
VCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuIEJ5Cjs7IGNvbnZlbnRpb24gdG4gaXMgbm9y
bWFsaXplZCB0byAxIHNlY29uZC4KCgoKKGRlZnBhY2thZ2UgIkVOVlVUSUwiCiAgKDp1c2UgIkNP
TU1PTi1MSVNQIiAiQ09NTU9OLUxJU1AtVVNFUiIgIkNMTSIpCiAgKDpleHBvcnQgIkRYNyIgIkFE
U1IiICJBU1IiICJEQVNSIiAiUkFNUC1VUCIgIlJBTVAtRE9XTiIgIkVYUC1ET1dOIiAiRVhQLVVQ
IikKICApCgooaW4tcGFja2FnZSAiRU5WVVRJTCIpCihwcm92aWRlICJFTlZVVElMIikKCgoKCgoK
Cjs7IFtDb25zdGFudF0gCjs7IGVudnV0aWw6K21pbi1zZWdtZW50LXRpbWUrCjs7IEJyZWFrLXBv
aW50IHRpbWUgdmFsdWVzIHNob3VsZCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuIFRoZSB2
YWx1ZSBvZgo7OyArbWluLXNlZ21lbnQtdGltZSsgaXMgdGhlIG1pbmltdW0gdGltZSBkaWZmZXJl
bmNlIGJldHdlZW4gYWRqYWNlbnQKOzsgYnJlYWtwb2ludHMuCjs7CihkZWZjb25zdGFudCArTUlO
LVNFR01FTlQtVElNRSsgKC8gMS4wICpzcmF0ZSopKQoKCjs7IFNvbWUgbm9ybWFsaXplZCBlbnZl
bG9wZSBicmVha3BvaW50IGxpc3QuCjs7IAo7OyByYW1wLXVwLCBsaW5lYXJseSBpbmNyZWFzZSBm
cm9tIDAgdG8gMSBvdmVyIDEgc2Vjb25kLgo7OyByYW1wLWRvd24sIGxpbmVhcmx5IGRlY3JlYXNl
IG92ZXIgMSBzZWNvbmQKOzsgZXhwLWRvd24sIGV4cG9uZW50aWFsIGRlY2F5Lgo7OyBleHAtdXAs
IGV4cG9uZW50aWFsIGluY3JlYXNlLgo7OwooZGVmdmFyIHJhbXAtdXAgJygwIDAgMSAxKSkKKGRl
ZnZhciByYW1wLWRvd24gJygwIDEgMSAwKSkKKGRlZnZhciBleHAtZG93biAnKDAgMSAxLzQgMS80
IDEvMiAxLzE2IDMvNCAxLzMyIDEgMCkpCihkZWZ2YXIgZXhwLXVwICAgJygwIDAgMS80IDEvMzIg
MS8yIDEvMTYgMy80IDEvNCAxIDEpKQoKCgoKCjs7IFtGdW5jdGlvbl0gCjs7IChleHRyYWN0LWJy
ZWFrcG9pbnQtdGltZXMgYnBsaXN0KQo7OyBDcmVhdGUgbGlzdCBvZiB0aW1lcyBmcm9tIGJyZWFr
cG9pbnQgbGlzdAo7Owo7OyBicGxpc3QgLSBMaXN0IG9mIGJyZWFrcG9pbnRzICh0MCB2MCB0MSB2
MSAuLi4gdG4gdm4pCjs7IHJldHVybiAtIExpc3Qgb2YgdGltZXMgKHQwIHQxIC4uLiB0bikKOzsK
KGRlZnVuIGV4dHJhY3QtYnJlYWtwb2ludC10aW1lcyAoYnBsaXN0KQogIChwaWNrLWV2ZXJ5IGJw
bGlzdCAyKSkKCgo7OyBbRnVuY3Rpb25dCjs7IChleHRyYWN0LWJyZWFrcG9pbnQtdmFsdWVzIGJw
bGlzdCkKOzsgQ3JlYXRlIGxpc3Qgb2YgdmFsdWVzIGZyb20gYnJlYWtwb2ludCBsaXN0Lgo7Owo7
OyBicGxpc3QgLSBMaXN0IG9mIGJyZWFrcG9pbnRzICh0MCB2MCB0MSB2MSAuLi4gdG4gdm4pCjs7
IHJldHVybiAtIExpc3Qgb2YgdmFsdWVzICh2MCB2MSAuLi4gdm4pCjs7CihkZWZ1biBleHRyYWN0
LWJyZWFrcG9pbnQtdmFsdWVzIChicGxpc3QpCiAgKHBpY2stZXZlcnkgYnBsaXN0IDIgMSkpCgoK
OzsgW0Z1bmN0aW9uXQo7OyAoc2hpZnQtYnJlYWtwb2ludC10aW1lcyBicGxpc3Qgb2Zmc2V0KQo7
OyBBZGQgY29uc3RhbnQgdmFsdWUgdG8gZWFjaCBicmVha3BvaW50IHRpbWUuCjs7Cjs7IGJwbGlz
dCAtIExpc3Qgb2YgYnJlYWtwb2ludHMgKHQwIHYwIHQxIHYxIC4uLiB0biB2bikKOzsgb2Zmc2V0
IC0gUmVhbCwgVGhlIHRpbWUgc2hpZnQgb2Zmc2V0ID49IDAuCjs7IHJldHVybiAtIExpc3Qgb2Yg
dGltZS1zaGlmdGVkIGJyZWFrcG9pbnRzICh0MCtvZmZzZXQgdjAgdDErb2Zmc2V0IHYxIC4uLiB0
bitvZmZzZXQgdm4pCjs7CihkZWZ1biBzaGlmdC1icmVha3BvaW50LXRpbWVzIChicGxpc3Qgb2Zm
c2V0KQogICh6aXAgKG1hcGNhciAjJyhsYW1iZGEgKG4pKCsgb2Zmc2V0IG4pKShleHRyYWN0LWJy
ZWFrcG9pbnQtdGltZXMgYnBsaXN0KSkKICAgICAgIChleHRyYWN0LWJyZWFrcG9pbnQtdmFsdWVz
IGJwbGlzdCkpKQoKCjs7IFtGdW5jdGlvbl0KOzsgKHB1c2gtYnJlYWtwb2ludCBvZmZzZXQgdmFs
dWUgYnBsaXN0KQo7OyBQdXNoIG5ldyBicmVha3BvaW50IG9udG8gbGlzdCBvZiBicmVha3BvaW50
cy4KOzsgCjs7IG9mZnNldCAtIFJlYWwsIHRoZSB0aW1lIG9mZnNldCB0byBiZSBhZGRlZCB0byBl
YWNoIGV4aXN0aW5nIGJyZWFrcG9pbnQuCjs7IHZhbHVlICAtIFJlYWwsIHRoZSB2YWx1ZSBvZiB0
aGUgbmV3IGJyZWFrcG9pbnQuCjs7IGJwbGlzdCAtIExpc3Qgb2YgYnJlYWtwb2ludHMgKHQwIHYw
IHQxIHYxIC4uLiB0biB2bikKOzsgcmV0dXJuIC0gTmV3IGJyZWFrcG9pbnQgbGlzdCAoMCB2YWx1
ZSB0MCtvZmZzZXQgdjAgdDErb2Zmc2V0IHYxIC4uLiB0bitvZmZzZXQgdm4pCjs7CihkZWZ1biBw
dXNoLWJyZWFrcG9pbnQgKG9mZnNldCB2YWx1ZSBicGxpc3QpCiAgKGFwcGVuZCAobGlzdCAwIHZh
bHVlKShzaGlmdC1icmVha3BvaW50LXRpbWVzIGJwbGlzdCBvZmZzZXQpKSkKCjs7IFtGdW5jdGlv
bl0KOzsgKHN0cmV0Y2gtYnJlYWtwb2ludHMgYnBsaXN0IGZhY3RvcikKOzsgTXVsdGlwbHkgZWFj
aCBicmVha3BvaW50IHRpbWUgYnkgZmFjdG9yLgo7Owo7OyBicGxpc3QgLSBMaXN0IG9mIGJyZWFr
cG9pbnRzICh0MCB2MCB0MSB2MSAuLi4gdG4gdm4pCjs7IGZhY3RvciAtIHJlYWwsIGZhY3RvciA+
IDAuCjs7IHJldHVybiAtIE5ldyBicmVha3BvaW50IGxpc3QgKHQwKmYgdjAgdDEqZiB2MSAuLi4g
dG4qZiB2bikgCjs7ICAgICAgICAgIHdoZXJlIGY9ZmFjdG9yLgo7OwooZGVmdW4gc3RyZXRjaC1i
cmVha3BvaW50cyAoYnBsaXN0IGZhY3RvcikKICAoemlwIChtYXBjYXIgIycobGFtYmRhIChuKSgq
IGZhY3RvciBuKSkoZXh0cmFjdC1icmVha3BvaW50LXRpbWVzIGJwbGlzdCkpCiAgICAgICAoZXh0
cmFjdC1icmVha3BvaW50LXZhbHVlcyBicGxpc3QpKSkKCgo7OyBbRnVuY3Rpb25dCjs7IChnZXQt
YnJlYWtwb2ludC1saXN0LWR1cmF0aW9uIGJwbGlzdCkKOzsgRGV0ZXJtaW5lIG1heGltdW0gYnJl
YWtwb2ludCB0aW1lLgo7Owo7OyBicGxpc3QgLSBMaXN0IG9mIHRoZSBmb3JtICh0MCB2MCB0MSB2
MSAuLi4gdG4gdm4pCjs7IHJldHVybiAtIFJlYWwsIHRoZSB2YWx1ZSB0bi4KOzsKKGRlZnVuIGdl
dC1icmVha3BvaW50LWxpc3QtZHVyYXRpb24gKGJwbGlzdCkKICAobGV0ICgobGVuIChsaXN0LWxl
bmd0aCBicGxpc3QpKSkKICAgIChjb25kICgoPCBsZW4gMikgbmlsKQoJICAodCAobnRoICgtIGxl
biAyKSBicGxpc3QpKSkpKQoKCjs7IHtGdW5jdGlvbl0KOzsgKG5vcm1hbGl6ZS1icmVha3BvaW50
LXRpbWVzIGJwbGlzdCAmb3B0aW9uYWwgKGVuZHRpbWUgMS4wKSkKOzsgTXVsdGlwbHkgZWFjaCBi
cmVha3BvaW50IHRpbWUgc3VjaCB0aGF0IHRoZSBmaW5hbCB0aW1lIGlzIGVuZHRpbWUuCjs7Cjs7
IGJwbGlzdCAgLSBMaXN0IG9mIHRoZSBmb3JtICh0MCB2MCB0MSB2MSAuLi4gdG4gdm4pCjs7IGVu
ZHRpbWUgLSBSZWFsIG9yIG5pbCwgb3B0aW9uYWwgZW5kdGltZSB2YWx1ZSwgZGVmYXVsdCAxLjAg
Cjs7ICAgICAgICAgICBJZiBub3JtID4gMCBub3JtYWxpemUgbGlzdC4gCjs7ICAgICAgICAgICBJ
ZiBub3JtIGlzIG5pbCwgcmV0dXJuIGJwbGlzdCB1bmNoYW5nZWQuCjs7ICAgICAgICAgICBBbnkg
b3RoZXIgdmFsdWUgZm9yIG5vcm0gaXMgYW4gZXJyb3IuCjs7IHJldHVybiAgLSBMaXN0IG9mIHRo
ZSBmb3JtICh0MCpmIHYwIHQxKmYgdjEgLi4uIHRuKmYgdm4pCjs7ICAgICAgICAgICBXaGVyZSB0
biAhPSAwIGFuZCBmID0gZW5kdGltZS90bgo7OwoKKGRlZnVuIG5vcm1hbGl6ZS1icmVha3BvaW50
LXRpbWVzIChicGxpc3QgJm9wdGlvbmFsIChlbmR0aW1lIDEuMCkpCiAgKGxldCAoKGQxIChnZXQt
YnJlYWtwb2ludC1saXN0LWR1cmF0aW9uIGJwbGlzdCkpIGYpCgkKICAgIChjb25kICgoemVyb3Ag
ZDEpCgkgICAoZXJyb3IgKGZvcm1hdCBuaWwgIkVOVlVUSUw6Tk9STUFMSVpFLUJSRUFLUE9JTlQt
VElNRVMsIERpdmlzaW9uIGJ5IHplcm8uIEJyZWFrcG9pbnQgbGlzdCBkdXJhdGlvbiBpcyAwOiB+
QX4lIiBicGxpc3QpKSkKCSAgKChudWxsIGVuZHRpbWUpIGJwbGlzdCkKCSAgKChhbmQgKG51bWJl
cnAgZW5kdGltZSkocGx1c3AgZW5kdGltZSkpCgkgICAoc2V0cSBmICgvIGVuZHRpbWUgZDEpKQoJ
ICAgKHppcCAobWFwY2FyICMnKGxhbWJkYSAobikoKiBuIGYpKQoJCQkoZXh0cmFjdC1icmVha3Bv
aW50LXRpbWVzIGJwbGlzdCkpCgkJKGV4dHJhY3QtYnJlYWtwb2ludC12YWx1ZXMgYnBsaXN0KSkp
CgkgICh0IChlcnJvciAoZm9ybWF0IG5pbCAiRU5WVVRJTDpOT1JNQUxJWkUtQlJFQUtQT0lOVC1U
SU1FUywgdHlwZSBlcnJvciBlbmR0aW1lIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlcjogfkF+JSIg
ZW5kdGltZSkpKSkpKQoKCgoKCjs7IFtGdW5jdGlvbl0KOzsgKHNjYWxlLWJyZWFrcG9pbnQtbGlz
dC12YWx1ZXMgKGJwbGlzdCBnYWluKSkKOzsgTXVsdGlwbHkgZWFjaCBicmVha3BvaW50IHZhbHVl
IGJ5IGdhaW4uCjs7Cjs7IGJwbGlzdCAtIExpc3Qgb2YgYnJlYWtwb2ludHMgKHQwIHYwIHQxIHYx
IC4uLiB0biB2bikKOzsgZ2FpbiAgIC0gUmVhbC4gCjs7IHJldHVybiAtIExpc3QgKHQwIHYwKmcg
dDEgdjEqZyAuLi4gdG4gdm4qZykKOzsKKGRlZnVuIHNjYWxlLWJyZWFrcG9pbnQtbGlzdC12YWx1
ZXMgKGJwbGlzdCBnYWluKQogICh6aXAgKGV4dHJhY3QtYnJlYWtwb2ludC10aW1lcyBicGxpc3Qp
IAogICAgICAgKG1hcGNhciAjJyhsYW1iZGEgKG4pKCogZ2FpbiBuKSkoZXh0cmFjdC1icmVha3Bv
aW50LXZhbHVlcyBicGxpc3QpKSkpCgoKOzsgW0Z1bmN0aW9uXQo7OyAoZ2V0LW1heC1icmVha3Bv
aW50LXZhbHVlIGJwbGlzdCkKOzsgRGV0ZXJtaW5lIG1heGltdW0gYnJlYWtwb2ludCB2YWx1ZS4K
OzsKOzsgYnBsaXN0IC0gTGlzdCAodDAgdjAgdDEgdjEgLi4uIHRuIHZuKQo7OyByZXR1cm4gLSBS
ZWFsIHZxIHN1Y2ggdGhhdCB2cSA+PSBldmVyeSBvdGhlciB2IGluIGJwbGlzdC4KOzsKKGRlZnVu
IGdldC1tYXgtYnJlYWtwb2ludC12YWx1ZSAoYnBsaXN0KQogIChsZXQgKChteCAtMWU2KSkgIDs7
IElTU1VFOiBTaG91bGQgdXNlIG1heGltdW0gRklYTlVNIHZhbHVlID8KICAgIChkb2xpc3QgKHYg
KGV4dHJhY3QtYnJlYWtwb2ludC12YWx1ZXMgYnBsaXN0KSkKICAgICAgKGlmICg+IHYgbXgpKHNl
dHEgbXggdikpKQogICAgbXgpKQoKCjs7IFtGdW5jdGlvbl0KOzsgKHB1c2gtYnJlYWtwb2ludC1k
ZWxheSAoZHRpbWUgYnBsaXN0ICZrZXkgKG5vcm0gMSkoaXZhbHVlIDApKQo7OyBBZGQgaW5pdGlh
bCBkZWxheSB0byBicmVha3BvaW50IGxpc3QuCjs7Cjs7IGR0aW1uZSAgLSBSZWFsLCB0aGUgZGVs
YXkgdGltZS4KOzsgYnBsaXN0ICAtIExpc3Qgb2YgYnJlYWtwb2ludHMgKHQwIHYwIHQxIHYxIC4u
LiB0biB2bikKOzsgOm5vcm0gICAtIFJlYWwgb3IgbmlsLiBJZiBub3JtIGlzIG51bWVyaWMgYW5k
IHBvc2l0aXZlLCBub3JtYWxpemUKOzsgICAgICAgICAgIGJyZWFrcG9pbnQgZHVyYXRpb24gdG8g
bm9ybSBzZWNvbmRzLiBJZiBub3JtIGlzIG5pbAo7OyAgICAgICAgICAgc2tpcCBub3JtYWxpemF0
aW9uLiAKOzsgOml2YWx1ZSAtIFJlYWwsIGluaXRpYWwgdmFsdWUuIAo7OyByZXR1cm4gIC0gbGlz
dCBvZiBicmVha3BvaW50cyAoMCBpdmFsdWUgdDAnIHYwIHQxJyB2MSAuLi4gdG4nIHZuKQo7OyAg
ICAgICAgICAgV2hlcmUgdGknID0gKHRpK2R0aW1lKSpmIAo7OwooZGVmdW4gcHVzaC1icmVha3Bv
aW50LWRlbGF5IChkdGltZSBicGxpc3QgJmtleSAobm9ybSAxKShpdmFsdWUgMCkpCiAgKGxldCAo
KGxzdCAocHVzaC1icmVha3BvaW50IGR0aW1lIGl2YWx1ZSBicGxpc3QpKSkKICAgIChpZiBub3Jt
IAoJKG5vcm1hbGl6ZS1icmVha3BvaW50LXRpbWVzIGxzdCBub3JtKQoJbHN0KSkpCgoKCgo7OyAo
ZGVmdW4gZGlzcGxheS1icmVha3BvaW50LWxpc3QgKGJwbGlzdCkKOzsgICAoaWYgYnBsaXN0Cjs7
ICAgICAgIChwcm9nbiAKOzsgCShmb3JtYXQgdCAifkEgIH5BfiUiIChjYXIgYnBsaXN0KShjYXIg
KGNkciBicGxpc3QpKSkKOzsgCShkaXNwbGF5LWJyZWFrcG9pbnQtbGlzdCAoY2RyIChjZHIgYnBs
aXN0KSkpKQo7OyAgICAgICAoZm9ybWF0IHQgIn4lIikpKQoKCgo7OyBbRnVuY3Rpb25dCjs7IGR4
NyAoJmtleSB0MSB0MiB0MyB0NCB2MCB2MSB2MiB2MyB2NCB2NSBzbCBub3JtKQo7OyBHZW5lcmF0
ZSBicmVha3BvaW50IGxpc3QgZm9yIGR4NyBzdHlsZSBlbnZlbG9wZSB3aXRoIDQgdGltZSBhbmQg
NiB2YWx1ZQo7OyBwYXJhbWV0ZXJzLgo7Owo7OyA6dDEgICAtIFJlYWwsIHJlbGF0aXZlIHRpbWUg
MSwgZGVmYXVsdCAwLgo7OyA6dDIgICAtIFJlYWwsIHJlbGF0aXZlIHRpbWUgMiwgZGVmYXVsdCAw
Lgo7OyA6dDMgICAtIFJlYWwsIHJlbGF0aXZlIHRpbWUgMywgZGVmYXVsdCAwLgo7OyA6dDQgICAt
IFJlYWwsIHJlbGF0aXZlIHRpbWUgNCwgZGVmYXVsdCAwLgo7OyA6djAgICAtIFJlYWwsIGluaXRp
YWwgYW1wbGl0dWRlLCBkZWZhdWx0IDAuCjs7IDp2MSAgIC0gUmVhbCwgYW1wbGl0dWRlIGFmdGVy
IHRpbWUgdDEsIGRlZmF1bHQgMS4KOzsgOnYyICAgLSBSZWFsLCBhbXBsaXR1ZGUgYWZ0ZXIgdGlt
ZSB0MSt0MiwgZGVmYXVsdCAxLgo7OyA6djMgICAtIFJlYWwsIGFtcGxpdHVkZSBhZnRlciB0aW1l
IHQxK3QyK3QzLCBkZWZhdWx0IDEuCjs7IDp2NCAgIC0gUmVhbCwgYW1wbGl0dWRlIGF0IHRpbWUg
MS10NCwgZGVmYXVsdCB2My4KOzsgOnY1ICAgLSBSZWFsLCBmaW5hbCBhbXBsaXR1ZGUsIGRlZmF1
bHQgdjAuCjs7IDpzbCAgIC0gUmVhbCwgQ29udmVuaWVuY2UgcGFyYW1ldGVyIHRvIHNldCBzdXN0
YWluIGxldmVsIHYzIGFuZCB2NC4KOzsgOm5vcm0gLSBSZWFsIG9yIG5pbC4gU3RyZXRjaCBlbnZl
bG9wZSB0aW1lIHZhbHVlcyB0byBkdXJhdGlvbiBub3JtLiAKOzsgICAgICAgICBub3JtIG11c3Qg
YmUgZWl0aGVyIGEgcG9zaXRpdmUgbnVtYmVyIG9yIG5pbC4gCjs7IHJldHVybiAtIExpc3Qgb2Yg
YnJlYWtwb2ludHMgKDAgdjAgdDEgdjEgdDErdDIgdjIgdDErdDIrdDMgdjMgMS10NCB2NCAxIHY1
KQo7Owo7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjs7ICAgICAgICAgICAg
ICAgIHYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAo7OyAgICAgICAgICAgIF9fL1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKOzsgICAgICAgICBfXy8gICAgXCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjs7ICAgICB2MV8vICAg
ICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAo7OyAgICAgLyAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKOzsgICAgLyAgICAgICAgICAgICAgXCB2MiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHYzICAgICAgICAgICAgICAgICAgICAgCjs7ICAgLyAgICAgICAg
ICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAg
ICAgIAo7OyAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwgICAgICAgICAgICAgICAgICAgICAKOzsgL3YwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXCB2NCAgICAgICAgICAgICAgICAgCjs7IHw8dDE+fDwgIHQy
ICA+fDx0Mz58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx0NHwgICAgICAgICAgICAgICAg
ICAgIAo7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAooZGVmdW4gZHg3ICgma2V5IHQxIHQyIHQzIHQ0IHYwIHYxIHYyIHYzIHY0IHY1IHNsIG5v
cm0pCiAgKHNldHEgdDEgKGNsYW1wIChvciB0MSAwKSAwIDEpKQogIChzZXRxIHQyIChjbGFtcCAo
b3IgdDIgMCkgMCAoLSAxIHQxKSkpCiAgKHNldHEgdDMgKGNsYW1wIChvciB0MyAwKSAwICgtIDEg
dDEgdDIpKSkKICAoc2V0cSB0NCAoY2xhbXAgKG9yIHQ0IDApIDAgKC0gMSB0MSB0MiB0MykpKQog
IChzZXRxIHYwIChvciB2MCAwKSkKICAoc2V0cSB2MSAob3IgdjEgMSkpCiAgKHNldHEgdjIgKG9y
IHYyIDEpKQogIChzZXRxIHYzIChvciB2MyBzbCAxKSkKICAoc2V0cSB2NCAob3IgdjQgdjMpKQog
IChzZXRxIHY1IChvciB2NSB2MCkpCiAgKGxldCAoKHAwIDApIHAxIHAyIHAzIHA0IChwNSAxKSBh
Y2MpCiAgICAoc2V0cSBwMSAoY2xhbXAgdDEgK21pbi1zZWdtZW50LXRpbWUrCgkJICAgICgtIDEg
KCogNCArbWluLXNlZ21lbnQtdGltZSspKSkpCiAgICAoc2V0cSBwMiAoY2xhbXAgKCsgcDEgdDIp
KCsgcDEgK21pbi1zZWdtZW50LXRpbWUrKQoJCSAgICAoLSAxICgqIDMgK21pbi1zZWdtZW50LXRp
bWUrKSkpKQogICAgKHNldHEgcDMgKGNsYW1wICgrIHAyIHQzKSgrIHAyICttaW4tc2VnbWVudC10
aW1lKykKCQkgICAgKC0gMSAoKiAyICttaW4tc2VnbWVudC10aW1lKykpKSkKICAgIChzZXRxIHA0
IChjbGFtcCAoLSBwNSB0NCkKCQkgICAgKCsgcDMgK21pbi1zZWdtZW50LXRpbWUrKQoJCSAgICAo
LSAxICgqIDEgK21pbi1zZWdtZW50LXRpbWUrKSkpKQogICAgKHNldHEgYWNjIChub3JtYWxpemUt
YnJlYWtwb2ludC10aW1lcyAKCSAgICAgICAobGlzdCBwMCB2MCBwMSB2MSBwMiB2MiBwMyB2MyBw
NCB2NCBwNSB2NSkKCSAgICAgICAob3Igbm9ybSAxKSkpCiAgICA7KGRpc3BsYXktYnJlYWtwb2lu
dC1saXN0IGFjYykKICAgIGFjYykpCiAgICAKCjs7IFtGdW5jdGlvbl0KOzsgKGFkc3IgKCZrZXkg
KGEgMCkoZCAwKShyIDApKHNsIDEpKG5vcm0gMSkpKQo7OyBDcmVhdGUgYnJlYWtwb2ludCBsaXN0
IGZvciBBRFNSIHN0eWxlIGVudmVsb3BlLgo7Owo7OyA6YSAgICAgLSBSZWFsLCBhdHRhY2sgdGlt
ZSAwPD1hPD0gMSwgZGVmYXVsdCAwLgo7OyA6ZCAgICAgLSBSZWFsLCBpbml0aWFsIGRlY2F5IHRp
bWUsIDA8PWQ8PTEsIGRlZmF1bHQgMC4KOzsgOnIgICAgIC0gUmVhbCwgZmluYWwgcmVsZWFzZSB0
aW1lLCAwPD1yPD0xLCBkZWZhdWx0IDAKOzsgICAgICAgICAgV2hlcmUgdGhlIHN1bSBhK2Qrcjw9
MS4KOzsgOnNsICAgIC0gUmVhbCwgc3VzdGFpbiBsZXZlbCwgZGVmYXVsdCAxLgo7OyA6bm9ybSAg
LSBSZWFsIG9yIG5pbC4gU2VlIG5vcm1hbGl6ZS1icmVha3BvaW50LXRpbWVzLCBkZWZhdWx0IDEu
Cjs7IHJldHVybiAtIExpc3Qgb2YgYnJlYWtwb2ludHMgKDAgMCBhIDEgYStkIHNsIDEtciBzbCAx
IDApCjs7CihkZWZ1biBhZHNyICgma2V5IChhIDApKGQgMCkociAwKShzbCAxKShub3JtIDEpKQog
IChkeDcgOnQxIGEgOnQyIDAgOnQzIGQgOnQ0IHIgOnYyIDEgOnNsIHNsIDpub3JtIG5vcm0pKSAK
ICAgICAgCgoKOzsgW0Z1bmN0aW9uXQo7OyAoYXNyICgma2V5IChhIDApKHIgMCkobm9ybSAxKSkK
OzsgQ3JlYXRlIGJyZWFrcG9pbnQgbGlzdCBvZiBBU1Igc3R5bGUgZW52ZWxvcGUuCjs7Cjs7IDph
ICAgICAtIFJlYWwsIGF0dGFjayB0aW1lIDA8PWE8PTEsIGRlZmF1bHQgMC4KOzsgOnIgICAgIC0g
UmVhbCwgcmVsZWFzZSB0aW1lIDA8PXI8PTEsIGRlZmF1bHQgMC4KOzsgICAgICAgICAgV2hlcmUg
c3VtIGErcjw9MS4KOzsgOm5vcm0gIC0gUmVhbCBvciBuaWwuIFNlZSBub3JtYWxpemUtYnJlYWtw
b2ludC10aW1lcywgZGVmYXVsdCAxLgo7OyByZXR1cm4gLSBMaXN0IG9mIGJyZWFrcG9pbnRzICgw
IDAgYSAxIDAgMSAxLXIgMSAwKQo7OwooZGVmdW4gYXNyICgma2V5IChhIDApKHIgMCkobm9ybSAx
KSkKICAoYWRzciA6YSBhIDpkIDAgOnIgciA6c2wgMSA6bm9ybSBub3JtKSkKCgoKOzsgW0Z1bmN0
aW9uXQo7OyBDcmVhdGUgYnJlYWtwb2ludCBsaXN0IGZvciBBU1Igc3R5bGUgZW52ZWxvcGUgd2l0
aCBpbml0aWFsIGRlbGF5Lgo7Owo7OyA6ZGVsYXkgLSBSZWFsLCBpbml0aWFsIGRlbGF5LCAwPD1k
ZWxheTw9MSwgZGVmYXVsdCAwLgo7OyA6YSAgICAgLSBSZWFsLCBhdHRhY2sgdGltZSwgMDw9YTw9
MSwgZGVmYXVsdCAwLgo7OyA6ciAgICAgLSBSZWFsLCByZWxlYXNlIHRpbWUsIDA8PXI8PTEsIGRl
ZmF1bHQgMC4KOzsgICAgICAgICAgV2hlcmUgc3VtIGRlbGF5K2Ercjw9MS4KOzsgOm5vcm0gIC0g
UmVhbCBvciBuaWwuIFNlZSBub3JtYWxpemUtYnJlYWtwb2ludC10aW1lcywgZGVmYXVsdCAxLgo7
OyByZXR1cm4gLUxpc3Qgb2YgYnJlYWtwb2ludHMgKDAgMCBkZWxheSAwIGRlbGF5K2EgMSAxLXIg
MSAxIDApCjs7CihkZWZ1biBkYXNyICgma2V5IChkZWxheSAwKShhIDApKHIgMCkobm9ybSAxKSkK
ICAoZHg3IDp0MSBkZWxheSA6dDIgYSA6dDMgMCA6dDQgcgogICAgICAgOnYwIDAgOnYxIDAgOnYy
IDEgOnYzIDEgOnY0IDEgOnY1IDAKICAgICAgIDpub3JtIG5vcm0pKQ==
------=_Part_178286_22675335.1186388303472
Content-Type: application/octet-stream; name=dlfo.lisp
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f50nyv78
Content-Disposition: attachment; filename="dlfo.lisp"

CgoocmVxdWlyZSAnZW52dXRpbCAic2psaWIvZW52dXRpbCIpCgoKKGluLXBhY2thZ2UgIkNMTSIp
CihleHBvcnQgJyhETEZPIE1BS0UtRExGTyBGT08pICdDTE0pCgoKOzsgQ3JlYXRlIG9zY2lsIGFu
ZCBlbnYgb2JqZWN0cy4KOzsKKGRlZnVuIG1ha2UtZGxmbyAoJmtleSAoZHVyIDEpKHZmcnEgMSko
dmRlbGF5IDApKQogICh2YWx1ZXMgKG1ha2Utb3NjaWwgOmZyZXF1ZW5jeSB2ZnJxKQoJICAobWFr
ZS1lbnYgKGVudnV0aWw6ZGFzciA6ZGVsYXkgKCogMS8yIHZkZWxheSkKCQkJCSAgOmEgKCogMS8y
IHZkZWxheSkpCgkJICAgIDpkdXJhdGlvbiBkdXIpKSkKCgoKCjs7IEFwcGx5IGFtcGxpdHVkZSBl
bnZlbG9wZSB2ZW52IHRvIGxmby4KOzsgY2ZycSAtIGNhcnJpZXIgZnJlcXVlbmN5Lgo7OyBkZXB0
aCAtIHZpYnJhdG8gZGVwdGguCjs7IGxmbyAtIG9zY2lsIG9iamVjdAo7OyB2ZW52IC0gZW52IG9i
amVjdC4KOzsKKGRlZm1hY3JvIGRsZm8gKGNmcnEgZGVwdGggbGZvIHZlbnYpCiAgYCgqIDFlLTQg
LGNmcnEgLGRlcHRoCiAgICAob3NjaWwgLGxmbykKICAgIChlbnYgLHZlbnYpKSkKCgoKCjs7IEFu
IGluc3RydW1lbnQgdG8gdGVzdCB0aGUgTEZPCjs7CihkZWZpbnN0cnVtZW50IGZvbyAoJmtleSAo
ZHVyIDEpKGZycSA0MDApKHZmcnEgNykodmRlbGF5IDApKHZpYiAwLjEpKQogIChtdWx0aXBsZS12
YWx1ZS1iaW5kIChzMCBzMSkodGltZXMtPnNhbXBsZXMgMCBkdXIpCiAgICAobXVsdGlwbGUtdmFs
dWUtYmluZCAobGZvIHZlbnYpKG1ha2UtZGxmbyA6ZHVyIGR1ciA6dmZycSB2ZnJxIDp2ZGVsYXkg
dmRlbGF5KQogICAgICAobGV0ICgob3NjIChtYWtlLW9zY2lsIDpmcmVxdWVuY3kgZnJxKSkpCgko
cnVuIAoJIChsb29wIGZvciBzIGZyb20gczAgYmVsb3cgczEgZG8KCSAgICAgICAob3V0YSBzIChv
c2NpbCBvc2MgKGRsZm8gZnJxIHZpYiBsZm8gdmVudikpKSkpKSkpKQoJICA=
------=_Part_178286_22675335.1186388303472--