- Freestanding Blackbox applications?

From: [at]} <Alexander>
Date: Thu, 25 May 2006 13:06:47 +0700

----boundary-LibPST-iamunique-2024505183_-_-
Content-type: text/plain

Hello, CFB!

CS> Avoid comparing chalk with cheese, apples with oranges etc. - it makes no
CS> sense.

CS> I've tried XDS (briefly) a couple of times and soon discovered that
CS> generally it is far inferior to BlackBox as a development system for Windows
CS> applications.

CS> If XDS supports Linux obviously it is currently infinitely better than
CS> BlackBox in that respect.

CS> Yes - building a freestanding fully-functional GUI app is tricky in
CS> BlackBox. However, it is next to impossible in XDS.

CS> However, if you do what you *have* to do in XDS, but is an *option* in
CS> BlackBox i.e. do GUI through the API, then the resulting BlackBox standalone
CS> executable can be built with a simple single statement e.g.

CS> DevLinker.LinkExe Bezier.exe := TestBezier $ ~

CS> and the resulting executable is a miserly 6KB. This is very easy to
CS> demonstrate - coincidentally, a few days ago, I translated one of Charles
CS> Petzold's classic Windows programming examples from the XDS Modula-2 version
CS> into BlackBox.

CS> The original was at:

CS> http://www.winserion.org/Petzold/XDS/chap04/Bezier.mod.HTML

CS> My BlackBox version is included below.

CS> However, only a complete masochist would consider developing anything other
CS> than simple GUI examples in this way in this day and age.

CS> Where I do believe we agree with each other is that there is a real need for
CS> a BlackBox tool for building freestanding GUI applications that:

CS> a) Needs minimal user input

CS> b) Requires minimal knowledge of the murky depths of the BlackBox framework

CS> c) Only includes the modules that are absolutely necessary for the task at
CS> hand.

CS> The job appears to be about 90% done - it would be a pity if the remaining
CS> 10% couldn't be polished off.

  You are right about all that. I was not advertising XDS, I was just
  trying to say that right now we have two options for standalone
  executables: big with GUI framework and small without. If we want
  small executables with GUI, we must abandon portability and stick
  with (OS name here) API. Then XDS is a better option, because it
  actually optimizes code.

  Now about the (c) part of your letter: how can we include only the
  modules that are absolutely necessary? I'm thinking of come kind of
  "dead code elimination": if a procedure is not reachable from
  outside and is not used inside a module, it may be eliminated, thus
  reducing code file size.

  If we are to eliminate unnecessary code, when should we make
  decision about which code is used and which is not?

  At compile time we may analyze the module text and see which
  procedures are exported (including BEGIN and CLOSE section handlers
  of the module) and which are used by those exported, thus building
  usage tree. The exported procedures are like global variables which
  (a) may not be garbage-collected (eliminated) and (b) being roots in
  the usage tree. If a procedure is not reachable from any root, it
  must be eliminated.

  But the true roots for entire project are known only at link time,
  when a set of top-level modules is defined. This means that the
  linking must not only staff module codes into a single file, but
  analyze which local module-roots (i.e. exported elements) are
  reachable from global project-roots.

  And, of course, indirect procedure calls like Dialogs.Call,
  Converters.Register, OleData.Register, menu resources, guards, links
  and notifiers must be taken care of.

  Does anybody know which of those optimizations are actually
  implemented in BB? I think none. Even unused procedures which are
  not exported are kept in module code file. A simple test shows that:

MODULE TestDeadElim;

PROCEDURE Test3;
VAR i: INTEGER;
BEGIN
        FOR i := 0 TO 10 DO
        END;
END Test3;

PROCEDURE Test2;
VAR i: INTEGER;
BEGIN
        FOR i := 0 TO 10 DO
        END;
END Test2;

PROCEDURE Test1*;
VAR i: INTEGER;
BEGIN
        FOR i := 0 TO 10 DO
        END;
END Test1;

