[TEST] Tests for Text, RunArray and TextStream

Daniel Vainsencher danielv at netvision.net.il
Fri Jun 13 09:24:58 UTC 2003


I won't have time to look at it for the next few days (appointments I
have to prepare for), but I did want to reply now - this is cool. 

I think you're on the right track now with the matter of copying. I
check senders-of replace..., and it was only about 20 instances, so
there's a limit to how many place need to be checked.

I will be much relieved when this cleanup is done, because I'll know I
won't have to explain that code to someone I'm helping into Squeak...

Daniel

Boris Gaertner <Boris.Gaertner at gmx.net> wrote:
> This is a multi-part message in MIME format.
> 
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)
> Content-type: multipart/alternative;
>  boundary="Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)"
> 
> 
> --Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)
> Content-type: text/plain; charset=iso-8859-1
> Content-transfer-encoding: 7BIT
> 
> Hello Daniel,
> 
> Daniel Vainsencher <danielv at netvision.net.il> wrote:
> 
> > [might write some tests]
> > That would be cool. Especially since it's starting to look like we'll
> > have a test-server soon. We could make it run the tests every week/every
> > batch of updates and send the list a report, letting us know what's
> > broken immidiately.
> 
> This is a wonderful idea!
> 
> As promised, I send you a change set with tests for Text, TextStream
> and RunArray. Also attached to this mail, you find a change set that
> fixes the problems that the tests reveal. The third attachment is a
> short html-Document with some annotations to classes RunArray
> and Text. Please review this document for future inclusion into
> the Squeak documentation.
> 
> I do not think that this is already the much desired cleanup for
> Text and TextStream, but it is the beginning of such a cleanup.
> 
> 
> Daniel Vainsencher <danielv at netvision.net.il> wrote (at May 05, 2003):
> 
> > I think you're fixing the wrong thing - you're working
> > around the real culprit, which is that Text>>replaceFrom:to:with: does
> > copying, which is quite contrary to other implementations of the same
> > selector.
> 
> This is now about cleanup. Ideally, we should be able to drop
> Text>>replaceFrom:to:with: and to rely on the noncopying definition
> in SequencableCollection. Before we can do that, we have to
> modify some methods that need copying and use  replaceFrom:to:with:
> Currently I do not have a reasonably good change set for doing that
> cleanup, but here are some (hopefully interesting) observations:
> 
> There are some methods in the instance protocol of Text that call
> Text>>replaceFrom:to:with:  and that need copying. Here are
> two examples.
> 
> 1. example:
> prepend: stringOrText
> 
>   self replaceFrom: 1 to: 0 with: stringOrText
> 
> 
> This is the same as:
> 
> prepend: stringOrText
>    ^stringOrText asText , self
> 
> 2. example:
> append: stringOrText
> 
>  self replaceFrom: string size + 1
>     to: string size with: stringOrText
> 
> This should be defined as:
> 
> append: stringOrText
>     ^self , stringOrText  " asText is sent elsewhere and therefore not
> needed here "
> 
> 
> When we look at #, - a method that is inherited from
> SequenceableCollection - we see:
> 
> , otherCollection
>  "Concatenate two Strings or Collections."
> 
>  ^ self copyReplaceFrom: self size + 1
>     to: self size
>     with: otherCollection
> 
> 
> and copyReplaceFrom:to:with:  is defined in Text:
> 
> copyReplaceFrom: start to: stop with: aText
> 
>  ^self shallowCopy replaceFrom: start to: stop with: aText
> 
> Here we create a shallow copy, and  replaceFrom:to:with:
> copies again. I think, copyReplaceFrom:to:with:
> should be defined as:
> 
> 
> copyReplaceFrom: start to: stop with: aTextOrString
> 
>  | txt |
>  txt := aTextOrString asText. "might be a string"
>  ^self class
>              string: (string copyReplaceFrom: start to: stop with: txt
> string)
>              runs: (runs copyReplaceFrom: start to: stop with: txt runs)
> 
> 
> The question is: 'Are there other methods that have to be changed
> before we can drop Text>>replaceFrom:to:with:'? I will try to
> find out.
> 
> (File TextProtocolCleanUp.1.cs contains these proposed changes.)
> 
> Andreas Raab <andreas.raab at gmx.de> wrote (on June 08, 2003)
> 
> > > > Text has also an in-place replacement method. It is
> > > > replaceFrom: start to: stop with: replacement startingAt: repStart
> > > I know. Since #replaceFrom:to:with: is supposed to be destructive, I'm
> > > saying that instead of working around it, by using the lower level
> > > #replaceFrom:to:with:startingAt: it might be better to fix
> > > #replaceFrom:to:with: to be destructive,
> 
> > Uh, ah. Been there, tried that. Didn't work (last time I tried ;-)
> 
> > The problem is that there are various places in the system where Text
> > instances are shared (most notably between
> models/morphs/paragraphs/editors)
> > and if any of those use the destructive version your system's going to do
> > really badly.
> 
> > If you want to fix #replaceFrom:to:with: then you first need to fix those
> > places.
> 
> Text>>append: and Text>>prepend: are used in EToyVocabulary,
> in Morph class and in TextFieldMorph. These methods certainly have the
> potential to cause serious damage to the system. Are there others?
> 
> Contents of the archive:
> TextTest-bg.7.cs
> CollectedTextFixes.2.cs
> TextProtocolCleanUp.1.cs
> text.HTM
> 
> For best results, file in the change files in this sequence and run the
> tests before and after you filed in ColletedTextFixes.cs
> 
> 
> 
> Greetings, Boris
> 
> 
> 
> 
> 
> --Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)
> Content-type: text/html; charset=iso-8859-1
> Content-transfer-encoding: 7BIT
> 
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <HTML><HEAD>
> <META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
> <META content="MSHTML 5.00.2614.3500" name=GENERATOR>
> <STYLE></STYLE>
> </HEAD>
> <BODY bgColor=#ffffff>
> <DIV>Hello Daniel,<BR><BR>Daniel Vainsencher &lt;danielv at netvision.net.il&gt; 
> wrote:<BR><BR>&gt; [might write some tests]<BR>&gt; That would be cool. 
> Especially since it's starting to look like we'll<BR>&gt; have a test-server 
> soon. We could make it run the tests every week/every<BR>&gt; batch of updates 
> and send the list a report, letting us know what's<BR>&gt; broken 
> immidiately.<BR><BR>This is a wonderful idea!<BR><BR>As promised, I send you a 
> change set with tests for Text, TextStream<BR>and RunArray. Also attached to 
> this mail, you find a change set that<BR>fixes the problems that the tests 
> reveal. The third attachment is a<BR>short html-Document with some annotations 
> to classes RunArray<BR>and Text. Please review this document for future 
> inclusion into<BR>the Squeak documentation.<BR><BR>I do not think that this is 
> already the much desired cleanup for<BR>Text and TextStream, but it is the 
> beginning of such a cleanup.<BR><BR><BR>Daniel Vainsencher 
> &lt;danielv at netvision.net.il&gt; wrote (at May 05, 2003):<BR><BR>&gt; I think 
> you're fixing the wrong thing - you're working<BR>&gt; around the real culprit, 
> which is that Text&gt;&gt;replaceFrom:to:with: does<BR>&gt; copying, which is 
> quite contrary to other implementations of the same<BR>&gt; 
> selector.<BR><BR>This is now about cleanup. Ideally, we should be able to 
> drop<BR>Text&gt;&gt;replaceFrom:to:with: and to rely on the noncopying 
> definition<BR>in SequencableCollection. Before we can do that, we have 
> to<BR>modify some methods that need copying and use&nbsp; 
> replaceFrom:to:with:<BR>Currently I do not have a reasonably good change set for 
> doing that<BR>cleanup, but here are some (hopefully interesting) 
> observations:<BR><BR>There are some methods in the instance protocol of Text 
> that call<BR>Text&gt;&gt;replaceFrom:to:with:&nbsp; and that need copying. Here 
> are<BR>two examples.<BR><BR>1. example:<BR>prepend: stringOrText<BR><BR>&nbsp; 
> self replaceFrom: 1 to: 0 with: stringOrText<BR><BR><BR>This is the same 
> as:<BR><BR>prepend: stringOrText<BR>&nbsp;&nbsp; ^stringOrText asText , 
> self<BR><BR>2. example:<BR>append: stringOrText<BR><BR>&nbsp;self replaceFrom: 
> string size + 1<BR>&nbsp;&nbsp;&nbsp; to: string size with: 
> stringOrText<BR><BR>This should be defined as:<BR><BR>append: 
> stringOrText<BR>&nbsp;&nbsp;&nbsp; ^self , stringOrText&nbsp; " asText is sent 
> elsewhere and therefore not<BR>needed here "<BR><BR><BR>When we look at #, - a 
> method that is inherited from<BR>SequenceableCollection - we see:<BR><BR>, 
> otherCollection<BR>&nbsp;"Concatenate two Strings or 
> Collections."<BR><BR>&nbsp;^ self copyReplaceFrom: self size + 
> 1<BR>&nbsp;&nbsp;&nbsp; to: self size<BR>&nbsp;&nbsp;&nbsp; with: 
> otherCollection<BR><BR><BR>and copyReplaceFrom:to:with:&nbsp; is defined in 
> Text:<BR><BR>copyReplaceFrom: start to: stop with: aText<BR><BR>&nbsp;^self 
> shallowCopy replaceFrom: start to: stop with: aText<BR><BR>Here we create a 
> shallow copy, and&nbsp; replaceFrom:to:with:<BR>copies again. I think, 
> copyReplaceFrom:to:with:<BR>should be defined as:<BR><BR><BR>copyReplaceFrom: 
> start to: stop with: aTextOrString<BR><BR>&nbsp;| txt |<BR>&nbsp;txt := 
> aTextOrString asText. "might be a string"<BR>&nbsp;^self 
> class<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
> string: (string copyReplaceFrom: start to: stop with: 
> txt<BR>string)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
> runs: (runs copyReplaceFrom: start to: stop with: txt runs)<BR><BR><BR>The 
> question is: 'Are there other methods that have to be changed<BR>before we can 
> drop Text&gt;&gt;replaceFrom:to:with:'? I will try to<BR>find out.<BR><BR>(File 
> TextProtocolCleanUp.1.cs contains these proposed changes.)<BR><BR>Andreas Raab 
> &lt;andreas.raab at gmx.de&gt; wrote (on June 08, 2003)<BR><BR>&gt; &gt; &gt; Text 
> has also an in-place replacement method. It is<BR>&gt; &gt; &gt; replaceFrom: 
> start to: stop with: replacement startingAt: repStart<BR>&gt; &gt; I know. Since 
> #replaceFrom:to:with: is supposed to be destructive, I'm<BR>&gt; &gt; saying 
> that instead of working around it, by using the lower level<BR>&gt; &gt; 
> #replaceFrom:to:with:startingAt: it might be better to fix<BR>&gt; &gt; 
> #replaceFrom:to:with: to be destructive,<BR><BR>&gt; Uh, ah. Been there, tried 
> that. Didn't work (last time I tried ;-)<BR><BR>&gt; The problem is that there 
> are various places in the system where Text<BR>&gt; instances are shared (most 
> notably between<BR>models/morphs/paragraphs/editors)<BR>&gt; and if any of those 
> use the destructive version your system's going to do<BR>&gt; really 
> badly.<BR><BR>&gt; If you want to fix #replaceFrom:to:with: then you first need 
> to fix those<BR>&gt; places.<BR><BR>Text&gt;&gt;append: and Text&gt;&gt;prepend: 
> are used in EToyVocabulary,<BR>in Morph class and in TextFieldMorph. These 
> methods certainly have the<BR>potential to cause serious damage to the system. 
> Are there others?<BR></DIV>
> <DIV>Contents of the archive:</DIV>
> <DIV>TextTest-bg.7.cs</DIV>
> <DIV>CollectedTextFixes.2.cs</DIV>
> <DIV>TextProtocolCleanUp.1.cs</DIV>
> <DIV>text.HTM</DIV>
> <DIV>&nbsp;</DIV>
> <DIV>For best results, file in the change files in this sequence and run 
> the</DIV>
> <DIV>tests before and after you filed in ColletedTextFixes.cs</DIV>
> <DIV>&nbsp;</DIV>
> <DIV><BR><BR>Greetings, Boris<BR><BR><BR><BR></DIV></BODY></HTML>
> 
> --Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)--
> 
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)
> Content-type: application/octet-stream; name=TextFixes.zip
> Content-transfer-encoding: base64
> Content-disposition: attachment; filename=TextFixes.zip
> 
> UEsDBBQAAAAIAI9lzC7jFwhsCwcAAD0YAAAXAAAAQ29sbGVjdGVkVGV4dEZpeGVzLjIuY3PVWFtP
> 3EYUfjaS/8Nh+wAIWHY3QIhVIpGkRKmaErGofUAbZOzZ3WntsTMz5hLx43vOzPiyuzaQqJVSiwfv
> eM5lvu/cho1TmaUw/lKw8O8X/X3IpjCEj6GM5jAaDF7AZRJqpjQUeYwvAfx0MHw5mEAmYDiCXwvB
> 7LZQ4+9gfz8YvYI83Vj3e2/noZgxGDMdeN7bLElYpFl8we70Kb9jyn9H6jzPa6rxTwo9zyQtv8kk
> V/A+ZFILJn3/Yo4/I6tTMQ1RJnTIhYIpaYNpJiFMEpiGPCkkLnABoOcMyHn7mUxDKGLzMtaShWkf
> TkgepoTBBU/hLFF4Mk7iUVLELCY9aRbzKcd31IIi1hX8U5qjRZFpYygtELKYKS5xZ5SwUCBmO3Bd
> aOCatoekiKDkaS6zG5YyofvQW/d9f/28ECdShveQMgQgVqcIAmyEcczFbAMNhWmOv9+8h8O94WjP
> ID4cBoOXCLQkSM6mAVKgJW2VGoVOdGDfP2XK93onQt0yRAjPJjSTN2GCPiNnM36DWJH7Rg2xb9Tg
> Jy5idgd5prjmiEmlDTETwNJc39e6brme2w2APwtWbaZzS6YLKRCU2zkTxhaZ4AiMfaM9BGKOtCEk
> ZLuyWhtF0pMpKP6VwWsYGDyVKlIW7zh4zSGYyjOh+DVPOPqHp6HVCAMDD68zEwwmFsh/LphStIc0
> 9/3fM/THgIIo1R6mSIrKcUmxGybxrGH8VygiclQWAh3r+b5nfAsbkIPv4aJGWs+mU3w5EfEfBEwA
> PjSeywB1QJCZPRBY7B4W9+DzedN+cUGpLNdby9vw4dPTMFFo5rLyRGcNt3ZhOGkVu5DoXMsX9BEd
> mnKp9DlL2E0oSI8lJwlbFnl8dzZ9i2nGqV4gAPDQqrZdOjhu+upw2YZNgtoAjC9bdIp+u9J2R9u0
> dihYdR+FiaTtTpuXqzI/Gxllw7VdqnxQDNmyBNsjrqjbWiJ+0kahfW7nPGHdXNrnsgv61vUm+quu
> dWBin1YwVxcR2km/A6ZOPrpjoIWP18fY1H48Hjqjtf3D7n/OxK5jolVVu1NUXtriZoIVEGCyDuud
> 7Q1bOJZUvdrijlyHOwiGpsNR5VUs9tf8NSyGpthGaFOZJAtsqpWbbAPCVcdkuW4c8dfNELDYZKMI
> +0C3E4fB8Gi5zdrW0Oy1plv639pnyya40mzN72d1Wiv5RJt9pMM6S9jGgLBFCTGzdesYBi4OXHvA
> zDLGiHL7ZtqJ1+g6lopnQOUC47voWJl6OmxQpx/r+wQdC+3Mh+//Z44axyi34xSbJPcgGIvrUehv
> ltsxJ8rSPNTlOGT8wmOzUCYcEbC4A+UHWcFB5scIgc66MBzYIBiNguGhKQx5EkaMbjBuxnHTTpab
> w2JpsDto1F5wANfHZr+/5vXMPE+TuSwijUGAeDo5BVjVSFjZK0Jpw5rgwg2dEUOpevaugmWnsrND
> mxvOuPsQwt6HdxnRhkqvM+SHNDoK6K5iDNCc2aPq5z2QEmT79pzl5wT0Ay7S0tXCUUNFqPa9Xspn
> cw3XGGdOKarxnPpnoVf60gZe39q2QJoOu+Z5VaCYOLiyxTnK8vvzFXNUzZ98Spees9l6vUluV2at
> vWF9tF13Vpw6tibW4zJ0G7gaPJe1VIclZdWP7QW9BAo+T59+Geza+AR1fHNu1PXxxdFSz6yvf8aV
> 8lpUxa2pCy7QIZMxLpXiLuw+Q6Pp2ogIoAoj13hbmnHftuwewAfduLLZetu40TXHZZhnSUz3Ktex
> /5RcM3tdf06nONgbHVooBkfBYIhQCAQRC5H4gPV5hmfLC32SJLhSJ+FCeJv3D6afI3RjnUlm8BL2
> /welmsXKQBuogQiEuEptA57JWiT3F8xmytb6u8Pz+HjBFbtYBiVF0yXCX+Ro8vtPMjFMeM6Nq7q1
> bNfq+vWG13BLqP/GU2oo7nJInhjKZjK7vciC8lCYSAOnv3G2hepSmtu2eegEXeA/7T15Vnl85cSt
> xc8NaZsz3x4v+66rDIL9Ml4+rSL7rzPZYgMe46kJEybKj0bXsJ2lJ0jJJb/By0cXJaNg/xVSUh6h
> ilVbV7Cw1MlQ/QvoS2H+BZdywVOcxtAPW1jK/wbV7vcMo1huxvSdjIjG4VDQrBPV5Z6rprhjwbSe
> cjNeq2qX8OpcCu7twT6k4V2AYbZFSC1bW9BsIwd1BqXi/iJdVyveLhBoeSttW96iR2hrhE/bCRt3
> p9bEUnDPNBTCuG3+VdrB53AUHDySYmYaO8s1OvIVGbQJS5PRDNWHMivcP2/pBozieEJsM3MWxpZI
> YagicFpyxbDUSCexkDXVdFFlTzlTLObQgoIyk7ze5mbTIlcfWXrNJM2/Y9Mkt8ysTmBddrow2VoY
> n56oFBNqLs2IIOGOJKZPesl5WlvJZ1p8LKWbCkxM/ANQSwMEFAAAAAgAyF7MLjGIVRxfDAAACU0A
> ABEAAABUZXh0VGVzdHMtYmcuNy5jc+1cW3PbxhV+1gP/w1qdKcVaYghKjB1k3BkljlN32jpjqXnx
> uDNLYiluDALMYimKGf/4fufs4kaClBXTsiUL03EI7MG5Xxertl+YdCrOfp8r+e64eyLSsQjEv6UZ
> TUS/1zsWb2JpVWbFfBbhRyj+Mgie9N6KNBFBX/xznigHJq0IgnBwEgYDIaftR639HycyuVDiTNlw
> b+9cXdlzoMmOhhet54Rob28v6JUIWqdzO0kNPf4hNToTP0tlbKJMq3Vqwc9S9L47dKTO9VS8ijNw
> kKnECimG8wth1Cw1VthU2Iny4ohIXao4nSmTiVhDBjsBmzrJZtqoSEwVgasrOdVggl6bmdSmozQm
> JRDHZ9YoOcUb4gI/rDLAaKWOu0IcnAOeCDNOYslxALwLmQGTYubwqucFuj0UGk8ykU3SRUJLpNif
> QH8Wq6DbES8TCBPpbDTPMg3xGPU4jeN0oaJDIZ7LRKtY/CohgkpGE/ADjmdpBqIMu1CEex5HYiIv
> FaPPgMCwMEImUUWqrCvOJ2BmFMssI64kqFurpjPWoiampiQCY3Z0ZJy/BKbUyBKTUJWjo4kUsQ5u
> 8PxdQkLivSHwZM2KGC5FksIOMiGURNGqrngxN5ZkW6TmnVjoOBYgnelhvBRDJcZmru14Hnf3H7Va
> 5FI/ygxiz4csCPyT3exFakjU0ySqSNzag+KsTEbqV2m0BGP/kVOFd9rt1h6/3vB8lqbxc82yYrGA
> hjdcpGaJu7P/JtoeERl4fevRZvIkImn0zMLiePGHn8W33wT9b9ipETy9QRv60ggC0Xv04PVflNfD
> oDWRshR6JNefOIKsULwLwqQpOMJWT5gqJLuIFuEH/tV+W2Q1z+g5z+j3wv63cK0crNUSfL0XENOS
> iO/pEW7CZ1X7pUkIe9F6ohahGPQ6XQeG+yv7y9yexjFoyeGoLWRGgH69thypcb4sZBz/kMZRE9jF
> RP/2roaHXgBDltw+sVBpRo//R8/x30fimlhp0lCwWUPBk1JDQSgy/YdiPd1QSfRes5qu6NqiqIP2
> kq5VXR2K9h/uylc6O9cOwenkYrNyTsh9KlH3ep6cGiOXAalkHz6MOIjUNEVyNFTsnfOTa5M+yM2l
> MHMECr1EQcNL82keAASV0Y2GPABEkO23oHrj6Tjdl7cQPGeB1N6tLTrvllH0L5nZkG3103Q2kRno
> JqmZylhYzdl58P022CG0/2GQK1iZnUzFkBq1zNjQx5s4KHhktTwTwaDT3bmtnjTbqr/VVpEej5Wh
> vEXqh6EUpLIgbS6QJe+3MVhib5HjT2CQp80GOd5qEBn9Rn1GbpCFthOhfp9DMlQbo4dzgiQzORPd
> rYCpQd7QQv3bC5mTioVcU0DJyqA7MqjpLq2Vet1v3e8oYbGRDD5JuPgmtvc0DL5rNsagYgxwose6
> WmfG8ySS1HdBKJ1cUheO0GELFWqnZi1eyCW4l1ZnQODCBlgzpfLmGiMCGsf7acyDAD1qWLLK3Qp1
> GmeskGUBSdebUEdXUAL+h17XvkwidcW/Xo3HmbL8E1oQsUou7OTV+Bd4iE7n2Wvyj/dVTHQVNCW4
> B+Iuqd1tCbiwGkl05pG4lPEcT/ZX3y9ZgPILZDSOYeSiaSuCLxVA7W7T+8TtNW8DpPldL/Q1rzuo
> BgxNOloFogv4vZFyho9E0GmCxKWT3zBDY9jbsA4AwvQmpFaLrNmHLen349Xc6o3S77zttjZrHrxV
> VPG4WarH4Lcm2tv8Brmi1dp345PLCRySYojxDiVt9G6JMUmbzPLAN8/gBq+GJOHf/15XNeYsORop
> mr/8OC4u/dzt5rbFRI8mtDPgwFLjSiVGEYysEU1w6DmBq8LGnFLbcMmuGClMqBc0/tLsh4eEHfLx
> DAx+gK/bIhwuvmjmRONKAaeuZjGNmYyGtiWQ6vImt+bgSDw7yZuBH/6/CwcrPTph8v15MbpDlNrY
> P6adu2JfwHmtGz7qPUacYkBdTFTiunU3+VS2cKA/SA5luYzKeN7zjBLwv31CmAX8b7/IDW4dHu9V
> l89eQQ9IBMZ0RZM579/EKaZ1Jl5w5vLjfgVXvwHXoIaLx3sJj0bLZKAI6nnZxkyEGl5PaEUHORUn
> BY1dzDqHziidLWkHNBTfctwS9xXwfg7e3wLu4as529N65pDkCWXHjc8gWPcZPydATewJrJCMB7OK
> QtgX3K5M0Rc02t3ZutHSXqjCcl6nRZvhfziommqq6hdV7QK2teN2pN8QVr5zFy9ZAX5vkXfFUJ+h
> OAQIxT1lX69GR9tb8TzvJxv6mBFvmEXOA1Hd11yR0hsKNhtkNJFGjizUVETdF7mrs2XDQpAik3Rx
> CGHU6N11vRxhCTkcaw7ByL3WfWfKj4pWtbtTtwiC8Lghcvy4sNG+NNKtTHQ6wr0erU91o1SimI0o
> nzaZ1tCXkVdjUvsdMDOeVxn2sS5QjFHM15tefsGJibH4Up3mqmlqkMecS6vox9RCuD638pQalzwx
> r3gcTJMm8RL/KDINxXSsxm7j1219+1Ck+EyNQdFzXsaGWXdENm91SgrEX8VB3SFzD604bWfHTtoL
> e8feSV+TIp4r68p1ddeuHGujfDnvV1h7ZdiVHuqGJp/oibixv6TOHGd2iUT4vlXxhDaHAzd6/Ij9
> nnEVRZxyGu+Hlwmt6pQFharjnLHiIDRhaDsYPDiFEYLCEZGOtzmPDyvvQwUZcp3i5rE4JnSlcD7M
> 1j0W40ySz5CcxvgLBFvXIqfzc5I0/3JC+/xzQxObm0GPVq+cPT8QOG3zxBaljZPae2+z1eHLPc21
> 56MirMhU1R6hApu8UIFZGWnOgSUbGT2z/FmmVNj3/r4NeUQ7vyOkMxjMOrOVQCWIY7IByC1w0DSs
> HhwQ7qGyC6WSit0k5ZaqFZuGKD0+N3MVNqxAqY6uyybPSlQI5QpHz8RJ520j5hcyzj4MNQmwirXX
> edupizsyNRO8dXc1h2lISIUPrTvRNWP/LTqTuLc2rFksv+nsOM0XLWo9zfc/Ns0zv/+g0YmnPkVH
> OtCalhNYNpM86hqlXPvNg3XKM7u+rH/e1Dw08Gd5ekZtj8mJlxtz4xS9X7exvOT0722JuQ6dRj+s
> RxsQHon+KlLeB6xrbbV2OZSoXq2PLF+txgL2sWVsdYdsQ+qpy7g5/dTg7lo9IwPX8+FRH0Z+8pEp
> 8aBKoLOWwp5+zuK2wZ/Wx7/Cwz51kduFp20qdvfMwDVz5je7rnwnzZXv+DNVvhKpTemkmaNI+67q
> QvMuuyM0SzPNjAQPFfO2K2ZwC2Wycjzua6mSrT26aqWy+mi1XtbBV4DXK+f66lr5bExVdOVEchrN
> dTZYGzYGTYmXMWzOvo7AaoYM1vLjQY1OQwr2dDZnYUfpodbeqNZ+oJFvUF3/hGnvUHUdNFbX5lMx
> n7G6ArtKoiw/xIzfZR0F4Ycae9s1ttbT1pLEl1Fr168iqz1U389RfdeHoNICDajrNZhL7sp1syHo
> oKCG9RVYOs7SmMVrBfoDePig4uyUdJMKnV+fcev3VqbirQ6xu3n4T7nCl13Q8+Mex2EvP1r5Ws1i
> OeIE6j8G8rECd+JD2EPHQD3llmed/N/K+OI4QT3xkq99g+fPqXzDAOWHcZ+yXevAf/RjLmXZPVDR
> LMgRazo5Yo7p4FLOOX3tILT5gRNPuwpR2M+dVCvuXybQgH+h7w93OiQhewgjqpfwjP+yh6HafIin
> UynUpEEq7+ncn+LA+iEfXmJNTdNIj+no1Sjl82r+j4Mc5HSmYzqFZK30bVB1IfIm9t9cqx2BZ7PW
> Ezgu2+5DtxeaBfELRRGuqakUmg/ioLMgXTmB6SM4DG7s39o1ieuqxFuFOusM0avuPKRTsKf7ot4o
> FO6/0oJ4EY5EUECQnsMq+8VKNfPU2HMMr36nLzwm91ZVHCpyWrqF6Ou37mz4lW38oWvNKw7FSZSP
> TBj0ZMTS+lGl2wjbh6CtXg8B/DEnbBHAT9YD+Pjuls/WtuDVmXMgxZOxTMpx2p2IomU6huhfzIOa
> beQEDMUbvqug9mfljstuB+kBfZP4yZjU7NJavUE4OFm31ilwObe6P21Pba1IHyvJcVsj8zlSYjXL
> EWubcxyWpa1uijSloaCef3L8N0w5wReQZshxB9sct//guHfIcYvS+9U4MNXJp9sc+KFi3qBierXt
> snBWGc//Pye22JKGls0MfWUBfXuF6JPadFC3adWYD4HZvdV9pQupk+vG1K9gTr3jo6kL1/8DUEsD
> BBQAAAAIAMx6zC4metZWgwEAADQDAAAYAAAAVGV4dFByb3RvY29sQ2xlYW5VcC4xLmNzpZJPb9Qw
> EMXPOfg7vITDthLabhL+SLnRolZCQkUsnCpAJju7iUhsY09UkPrhO7PZw+6hCERkyZPJ5L3fjL24
> jn7E+udE9ke9fAG/RYn3NrYdqtWqxt1gmRJjChsJGjx7Wb5efYF3KCu8mxzNZZZRN1UlC2Fc5Ka4
> 6qzbEdbETZZ9ol/8IXr2rR+uBrLuczBvVS7LsmMZ82bizkdNX/rYJ9xYiuwoGsOdvMqy2PZReCwz
> jYHBHq0qCiC4I4SDjTaitssiN8bkGmIkUd+ka3HAwrYtpdS73QKJ7RgkdXmDVxdldbHvqKybspZO
> bAjkNo0URSm+japkTPY10bB9fpIFCti0jwQ0kWPQkOi+o0gocuT/xREiPQFyjDD7C5fQmacsWx9+
> /9mwFEOt+khhsC3pHVFjG3XgGvmA+567Blblb+N6DyE4D2CxezCZbt9OPx/ollkx9ruO8Z3kOGf8
> 4jBROUybEgyOn7mkwdkc4O/IFGD+4fxULk4uiZhu/yCl5efzSB8BUEsDBBQAAAAIAPZ5zC7KAKyP
> wggAAGsVAAAIAAAAdGV4dC5IVE3dWG1PG0kS/hwk/kMtJ0WggB12tdKeYyyxhOiQCLAb755OUVZq
> z7TtXmamJ909GJ/48ftUdc+LCffhPp10fMAz/VLv9VTVTL97f3sx/9fdJf1j/vGa7n77+frqgg5O
> xuN//nAxHr+fv48bP4y+H48vbw5m+3vTdSgL+dUq599gQqFnF4XyXnv6tanOnVNbUlVOc/0YpuN4
> ACc/Xs7PQW9+d3L5y29Xv58dXNgq6CqczLe1PqCL25v55c387CDg2pjZvKNsrZzX4cx4e/LTTz/+
> /eRUZBi3zBc234owp1GCjj+OnGLjqlprZ4KnD86WE5qGMJsuZtMlGJM3/9Znb77n67VjAQl/t4s/
> dRbiM9GFLQq8Glu1K0Sf9NdGV5lWi0K/tE8kAuh8uDkdM4vpmBnjByKMIQpzni0hGYW1pkwUyGxZ
> wiaQdVzHAx+3ZCofFHh6qp19MLkmX6tMn+jl0mRGszLBOrXSZJeUq6BoszbZmmDd3FOwtAB5K0QC
> 2QftqLDVilxTeb7B3GvrvYFK4JUbcBrRJRxaBaOKYktO11oFndODKhqIoZwWlljxploV0d+gUxGU
> sJmRwxsT1qToAHwOqNDVCq9hrQLlurIBZJhx1ZQLCAQxWEKdNcE8QI8sa5zTonOSUFiP9vf292CR
> sLFkyto6UelBOcP+EMH2916xYq/OIYuEIu6v7YZKVW1JF5rNGzUwFWkFM+E4LkXVdq5tWNiONxkf
> jRfW1uuOFEs0lzOtEHBkuKpy/Xgsj4hJMQ8/3y6XiGfKwFYLZV4klUFPEPI22scHp1UJw+LV2Wa1
> 7uLasxAwHgjSzYn/2ij2AaKCCYxizEjUzFupO/tFnjumIpZFTBBMqZlmUgpc9veiVDofUUeMnKpW
> HUn/jNykjVnEOvKgMwPCL2y0riZ0yoaYgG2xlPyTtGlt9PyUhOfOqWS97uDbePBQTiokTSJ1RCd0
> GnOuM8YS6Wg3bFP9iA1Eu60QFwUSRC0DvKofJfiwCu0Uq06lhqtzpryr2VOK5tvlndMPxjb+V5bg
> KaHAi5s9QkzO6PAUWdmJy9IeDRGE/0zFSAQdv93gq58nvilpAs2v8kcIxG9vBpaIG0dfJGHkXu8O
> 8B9Y883L8r6BTDsmNBJ7CSsCkjU3nbV6A4mtW7xKBpwuHPZeVwtfvxv+BxTLzcWMTP6IN45HMI+C
> nVf57xxz8YD6ubDZfaQEMRrEJQNbqWoOWyN6Tc2M6YzNTIwE6IEVYvQmT9bKKTzC25EegO1rYxAN
> +3vINK1pIavKrRrJ7cl/Ev0zW54mNppwEpPjiSV4XYR3rL9rBPv961V4xyJ9iaQ2KEg6GauRQlqY
> GWjxbjJvVKbNWoHB0GsyWGj9wY9L6+S5TWCgCNwUPdTbZToGt8gzis5sWzI9EncoCYR8JoSAOlwQ
> qwRCx/uI+y8yEbsMeURDCchhxa8FvhYoH0UB/O8LZieBHF3ytrj0mTQtq3E0ZT07x0ENRbRTonr0
> uwBW15oISQSQEEuBgeDLbYw0zTKifnFItAFhOZjZxAKWHUhG67SEjwWYd49Cxu8o5Q4QtRoUrdws
> l1pK3Iiurb0nqTU4qR9VWRfP0PSJSUX5M9Zd+6YICXG6HSBLp2WlN6PdXZXn10j7Cf1trYGFgvl+
> Qj++ffs2nmTCIJHeEgss9BSK4hPs6pfbyQDPPk9agzy1JPgHADLaxa722FmSoN/9IicPIxeOsEnL
> Pr6A3hGjSo34SAZpwcZJXVa9I6eMgS14+PfJq+L0THGV6cAjIj4crYZurpEDkm07Tsls/ry+/U99
> AnzRrXk7as8133ESNq9jD9bB1TNvDY7TDrP09JoO483WgYOi9V95MJUVceGVIEHQZR2k4bG4l+ul
> qdCdWDQlL2UzEq+1Kdiee+lcYtYcUx8S8KkqWnIRCjkxuez0gRy78bZv4i59Z7stPDiVKimA7uAy
> YURbRqTTHcBv13Q5nWn0sy656mrZF57QOJRZQJuPeDFoT9Nu3ExXb0HObYzX7aZEwAEDblviU7+X
> S3sg8PNEh4mf7E0ElOCH5QemjGN/RB5fovvoD6FKOw66QaueYBhSSqL4qLDnSQQzCFzq0VKY+wip
> ttJt5QCQR7fAHQv0zkcxmVKubgyj9aNZGNQrJOZaof1wkVdER2BmNx91+8m0Js52SOVIbkQiKdSx
> XYFh0GVQ7qabgJrI8vRB9nIRGEQY2nLDuCCSb2xT5DyWog3+Rqo2PEEn1TIhdsyD6gw9b7sg0wCW
> nP6zXUqtez/IxtlZhthp/X8yyV7xHAlUkP5EZnuVcS+GZinOOnDaWnnYFP1Eqdx9N0MucARnk+El
> uvrrqsZw6pQU0vMsNMj53Pi6ABDBY4BzxG0JUqlcRwkymZWV2PlT2CIi4sgsjQ0y2x/3RbxnjyJw
> zGCjIhuxfhyvGxmU6FwI9kMwwxB3iODFG+cBqi4aXhfFhHyvCSRkFz+3DOjOZdpS/fUS2i10lCA2
> bpAYIAr7Ydc3LDYsifmGoIYJqjDZMT+ut7BIYap7VoIbVFD/MKCSJmNwh6E4u5wulMzkUJQHYi0j
> cGe2aH0wV/JNoUNCPnHMGim6gzorp+o1WH2SXCoxQfRqenj9IaaTV+WOmkraRuNQOs1qvbDMiM8N
> j/TfIoRbV23Ff+kLSbYF70u2Nufp8IsKDIbhPxr61StFn+Sp/YjwqqfXh3F3lz9aSKy/mI4xhXcT
> RaRt+w+RGv+3hfFr/pQirP1oMML3U2s/cCGo09iSp+BTxYY/DTB27/YoKbNYIjrrB+rBXHdVIUMC
> nIDk0K40lS3sCq2shLFU0Y1jF7sRoVLzs4R0pMs4dq81L+VROFXwbMAJFyt2bLtsxSAMQe913bXN
> iQYCXhfLEX2MGCxYKczFsjNBleiTiJ251fELSOa0VGCQr7dtUUhEoV6GUllwjmQK9t7f+1ahOJDN
> +UvS0KNy0K8F6JmPDCl9cCYOadySJR6LVGpGBCFlJGm/TcqnzNlfUEsBAjILFAAAAAgAj2XMLuMX
> CGwLBwAAPRgAABcAAAAAAAAAAQAgALaBAAAAAENvbGxlY3RlZFRleHRGaXhlcy4yLmNzUEsBAjIL
> FAAAAAgAyF7MLjGIVRxfDAAACU0AABEAAAAAAAAAAQAgALaBQAcAAFRleHRUZXN0cy1iZy43LmNz
> UEsBAjILFAAAAAgAzHrMLiZ61laDAQAANAMAABgAAAAAAAAAAQAgALaBzhMAAFRleHRQcm90b2Nv
> bENsZWFuVXAuMS5jc1BLAQIyCxQAAAAIAPZ5zC7KAKyPwggAAGsVAAAIAAAAAAAAAAEAIAC2gYcV
> AAB0ZXh0LkhUTVBLBQYAAAAABAAEAAABAABvHgAAAAA=
> 
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)
> MIME-version: 1.0
> Content-type: text/plain; charset=us-ascii
> Content-transfer-encoding: 7BIT
> 
> 
> 
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)--



More information about the Squeak-dev mailing list