Contributor: MARTIN WALDENBURG These units demonstrate the implementation of a TextSort engine, which uses a three-way merge for Memory and a five-way merge for files. I've wrote this because I've wasted so mucht time waiting for sorting. It's very fast, one Million lines with an average length of 40 in 210 seconds. It isn't true that QuickSort is the fastest Algorithm available. This is only true for pure Integer or Word arrays. With text or records MergeSort can compete and is in many cases faster. In all cases of interrest it may be slightly slower in the worst case but it can overcome Quicksort several times, especialy with large keys or a time intensive comparision like AnsiCompareText. This implementation is very fast but not the fastest possible. There are some ways to improve it. You can compile it with Delphi 2+3 and the BCB, with little changes with Delphi 1 too. It will be fast with Delphi 1 too, because it can run in little memory. TTextSort has no compare function: You must provide one like this! function Compare(Item1, Item2: Pointer): Integer; begin Result:= CompareText(PMergeData(Item1)^.Data, PMergeData(Item2)^.Data); end; Put it with the constructor. TextSort:= TTextSort.Create(Compare); With MaxLines you can determine the maximum number of lines for the in-memory merge. More than 200000 are seldom useful. With MaxMem you can determine the maximum number of Bytes for the in-memory merge. More than 1/3 of main momory is seldom useful. E-Mail me at Martin.Waldenburg@t-online.de { the following contains additional files that should be included with this file. To extract, you need XX3402 available with the SWAG distribution. 1. Cut the text below out, and save to a file .. filename.xx 2. Use XX3402 : xx3402 d filename.xx 3. The decoded file should be created in the same directory. 4. If the file is a archive file, use the proper archive program to extract the members. { ------------------ CUT ----------------------} *XX3402-011551-160797--72--85-38244----MWTXTSOR.ZIP--1-OF--3 I2g1--E++++6+4O5vm7P5Efo7E2++CE-+++D++++F4JhPp-mPqdZMrEiN4xaHN-THw6k3ALT Zymvg1+FMzM+P+U8AVa6GbUccw8JoHNh3x-DPoyboNRTvvZzqhCv5gWHccffHFXoYZMMx62- Y+6NA+HiYWUAFg+MwVts+0P+35V2REPYY2z+50W+-P+2bc2Jw69aJoFjW6e1D6x6KCC5b3Ul 9IXgjJs8gfq8aC2aKN3MT8caqAaniLJbfaLtZoWrp5HookmWeTu6HCga1cAkK2x65Do0dYkB rGvkq8mqefOnvMRzSW03YFLj8EKL8RzKyv3sZzvX7+f9maB-Lnm7CipiX5gizr8hi5hprL3f Cv2xvnjvGFnRlCqKOwkiDCKap8EgGN3sBmZdLZedWNjBfkyLQwK0ApoSQaMDWPSo6omlmXG1 CRDgl0rLa7jLkajIjU3EGkA23+++++U+ysjj6e3DCv9T2U++Fuk+++s+++-hRpFZS5FHPr7o 9b-VQyoROowPGT7vdDm5picYn43wY4ErWJaWMobMEki20yl4dsWHqdsqn4Iwstg5sCLsvpTJ vrbNsv2l7dbNJFVrJpRLpviuFyevXQq3DFjDbt5zYRxxBysGEcMrtykqDUj0a1TjVsn4nA2S EfNzv4mxvflxnLjqYjUe02I5CONVvDfYAzIQtjSGw36A1YPXo9qwWjbUhqxThkbpDA8P6V8m W6LLnCZkqDQgucTi85M1jojqG+l2Y+WcM02N-04VDYZwnloCLO04o44Ey127-U6iWJlTn7Vu 86ajEgMqPyWM13ZsmHWa6Fg4sFUE+VcmQ8zhTUskQ1oK0O9yM4520S69u4nllfCMlYYYtnW+ 0HvHYD4SkrUh6eAki5MR716WPhEaBmvk8MZVgVgOVhGDloUrxQTYeyj9lTwfG4+FX9U+3dBl Y6EYiD4-IJ3T+5nMD8Oi-pFWjq-qln1vvz3a+AnlKQR-EVOd4zTDbnpzZc-iK6elUqprTzao mHjlDxQ5CEpcbr5cW2LYP-nx5fgSfDwnf18sUNRxXoPElIT5sl3GGguDYSzvkL+2D0GvN71s TJE-oXeAqL0vHT1DWmst1TUIuppm05wjKPW1coztu1rUuVX4zjjQzBklm3IrAbzwNOjHqPd+ +IWA3dvrB8M41TumgAXCYDK1oA3axT0C9WV301esMzIkrxYFr9YXtqR7vuIUl42123E2egZ6 1vHMcO29Dp2Z02+763FCVk3tEkvf1V+jXh+EPUGw+Zg0TTK1iAA7VLtC8we6v5aLEEWeBoFE FWAL1+ZgqO2xXr4R-5nEooSVRCshWFVGRoJjuzlXvnyg5uxXxmVofw2VW5IS5BDP9XY8z2iE mcvc1a6+NNl3cuHbiLo7SgE4gM2Zt6tgUWnRq8KSymRMGlmEfEutZx0To2JI-kRCRAYjES+l uYgNx+AzWgCY5kC5V-Bf+PJzI0xV4iyuV5KM-bqDfw3sVkHL9+n-XWI698nDb+GI38ZcsKcy y2uPQ29V9MTH11U-gy4Be-4s2cj3xwMMi7sQmrPCS92wrHNR52UJVqq1O3l5jL6OyMyiBTSC Yi390LTCVWDtSbN1Fr9+OQOcMAEyChyo7M9br8QXqbTXQHTRPjVkla63ondVBpbsDCAyr6sc Bu8ALV5X7btZQSjERxWh7aSxan7h4xxdYULSsTv3i7TQ29vs3VWIR35RhAQG+qkxfu-8ajUx lqaZtwwmpF0m1ucRNV2QoGUiLuvq-RDctsB496H6Z-MhRlVGriE4j+aHDv91Q-LFZnFj9nFZ +Uq6Gi6+CSmU5uG7ZwAYhH4ZRt8AstHS4d6nSWGUhHf8CGrZAn89fcF08JShTG0OkU4Y+RBh Pc-U7rH6AW4+8VH+QP-zT7AxyDA6r5dak6+vARi5HTCZ7aeJifkuzYqvetnHmmspdnrq2eEM g8Y0kzZGeb5w+A2yyekhrgtj+jK4mNtwDs+IGfp0WhQp6ZLgzdX2VS6N5Dd5PVGrCMFsku5s VhuH9llzO92ddZXG97JQEJ+GouJEpkd9G6TkJfO-ZxhvnYZI4mM3bJuoYfJgfKFU6dKgZaCU iIHdF2Bo58DnH1QDU5+Jux6SEyhMpx8rb-UnJebIdZHylFmPf+POQ0gNQKimI4PG2eVRkffK bFC2wgimLII6zJiuSD9H3Xk3q4nd4JnEOa50LkfDeuohXOZEjRnVm4B1tYC--i2FKqliahGb AnYVv939ptR8VeuKR5S7cZwYIuYKHADVxk5p6gJkd-nPp+EvWYdAzwHY6jInAf0catdV6VOV Hm73n-6AAwjV8OeVKG4HvSt+fj0R6-Z813xsQPYSkj+TqL6SNZO0V2tMVssY3bqirqzl8RQB 0GpB+mRj5MiOZYrLSduk3-osYO11AUO924ILCJeiKAXr2qk+VJGq0PlKObuTbiIsBsSSkSFg FHAddRLNb2MpCGzIu1yl08o0CK8GAa0bPARaZEBlxZbdhAeZjUXM0oG0Az9CElEFlvViYKZ7 KB4d2KeGv-HTn9t-ramzTH23KMLeE2yXIEDN3imCs+fpj8+DTeBZGVh1mpz74RGD5kQhlRfp v0Wf17cmPA7eZCUhYbZafRl4wLlPCK9A2aGTjTGhWJcodHEeIWCZ3LnMlIHgqR8X+-oG64i5 HP6xVK4JOXD1nHGZZjee8SvCQLQ1zdSPUAFgwcJ-2iBS4G1urFx+2d9ss6wxPWLY-l4QsOw2 6ntX1e-l5-QtE1qtUEWXxrlfZmIC0+EqE1TYoq-KtDc2ByJcG47rmDF461WfY77cl9T9Y2G5 Prrqk1isTVSOTiaETmEI2C+qo525mXnzAcc1jkpIbMMI7B25AUvxnN25C1X-CBoDPFU9mQ2k wE2+WSLPGfWejTpXwb8vhTrqnNjpBbbtugramlxTwCqH+Z3Ie5ajOMVWEBIx1G9G7KvSDSbC LKhXcgBTiGOHamjAxpidLcmZurnR9PC3YKYqqlaekkb+MFxHsDRF26nYdd1Zu9ZPB+jGJjIZ GxV3quWKBHrjKWQzUwZlJuekNWOdCt4xcD8d0eT1FniE9tfb3mZnnj4TLClYYJUUJU4c5f+e ik4HUgIEZZpu2KIKH13dJch3O7f6mc98G5qtQYdDLgEA1T52dNHeluFEnerGEiL5GEozsEGD uE5aBgRmIumirTDeKeaSnGEu9PYNDDYAcdjPJ7T8hgJ7PcctHX13Sh6fgvgtlHRzG5mmhfQQ 0Ec-NgK5mF9TVUV4MwnKyH5uUFj0GydQ0e3GOti9iGYuGxWQJPqAqmUYz6np+x14iGYjBSgA sII4baJspWsssFaucHk73o1q-2L823ugIc7oLHGR-DtamDd749bLQawMjw5+IiYD3cv7UC7y C-UowsDYwYdzGr3BLEwDZV2EXu5xNBVX6OunnwrSXLUpYYFMsoE2Om8chs6Fp2LIOlDOkvfc tRxSsMVz7avzutaQxH03UI1-AwOGvVe7UOYNQMQX+8KsUFU+vyAfuYC-pMQzZrkb24gW3nWS l96uWwk2K81VRlVx4b58Kp-dMSrrZQ2Yo1SGlpQIiFOpyQQVv7PW7eDsvcETckzM1Mai2-oK Sp45s-vqEFUAyPQigY02OHbklxM7wGv7mHcEhGMy+UVwM2II6zjOk31ewx6Fg62s6o13zdh+ hORcsWB0Fn1LxIR7r04wp-q02jJgTU-k321NWOi97hNuoww6NPp5quHL7joqCKZ1jSg2xhuv eQqpPSCKMKvDJSo6PAjx14JEZM0hYyk8s0Q+hArTEXM0+4INb5GnUNjhVbJ09k7NbfM5HNFg b3VBTKXedNgYtjpoeyLhyBMigZ2H8I4oLy2EmCIgV4L+58MjN7+-mlPjdUwssrdWm1jk6Lrf 57RM-zv4jSmEinoDxBybAOcYTdwYhlC2ELHipKUp+cKWT7N4fJiUJoyXSp347ljYl5-Ao5aG 6x6C9W2nCyrOQJiBhZgInQf3dEs2Y1EwxiXcop8hlKP5pXt75SGqc55zgHJ+ohE4psEhTXpT uM49bXwzYnaWqhLbPvk1r95i6nyz6qhfJdeI0WVvISFSyUXPoiTHPHDMu+d28FMP4BA-QzZ- H1s2+uhrKZPqWJ55wyodpFasfPakEaHXjnjwM4lLkuF-gYQFseaSbCpvEQHG52UHwG22TpbK OQhUPGpBUDlZ6afN+MbK+Va5XQtBMKteAJKMCcKV-QmIX1FAHApNcDtYWjshGkEd+FV191sN oV6cC9FtvoMXcAzMxAE3KcgfLNMWfSkE85TMZD3GyelOVPaGHkMayuu-59J9l2i7hocRPSa7 0zVISHJqpe2FsXyJjZOk48nfIFnwoKSNOVFPnqy0cZMw+71hhWfZ5agATY-GU+cz7dZdpxZS HwhEXgfJhaXamZNpUnaDIuvEkWfc9oJPW9cITMtYApodxh6N8gwWS1pp2bl87w85Tok+fZ7x whAq4aEtm9GLgFwBLP0jeNvApehinar-eeQClNkVpIbas7Bd9iUdK2bl8aMHPc44DelslMHJ iGLUjowFNlce5VlIAy9dTeVoUieHB7vWqz2IFaCK6poyrkmwEj1jFPuNpbF9xO9fAL6KbJMx OAuGbSKVUldABoB6+yX42xZDYvC6tWNbaKX21t4nB7t0DIrCYbeOb0LvD4nC6bylz5QCC4rR TOKmjOCm9m8OTO2WgQtHU4b62eKNrzHbWxfH6rOVwhcBepGMDoZFJTCPIrpaIlaZbbZG2+rN KComIhAb8OfZKSoGQcDI+N8MPaJmUyZ7OtAPT-StEPLetFj91GfJ7kNoNL81FJdhYlgw5Oih iODoXSI4GvDOL4tEDnacx547aCtlQcAuypZB8PcmGSqWD2mH3mnJkuUTRT80VvLMdUlx6VPP t+F9hRVuCI43MsD3NkJH2jYa9oUzXlRiafmUmEiSH3tEtuGWR+dwZZ0FTvxqKzi1daxEL8iG 6xHzh41i545KnPua2YYz4f9lBIoZoiE6HMuUbmN5g7saFrWgvksSxl-VpWq6Egnsp0oDBJG- MCdNH5pJben40rLbRQtkNpfhh7+v8RmiCBwLNsVqdftORZXrMw8JBwDdsRK+9Rg63wnopP5- FHBxUFOsAgTdCEigaJyjjUJCnNUAqB6hQ93ALm29L11HOpZUVTqelnuwOi8UTaNnmLBNMNre TxYtsCemTe4qi265mIp2pAxgnbb-hfXUa9VOhfU0QT3-jyaMsYYPGplNGpnMXji1VO4bOcPp XpATyxmoqH5EnnHZTB0Eq8GbWodDNvH33Te4cRYvoAxgnbb-hhWYdkwP3lSObgsMk-d9PB9H vmwxfN06nay6gmMpXLxi1D6vBQXWPFgfKWvht91C-ce4m10WiffJWMgO6Xxf9KMju7CZKHDz pK9sNBxLvjS8a1vfniHmhW-LWiSHjJudluidtUjOwtrgy3SQsFBRSuZPfpbQpDEfQywc9BWZ ngTmVTeJ4Gj8tNKC8wLmVr6fWzn8OQOmSgINzZ-iNP4b-bBLNExUsWieuMjR6dupPbo0X5wU XJzcBgGgFSj1Oxq8ANoDoQaWihvsAwtCQVQn6qnV9Q4nNbWupu8nY16RPscdAnQjnodOONEc WV13d-Y56GxLHhCaPpSSaPFmYmsqto9mX-YJIcTRwJIRwgdJjp1hWsbHlZlAb1icGJidSFGO Ve6Bzk6F0A7Rm6F9+zYPjunMRXMJfWhqqYHTggebDtZkTn2iGxuIO3qkq94jIdEEbLqDoN+r dOsIlXhh-y8KlQuyjg3q6CoCwSMjbdLxcDmHyp5z7Y8U1Yk4+24I+EUpGR3Crd3huTEh9F0+ z19VbnDkVE40nulivQGNpwU4+QOT-w1WpcbF3PmprDddrJVfp2oXAr+VspedUImD3hOSsvE8 FZ79K29QoFRQpwICdkJT9Sc4lKj4E0MKn0y8bcMDZNw56EthrK7O+Lxz7jnxaT2vAy3rNgPD Ng8TiSJJlmtlXrN-t-1LNlRuPL3fRd59t1pCYQDWDNOqO1TJmjcQoKwiUQpfca7ClXaEnSpd ***** END OF BLOCK 1 ***** *XX3402-011551-160797--72--85-55555----MWTXTSOR.ZIP--2-OF--3 WJ-OVsiMZwt3wcePHoB2OyseR9FBuTo4ye7MGMKyEJPFYnCmvet4Y1R+smoB-QcdqfRr8oSM PlBFDxAeUaqqYEQtep2FUKracZcRIIHImJkCTVhXZvdphnnQO5YJLvmf-isGyGOOPMwcBDnU aBvW-QoFUPOThi1FnQRgW6qjhfNYgpd-uIrXYjUeBsoPEhGfc3-3W2bFI6LlcfbDMVeW5gVk 19sSKfjw5ad2mmRFQtEo6n3hwUjhTnKz1brnfiuoHYLrknPtfQpFb9ZzEVT24LP7VCcVA4Mb LL98lMXjBXQChHKMOJ1XItmluI4lLZ3Td0UTPaAHMxdYfRCXLxS23Pc16W0+TJ59lW0iy0Pj aQRWsHhC+KCMVV36f5+ci0Zn9lDGlArhcZCoW30h9VOLDTa6DU-qv6IV5OCYXpzmJngp66OV lZzMMWeAv6T8-OKIWTglSum0ghRbrKiS-zkYsrrqXb1oT5dCKRfeZIZz0w374NegQhL8N-QM ayn6Q8qYyUr3JSl86jZvq0rCuOYqXdVz4JypB1HNS8A5b90PZh7IUoOpWDmuKrGXipseQXW9 ETUAwRl7vhlbd4wZqMBAR-i+JzkBjF+Ivc2xF6QlIGVmv6Ql0uJXkcMIjvEBvVcYLruvo8hE -MNFUTH81ITINSqHJse2GndATAteXZaC1ViZz98kK6M43dvKQdAzezVigI4LBRnSR6oXUoo8 YG8le-980iYHww3AC4qqbontYXmckKm454HV9G09ErcnlJdPDG9GDXwnjMUn8hfMhxHfQ1DD 7TLEq5byv4tn+EzUUwE06VwYitydtn0zZsGLGAoFy-H8yZxN01DH0B9P3uylzTLqHuxSY8D2 iL2j6kLw8ki5p-zXulZ2+oP4YCR+-i4kywIFybxEGkA23+++++U+H6Tj6gAWxSnM+U++9kQ+ ++k+++-2NKpjJKtdR0tkMLChJ2hj4X2EjWDl5yNEeR1+0fWY6I7e0u48JBccY2OxJ18v+vXN hJTq9+GZySzpqAgXGEgxN0zfaSznjAQD7wpLyoue3TUBBodG3k+4a4YySqLTc0-AK+zEvYGh oyXgp0AT0pdc2k+M0IBGkOp62pHHkgn1NNqjXNkjm3wyCnhhU2VHw0c9-WqO7GOFtkvElYPa 79LeyV-UdUrE+a40xnHKVU1JL0cAxCxcf8Ruop598wQYe9+V6VUOl3hVo0CLxBN0PjFG7dW+ g0-h+pPGNJ+E03U7MsGWBSUN09K4Cub8g5vc+Ue96-qBM8o9+reZL+cq1cG9tYX6317YD7EV qdLV+nKpGXbeV+BtnNsxJWi3ux8qLSTJGfIW3O4NWFVNQ53PtlFiLHNutF6ScPJWXisoLhgP YeYvxJBV9Ogy4t2jNAkefQVc-cTONCsrY09JQxhUMqB8yaEMn3OPnj-t80lBN6My13fbb0tA q2+PSV0nZtcLukk+T0e6h4drMF7Cto5x9IQJr14oYofsWtVWmcUzbCyPuXkrlR2kxIZg19Ut W12d1DfwkcHLleUGBClnyUhXejyJusPIJKNxb3lapoxZTDSzvAs-RavYoYJN7ZOKrL2qlo+e dgt0s1n+ZNSO+vl9VF4wJuXUYJ5bk5Rd8Em9jYTRgZRVWf6wlEkJyKigSLVn1SyWkL1omB8g I12XPZ8mr8pMvN6kOnS+TusBJxeDMPo9ZyszFyCAHh5hfUzh4aqFIfSriQkdp8t4OCMs20G0 fTfDW6I4D+Au7Q-JqOGleqB66HfQpKoYqn9qRbKAmbhZP2TR5-W63rsWTd2C4HkqB3i9QfOz 7x53DQM36HyKHlpSiaSVhgwQmVGzWUn1I4pt6r5zlPpFpZKWoy9j-Hn0n65jKrgcPpTYLhlm y9PgDJJ7oPYLkyt4TF2SyJu7LuEWhtWIyraYCDzSYKplyeaqytPEDyJz+3-9+kEI++++0+-8 UywWEoHD03E-+++z+U++1++++2FZPKxJPaZo9aFaPMJGkIs0AF+hiv63ZYowsg429p1Ut3Zk Ul3QsXPVOc2-4fghuMs-njuEby5Fbz4gPfh0cUQjorbharbn7jpg2-Mb1yAiuNlSScGkGRk7 K8lBperOS1807Tdjl4Rusq3p8VOsxgwfkF12Ocry0u3xjY4VJF+lq44e1PM5YCZ4f-JSx9LI VXPbQWfIEaw9FaUTL9brIPTcbaQEFCCobL8JhpAkMibeIxl902YhILo1562qWe3QLYzI+56o SYz1sfM2oIHgECMHA9RejjMS4sJc8FSFU6rs14FUcnDb1OqrIyTBwsA1aJ-qzMmc3LJ5mKxN zZL7jzjVbloqIIqF4uklDYjA+cl5uDTwIgmTO9BgNB4TzXqrv3Tmfo-TuVmC+dLT+fpG64H7 -hF+Q8ZLsH5hFf4EQ9AEO-RAUqJS+4SjNhJfFL4qXLaCH4FE9I9t4RvRT0p0m-REGkA23+++ ++U+DNvf6iOg+ZyA++++lE++++w+++-2NKpjI57jOaJXR0tYQ56f8AdD9ofAJL-7nQoD8AfD GYoigSPZsiIe9IshtiJGI5199wchpU4lE0d0wn79319n3BFV59q0l47pVKeE8gBOgANeZG+3 9PoUpy-O20wdBHon1uHPgO+U7nAtgGEnDozD2uUlAn2bgmfJ4Zr8iGUpgGEJN7l40BVE5P+9 11IlJ+OJtU53IjBGx5Wt+3-9+kEI++++0+1AWywW5Lvsn-E1++++-U++0U+++37ZMKFhNGto S5GBJAhi4nYEj+wkzx+tqINYfFwtCJVUMqQD+JO+YnJUt-8+aaZd0DAVY2r9wvLv8ubaX9FC QcZUE3OHf8ueTXkAb7Z8g78dNlx1ZaG2GEMaurSCDEQlMaCUi0311zkWzwMYl43f+mzONXzM Pe0GCSBMVgFwjXQXSItPdYpAh+7g4ga25VQqxjbbwsppb7RhwybYaKaTMgpiAuqtAs0Z8Kum Q2wtYWzR60HKOx081Ri8YY28zmiCb4FuNeHQsB40Ma-OKSRIUkDbH5gf+zWEkGo13UtW265+ RlRY+ppRLZ1a9cOywV8mCNkUNmd8nEVx9fNveXO+dpeZaHU9TL1Pa61iUKqgAqj5E5VECTW9 kMoHWX9SZEFlELX9WT1vAGMsZ76NBSiXQVGsfIQ7N38TMGJAerYvoCyWrn5QIaQpEG-jkcUX fIJZZ7EyR1crFm5F6aB8GhM85cnkaP8nqo3+9fis-lh+eOdxH3beGpcLOFgvtMqk1PZtgY4B VphedOhZmEjWjCDC4U-KetrFKXzl0+8dPQlIDGIGAjeV0X57teZ0HokT29yfERO4Use1WHyq d5pJO8J66QcDxRX3bCqV0+mzUMVKePo1BV6JAI2En8VNjgNmx-NxeFtJ0FzNvEN9JqyjexqO szPiRX5fgm8sqkoaPCTqOdjtlGKGl8a9xaV0RPimTMpOvmmC1HzPb2fEEgnUjYvFtAFl0+SH 6Lbq1w+ZRCf9nOH1ZzzU+BHNbigIJ4xphhscnC2qnIuTTV9qZkjGfugPicypIwti1XrujarK X83j4m9ukfYsiTaHLdLdx9vqtoQXNg6uyvPI5kjuuS-eDXU176TyjP8t9r6oKxrhuWcebIFh scBW71meLxsZlecubFaQJNUuBWjnwYwRx54iNcwlGFuV0irBWzL3ImVyfOCraRS01aLRSy3w QfhhudNOoWeaCjZM1FTuaRe6LFyxPftBQIjuDnQKraxbjVrZBnBTzb4h1vnFCMxpdO9xTm5F BbyTfv-uo102HPImiVOLXwPp5BMZPTyGQukV23fqX2dy-p-9+kE8+++++++YWiwWMDTsHJg6 ++-P0+++0k+++37iN3FZS5EiSaZkI2g1--E++++6+Aq0809kYzMXx++++3U-+++8++++IaJV N4pZ9bFsR0KEEKj1A+m3vs5w-yLIGmWgXDIwq-W1vfGBgOBPmsZLlmeGr1HzTb61gULmxrVu zVeXU7K1+HCmIq66RhVZHlCYa34++WXSRBgqrs8Vd1iV8-fn+27wvwxd66suWK5jiV4sA3qX FkyiCjG+hkiXG3dUXXdGIHCR5NiH9hL0tELCALjHzp8-6UXF46K30UDB4HX8mJtT84wIXgZB 03NslEklJ-WRmcdX5anp5WOvOvtUrOGjyMyKrZ1P9n1KoSTc43TFWHlqLRQqPTDVOWfsQQZX DVMSqiNULy9kR2MKtGrgxaqnTrVurA4Vy1YCgZ7jm7AZyEREGkA23+++++U+usbj6VTbGhnB +E++K+A+++g+++-GPaFJPaZo9aFaPMKGkKvIA-04jIYquKsOIEsQs27s+NFQ2CQi1Jilqpop Zbd0khYsXJL5fVmrd-SSdro7nXk0Xw+9Q6PMXXQU8d41tQbATDzAS5vB+QkqtygI72R93k0s nF6TNZkouJGTrUdLojo4LAWj5Hax68KgrSL2Lq7mKIjr8kUKu3cGnjmLvn51+YbQldGkziFJ 5+j2Ghv22bRmbb2aLmwstG6srB29obgykxsFOcQ-CXxbqXd11TOXRFvbW9JlXUKdH5sivmUC EPEZ5OPh3chHheiRHrA34V+FwC283NW4h8-bBoq-lOPGTHWjR-hTH-jCqfQNymOSa5VJyocp +GlfpfBKaDLFNW6Ds0zIqrxFcE928YTK++Hky2N8nUs8mL87VA2sgOOw40UT9CLtbX9JkEQE 3FhFMi4+MAAKZCmiUgWGh1Ye-DrzYssARLs5zpDkJD+cABY95+uUUHy37mKFFvWIReOb2XTh bsDxC8VoJiLNm5IwxIGyZmN7Ma3F1pBHSaGk3bLr0Acp80Rx+w+A9aewinfarQlSVdqxBu1Z +26Kx5HTSLFihdDeBlft5U+VnB2hTYQEtNTVS2qXX30gGhRv4DVJekkX42mIcDg1xBxjI2g1 --E++++6+-00806dO4rjW++++9w++++9++++IatYJ4JsR0tYQ56f8AdD9ofAJEX8GkZ7fGWl tiLWtGchHWratJ7EQAgjmWrK+P4+ge3taGI8aLY8uZ0qLY3WgPd0BIWBMGpMKvJ8Y68KLd-f Q0q6ZtGObdY5oihMI70HaNlMYdaTdyQ7p7WNa7BNZKeB9iJQZ7dMYUcmHWA2P8UCq5t1HEmJ EOJtE95Ij-ExLWs+I2g1--E++++6+D4Gv07Ow1q9RUA++BU6+++9++++IatYJKtdR0tkMLCh JKpj6XQEzcv2TlWdZM+qKEKddmPYIWY5mMYc9uT+BKdDxw4vCs+PfspgPw6qijzS4SwPhB3l fScDf1ojnskxnkkjVzz1yh9hjA0xHiSswT+f18AVz8QJQ-ugx-spl+LQ0CiZVUSVIhFlPdQk D1btCTcqb+x877W0By-L0-zmKAY27WMHIix583T+iHISD1eD5duZLw22pLcZVxy8kGjUH5rD kReO7tZGKg8-R+Q-oSES-1k9OsLq-NU303r+cxHdrqA2bBxA1fZ1YCHZcH0t-TCgkIeLz8hv AIsaWc+ZR+edRBv8CDQ-Sa2FJP25Y55qgqDz6dli7xQIZYXoYPub971OcppE2MDKcShq+-vc KQknjRkBCWSKG9hNsHtueKUrJg6t3fqrUaeIgAVcPkof9srBu1CFEdaZCq0kaIz5rWcLkjZW XGmQgy2EnW-Vh5ss1ZU-25gxwwH72QnTtRsPTRf69nPm5q7AzKqSlKXj3ZCDaGDxFFcilxeN SA6maG2dqZDfT0opLeBSfjmidsdJXIi8Ol4XOXKBkvNwjA9YwNrNQ8FuLua6YREaiQLaRaBe ZATy15K8ZinjsXwkwMDLnDbGLv3SKzYYD7OCWpkbLVfB7NsFoTFmJ5t8ox0SdSJ9pOm52rlI kUfqcbbkVPII7VHfGJUyVZ8Bed8JdAbK0XDIDfWltCLvSzUVaZnS-7MpONEyoGjNJBVL-o-j CE8asF7hG3CAJs7imPzVn7hnuhhW-BmylOSX8DfduCHBNyvWmWf4dRFgn4Vbl1YvBpDhyng3 XbVoZewa3qqtcf1X8PP0UB4+pL+oAp8HxSZEJsXwuEFjsHVsJLP5dyrnIH4AVGgUwF5DFnMz ***** END OF BLOCK 2 ***** *XX3402-011551-160797--72--85-18384----MWTXTSOR.ZIP--3-OF--3 527e8XOrAE+gfZ5syVHinrvXZSpLcRwQ1y-5i9BdjrTS4xFN+CGOaV9udQjPAyXxrVg+lOoY jt-2x3fntWYzLLqa+87tsnPfPGD8aQqyCucoxyVmtIBaZEYdOfNoCmphevfj7Lj3+dfvOxUZ kRlQGcJYH0LXLF1SWAq30XoyPImPVtkihfgxihVUkaDqZO8SCmSLaZ5vNNW15IyKr6cA-wqh yRymhVrgp9X7O7RnClBdWrPrcNfmHqk6IZvx16PAYFehMgYCFo6CGXQNBnpJdJZbB3P4sRPR -ZgZSep+LlojHEM7cqsVoHTeRjs0I2g-+X693+++++U+nM6c6j0HxWDo++++K+2+++c+++++ +++++E+U+9O-+++++37ZMKFhNGtoS5FEGk20AUgI++++0+1fWSwW3yR8rAo-++-M+k++0k++ +++++++-+0++hc2Q+E++IatYJKtdR0tYNapEGk20AUgI++++0++EUWUW8KVhvsU+++0z++++ 0k+++++++++-+0++hc2G+k++IatYJ4JsR0tYQ57EGk20AUgI++++0+1lYikWKj+xWrM1++1M 0+++0k+++++++++-+0++hc51+k++IatYJKtdR0tkMLBEGkI4++++++E+-+1X++++MUQ+++++ I2g1-+c++++++2hRW03V9lqmg+I++9+3+++C++++PLR4MLBoJ4ZhNGtuOL-EGkA23+++++U+ 9d3M6OZKPkVB+E++l+I+++s+++-hRoNVQrFIOKpZ9aFXQgKHDIs1AF03LlMYe2WCEAY-C+-6 20Y3B2HW0VlXGrRQOMym-EIJqX8RaHxv7htB+F7WRWrjtra7lnwD+8udtOmhXQyitAycfKFg gvYs9zYPyzoRhFJoiCxk6bdtoTTOwIATkn-EnmBNLWt2CbuYfcmjLwFcgnNM-f1CWS6xsofH qLV0sEBlBaNxtfHdHJ1H6a0qh+W67uwROy8ONg2VHL3di2kVHE9WU1Bix0BGucC+oWY6C-o3 YbO-dZr+utLkzR5kzMbQuaTvrNv5Xk9z54xodqz-Rv515YxslFPrS85jDLP2XuNPwUOrsUrw UHQSabUyrfeD7FthJiC0DA+QjI3wt+rXuUrHJqzczvYrN9vU1NizSYDfQqwcinSgzbfLXOgL Hb0XRqzMTBIPJYyxyZejSoDLsxscumprrTOXSa4-KzpgjxjnW15Xxfmz+J-9+kEI++++0+1c M3gVZgdJabo1++0-0k++1U+++4prFa3nR3FdPKIiQ43nfJPPPVAl25qDZ5wM5Z-G8MGY60uB S6-0c38-EU6JEXksitCBpJpv4RhRJZLtRgNCghaa1EYhcpnqAbDaRXnqlMDz67TBlUKAgq6c X-r91C2fx9gxi6o2e3CGpe80GEbj-Jads3GYAOe7ckHuntwzuSu4QuXnYaEmgrx1Sdaa27EA 2-eYQsmvOnXXaHH+bm2VbUf0vSujGQ+tgWo1CSZn4KAAkaBqc7-qddo3+MIU2geKc8QUJ+Zb IgLffU9CByr+4EH7JVN8vEVocHU92yoOKcKHWH7U0FJ196oZCL2qE2wtqvHQ+VVkLb5sGmmZ 9FXyZnvL23eVuSnj62iQcuarK+j1DwaQgQj0US041KK8tePEDAtqkauLFPzUdoCGO9UvvtUX w-aBHdqJKX4tb976cLzwCWSAdD2jTDQajeBJLfpCfxRvxUUm1bac0T0L7Qmsi4-aaWlMLXA4 v+kx+ppeEm2b03CFQaTyRptCQJJLWrLEP1EPoeQm3F5u4uO1OHPUZCab0qPce1FTf2ntuX+J VZym0HEPhglN5Osgz-QESNLqy3-biJOcv7tLmIaS0lio+O6Ce1tzxkxUT0kckGBqbW+Btey5 Pp8F4sk1rU4AT6J4n+SJ1CNEqa7YAEsrPd98O+4f3RD4FNM9T2X6vhcjDlM8uO+Kn20T6l4n OC2glgfahPzItPf40SYQWFTZlf0sOG8y2jP8BA9M2Q96wj0tsObC-pIONXPDeSPmUwWiVH2K jUucsh0rj+9vX+Yjap13oB+gHtZWmUdDJjzYsjSCQfYFSA8LmgSnT3MJpfFPKR5eT8xlsQRS 3GS2nvw3I4xb1PKviPKpy8GOwP7ZYZlZkhuWa4gQSk4hpdpWfP4c5ieGIHQ4hbdtSvwf8hLR 9gZKCTr2AukwsTKh8FAeEhv4S8mde4l5wseg8ml4KpjpJnrwRkdhWWuETaBkZSzxSKnpJb4b UddhhoP6-6bB+RlDKVrsnifRHov27tkuDC1tIhrhDMGcieZlYbyv6OThArCnVCZyzK0lgkHv Mxtu-INbGAk6DpxVzyZqom1-zabzmSBxC5Nl6FBn0zxjoJSyr8txLM9x5GHMXpn0Os4b34wk D9NsZky1msEXGOFtluyRVs0DLp-U4aZSiQjHaJ-blXA197Jy64RZgBjlZ1WOSQlkJD3KxvNO fSGiin9Pzk3EGk20AUgI++++0++iYJUVeJNj02o-++12-E++1U+++++++++++0++hc2+++++ PLR4MLBoJ4ZhNGtYMr7EGk20AUgI++++0+1cM3gVZgdJabo1++0-0k++1U+++++++++-+0++ hc3t+E++PLR4MLBoJ4ZhNGtkMLBEGkI4++++++6++U-s++++6UI+++++I2g-+X693+++++U+ NcTj6ZgR0jEZ+E++t+2+++w++++++++++E+U+9O-+++++2FZPKxEQaxeNKBo9aFjNZ-9+E6m 0lE++++6+Di9vm8VHnimrl6++2Sg+++C++++++++++2+6+0qUJ6-++-hRpFZS5FHPr7o9b-V Qp-9+E6m0lE++++6+2m5vm916jLgq+6++0w5+++A++++++++++2+6+0qUJoI++-2NKpjJKtd R0tkMLBEGk20AUgI++++0+-8UywWEoHD03E-+++z+U++1++++++++++-+0++hc3T3k++F4Jh PpJiOLEiN4NhI2g-+X693+++++U+DNvf6iOg+ZyA++++lE++++w++++++++++E+U+9O-rFU+ +2FZPKxEQaxeNKBo9aFkQZ-9+E6m0lE++++6+Am9vm6RTjXA3+A++++4+++8++++++++++2+ 6+0qUNMN++-GNK3YPKIiR5VoI2g-+X690U++++++76fj6a1ry2pP0+++KkU+++g+++++++++ +++U+9O-oVk++37iN3FZS5EiSaZkI2g-+X690U++++++Gpq66K2j5P8k-E++g+I+++s+++++ +++++++U+9O-JWI++4prFa3nR3FdPKIiSaZkI2g3-U+++++6++U+pk2++16f++++++++ ***** END OF BLOCK 3 *****