END TestDeadElim.

  Only the TestDeadElim.Test1 is exported. Try to compile the module
  and watch the size of Test\Code\DeadElim.ocf. Then delete Test2,
  recompile. Then delete Test3, recompile. The size of code file
  reduces every time.

  Returning to your point: "Only include the modules that are
  absolutely necessary for the task at hand". I think BB includes only
  necessary modules already. If you try to delete a module from the
  pack list, you will get a run-time complaint about that module, and
  the program won't start. That's because right now the only way to
  eliminate a module from executable - is to eliminate it from all
  framework's IMPORT clauses. Which means if you use a small subset of
  the framework, you must link it all, because module dependecies are
  too rough and general. If a bit of procedure-level sophistication is
  added here, it would be possible to create much smaller standalone
  files.

  After I wrote all that, I thought: do we really have to? I think
  Rene Krywult is right saying recently:

>So what? I can easily take a "normal" BB with the subsystem I want to
>publish and rid the BB of all subsystems I don't need, change the name
>of the menus.odc for all subsystems I need but don't want to show up,
>give the BB-exe an other name and change the icon. No need for a linker
>here, and almost no technical expertise necessary.

  By cramming modules into a single EXE and crippling them along the
  way what do we achieve? A customary file of a reasonable size? It
  would be a good argument for converting a newbie. That would
  certainly work for me: when I was choosing my development
  environment, the file size was very a important criteria. As was the
  independence of any preinstalled runtime libraries. I stopped at
  Delphi, but that was 10 years ago. The age of 1.4Mb diskettes and
  300Mb hard disks. Is that still so important in the age of .NET and
  Java runtimes? A dumb simple Delphi7 GUI executable is 0.5Mb which
  is about 2-3 times bigger than in Delphi3.

  AFAIK, users don't worry about 1-2Mb of files installed in their
\Program Files\etc. 300-700Mb - that's what make them think. And if
  you look at BlackBox.exe - it's only 87kb. So, why not copy all
  necessary code files and keep them in subfolders? It will look
  rather unusual, but who cares? Who cares about the number of DLLs
  used or installed by a program? Maybe _I_ would prefer all code
  files in a single subfolder (Sys or Bin) to keep user data nearby
  and not lose it among subsystems, like this:

\Program Files\MyApp\BlackBox.exe
\Program Files\MyApp\BlackBox.ini
\Program Files\MyApp\UserData\
\Program Files\MyApp\bin\Host\Code\
\Program Files\MyApp\bin\Host\Sym\
\Program Files\MyApp\bin\System\Code\
\Program Files\MyApp\bin\System\Sym\
\Program Files\MyApp\bin\Std\Code\
\Program Files\MyApp\bin\Std\Sym\
\Program Files\MyApp\bin\Text\Code\
\Program Files\MyApp\bin\Text\Sym\

  The advantage of modularity is that you may update a subsystem code
  files without reinstallation, and the patch will be small and quick.
  Many big programs are struggling to achieve that, developing
  separate packages, interfacing through COM from main EXE to menu or
  a panel on the main form. And we get all that modularity for free.

---=====---
 Alexander

--- BlackBox
--- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy



----boundary-LibPST-iamunique-2024505183_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIEhlbGxvLCBDRkIhXHBhcg0KXHBhcg0KQ1M+IEF2
b2lkIGNvbXBhcmluZyBjaGFsayB3aXRoIGNoZWVzZSwgYXBwbGVzIHdpdGggb3JhbmdlcyBldGMu
IC0gaXQgbWFrZXMgbm9ccGFyDQpDUz4gc2Vuc2UuXHBhcg0KXHBhcg0KQ1M+IEkndmUgdHJpZWQg
WERTIChicmllZmx5KSBhIGNvdXBsZSBvZiB0aW1lcyBhbmQgc29vbiBkaXNjb3ZlcmVkIHRoYXRc
cGFyDQpDUz4gZ2VuZXJhbGx5IGl0IGlzIGZhciBpbmZlcmlvciB0byBCbGFja0JveCBhcyBhIGRl
dmVsb3BtZW50IHN5c3RlbSBmb3IgV2luZG93c1xwYXINCkNTPiBhcHBsaWNhdGlvbnMuXHBhcg0K
XHBhcg0KQ1M+IElmIFhEUyBzdXBwb3J0cyBMaW51eCBvYnZpb3VzbHkgaXQgaXMgY3VycmVudGx5
IGluZmluaXRlbHkgYmV0dGVyIHRoYW5ccGFyDQpDUz4gQmxhY2tCb3ggaW4gdGhhdCByZXNwZWN0
LiBccGFyDQpccGFyDQpDUz4gWWVzIC0gYnVpbGRpbmcgYSBmcmVlc3RhbmRpbmcgZnVsbHktZnVu
Y3Rpb25hbCBHVUkgYXBwIGlzIHRyaWNreSBpblxwYXINCkNTPiBCbGFja0JveC4gSG93ZXZlciwg
aXQgaXMgbmV4dCB0byBpbXBvc3NpYmxlIGluIFhEUy5ccGFyDQpccGFyDQpDUz4gSG93ZXZlciwg
aWYgeW91IGRvIHdoYXQgeW91ICpoYXZlKiB0byBkbyBpbiBYRFMsIGJ1dCBpcyBhbiAqb3B0aW9u
KiBpblxwYXINCkNTPiBCbGFja0JveCBpLmUuIGRvIEdVSSB0aHJvdWdoIHRoZSBBUEksIHRoZW4g
dGhlIHJlc3VsdGluZyBCbGFja0JveCBzdGFuZGFsb25lXHBhcg0KQ1M+IGV4ZWN1dGFibGUgY2Fu
IGJlIGJ1aWx0IHdpdGggYSBzaW1wbGUgc2luZ2xlIHN0YXRlbWVudCBlLmcuXHBhcg0KXHBhcg0K
Q1M+ICAgRGV2TGlua2VyLkxpbmtFeGUgQmV6aWVyLmV4ZSA6PSBUZXN0QmV6aWVyICQgflxwYXIN
ClxwYXINCkNTPiBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGlzIGEgbWlzZXJseSA2S0Iu
IFRoaXMgaXMgdmVyeSBlYXN5IHRvXHBhcg0KQ1M+IGRlbW9uc3RyYXRlIC0gY29pbmNpZGVudGFs
bHksIGEgZmV3IGRheXMgYWdvLCBJIHRyYW5zbGF0ZWQgb25lIG9mIENoYXJsZXNccGFyDQpDUz4g
UGV0em9sZCdzIGNsYXNzaWMgV2luZG93cyBwcm9ncmFtbWluZyBleGFtcGxlcyBmcm9tIHRoZSBY
RFMgTW9kdWxhLTIgdmVyc2lvblxwYXINCkNTPiBpbnRvIEJsYWNrQm94LlxwYXINClxwYXINCkNT
PiBUaGUgb3JpZ2luYWwgd2FzIGF0OlxwYXINClxwYXINCkNTPiBodHRwOi8vd3d3LndpbnNlcmlv
bi5vcmcvUGV0em9sZC9YRFMvY2hhcDA0L0Jlemllci5tb2QuSFRNTFxwYXINClxwYXINCkNTPiBN
eSBCbGFja0JveCB2ZXJzaW9uIGlzIGluY2x1ZGVkIGJlbG93LlxwYXINClxwYXINCkNTPiBIb3dl
dmVyLCBvbmx5IGEgY29tcGxldGUgbWFzb2NoaXN0IHdvdWxkIGNvbnNpZGVyIGRldmVsb3Bpbmcg
YW55dGhpbmcgb3RoZXJccGFyDQpDUz4gdGhhbiBzaW1wbGUgR1VJIGV4YW1wbGVzIGluIHRoaXMg
d2F5IGluIHRoaXMgZGF5IGFuZCBhZ2UuXHBhcg0KXHBhcg0KQ1M+IFdoZXJlIEkgZG8gYmVsaWV2
ZSB3ZSBhZ3JlZSB3aXRoIGVhY2ggb3RoZXIgaXMgdGhhdCB0aGVyZSBpcyBhIHJlYWwgbmVlZCBm
b3JccGFyDQpDUz4gYSBCbGFja0JveCB0b29sIGZvciBidWlsZGluZyBmcmVlc3RhbmRpbmcgR1VJ
IGFwcGxpY2F0aW9ucyB0aGF0OlxwYXINClxwYXINCkNTPiBhKSBOZWVkcyBtaW5pbWFsIHVzZXIg
aW5wdXRccGFyDQpccGFyDQpDUz4gYikgUmVxdWlyZXMgbWluaW1hbCBrbm93bGVkZ2Ugb2YgdGhl
IG11cmt5IGRlcHRocyBvZiB0aGUgQmxhY2tCb3ggZnJhbWV3b3JrXHBhcg0KXHBhcg0KQ1M+IGMp
IE9ubHkgaW5jbHVkZXMgdGhlIG1vZHVsZXMgdGhhdCBhcmUgYWJzb2x1dGVseSBuZWNlc3Nhcnkg
Zm9yIHRoZSB0YXNrIGF0XHBhcg0KQ1M+IGhhbmQuXHBhcg0KXHBhcg0KQ1M+IFRoZSBqb2IgYXBw
ZWFycyB0byBiZSBhYm91dCA5MCUgZG9uZSAtIGl0IHdvdWxkIGJlIGEgcGl0eSBpZiB0aGUgcmVt
YWluaW5nXHBhcg0KQ1M+IDEwJSBjb3VsZG4ndCBiZSBwb2xpc2hlZCBvZmYuXHBhcg0KXHBhcg0K
ICBZb3UgYXJlIHJpZ2h0IGFib3V0IGFsbCB0aGF0LiBJIHdhcyBub3QgYWR2ZXJ0aXNpbmcgWERT
LCBJIHdhcyBqdXN0XHBhcg0KICB0cnlpbmcgdG8gc2F5IHRoYXQgcmlnaHQgbm93IHdlIGhhdmUg
dHdvIG9wdGlvbnMgZm9yIHN0YW5kYWxvbmVccGFyDQogIGV4ZWN1dGFibGVzOiBiaWcgd2l0aCBH
VUkgZnJhbWV3b3JrIGFuZCBzbWFsbCB3aXRob3V0LiBJZiB3ZSB3YW50XHBhcg0KICBzbWFsbCBl
eGVjdXRhYmxlcyB3aXRoIEdVSSwgd2UgbXVzdCBhYmFuZG9uIHBvcnRhYmlsaXR5IGFuZCBzdGlj
a1xwYXINCiAgd2l0aCAoT1MgbmFtZSBoZXJlKSBBUEkuIFRoZW4gWERTIGlzIGEgYmV0dGVyIG9w
dGlvbiwgYmVjYXVzZSBpdFxwYXINCiAgYWN0dWFsbHkgb3B0aW1pemVzIGNvZGUuXHBhcg0KXHBh
cg0KICBOb3cgYWJvdXQgdGhlIChjKSBwYXJ0IG9mIHlvdXIgbGV0dGVyOiBob3cgY2FuIHdlIGlu
Y2x1ZGUgb25seSB0aGVccGFyDQogIG1vZHVsZXMgdGhhdCBhcmUgYWJzb2x1dGVseSBuZWNlc3Nh
cnk/IEknbSB0aGlua2luZyBvZiBjb21lIGtpbmQgb2ZccGFyDQogICJkZWFkIGNvZGUgZWxpbWlu
YXRpb24iOiBpZiBhIHByb2NlZHVyZSBpcyBub3QgcmVhY2hhYmxlIGZyb21ccGFyDQogIG91dHNp
ZGUgYW5kIGlzIG5vdCB1c2VkIGluc2lkZSBhIG1vZHVsZSwgaXQgbWF5IGJlIGVsaW1pbmF0ZWQs
IHRodXNccGFyDQogIHJlZHVjaW5nIGNvZGUgZmlsZSBzaXplLlxwYXINClxwYXINCiAgSWYgd2Ug
YXJlIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBjb2RlLCB3aGVuIHNob3VsZCB3ZSBtYWtlXHBh
cg0KICBkZWNpc2lvbiBhYm91dCB3aGljaCBjb2RlIGlzIHVzZWQgYW5kIHdoaWNoIGlzIG5vdD9c
cGFyDQpccGFyDQogIEF0IGNvbXBpbGUgdGltZSB3ZSBtYXkgYW5hbHl6ZSB0aGUgbW9kdWxlIHRl
eHQgYW5kIHNlZSB3aGljaFxwYXINCiAgcHJvY2VkdXJlcyBhcmUgZXhwb3J0ZWQgKGluY2x1ZGlu
ZyBCRUdJTiBhbmQgQ0xPU0Ugc2VjdGlvbiBoYW5kbGVyc1xwYXINCiAgb2YgdGhlIG1vZHVsZSkg
YW5kIHdoaWNoIGFyZSB1c2VkIGJ5IHRob3NlIGV4cG9ydGVkLCB0aHVzIGJ1aWxkaW5nXHBhcg0K
ICB1c2FnZSB0cmVlLiBUaGUgZXhwb3J0ZWQgcHJvY2VkdXJlcyBhcmUgbGlrZSBnbG9iYWwgdmFy
aWFibGVzIHdoaWNoXHBhcg0KICAoYSkgbWF5IG5vdCBiZSBnYXJiYWdlLWNvbGxlY3RlZCAoZWxp
bWluYXRlZCkgYW5kIChiKSBiZWluZyByb290cyBpblxwYXINCiAgdGhlIHVzYWdlIHRyZWUuIElm
IGEgcHJvY2VkdXJlIGlzIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgcm9vdCwgaXRccGFyDQogIG11
c3QgYmUgZWxpbWluYXRlZC5ccGFyDQpccGFyDQogIEJ1dCB0aGUgdHJ1ZSByb290cyBmb3IgZW50
aXJlIHByb2plY3QgYXJlIGtub3duIG9ubHkgYXQgbGluayB0aW1lLFxwYXINCiAgd2hlbiBhIHNl
dCBvZiB0b3AtbGV2ZWwgbW9kdWxlcyBpcyBkZWZpbmVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlXHBh
cg0KICBsaW5raW5nIG11c3Qgbm90IG9ubHkgc3RhZmYgbW9kdWxlIGNvZGVzIGludG8gYSBzaW5n
bGUgZmlsZSwgYnV0XHBhcg0KICBhbmFseXplIHdoaWNoIGxvY2FsIG1vZHVsZS1yb290cyAoaS5l
LiBleHBvcnRlZCBlbGVtZW50cykgYXJlXHBhcg0KICByZWFjaGFibGUgZnJvbSBnbG9iYWwgcHJv
amVjdC1yb290cy5ccGFyDQpccGFyDQogIEFuZCwgb2YgY291cnNlLCBpbmRpcmVjdCBwcm9jZWR1
cmUgY2FsbHMgbGlrZSBEaWFsb2dzLkNhbGwsXHBhcg0KICBDb252ZXJ0ZXJzLlJlZ2lzdGVyLCBP
bGVEYXRhLlJlZ2lzdGVyLCBtZW51IHJlc291cmNlcywgZ3VhcmRzLCBsaW5rc1xwYXINCiAgYW5k
IG5vdGlmaWVycyBtdXN0IGJlIHRha2VuIGNhcmUgb2YuXHBhcg0KXHBhcg0KICBEb2VzIGFueWJv
ZHkga25vdyB3aGljaCBvZiB0aG9zZSBvcHRpbWl6YXRpb25zIGFyZSBhY3R1YWxseVxwYXINCiAg
aW1wbGVtZW50ZWQgaW4gQkI/IEkgdGhpbmsgbm9uZS4gRXZlbiB1bnVzZWQgcHJvY2VkdXJlcyB3
aGljaCBhcmVccGFyDQogIG5vdCBleHBvcnRlZCBhcmUga2VwdCBpbiBtb2R1bGUgY29kZSBmaWxl
LiBBIHNpbXBsZSB0ZXN0IHNob3dzIHRoYXQ6XHBhcg0KXHBhcg0KTU9EVUxFICBUZXN0RGVhZEVs
aW07XHBhcg0KXHBhcg0KUFJPQ0VEVVJFIFRlc3QzO1xwYXINClZBUiBpOiBJTlRFR0VSO1xwYXIN
CkJFR0lOXHBhcg0KICAgICAgICBGT1IgaSA6PSAwIFRPIDEwIERPXHBhcg0KICAgICAgICBFTkQ7
XHBhcg0KRU5EIFRlc3QzO1xwYXINClxwYXINClBST0NFRFVSRSBUZXN0MjtccGFyDQpWQVIgaTog
SU5URUdFUjtccGFyDQpCRUdJTlxwYXINCiAgICAgICAgRk9SIGkgOj0gMCBUTyAxMCBET1xwYXIN
CiAgICAgICAgRU5EO1xwYXINCkVORCBUZXN0MjtccGFyDQpccGFyDQpQUk9DRURVUkUgVGVzdDEq
O1xwYXINClZBUiBpOiBJTlRFR0VSO1xwYXINCkJFR0lOXHBhcg0KICAgICAgICBGT1IgaSA6PSAw
IFRPIDEwIERPXHBhcg0KICAgICAgICBFTkQ7XHBhcg0KRU5EIFRlc3QxO1xwYXINClxwYXINCkVO
RCAgVGVzdERlYWRFbGltLlxwYXINClxwYXINCiAgT25seSB0aGUgVGVzdERlYWRFbGltLlRlc3Qx
IGlzIGV4cG9ydGVkLiBUcnkgdG8gY29tcGlsZSB0aGUgbW9kdWxlXHBhcg0KICBhbmQgd2F0Y2gg
dGhlIHNpemUgb2YgVGVzdFxcQ29kZVxcRGVhZEVsaW0ub2NmLiBUaGVuIGRlbGV0ZSBUZXN0Mixc
cGFyDQogIHJlY29tcGlsZS4gVGhlbiBkZWxldGUgVGVzdDMsIHJlY29tcGlsZS4gVGhlIHNpemUg
b2YgY29kZSBmaWxlXHBhcg0KICByZWR1Y2VzIGV2ZXJ5IHRpbWUuXHBhcg0KXHBhcg0KICBSZXR1
cm5pbmcgdG8geW91ciBwb2ludDogIk9ubHkgaW5jbHVkZSB0aGUgbW9kdWxlcyB0aGF0IGFyZVxw
YXINCiAgYWJzb2x1dGVseSBuZWNlc3NhcnkgZm9yIHRoZSB0YXNrIGF0IGhhbmQiLiBJIHRoaW5r
IEJCIGluY2x1ZGVzIG9ubHlccGFyDQogIG5lY2Vzc2FyeSBtb2R1bGVzIGFscmVhZHkuIElmIHlv
dSB0cnkgdG8gZGVsZXRlIGEgbW9kdWxlIGZyb20gdGhlXHBhcg0KICBwYWNrIGxpc3QsIHlvdSB3
aWxsIGdldCBhIHJ1bi10aW1lIGNvbXBsYWludCBhYm91dCB0aGF0IG1vZHVsZSwgYW5kXHBhcg0K
ICB0aGUgcHJvZ3JhbSB3b24ndCBzdGFydC4gVGhhdCdzIGJlY2F1c2UgcmlnaHQgbm93IHRoZSBv
bmx5IHdheSB0b1xwYXINCiAgZWxpbWluYXRlIGEgbW9kdWxlIGZyb20gZXhlY3V0YWJsZSAtIGlz
IHRvIGVsaW1pbmF0ZSBpdCBmcm9tIGFsbFxwYXINCiAgZnJhbWV3b3JrJ3MgSU1QT1JUIGNsYXVz
ZXMuIFdoaWNoIG1lYW5zIGlmIHlvdSB1c2UgYSBzbWFsbCBzdWJzZXQgb2ZccGFyDQogIHRoZSBm
cmFtZXdvcmssIHlvdSBtdXN0IGxpbmsgaXQgYWxsLCBiZWNhdXNlIG1vZHVsZSBkZXBlbmRlY2ll
cyBhcmVccGFyDQogIHRvbyByb3VnaCBhbmQgZ2VuZXJhbC4gSWYgYSBiaXQgb2YgcHJvY2VkdXJl
LWxldmVsIHNvcGhpc3RpY2F0aW9uIGlzXHBhcg0KICBhZGRlZCBoZXJlLCBpdCB3b3VsZCBiZSBw
b3NzaWJsZSB0byBjcmVhdGUgbXVjaCBzbWFsbGVyIHN0YW5kYWxvbmVccGFyDQogIGZpbGVzLlxw
YXINClxwYXINCiAgQWZ0ZXIgSSB3cm90ZSBhbGwgdGhhdCwgSSB0aG91Z2h0OiBkbyB3ZSByZWFs
bHkgaGF2ZSB0bz8gSSB0aGlua1xwYXINCiAgUmVuZSBLcnl3dWx0IGlzIHJpZ2h0IHNheWluZyBy
ZWNlbnRseTpccGFyDQpccGFyDQo+U28gd2hhdD8gSSBjYW4gZWFzaWx5IHRha2UgYSAibm9ybWFs
IiBCQiB3aXRoIHRoZSBzdWJzeXN0ZW0gSSB3YW50IHRvXHBhcg0KPnB1Ymxpc2ggYW5kIHJpZCB0
aGUgQkIgb2YgYWxsIHN1YnN5c3RlbXMgSSBkb24ndCBuZWVkLCBjaGFuZ2UgdGhlIG5hbWVccGFy
DQo+b2YgdGhlIG1lbnVzLm9kYyBmb3IgYWxsIHN1YnN5c3RlbXMgSSBuZWVkIGJ1dCBkb24ndCB3
YW50IHRvIHNob3cgdXAsXHBhcg0KPmdpdmUgdGhlIEJCLWV4ZSBhbiBvdGhlciBuYW1lIGFuZCBj
aGFuZ2UgdGhlIGljb24uIE5vIG5lZWQgZm9yIGEgbGlua2VyXHBhcg0KPmhlcmUsIGFuZCBhbG1v
c3Qgbm8gdGVjaG5pY2FsIGV4cGVydGlzZSBuZWNlc3NhcnkuXHBhcg0KXHBhcg0KICBCeSBjcmFt
bWluZyBtb2R1bGVzIGludG8gYSBzaW5nbGUgRVhFIGFuZCBjcmlwcGxpbmcgdGhlbSBhbG9uZyB0
aGVccGFyDQogIHdheSB3aGF0IGRvIHdlIGFjaGlldmU/IEEgY3VzdG9tYXJ5IGZpbGUgb2YgYSBy
ZWFzb25hYmxlIHNpemU/IEl0XHBhcg0KICB3b3VsZCBiZSBhIGdvb2QgYXJndW1lbnQgZm9yIGNv
bnZlcnRpbmcgYSBuZXdiaWUuIFRoYXQgd291bGRccGFyDQogIGNlcnRhaW5seSB3b3JrIGZvciBt
ZTogd2hlbiBJIHdhcyBjaG9vc2luZyBteSBkZXZlbG9wbWVudFxwYXINCiAgZW52aXJvbm1lbnQs
IHRoZSBmaWxlIHNpemUgd2FzIHZlcnkgYSBpbXBvcnRhbnQgY3JpdGVyaWEuIEFzIHdhcyB0aGVc
cGFyDQogIGluZGVwZW5kZW5jZSBvZiBhbnkgcHJlaW5zdGFsbGVkIHJ1bnRpbWUgbGlicmFyaWVz
LiBJIHN0b3BwZWQgYXRccGFyDQogIERlbHBoaSwgYnV0IHRoYXQgd2FzIDEwIHllYXJzIGFnby4g
VGhlIGFnZSBvZiAxLjRNYiBkaXNrZXR0ZXMgYW5kXHBhcg0KICAzMDBNYiBoYXJkIGRpc2tzLiBJ
cyB0aGF0IHN0aWxsIHNvIGltcG9ydGFudCBpbiB0aGUgYWdlIG9mIC5ORVQgYW5kXHBhcg0KICBK
YXZhIHJ1bnRpbWVzPyBBIGR1bWIgc2ltcGxlIERlbHBoaTcgR1VJIGV4ZWN1dGFibGUgaXMgMC41
TWIgd2hpY2hccGFyDQogIGlzIGFib3V0IDItMyB0aW1lcyBiaWdnZXIgdGhhbiBpbiBEZWxwaGkz
LlxwYXINClxwYXINCiAgQUZBSUssIHVzZXJzIGRvbid0IHdvcnJ5IGFib3V0IDEtMk1iIG9mIGZp
bGVzIGluc3RhbGxlZCBpbiB0aGVpclxwYXINCiAgXFxQcm9ncmFtIEZpbGVzXFxldGMuIDMwMC03
MDBNYiAtIHRoYXQncyB3aGF0IG1ha2UgdGhlbSB0aGluay4gQW5kIGlmXHBhcg0KICB5b3UgbG9v
ayBhdCBCbGFja0JveC5leGUgLSBpdCdzIG9ubHkgODdrYi4gU28sIHdoeSBub3QgY29weSBhbGxc
cGFyDQogIG5lY2Vzc2FyeSBjb2RlIGZpbGVzIGFuZCBrZWVwIHRoZW0gaW4gc3ViZm9sZGVycz8g
SXQgd2lsbCBsb29rXHBhcg0KICByYXRoZXIgdW51c3VhbCwgYnV0IHdobyBjYXJlcz8gV2hvIGNh
cmVzIGFib3V0IHRoZSBudW1iZXIgb2YgRExMc1xwYXINCiAgdXNlZCBvciBpbnN0YWxsZWQgYnkg
YSBwcm9ncmFtPyBNYXliZSBfSV8gd291bGQgcHJlZmVyIGFsbCBjb2RlXHBhcg0KICBmaWxlcyBp
biBhIHNpbmdsZSBzdWJmb2xkZXIgKFN5cyBvciBCaW4pIHRvIGtlZXAgdXNlciBkYXRhIG5lYXJi
eVxwYXINCiAgYW5kIG5vdCBsb3NlIGl0IGFtb25nIHN1YnN5c3RlbXMsIGxpa2UgdGhpczpccGFy
DQpccGFyDQogIFxcUHJvZ3JhbSBGaWxlc1xcTXlBcHBcXEJsYWNrQm94LmV4ZVxwYXINCiAgXFxQ
cm9ncmFtIEZpbGVzXFxNeUFwcFxcQmxhY2tCb3guaW5pXHBhcg0KICBcXFByb2dyYW0gRmlsZXNc
XE15QXBwXFxVc2VyRGF0YVxcXHBhcg0KICBcXFByb2dyYW0gRmlsZXNcXE15QXBwXFxiaW5cXEhv
c3RcXENvZGVcXFxwYXINCiAgXFxQcm9ncmFtIEZpbGVzXFxNeUFwcFxcYmluXFxIb3N0XFxTeW1c
XFxwYXINCiAgXFxQcm9ncmFtIEZpbGVzXFxNeUFwcFxcYmluXFxTeXN0ZW1cXENvZGVcXFxwYXIN
CiAgXFxQcm9ncmFtIEZpbGVzXFxNeUFwcFxcYmluXFxTeXN0ZW1cXFN5bVxcXHBhcg0KICBcXFBy
b2dyYW0gRmlsZXNcXE15QXBwXFxiaW5cXFN0ZFxcQ29kZVxcXHBhcg0KICBcXFByb2dyYW0gRmls
ZXNcXE15QXBwXFxiaW5cXFN0ZFxcU3ltXFxccGFyDQogIFxcUHJvZ3JhbSBGaWxlc1xcTXlBcHBc
XGJpblxcVGV4dFxcQ29kZVxcXHBhcg0KICBcXFByb2dyYW0gRmlsZXNcXE15QXBwXFxiaW5cXFRl
eHRcXFN5bVxcXHBhcg0KXHBhcg0KICBUaGUgYWR2YW50YWdlIG9mIG1vZHVsYXJpdHkgaXMgdGhh
dCB5b3UgbWF5IHVwZGF0ZSBhIHN1YnN5c3RlbSBjb2RlXHBhcg0KICBmaWxlcyB3aXRob3V0IHJl
aW5zdGFsbGF0aW9uLCBhbmQgdGhlIHBhdGNoIHdpbGwgYmUgc21hbGwgYW5kIHF1aWNrLlxwYXIN
CiAgTWFueSBiaWcgcHJvZ3JhbXMgYXJlIHN0cnVnZ2xpbmcgdG8gYWNoaWV2ZSB0aGF0LCBkZXZl
bG9waW5nXHBhcg0KICBzZXBhcmF0ZSBwYWNrYWdlcywgaW50ZXJmYWNpbmcgdGhyb3VnaCBDT00g
ZnJvbSBtYWluIEVYRSB0byBtZW51IG9yXHBhcg0KICBhIHBhbmVsIG9uIHRoZSBtYWluIGZvcm0u
IEFuZCB3ZSBnZXQgYWxsIHRoYXQgbW9kdWxhcml0eSBmb3IgZnJlZS5ccGFyDQpccGFyDQotLS09
PT09PS0tLVxwYXINCiBBbGV4YW5kZXJccGFyDQpccGFyDQotLS0gQmxhY2tCb3hccGFyDQotLS0g
c2VuZCBzdWJqZWN0IEhFTFAgb3IgVU5TVUJTQ1JJQkUgdG8gYmxhY2tib3hAb2Jlcm9uLmNoXHBh
cg0KfX0A8P9A3w==


----boundary-LibPST-iamunique-2024505183_-_---
Received on Thu May 25 2006 - 08:06:47 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:27:58 UTC