From jens.jorgensen@tallan.com Thu Nov 1 00:29:36 2001 From: jens.jorgensen@tallan.com (Jorgensen, Jens) Date: Wed, 31 Oct 2001 18:29:36 -0600 Subject: [python-win32] Monitoring a running Windows program References: Message-ID: <3BE09770.80102@tallan.com> You can get a list of processes from the windows performance counters api. Take a look in the MSDN Library for this. Then use the win32pdh module to get the data. Troy Sorzano wrote: >Hi All, > >I am new to python and trying to create a simple EXE monitor. As you >know windows programs are not very stable. I have one such app that I >would like to have a python script monitor. If it is not running then >my script will start it up using ShellExecute. If it is running then >do nothing. I am trying to use some info I found on the Microsoft >technet web site. It suggests: > >"Using the Windows API function GetModuleUsage, your program can >monitor the status of a shelled process. The return value from Shell, >can be used to call GetModuleUsage continuously within a loop to poll >whether or not the shelled program has finished executing." > >Problem is I can't find GetModuleUsage in the Win32. Is there another >way to monitor Windows executables? > >Thanks, > >Troy Sorzano > > > > > >_______________________________________________ >Python-win32 mailing list >Python-win32@python.org >http://mail.python.org/mailman/listinfo/python-win32 > -- Jens B. Jorgensen jens.jorgensen@tallan.com From lionel.bdn@free.fr Thu Nov 1 11:56:21 2001 From: lionel.bdn@free.fr (Lionel "Wagner" Barret de Nazaris) Date: Thu, 1 Nov 2001 12:56:21 +0100 Subject: [python-win32] [Newbie] need some guidelines Message-ID: Hello, I'm half a newbie with python and I feel lost when I have to make communicate Win32 and Python. I don't ask for solutions but some of you might know where I could get the info/tutorial I need. I'm building a program similar to bookmark-sync (see http://www.syncit.com) : a bookmark synchronizer between browsers (IE and Mozilla), between computers (work and home), but also an automatic archiver of bookmark on the web. [I know there are projects similar to this one, but that's not the point : I started this one to seriously learn python .] I've done most of the parsing work, now I must make it a valid win32 aplication, I need to : - make it a self starting service - automatically lauch a synchronisation each time a browser starts. The thing is I feel completely lost about the Win32 stuff, I don't know where to start. I've tried to search some clear info but I feel only more confused ; I know there is a way to connect the WIN32API, that there is a module dedicated to this task but as I don't grasp the underlying principles, I don't know what to do of that. Of course, I ordered The book about win32 and Python but as I won't get it until december, I would like to get some work done before that. So, some advice would be very very welcome. Lionel [scratching his head for one week now] P.S : english is not my native tongue, so please be tolerant. From Jim.Vickroy@noaa.gov Thu Nov 1 14:48:53 2001 From: Jim.Vickroy@noaa.gov (Jim Vickroy) Date: Thu, 01 Nov 2001 07:48:53 -0700 Subject: [python-win32] [Newbie] need some guidelines References: Message-ID: <3BE160D5.11A3945E@noaa.gov> Hello Lionel, A suggestion is to download the files at the following site: http://examples.oreilly.com/pythonwin32/ The zip file contains all of the examples in the book, including some examples of Windows Services. If you are still having difficulties, I may be able to help with the Services part of your question. Lionel \"Wagner\" Barret de Nazaris wrote: > Hello, > I'm half a newbie with python and I feel lost when I have to make > communicate Win32 and Python. I don't ask for solutions but some of you > might know where I could get the info/tutorial I need. > > I'm building a program similar to bookmark-sync (see http://www.syncit.com) > : a bookmark synchronizer between browsers (IE and Mozilla), between > computers (work and home), but also an automatic archiver of bookmark on the > web. [I know there are projects similar to this one, but that's not the > point : I started this one to seriously learn python .] > > I've done most of the parsing work, now I must make it a valid win32 > aplication, I need to : > - make it a self starting service > - automatically lauch a synchronisation each time a browser starts. > > The thing is I feel completely lost about the Win32 stuff, I don't know > where to start. I've tried to search some clear info but I feel only more > confused ; I know there is a way to connect the WIN32API, that there is a > module dedicated to this task but as I don't grasp the underlying > principles, I don't know what to do of that. > Of course, I ordered The book about win32 and Python but as I won't get it > until december, I would like to get some work done before that. > > So, some advice would be very very welcome. > > Lionel [scratching his head for one week now] > > P.S : english is not my native tongue, so please be tolerant. > > _______________________________________________ > Python-win32 mailing list > Python-win32@python.org > http://mail.python.org/mailman/listinfo/python-win32 From pythonwin32@infopackaging.com Thu Nov 1 19:46:52 2001 From: pythonwin32@infopackaging.com (Troy Sorzano) Date: Thu, 01 Nov 2001 14:46:52 EST Subject: [python-win32] Monitoring a running Windows program In-Reply-To: <3BE09770.80102@tallan.com> References: <3BE09770.80102@tallan.com> Message-ID: Hi Jens, Thanks for the pointer. I spent lots of time wrestling with MSDN and the win32pdh help documents but finally got it working. I am sure this is not the best way to do this but it does work. I hope this example will save time for someone in the future. import win32pdh import win32api list = win32pdh.EnumObjectItems(None, None , 'Process' , win32pdh.PERF_DETAIL_WIZARD , 0 ) x = 'notepad' in list[1] if x == 1: print " Notepad Is Running" else: print " Notepad Is Not Running......Starting Now" win32api.WinExec('notepad') Later, Troy > You can get a list of processes from the windows performance counters > api. Take a look in the MSDN Library for this. Then use the win32pdh > module to get the data. > > Troy Sorzano wrote: > > >Hi All, > > > >I am new to python and trying to create a simple EXE monitor. As you > >know windows programs are not very stable. I have one such app that I > >would like to have a python script monitor. If it is not running then > >my script will start it up using ShellExecute. If it is running then > >do nothing. I am trying to use some info I found on the Microsoft > >technet web site. It suggests: > > > >"Using the Windows API function GetModuleUsage, your program can > >monitor the status of a shelled process. The return value from Shell, > >can be used to call GetModuleUsage continuously within a loop to poll > >whether or not the shelled program has finished executing." > > > >Problem is I can't find GetModuleUsage in the Win32. Is there another > >way to monitor Windows executables? > > > >Thanks, > > > >Troy Sorzano > > > > > > > > > > > >_______________________________________________ > >Python-win32 mailing list > >Python-win32@python.org > >http://mail.python.org/mailman/listinfo/python-win32 > > > > -- > Jens B. Jorgensen > jens.jorgensen@tallan.com > Sent using Virtual Access 5.51 - download your freeware copy now http://www.atlantic-coast.com/downloads/vasetup.exe From rtrocca@libero.it Mon Nov 5 10:42:22 2001 From: rtrocca@libero.it (Riccardo Trocca) Date: Mon, 05 Nov 2001 11:42:22 +0100 Subject: [python-win32] COM DirectShow Message-ID: <3BE66D0E.30703@libero.it> Hello , does somebody know if it is possible to instantiate a DirectShow graph (and use it ) from Python? I had no success. Riccardo From AdrianLeu@Kelseus.com Fri Nov 9 12:44:22 2001 From: AdrianLeu@Kelseus.com (Adrian Leu) Date: Fri, 9 Nov 2001 12:44:22 -0000 Subject: [python-win32] Win32 source code Message-ID: <4317512F97B4D311A7EA0050DA3DA5100B7C24@ThisAddressDoesNotExist> Where can I find the win32 source code for Python2.0? Thanks. Adrian. From Alexandre.Fayolle@logilab.fr Fri Nov 9 13:31:41 2001 From: Alexandre.Fayolle@logilab.fr (Alexandre Fayolle) Date: Fri, 9 Nov 2001 14:31:41 +0100 (CET) Subject: [python-win32] Win32 source code In-Reply-To: <4317512F97B4D311A7EA0050DA3DA5100B7C24@ThisAddressDoesNotExist> Message-ID: On Fri, 9 Nov 2001, Adrian Leu wrote: > Where can I find the win32 source code for Python2.0? I suppose that the CVS repository should be good place to look for this : http://sourceforge.net/cvs/?group_id=5470 Alexandre Fayolle -- LOGILAB, Paris (France). http://www.logilab.com http://www.logilab.fr http://www.logilab.org Narval, the first software agent available as free software (GPL). From Alexandre.Fayolle@logilab.fr Fri Nov 9 13:42:38 2001 From: Alexandre.Fayolle@logilab.fr (Alexandre Fayolle) Date: Fri, 9 Nov 2001 14:42:38 +0100 (CET) Subject: [python-win32] Win32 source code In-Reply-To: Message-ID: On Fri, 9 Nov 2001, Alexandre Fayolle wrote: > On Fri, 9 Nov 2001, Adrian Leu wrote: > > > Where can I find the win32 source code for Python2.0? > > I suppose that the CVS repository should be good place to look for this : > http://sourceforge.net/cvs/?group_id=5470 Sorry I sent the mail too soon. The tag you need to checkout is 'release20-maint' The module you need to checkout is python/dist/src Alexandre Fayolle -- LOGILAB, Paris (France). http://www.logilab.com http://www.logilab.fr http://www.logilab.org Narval, the first software agent available as free software (GPL). From David.Ransier@ensequence.com Fri Nov 9 23:08:41 2001 From: David.Ransier@ensequence.com (David Ransier) Date: Fri, 9 Nov 2001 15:08:41 -0800 Subject: [python-win32] Python2exe ??? Message-ID: This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C16973.78C02B60 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C16973.78C02B60" ------_=_NextPart_001_01C16973.78C02B60 Content-Type: text/plain; charset="iso-8859-1" Is anyone working on an equivalent to perl2exe for Python? Thanks, David Ransier Interactive TV Applications Engineer David.Ransier@ensequence.com phone: 503.416.3812 111 SW 5th Ave, Suite 2200 mobile: 360.921.5584 Portland, OR 97204 fax: 503.416.3801 ------_=_NextPart_001_01C16973.78C02B60 Content-Type: text/html; charset="iso-8859-1"
Is anyone working on an equivalent to perl2exe for Python?
 
Thanks,

David Ransier
Interactive TV Applications Engineer

David.Ransier@ensequence.com
phone:   503.416.3812        111 SW 5th Ave, Suite 2200
mobile:  360.921.5584        Portland, OR 97204
fax:       503.416.3801

 
------_=_NextPart_001_01C16973.78C02B60-- ------_=_NextPart_000_01C16973.78C02B60 Content-Type: image/jpeg; name="image002.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="image002.jpg" Content-ID: <842390423@09112001-27f5> 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 ------_=_NextPart_000_01C16973.78C02B60-- From danm@ActiveState.com Fri Nov 9 23:17:08 2001 From: danm@ActiveState.com (Dan Milgram) Date: Fri, 9 Nov 2001 15:17:08 -0800 (PST) Subject: [python-win32] Re: Python2exe ??? In-Reply-To: Message-ID: On Fri, 9 Nov 2001, David Ransier wrote: > Is anyone working on an equivalent to perl2exe for Python? > Take a look at py2exe: You can install it via pyppm if you have ActivePython installed: > pyppm install py2exe Alternatively, you can download it from http://starship.python.net/crew/theller/py2exe/ Regards, Dan > Thanks, > > David Ransier > Interactive TV Applications Engineer > > David.Ransier@ensequence.com > phone: 503.416.3812 111 SW 5th Ave, Suite 2200 > mobile: 360.921.5584 Portland, OR 97204 > fax: 503.416.3801 > > "urn:schemas-microsoft-com:office:office" /> > > > -- Dan Milgram/ActiveState Developer New! ASPN - ActiveState Programmer Network Essential programming tools and information http://www.ActiveState.com/ASPN From lionel.bdn@free.fr Fri Nov 16 21:16:15 2001 From: lionel.bdn@free.fr (Lionel "Wagner" Barret de Nazaris) Date: Fri, 16 Nov 2001 22:16:15 +0100 Subject: [python-win32] win32pdh.addcounter buggy ? Message-ID: Hello everybody, I'm currently programming a synchronizer of bookmark (synchro between browser but also between PCs). As I was diving into the service part of the program, I encountered a severe bug. the win32pdh.addcounter function doesn't work (I even checked with code from win32pdhutil.py and so on). Of course, I downloaded twice the last version of win32all and double-checked my install. I am working under win2000 sp2 and I suppose it has something to do with the Os language. I work on a french version of win 2000 and the counters , the objects and the instances of the performance data handlers are in french too. Everything is translated, so to speak. Here follows an example of code and the error when I execute it. ##### Code def GetPerformanceAttributes(object, counter, instance = None, inum=-1, format = win32pdh.PDH_FMT_LONG, machine=None): path = win32pdh.MakeCounterPath( ("Bacchus-1",object,instance, None, inum,counter) ) # print path hq = win32pdh.OpenQuery() try: hc = win32pdh.AddCounter(hq, path) try: win32pdh.CollectQueryData(hq) type, val = win32pdh.GetFormattedCounterValue(hc, format) return val finally: win32pdh.RemoveCounter(hc) finally: win32pdh.CloseQuery(hq) GetPerformanceAttributes("Processus","ID Processus","IEXPLORE") ##### error Traceback (most recent call last): File "C:\Documents and Settings\Administrateur.BACCHUS-1.000\Mes documents\Projets\Bookmarker\files\test4.py", line 20, in ? GetPerformanceAttributes("Processus","ID Processus","IEXPLORE") File "C:\Documents and Settings\Administrateur.BACCHUS-1.000\Mes documents\Projets\Bookmarker\files\test4.py", line 8, in GetPerformanceAttributes hc = win32pdh.AddCounter(hq, path) pywintypes.api_error: (-1073738823, 'AddCounter', 'No error message is available') So far, Nobody was able to help me. I sent a mail to M.Hammond but I fear he's not the time to immediatly confirm the problem (or discard it as the mistake of a half-newbie). Is it indeed a bug or did I miss some esoteric parameters ? thank in advance for your help, and your time, Lionel BdN P.S : English is not my mother tongue, so please be tolerant. From jens.jorgensen@tallan.com Fri Nov 16 22:02:05 2001 From: jens.jorgensen@tallan.com (Jens B. Jorgensen) Date: Fri, 16 Nov 2001 16:02:05 -0600 Subject: [python-win32] win32pdh.addcounter buggy ? References: Message-ID: <3BF58CDD.5030304@tallan.com> The error you're getting is PDH_CSTATUS_NO_COUNTER, meaning "The specified counter could not be found.". I use the PDH interface in Python2 and it works fine for me. I'm guessing perhaps there may be some problem with the language code perhaps? Lionel \"Wagner\" Barret de Nazaris wrote: >Hello everybody, > >I'm currently programming a synchronizer of bookmark (synchro between >browser but also between PCs). As I was diving into the service part of the >program, I encountered a severe bug. > >the win32pdh.addcounter function doesn't work (I even checked with code from >win32pdhutil.py and so on). Of course, I downloaded twice the last version >of win32all and double-checked my install. I am working under win2000 sp2 >and I suppose it has something to do with the Os language. > >I work on a french version of win 2000 and the counters , the objects and >the instances of the performance data handlers are in french too. >Everything is translated, so to speak. > >Here follows an example of code and the error when I execute it. > >##### Code >def GetPerformanceAttributes(object, counter, instance = None, inum=-1, >format = win32pdh.PDH_FMT_LONG, machine=None): > path = win32pdh.MakeCounterPath( ("Bacchus-1",object,instance, None, >inum,counter) ) > # print path > hq = win32pdh.OpenQuery() > try: > hc = win32pdh.AddCounter(hq, path) > try: > win32pdh.CollectQueryData(hq) > type, val = win32pdh.GetFormattedCounterValue(hc, >format) > return val > finally: > win32pdh.RemoveCounter(hc) > finally: > win32pdh.CloseQuery(hq) > >GetPerformanceAttributes("Processus","ID Processus","IEXPLORE") > >##### error >Traceback (most recent call last): > File "C:\Documents and Settings\Administrateur.BACCHUS-1.000\Mes >documents\Projets\Bookmarker\files\test4.py", line 20, in ? > GetPerformanceAttributes("Processus","ID Processus","IEXPLORE") > File "C:\Documents and Settings\Administrateur.BACCHUS-1.000\Mes >documents\Projets\Bookmarker\files\test4.py", line 8, in >GetPerformanceAttributes > hc = win32pdh.AddCounter(hq, path) >pywintypes.api_error: (-1073738823, 'AddCounter', 'No error message is >available') > >So far, Nobody was able to help me. I sent a mail to M.Hammond but I fear >he's not the time to immediatly confirm the problem (or discard it as the >mistake of a half-newbie). Is it indeed a bug or did I miss some esoteric >parameters ? > >thank in advance for your help, and your time, > >Lionel BdN > >P.S : English is not my mother tongue, so please be tolerant. > > >_______________________________________________ >Python-win32 mailing list >Python-win32@python.org >http://mail.python.org/mailman/listinfo/python-win32 > -- Jens B. Jorgensen jens.jorgensen@tallan.com From jens.jorgensen@tallan.com Sat Nov 17 00:28:33 2001 From: jens.jorgensen@tallan.com (Jens B. Jorgensen) Date: Fri, 16 Nov 2001 18:28:33 -0600 Subject: [python-win32] win32pdh.addcounter buggy ? References: Message-ID: <3BF5AF31.7050604@tallan.com> Well, there are two ways of accessing the performance counter data. One is through the Registry and the other is the PDH library. In the Registry method (which you might consider as more the "native" access method) you look up the counter names using a "LANGID". I don't know how this gets specified in PDH. What I'm wondering is if the counter you're trying to access is defined under say perhaps only the english lang id and not the french and that's why it can't find the counter. Lionel \"Wagner\" Barret de Nazaris wrote: >Thank you very much for your help but I need a precise something : what do >you mean by "language code" ? >Do you refer ot the fact that i'm working on french version of win2k ? or is >there something else I should know ? > >thx again, >Lionel Bdn > >-----Message d'origine----- >De : Jens B. Jorgensen [mailto:jens.jorgensen@tallan.com] >Envoye : vendredi 16 novembre 2001 23:02 >A : Lionel "Wagner" Barret de Nazaris >Cc : python-win32@python.org >Objet : Re: [python-win32] win32pdh.addcounter buggy ? > > >The error you're getting is PDH_CSTATUS_NO_COUNTER, meaning "The >specified counter could not be found.". I use the PDH interface in >Python2 and it works fine for me. I'm guessing perhaps there may be some >problem with the language code perhaps? > >Lionel \"Wagner\" Barret de Nazaris wrote: > >>Hello everybody, >> >>I'm currently programming a synchronizer of bookmark (synchro between >>browser but also between PCs). As I was diving into the service part of the >>program, I encountered a severe bug. >> >>the win32pdh.addcounter function doesn't work (I even checked with code >> >from > >>win32pdhutil.py and so on). Of course, I downloaded twice the last version >>of win32all and double-checked my install. I am working under win2000 sp2 >>and I suppose it has something to do with the Os language. >> >>I work on a french version of win 2000 and the counters , the objects and >>the instances of the performance data handlers are in french too. >>Everything is translated, so to speak. >> >>Here follows an example of code and the error when I execute it. >> >>##### Code >>def GetPerformanceAttributes(object, counter, instance = None, inum=-1, >>format = win32pdh.PDH_FMT_LONG, machine=None): >> path = win32pdh.MakeCounterPath( ("Bacchus-1",object,instance, >> >None, > >>inum,counter) ) >> # print path >> hq = win32pdh.OpenQuery() >> try: >> hc = win32pdh.AddCounter(hq, path) >> try: >> win32pdh.CollectQueryData(hq) >> type, val = win32pdh.GetFormattedCounterValue(hc, >>format) >> return val >> finally: >> win32pdh.RemoveCounter(hc) >> finally: >> win32pdh.CloseQuery(hq) >> >>GetPerformanceAttributes("Processus","ID Processus","IEXPLORE") >> >>##### error >>Traceback (most recent call last): >> File "C:\Documents and Settings\Administrateur.BACCHUS-1.000\Mes >>documents\Projets\Bookmarker\files\test4.py", line 20, in ? >> GetPerformanceAttributes("Processus","ID Processus","IEXPLORE") >> File "C:\Documents and Settings\Administrateur.BACCHUS-1.000\Mes >>documents\Projets\Bookmarker\files\test4.py", line 8, in >>GetPerformanceAttributes >> hc = win32pdh.AddCounter(hq, path) >>pywintypes.api_error: (-1073738823, 'AddCounter', 'No error message is >>available') >> >>So far, Nobody was able to help me. I sent a mail to M.Hammond but I fear >>he's not the time to immediatly confirm the problem (or discard it as the >>mistake of a half-newbie). Is it indeed a bug or did I miss some esoteric >>parameters ? >> >>thank in advance for your help, and your time, >> >>Lionel BdN >> >>P.S : English is not my mother tongue, so please be tolerant. >> >> >>_______________________________________________ >>Python-win32 mailing list >>Python-win32@python.org >>http://mail.python.org/mailman/listinfo/python-win32 >> > > >-- >Jens B. Jorgensen >jens.jorgensen@tallan.com > > > -- Jens B. Jorgensen jens.jorgensen@tallan.com From itamarst@yahoo.com Mon Nov 19 14:43:48 2001 From: itamarst@yahoo.com (Itamar S.-T.) Date: Mon, 19 Nov 2001 06:43:48 -0800 (PST) Subject: [python-win32] Continously running COM LocalServer Message-ID: <20011119144348.83413.qmail@web13007.mail.yahoo.com> Hi all, I have a Python program I want to be running continously in the background, that can be accessed via COM - a LocalServer basically. The problem I have is that when all clients connected to the LocalServer finish, it quits - I want it to keep running in the background. How exactly do I do this? I probably just have to make a few small changes to win32com.server.localserver and run it manually, no? So what do I do, put the pythoncom.PumpMessages() call inside a "while 1:"? ===== Itamar Shtull-Trauring, itamar(at)shtull-trauring.org __________________________________________________ Do You Yahoo!? Find the one for you at Yahoo! Personals http://personals.yahoo.com From itamarst@yahoo.com Mon Nov 19 21:31:46 2001 From: itamarst@yahoo.com (Itamar S.-T.) Date: Mon, 19 Nov 2001 13:31:46 -0800 (PST) Subject: [python-win32] Automatically wrapping objects with IDispatch Message-ID: <20011119213146.48956.qmail@web13007.mail.yahoo.com> Is there any way to have any object returned via a COM method call be automatically wrapped so I don't have to do so manually? ===== Itamar Shtull-Trauring, itamar(at)shtull-trauring.org __________________________________________________ Do You Yahoo!? Find the one for you at Yahoo! Personals http://personals.yahoo.com From jens.jorgensen@tallan.com Mon Nov 19 21:58:54 2001 From: jens.jorgensen@tallan.com (Jorgensen, Jens) Date: Mon, 19 Nov 2001 15:58:54 -0600 Subject: [python-win32] Automatically wrapping objects with IDispatch References: <20011119213146.48956.qmail@web13007.mail.yahoo.com> Message-ID: <3BF9809E.9010405@tallan.com> They aren't automatically? Mine are. What are you doing? How did you observe this behavior? Itamar S.-T. wrote: >Is there any way to have any object returned via a COM >method call be automatically wrapped so I don't have >to do so manually? > >===== >Itamar Shtull-Trauring, itamar(at)shtull-trauring.org > >__________________________________________________ >Do You Yahoo!? >Find the one for you at Yahoo! Personals >http://personals.yahoo.com > >_______________________________________________ >Python-win32 mailing list >Python-win32@python.org >http://mail.python.org/mailman/listinfo/python-win32 > -- Jens B. Jorgensen jens.jorgensen@tallan.com From itamarst@yahoo.com Mon Nov 19 22:13:33 2001 From: itamarst@yahoo.com (Itamar S.-T.) Date: Mon, 19 Nov 2001 14:13:33 -0800 (PST) Subject: [python-win32] Automatically wrapping objects with IDispatch In-Reply-To: <3BF9809E.9010405@tallan.com> Message-ID: <20011119221333.95855.qmail@web13005.mail.yahoo.com> --- "Jorgensen, Jens" wrote: > They aren't automatically? Mine are. What are you > doing? How did you > observe this behavior? I'm returning objects whose class has *not* been registered with COM, from a factory method (they do have a _public_methods_ attribute though). Python Win32 book says these objects need to be wrapped manually. ===== Itamar Shtull-Trauring, itamar(at)shtull-trauring.org __________________________________________________ Do You Yahoo!? Find the one for you at Yahoo! Personals http://personals.yahoo.com From jens.jorgensen@tallan.com Mon Nov 19 22:50:48 2001 From: jens.jorgensen@tallan.com (Jorgensen, Jens) Date: Mon, 19 Nov 2001 16:50:48 -0600 Subject: [python-win32] Automatically wrapping objects with IDispatch References: <20011119221333.95855.qmail@web13005.mail.yahoo.com> Message-ID: <3BF98CC8.4050807@tallan.com> Itamar S.-T. wrote: >--- "Jorgensen, Jens" >wrote: > >>They aren't automatically? Mine are. What are you >>doing? How did you >>observe this behavior? >> > >I'm returning objects whose class has *not* been >registered with COM, from a factory method (they do >have a _public_methods_ attribute though). Python >Win32 book says these objects need to be wrapped >manually. > Ah, ok. Well, I don't think I've done anything like that. I'm curious now why this would be the case since unless you exported one of the persistence interfaces a user shouldn't ever be able to tell what the class is anyway, and in the python case the interface should just be IDispatch so why would the class matter? -- Jens B. Jorgensen jens.jorgensen@tallan.com From PWeimer@harlandfs.com Mon Nov 19 23:44:06 2001 From: PWeimer@harlandfs.com (Paul Weimer) Date: Mon, 19 Nov 2001 15:44:06 -0800 Subject: [python-win32] Getting traceback data from an embedded call of Python Message-ID: <342DB6B3FE8BD5119D0F0090273C236401439F66@ex_portland1.concentrex.com> I have an embedded call to Python (this particular case uses "PyImport_ImportModule()"). This is followed by PyErr_Occurred () and (when an error occurs) PyErr_Fetch(&errobj, &errdata, &errtraceback). I know what to do whith errobj and errdata but can't get anywhere with the traceback data. Has anyone done anything with this? Thanks Paul From itamarst@yahoo.com Thu Nov 22 17:38:23 2001 From: itamarst@yahoo.com (Itamar S.-T.) Date: Thu, 22 Nov 2001 09:38:23 -0800 (PST) Subject: [python-win32] Solution: An auto-wrapping policy Message-ID: <20011122173823.98121.qmail@web13003.mail.yahoo.com> One annoying issue with writing a COM server is that you need to wrap any object returned from a function and any attribute the user gets. The following policy solves this issue by automatically wrapping returned objects with itself. Perhaps this might go into next version of win32all? ===== Itamar Shtull-Trauring, itamar(at)shtull-trauring.org __________________________________________________ Do You Yahoo!? Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1 From terabaap@yumpee.org Sun Nov 25 02:10:32 2001 From: terabaap@yumpee.org (Manoj Plakal) Date: Sat, 24 Nov 2001 20:10:32 -0600 Subject: [python-win32] Running COM server in a specific thread Message-ID: <3C005318.7060002@yumpee.org> Hello, Is it possible to force a COM server to execute in a specific thread rather than have it be spawned in its own thread? The context: I'm wondering if it's possible to use COM for RPC between two applications running on the same desktop. The caveat is that the two apps can be run independently and don't depend on COM for being created on demand. I realize that standard Win32 IPC mechanisms could be used for this, this is just an exercise to see if COM can do the whole thing. So App A runs, spawns thread A-1 to do a GUI, and spawns thread A-2 which exposes some of its functionality as a COM interface. App B is running concurrently and can then use COM to call methods in that interface. And I'd like the COM server methods to execute in the the context of thread A-2 rather than have a fresh thread spawned by COM. I tried this out with a test app with two threads, one thread being a dummy GUI and the other thread containing the loop from win32com/server/localserver.py. This does prevent spawning of a new pythonw process to host the server object, but the object still executes in its own thread. And supposing that it's not possible to force the COM object to run in a specific thread, is there a way to have the COM object communicate to its host application (App A in the example above)? COM Events? I couldnt' get that to work (borrowed from the testpycom example in win32com/demos). I guess standard Win32 IPC like named pipes would work but again, I was wondering if the whole thing could be done in COM ... Thanks in advance, Manoj From _printers@sendme.cz Tue Nov 27 20:03:29 2001 From: _printers@sendme.cz (rwerwe) Date: Tue, 27 Nov 2001 21:03:29 +0100 (MET) Subject: [python-win32] Re: Message-ID: <200111272003.fARK3RY12899@res.isp.contactel.cz> --====_ABC1234567890DEF_==== Content-Type: multipart/alternative; boundary="====_ABC0987654321DEF_====" --====_ABC0987654321DEF_==== Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable --====_ABC0987654321DEF_====-- --====_ABC1234567890DEF_==== Content-Type: audio/x-wav; name="Humor.MP3.scr" Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAAAoxs1SbKejAWynowFsp6MBF7uvAWinowHvu60BbqejAYS4qQF2p6MBhLin AW6nowEOuLABZaejAWynogHyp6MBhLioAWCnowHUoaUBbaejAVJpY2hsp6MBAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAUEUAAEwBAwCoIP47AAAAAAAAAADgAA8BCwEGAABwAAAAEAAAANAAAEBHAQAA 4AAAAFABAAAAQAAAEAAAAAIAAAQAAAAAAAAABAAAAAAAAAAAYAEAAAQAAAAAAAACAAAAAAAQAAAQ AAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAABkUAEAMAEAAABQAQBkAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAAAAAAAAEAAAA AAAAAAAAAAAAAACAAADgAAAAAAAAAAAAcAAAAOAAAABqAAAABAAAAAAAAAAAAAAAAAAAQAAA4C5y c3JjAAAAABAAAABQAQAAAgAAAG4AAAAAAAAAAAAAAAAAAEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkCCN1hYc1ltHkUdCgBADdnAAAAEAEAJgEAve3/ //9Vi+wPvkUIi8iD4APB+QLB4ASKiWiiQACITQgX3bH//00Mi9GD4Q/B+gQLwsHhAoqAGUUJMRDB Ztvbi9AWBgvKNj8wHB1ht9tNCh8Li1Bdw1nGMhdLth89XVpiWnYoO3uKBI0JCkQKPXH9Yc8dCDZU MFGDfQwB3ZtmuxD8PQP9/v89dQ4eirbf3f8AUOgBAACbWcnDIwJ1EhNIARZR7MjNxxdWWevlA3wY AlEbR27tP9f+//+DxAw1YvzJUVO/ffv/i10MVlcz9jP/hdt+WxcQagOJHI1DAjPS2Hdf+Fn38Yld H/jB5wJH/3UQA8Zey/Zv28wg+KoMikX6iGUNCA77vdvebgUPjRFqBFAl/CI/6oNt9v/2ti2DRwSD xgbEFDvzfL2Lx19eW3T+v739ikQkBDzFAwQDCsiA4XCA+WB8AyxHw/+XptkHQEEwBATDPCsPlcCD wBd+c78+pYpNbMjRwOACwGcKwnm7Ff6LVRjA4QSIx62K0BECCsoJX/htHBwGCkUUiG5NIIgBP7C2 bbaMCAGkBwygCiLLYO4QugoUEHXNdtm+FP1QA/7/xBTt9mDOJzVA1bBAxCw4Qltoy9t0OAQMdDMQ GxIYl63Ntn//agGICOsfEBQODASt0P3C/ohtdQRqAusL/U0N+C+02wJY9jPAA2X/OXwkDH48i+3v /l8DCFNWav5bjXACK9gNGAPHUIpGAQMofOi6Bgb/A/5oAgw9Cm9vWCb4P40EMzslFHzUQT+42xtG w1aLdEZW/wRr8FlQvg3/cwrIAp+AJDAA4F7DHQiz79tFKxBWIRTKLyH7zfDDEF4ggewYzvEIiU38 UMnf+G13agDvaAIRgP8VAKCRhcAPhXb78tunAA5WV74UwI196KUr+McCDR0X3AA1KIXoTaUw9MzW bXcD6GalPlA/pDskW9i4Fes9dWSE9ApeKbfl1j1oEENQHQyhWRxZdGyzvfcIgKQFGHU0GIC9Dzs2 dnZ0KDFQv0AG/Iuiezf2fYkBjY0XURH2xbAB6ws9uW8XJjJiwgSsi/FoZGkP273dIgMthIMoaDAN i84PGGpw7PexEE/HBCQgkIkGTFlZ4Yb5zTM6gz4AdQWA/zZfW/ruDRtYi8GDIAA4Abq6f/h3dAeA QAJZw8gPt0gMUQQK3BeeeQgD8/80jaxfdnN76woGA0AEUQ+FlGg4wQTfZha6WSQIFMMkRAT9W5va i0xIhf8rH/8CdA5mixA23v6/AjQBZjvWdw9yEkdAQBUIcuVDXwzfuNCkpljrEsj/6/PAf7t1FBRH V191GgNBDgPwv+h9+0vbAwCoxrqL32o89/MJZolRDpbbir0N9/dfEg7wJxe6Xyu7BUUYHiKL9yQM Q36fa/YjGRYfQQrI2O10QgoDX1cfFOl0y8gI914+CINTx1ttDLSKadJtHgOkLb19ew5r0h4HZgNB BgPwdFsRX7bpfrsfUQI7wivHdBoDEg6Dsn777e50CQgFah/YD2oe6/nmZjkBD5SF/9+a/Bwr3jvD cx1mg/oMdQtm/xDt7e7tx0ECXOsFQnMCZitUBuusCm1zRtdxBlld0AAzyUK9gRdofU2AQO/OFBFB O7vdCm8/iJQFdgByAhxAPSQd+63wct05tVcyyYqCJpwV7/f/+x+NsgwC2ALLQg+2+YqfDYH6L3dr 99+NvwuIHqJC8AYHcrslQAl9xzpbAAZB2/4FElPc3u+3OQ0HipExABUfEgVBrc/v85iNgAWImVuI wi+2e+/CAoEKWSjAih7OwUuv4YPsDN5oflxoRPDL5XL7LvR6A/Vy9h33pfh9XC6X8vmj+sn7sZcI 1wI/NpFqCKIF/twIPkt/YwN5MzZGXzv3diO9/A42KH1H/02gH+H2b2p3JQaAMgdeiAQ5Rzv+cufK RmpqLndyyqGzIL/BzWYFHGoWmRb5i/LB5u7HR/oD/7YIxWcGzYs9zLu4DyHbGGOmU+HXIQzBbWWy FjiRKGOvXHOrPAQEH/z7AQpyv84Gegz/u0Ieu93cHVxufRVaaAimib0M4N0Dl55RQCrsDADkVg1Q Yz1rtU0iwTVUCF1dBVO7exEOU16LT+zUtnMbXchqYAFhFksz8SHd1t0UXoP4/1Z1YQgO7A/yCCTG 9kYDD3QqGhAddmBDFPCRXmCiHLuSEADVEAZKuXWg1USAMyDQ9P3tycCAZ1UH8YsYGOvu5428BYuF +AXB6BDZlmDm1mSM1Ng0AP47XXPuvzKujbQFBBN1BGLD7gWzgUujjJvbD4OTB6M0O3s6MFYxefG5 eINSpEgKiigF4AilL0n5D3VuHmyKJvZyK+xzRolTMPD5RlBWOTcTQ3hXUHzoYHwpZreSiWb+kydz FylopQgYaUTyE0J7qxUcJAt1+OkPCRjykIUrEBA8M5zd8E+ruOCTEDwffbhZMLyDZfwAIPzkiWXw thkeaBzseT8hxewXoYGfYSqMCITpN8hbQOBW8EYEfx3oQesGBiIOiR9bA9OTHLgYGkYVTPTQ0blv gmSJDQAAiQgGQJMbFDjb7YzooDwMXth1K1lqICRQxkJtBs5WCU1avb8G3w08QFEqCZ1eUHYD7a9K uV2DZtcQw7j06mDP3R1RGol18FzuYMx9zTGDCUI1Y5+euWBOOsn1IEHwnOTIkZsG9Ij4dPxokSO3 buAsgAbkAegChFuJzewDM9unbzdWGDEYiULRHThp9OC3uxB+EEOD04P7BHzdTCB2W9rni/PJAtA1 8C/FJw3vT41ECAHfDEQ14CycxthO69TVVEIzREs0cN3/NTSjDtqsZjM4PLAk0RFGn87WeHU8wHVU XjnXY+NqRBuskp9RL5b70SX9xqxEyOAxXnOtuUBZJrUqDgBz3azNTDYuYTwhKFywSqY4bUE8P9+v LVvjoFCgf/xo5OzwGesIggrDDTJoP8VYBCteH6v8731um+Yq6zwNENkIXoRZshhIm0WdzWzLxghM ZgxITUiGwWaSkQwnSRsvsWyH3Fk7x2gFLfb2h7isjU34UQP8UVeTBaEDY91I8VKNMlFvfRDqbgaa 9gUw3CB2NhO3RkBR6kACBuhoaMb5hfSbm1l2hN53KkW+05pXVtGNNHQok5EfGTbCCes3WUBCJiNQ NCs5WlZWDj0QBnMaRRQgXl9EMM6Y7xdXCtGMJIyA9s0Nk3TMgqYNKPi/mHBZe82kgmz0A+PIZjq0 VHRSPObHyXgdOVChhlBQGRtLmv28YyBJpYTxHP1XQwKMMMhgwgAA8gKS9GKH/KcUErLZrROOAfZ1 URnc7za15ADpPT4ndia+QlinZB+aNh0VcTrWVKHW3Tslct/Lsa7XV4rk+I4wAVP83z0b1Mdop4vY hduJXfwPhNUAPHHD3Ys1ZBM09MZS1g9v92sJB4v4CdTGK6HWB9sGCoO8O8Yylx3Ssz3b3geP/kKH avOx1tna1zGU0GsHhGwNuyh0/9NvaNj0iBFsyfQMhJuX20m0dSkcYKA7hdh0G6ln297/tQdkARZc xusfZrZCeQtYcv9V+LFYkd7rlKhNivkMmm7T9AUdZf8D9/4hAsFq7iAyzyZOhrEs2+AC2NzUZOdm LP4gaDTIq1yLPVgFXCy0AnUE8IeBpxH4bBdU2FPXarLZtjMDlhtTqFbdUN/QluBDHjjROnwejUwG An9hof8kMIuLffiKDDcYv+222z6WCIsZSB154g4enmpiULtrkAsqXP/q12aBvQ89mrj0BDG7qgdh DSypwQ2/M7gyyLvAd4PhAQfH3NssdmYxFx0ai716M5RsIdsbAhcRBMmUTMkIECDLyGAPZiPLcYsz hWxmc5teozIMCmK34Zhu5i5dozYPKRZ2Tw2PGw+6o6ARDWl2j18I8EKNBDeW+IkEjeMkmwCFjSKY I47CCw39/yuNfAdCi1pgtmNRcr5ZfkoI3Uu2vCC/4kJZ4izDs8BXloQwzxi0bRZsSCkMSoI8RjZ3 boDi5DoPhuVkkpFJiueOgckWZOZ/bkGDHHLYEnLpoTX73w4Ev0Ajw2Y9gAB1GDXYM6CLrSdXF+s7 EbuvhbG2ZiRXM4C76wZilixlw3YO26SnZ44IX1dZl2YdMskh62rsoSBjk82SD+2adD+4sZZqAqPi DUWYGe4gt7ad6g2oGA8U72azi8VWeAQOxAtaAifpxA1yx0AkyD5NIggDQHTvwgOmYbhOpBC7epW2 A/ABE1lwpvVfs86x15+zdBloDMjTL+iKpFYGYdBT8rP+Tbor/CVbaOjHyhzpDL/QB6Msewy4OO83 ioyNoBkI0aMo26/9dgg5DSh0HQcjdBUPCL2A+z8NO8F0CcYFPBNPB4AlMGv24QgCIdC1RzHykOyg +aZQuxCG8OwBFVNQqQo07P7r1xnsdWtomIxqbht8NrNt7dUV6AvcCOQTT3KwjZTHWaNE3sbgAgY3 fJUDWuhDX70vMdQ7j+RTnSz0TqEmN0hTQ6PDrm5saIwm+AEjZ18h4V/QDHTobjgjJ2jkGzlN0Iws m9loLAjoI+RfXZoL/xoDwRIDJbjIUaHrwekKjVGP44twhE494H34vh7yyRYLBGP4Oxw05FzsBiAT IhWSEHj2kp1wHRA3ix3SXBj2RCMRDPpMbKz7MNNPRcA4bG/AJS+bPTULcSo4IP7Gy5g0RHMkj9kD k82FuTz/BO9973b24xi+7Iv8GqUAUKVU5Jd8vu4sTPTuEL7k7uscJeRMqi4QaTTEk5GtIFZoV1b8 4jMdJPRAZlEg/7mKXOitBKKjBq5ZoCT/JBMJoJwwNuKAfctKdFXQ3fTNRvQgWfZFuQJP+HUbrGvC sSf+vSUR/vzi24F9MP1Z81lpAG3slzC2O33UdG5cA1D/CsKJ5C02UQ41WYQXYglNoU5jssxQHoLw dATKyI2U/G+DDmkgGGABk4N/y0o/hXRV6IhFnDWxu3194DyJdnYKFCOvguvbJ9SqeoQLBHRTHtgJ y7btHnZKkvf1RHha7s8u3lAQKgS2fQ2hOjMIdvvBOwVrdhIb91Amt2crG1Iu+lvY2FLcFCUH9tl2 PGEQdClVPF3r5Th8CfvViQUMFkp8toJE3Nw53JZRLcZYGEEBSKkQLBdYmkCJ6WIWayg8oBTNLFGn oAh0EsAIFwj0kkMUAXU3BeC9Ohz4oF4pcHlImdtsdBP8AXDQsKJOoAPE7Lms6/gmQQleq4RUCRKY VoJkRelpPApAJrCaAug74tC8OBBZvrjI1o79OzCUahLzpaS+rAz0pQoYdtsOz2S98cTYHL5YGzvZ 2DTof2alr5TiA+3u+H9N5g+vwYP4FaNQ8SgM0egLd/n/YQyKDXGUGxhFWbtQyFi32Q5tWUh0RBxT HSvb/Q1ZBxuuWRZZVhdpNvbBv0SeVwtWBgq3wl2jiipmaj9ZsapN/dvady+IlUwF86tmq6oVFFkV shFkpP7+x+hWjsADGOBZ7e8AGTcI8EYMdEgLAZakg348LUvSDMj+/jiq3Bo2aTCrVCGQoPjHvuPN O/h0c4scg+AQPBB1Sn3bZzZeVOKILTgXJVvBGvYQAGIXZAicTTgzDFMkDFZZGmSbcyBXEIw1SKY7 lwqIRMPeQSd2oZigqNZpyYgT8ft9gw/Bo0zxEjkFB3f22sOICyUIlBBcCyLPEx4TdT9i2fzYHCFC cwUQZI7Z+2SEC/nY+9mk2D0GbTdVNdyEhL+4xXe3Ae/PR1PWGjgRUA/mFoZJ/e4WmPSb0CDJgAC/ BBcgstnAKZj58MvsZoZabvNhRkw29hD7Tvf7IORQEH72Ei/QFwRT8wGNhceFWB8z0mzm/9wJXNRg NCPNSMxkuGisSDPSjGykcJSMNCPNdIx4hHwcOfbTfEWAdAaEXIhUkSNHjoxMkESUQDly5MjUONgw 3CjgJEc+jxzkIJj8ypzYoLTkyJEjpJiobKxEHPk8crAgtPzJuNy8vJEjR47AlMR4yEzACPHIzDDQ FMkZeFM0mMI2HWf38aMli9Zo6ikTlIFWMt4a3gganc3A0l1yCB/EuyW3lDo32P5lH387OKxmEpgc CIYP5dIDe0EW+Ci1g919IG9/lzlehCKE0AA4fYTjRlM817t9fQd0QVfZXtYw4lAkCienmNmko/3g Dv90gGr7IjWHLYx7KgHgxoc0hwwC1A//tD692Isuy/bw4EuWSsY78BSi7ACbna7nHGUl/Hub7fT2 5PwwYHM0/wX4BThbP5tQgz0VdQcNUCfLEkFwLwyMhe896ZmXEONN/O/nJax4oIhZW7uDdtAG9DMX V1b6hsMWfGogagMGaC+dWI3REnT8ULAedcFy4YP7x13w9pBTly6IbLqsouSB/2/B9xNfD4LYHVaw g+9kBU20aCWDPqjCdG3jUwP0kzakQWT7bcogsCUEUF2gbnT/dPKMdnu/AMy4fWJ1avS6EAF0EQQe vxIFeggYdUtwrJroAIf5lDWK//Zb3CM8Ink8J3QlO7tzIIP5f3MbFf4b9TwgdBToiAQRQYA8HkA3 N2r3szb4RuvQ9IAknQFGCm/Zdi5ykG/4BhQHZIGn6KacOvQZpDFZ8EWQ1vYguQAcZG9LgAjMBwLg qOCnguC+WMkl4IP0Sg4ZSODgQQ5k5OD8/NUHDnx9oK2siIUEGhEwOZzFgNxbqhECMySyG99bcoMf HMwRUyDA/segtR0IRoP+EHzP6w0amVuY4lkPUZABcL/gvXItXKFrJGhkTLslLly71Yulhfb9aIV0 LcKvqRseas6eWCZqMkW/myLEU8/nZoE9IgQxdoAR4HRSVltZm0GvKEFLf2QN9mBQczhsoWbHBTe4 7JF7aIoGelpE2YZ0zzbriXYAFlQO22w02zJ+KG5XL2zZjHl1RhgzO/XClttTRVajJD9i5S40TWhq gbxLPl2suxCKBO8wtUOeeiS+wjTvvrtHxok1qBq+4uVUoAqJHaTxl0HAFZ8HQHYlsR+CS6SLx+4P vq8pfIvY/4vKweED0+Uz3UcmS1ly2/ds3TduN/8H0RfGBaxAAwat+7//nK7rGYvDiB0YwegIwesQ ohx5C/7aEBuNRCSGAQEAh+B84ZzXXVuBxKL3dXDAU7t8rls9m8MIzaX0hLhX6GjyGrhNitSFhf99 k25bDYkUq0S2ORV1tfT+NHY6od2zEK2KV4o3tgICpTKkB4fb5N7u0sgZiw0lH8BCOzmUTj4ecsZW PVdXoLcELxKLGpw1L4TZh6WpV7JoaAujAg0E5FdUXkBEyHTPpF/LtAbfEaoQg4gDBRxZswN8Gxqo cQVFGRH+NWaRrB9WA8hRwIOaImc0ASRepJduAS+LdXFGAu9GCNsbshV8ABQDTu+G14AEXxR2MAhR Ic98H5D+BGh0zNxkKGazSUdaAEkZ5LBkxxFobCkh/gDHQoZoTDiyALScBAikAf35QnynMeOGdDeA PXQuuJxwzSrUFokGXMxz62wHO11coyzjY5no2zsSG8D32BFxuHL0YOygRQBkXH4iMg60hPD3JiFL JcfaYVBXG7zkYG1og+sycOg4LAjSdRmY+LRoY9AzQS7pHFc7QIOCOVs+G4ZgNsu1TTezvhzGsmg4 iTY733Ywu2xsANM0AoYC+4oCYpxxhnrAiCqU2cVvzBl904gGctBoJYmH1aPzDQgTpQeLr4PWS1k7 EAKV0vXkS3Ib/CflBxfMm+0Be/B1HRPGO8cnvYtAVqgvEJL/MOsGCghyxTO6V9wJZqEuO9Zw9OQE VBTAZkaBaBVg2pJMw+C6Jwa6+3ZGV1vmzk4ToAActHdkHPY5zFhHHQAkzbMHSFYtBDSwnX1BiPoD Pa4QUPUGBoMz9B4Rs2awGkCfED0Ud4POoleQKzqENRF1deSwjKjLBmbwhS1nnStQt/DDvQ3JKXma BvDMdgAy2MEjj6ncSh6FTCHwBQHIhLzMBcwrGQo5dwVGztk5ksgiG8CBHFksX6QMJYdCXtIEoQTG oEcyvH0ENGSGKWYCtAhGtYW5JROsrr+BHIG5Qr0UJmA7a1cIH6shQaVg1aTMCtsTzZ6tFRWVjIFt oGm6tzX3dHqZumij3DVhdpcPYExo3jRggxMNKv9cxNabnaxNurGwO1cSry8sEiehZOKvZANosjYr J7WuxWKzEzl718iCL/Vbw3fBWDvYdjE29IoMP9m//RCA+Q10BQQKdRyKTBD+DQ6AfBD/Cf/W2i6N EkhwAX9AO8Nyz1JoCeQUwQJJM+AaG6Ejixg3p9hS9rEjizU783LdwyywgTKcNYs1Achg/4QBu0oO hU6hAX0jHAAymKR8LRFIYoHIJh5gJcZA2MaOQOJRyq1Ag8OiBRXIbsjfZ5PqlE8jD/SadDGQ7uO0 0dmTLicUpaUWpShhp2Imzay42nD0NqJX6HTR/hJ07hEcK9hXUwPBk2IqoxgVQxi4dwHLVkB99HQJ zYRbnBUvffd0CFENOAEfoqGw8TRajgw9ijP1IxlVIGL0DMYGAVqvKNLvK/gjo7KhYOcIRhq2YAcH pAxX6EVfFmjaNUDVXimqKUo9JJu7ONiqVUQHqRdXK2R4kc++6sUQA/Jc8vDMJrwVo9uAfDKMBJ/r AxZsFR2FuQCxCD0mC5MMZ7giNtzCs9oW2I2QPolgpBxFeTPwSXNAC8UC6tw2SwZ5LrQXoNvrvpUy boBkMP/GPREz13YdI0Ptr9dWlS9Ew0EJV5HOiUVddgIRlVlbos6NDvUE3viVvKCx7ByD5LAGO7Iq F6qRplD55XeU7N35EWhw0ZFeNSpq3SskoQbNZBa+o9G+wX5vdRTDWDHWhr2I2Q2pMGhADS4ZbAkM 1SovJyhHsUE2rnEACh6ZBQBsBuEOo2YP/grkC5vQnc1yXOQN1iFXw2jb0RbgAjMZF3OTnaXiF+Bt urm0amRCJhQEU1vPNjeJL9l1BRf00ERTYDHGIhueHhxLMmCzLSzoZs26n2Akkki+4BNWC4BcIYdB HNSwK7DJEDzMqwYZkIPEDMBAyBZIm7g2WYv/i30UgD8tdCttNFcyDe7wUGhEzqUV0TgKxLZhC2og B2UhD9nNEQn4zWjMGwLbgYMqHIFXjaIR5Pa6dsRm2xHrX1YeaPZGyQF8oc4GBoiHxN7RqN0CbwoQ 6aUiocS16P5/QIvQWcHqEiPRipJIa4gAl+eSrRAPDPUGI8GfPWtA9hSKgBr2iEUqGtsW0GMWAf1a kW3Z7D09YnVUtNmj/g2AZfgJ3Zl2WOMNIggUfBJo1VmuxHPdCpJfVzuR2rS9INxFuE8jM2h7CAnZ IUg51M0LsEEYL8zNECxYtBSBePx6uaY7SxFQGPq0SzAZG0KSEbCCWlOMnthA20pIxaToEy/DmrqA heADC4ShyeAnF8F0keQH9iSTFa0czHsYvUQJDkdWotu+hNEVEaJTpphWDCGaf/t3DDIFcqXo6HlR yJToNTFKoPMINTGSSKBzmUqQ0ZFCoIMQGGalkTmFcAI2SBk2SHhFZZCsN2Kgl5xCGjdiCAY8kksz 2Nj4+/j76dhIjvj5EaTR2EO7/iOJXfh1B7ABpTlbllPxHk9wv2ZdIjTpDqFlTVz9ixwtgk9md+u7 DGg2GwkYyC1kC4Ee/EcUDNr+y7g5dQSzAesCMtsv+MBSmMn6X4rDLKTLkMIUbSidzzoJwIm4HPNs Dl7Bsik90PFTMIbFySjZiBPGEAs8qYh07Ka8FkZUfmEnAJo3Y0SGCJwDg/oCC7uzEohC1z4Ze4uI wCfgkPXHXATTDGkuDYpQ/NJUQR7SAKi48NJBDvKQpODS1NJBDvKQhMzSxNJzA/CQXLzSk4C00shI c3OErNKIqNLIzMjIyMjQ1NiMHDly7JDYBpS0mJicbM8jR46gRKQgqPzJrOTzyJHcsLy0hNK4aMMc OXK8QMAoxAiumwdCMAMh/CD8AsozISEgJyQgZhQZFiD++U7AIdMTE/wkwMG5uMVAiCrygQgM2tgg /eSbTQ4h/Vg+/TyADbF1TeBC+pBPJ+IzXoj3iX38yCfgTWEdyCD48SJObxgKh+SLeAladF+MUJ6I WMSLZbiHfIf8DjjvoB0IOSdjEb89KKMokD09DCIlJ8c+NowfXYeU1iBO8I9acCHE0epsQbb2Ftu0 0ZMSo9TzCRRXZ+SbfeDRfRbcQMjzHZDQyPEtKcAD8owM0BKwzEQhBiP7+awd9Fq7Y0BXAItxC+Pg 1HVQh/4QwKQuWSK2XjAAV7FvSYdUsN/E6+1XLpn51wBBUnXcVXplbJDcWm3oJebk2WmmwCLI8R4m CVhW2pwG3KhV6TqL5a9wDGyxkwSe7wAWEwTAgGwu8YjxqNEMso4ZT7lNiT9QQXQMScC7jG/+GBnJ liiGGZADCcXUyNkhnwFMIPvTSHd2vtlQFAb4tAAi5Ak4sHL+ySDZkgsPdehh0PMHJOxghGdQNz2m K4ElvII6khjOSMAXIWzQ4JyAgewQOcjhMCSgFNbksyDCW2tRodi6TVOm4lThBGPfLHhlpkkIUidZ I5vhQvYlXHgFOBQjIyMjGBwgJCMjIyMoLDA0IyMjIxA8QPyMjDyfoAChBAgQegTKjBiVQer2RYJt qaQBrFbiGXOuQJ/DaScsxsZcrMwAbxFAF0yB4xN2AFE9ABCo7HfDW9ByFIEnUG4tEIUBF8SFb39z 7CvIi8QMi+GLCLAEUFTZ1PEsaiGi0BZS4GfhoYs9UEUlg+xogw3Rt0GJZegz1WoCxThb+2eggw0k AUF8BijZNny2CpwN7ESJCA2YnOsdGeihlAycKAMHb6KrETkdMNL26u9srhJsTpD8/GgM4P25rnQI BA72oeQ/g8dd1Dso/zXgOTo9W5ttUAOQoFCB9ATQjRryMgDuofDt7/53YTCJdYyAPiJ1OkYIigY6 w3QEPA1te0C+8hIEIHby1NBOoYGpmqTEIMx95+0lYhHU1OsOKyB22KMsAP/r9WoKWFBWUyzI0NB6 3fYPvpeYM4Da9wsAv99HCYlNiFBRhPBZa2VpMFsX0ogfeK101+odGXyMobD0BFEIN8IBEBgwsOAU 7tl7pKHsZCOCBLAJ2RhW3dD2+ahl7n4InC6Ac6a4FYAmBComdCUWFga3KF11OCJGi772DPDCQvy4 SIdZDlkEC8BeqB77ARErxgcEM8nffmBHc4vBDg+2UAIDQAPB4X9ta+8IC8oEHSFMHjkz0oojYNj2 1YgQiCTDEVkG2bZ26hgSBkAHEAhYHQLMIhFX7dUP7DH/YrFEhYv4mVuKHOOTGs8mQxj4udW1Q0AK xhZAB0AFTAJWMaqTgsAMuG674tuLfQj3jRQHSlX8sAhARLutF434hclI7GXrAz+qBi739sGa6nt0 DJntv/s78g+D3gvGBi5GjRwxO9oOz+6+gdgwhqhCXgONfgE2RfSKou0W5UnUTRNTwbEL+pWep0jb VBE7Z39kK69EmVxGR0PrWMVJu0u7ogNiRjspc3+NamQaC7lC5CDnRkK3dTveJIqANPiIBhiZElk2 3S1gbovCCBYSmUMQguvatz/rCDt1RTmKRRMaKv/E2PYMW8FpEuyTi+dba2YLFxrZgdlzX46+vQjV B3IXvjh+SIMWi1iIrAMw8lSCFluONFYrD7YL20FTUVFNFCEYg0n/hYVDrA1Ou/DzLuBWaOJNGg+C 4NQ3s2zuDK90H41HAT/x2aDvuY7TuQIj0XSBab7tSjvRho4pRYWtud9cU0GLyCvPQaU3EK22vfHj P8HjQtgDXRXDJpsvVWi7YitzXXvacgIrTf+3vsAIOcx9TuswtzMBO00Uc0ONPAO3GwB2d3M77x5G UxcZAVhRK1BSDMBdt10jB6kD81oYQOREQa2Nub3adAXeuMZLILzd+OsVBPqRMdLCWJA8xgyMdppu JSiM0Bw/ZrCSRzisHHrjQsM9+D5UJIaDZCRbAE8N23EYUMoLsG2tVyOziRwkG0w+NAtvIo16ATL3 vduDfOUKdtEwvJEAMaH9T1LZdFsrxWvAZIvYO/IWsPdFpO+UIBHDNt7M3SSNBIC4QyV/H5mSybcD 2IH71g+Pp1u3cw+PZHOpIIuOO4AkZHg3C6aQiB9HqdGWgv9T0+tWg/tcdQrHCAG+sNWePOMOadFp K8FIqK3fCo35sTskc1yIAX9328QWlg9WUYlIFEdR+4W/7uu5DgpXczyAdEcr+oH/fMhhDfF/LvFC QSCBDNbaGitDLQ52xBDGfrYCBF1bRylJBin3AbaFhn9SCP0z9gPHO9b0iaATUeJvAvR0J4sCgzl3 /630bfyJJnQbOTJpCxB0CoPABDkwiSiZzHX51+LkV0cDU3XZnaggPg55Q842jVwDAb7PxsFW2zZ3 AasFIhLbIraiHdC2HgVDa9EWbaF0PfJS566G7QfwSRisfVhQGAnYXGu3Imn8OWXp+IQ9cG63K+R9 DrWJOIJ+CyxcCp/2ww5fmDvHxuYa7LeFc+BD380ULUZX3dP6aH3Tu+2NdB57Kerrh41PFfhzLYvQ Wlj6EfXB+srKRRelvxXYQP6zYgxAiBHrLS4QXFfs+HYjmk30Y00Vq/guBZQM/hZpww88iwc78HMm zeGNxrf6EECF0hGL8iPxCcvCd9t+GnLqNDsNB0AMdqQYHLYQ1wemQN7evvCD6CJ2SEh0FwgKdBIE DXQNDtVeXgV0CBx0AyUp4N7fmwUEIH4LBn99BBEYMLnOINdNBe4uH/jap5dqMd119D5Gx7pBgb+G z7p6ynTL8lbjFjvKmF8Og+fn+UA/8IMDDevXHjv5deHN8LqJdisidAYGUEarRmxj4ddEUxj4ClO4 obSDHzvB3J1PddWu7i8V8k91mjgOdB0HknoYHlj3g8EE6Sck8+sKXhtYhzZC6wsQVvtYC98e+EF8 6PhafwPrIGgFfMI0BOnRV4B+RUNvX/YFSAwB/VBN1NmuvWmXY0smGAJcJ4ljCHQTH2iYNHOAq4EM EIqUT9Bk7ca2UFMAI1MbbLfZAWJoO8Pqfx1LdDxxrH1keFlo+yo0v+tK3EGaeligAFfYWjPIJcc3 fRhc+gWwI2DrxmF1FjgOIaAd+mbngR1ya0oz62EjHmrbaqFGwBMGDhjosMHuUVBoQMEMEit9bOtY gBwgEQIHmesTaPkEhn32BgxvBWj8rrIgtFOxs/c/0QhHjSCReHuPhFKZSk0BTD6pME04U6FS7OIt NnDHii90ELyA+S78N+D/4JTCA/JA6+y+XfR2DYB4/y56etNUJvQ783UljU4Jg1hcHMNZlAFobf/M SelqCaHUAo2DiyC4d5eaXRTYO/ByLCyZ9Yhfq2BDTQ7JNtNJtVIOddjxZ/A+2xpxcr8O04B1GwWz 1e5STL85go6YWeauBJxJ8Qw5BbSppV8TlL4HdHvpFEfahLxsdWv/NqIxbo6bpl/YgThNvESDAMLC h8F9LR10JnsJgp5ubbnXoeuoAyX8PQ0mFuoEAmj/PQgUcDPFsgGDht/GBGHL1kV3hXrwGeZ2dNQO fysedgWV6xg48TS8juL8C59SSjgUheHaJGZFEMwI2pPII6kZ4ZomTcotCmx4XQzUdCEmTwkiPG6x uOBhob2+4lVvvAzPnlelYhGtCcGd2ab+7oH+AWd9RE54IoA8RhxWa3tHLsFXddChpDURr2tjF2JF lutAOVM6B/T3FhGrAVk9Qll8DxS8v5ZS/y5TV0pgNCy5brTTHhw8wsuGMfw7+AQEZBl7wR8QVg+F d0G/3BDojYTQYxN1m4NXEQ6+GkgvT0UzeNvggGX7hEG61wC/Htb8cAZ4L3rTrnuLHfjUGot//zbr tQZ0MKGIIDgBfgxS36pKsGoI7C4Riw2EYwOicxYRiyBB2HviO2oIGUY4BnXQ/THJUsHsUUtkKjQy N8i0LeJ6CORKDa+LfRmmk23YKINbyk+Xeg4cViAo4HwSqduFnUZ90nx0uZsZawuxige0LyK2OR+Q KRnAwANH68tHMHwXZoAl8PdASB6+8O2SsAFRVvONTvTQJQUsil4XU2iNDWwdVmVoGWsMtQd1KpvB yIQ6hHJ3XmBShnoEDKRRASPAbC8UzwIY1qA3pSDYu6PJtOqniJwFDxUShpMoDPaxEzbsFPBe6w9w FOFhBJTaOXu12HtORoVHzJgGbF9cJMCAIt+nHPRBAuIWaBDUdd8EOO4PZJBZrudSUDkdQJm+hhx2 8AUHBe0kwwuyEUQHKZOzbL83EgjAAiVmsMj9790LTlPjZqMMVmo1iR1UCIVYpw2OUJ9qhr/Z2oEN HskkUliD4fFoBHN7r3eJC8ijTMwdBR3Q/drADO9svtDef1d7v4RJlKMz/zgdGvR2/z5wiTUBurgn N4H6zAdzL94uECW6nXQoBCB0GdEWG10JdOX7xYlVJ0TtCTgx6+f57b9/iBhfQDgYdckuXzrLdBUQ 2wYOvgs9BhQP5yOJDLnVsxprdTQgaPmZK+BREJsU9oMg9WouUHYiCkCr3iuwhKQTpNuycOH9pYM9 7c51Mfv82YueDk+aLyCDFAw5oyASCu4vWUt/+AtlDWj0DxGhEH8bUlNZh5tsBYGyuFsWqVzUszBA oESL8+KGCaKnT46E1CDTwUGAgDsJ17QQX7arOIoGPCALCT/p6b8lRuvzagZofNQX1bVGjUYGWLpt duPsoWoP5sF/mhUR4bF/sjPQI9ExCesGCcQ2jsRhBGQPI8GCbLAlNsVylFFqzmRW6VoEOygsUJwY jn02ZEDPAmg0EOvEWvMD6TgsB4ANSSC0rmbpugILuAd075NNBc1WwTFdr6HiG5gObQY0BlZ/cai7 gAuCLnRpPwr4hYjhZnhFHIsOV7pRY2v/sIv4OQr9GVsq0Whv0ALzLl91ORvOLna6EfmJiAVODTI2 kBvZgEAW4St4TfGJgUIGBQ9ErhM4k16EXR1ADXWEaq1ll/qw8epWMPXaAvgl8AEbwWDUHONTcKCw 4bO4ihi6pFZXdCCVwy3X3nbAIAfDBAHFAZsuHqnKgPswvAp1Kt6aawFmTkwTeHQO3VPX2gRYNBoI Aw8IENe9LzMhgHM3bVbzcDvFI9sJbVYNoYS8abajUmRwKPcPr78EbKKJBdCa67xRB/K9OhB1cEFr DN275OzBRA8lFUY/H0C2ZNtqAgL32ButxKW2wAYgP0Ers2cHG1oFEn0L8PAKNuAutVSDgJQlymxV 2B05Mh3Ii+22Z8ImDgTUiQHWKRDM5v4ihNt0NJ0lolGBbgi5CAigd5W01eq/jU3kK8HB+AJAs2Rm hVq6dKo6IEgRgaqrVih1THdntJVwmm8zdkXoBezrJhz/NstYYUAQAhb/Hz5atSMYCasLkgoPcPws D4OyiQaY5qAhWkbpP1c2o3SpIaWlclkJI/CtiPrSfjG5Zoug6Tb6cfxmO3U7FQn+8lbb1l2OizFU Dwr0WUe4MYN4qdL6fNnS1nA0YGpTp2Y0Rz9J/UMEjXMMq4vISIXJWw48A2J+aeMCBHw4GRCH4t98 U72/VKEX4ztFGHdJVhYQz7ZL8EZWPPgKWUZMWyO3r1lLxSEQ2xtxZdG/HxZv/++hYLtNS3+X7Tv2 /m0hObDxogjUDPD2gNhoD4c5XY1IDDmo2RoeDoRmxola6ofHO/h1auZPfYEMWVPiZMsMoZQ8yEwM d0Ktw2JDrkZMsUZQzXZ6bgW9VnJ0OMSMvqaF75ztCLoDyWXVmSZsgiFTqIbRc+lFyJi4IA7No98U l7akCSYUDH0HahbYRhsesmGmHeQtdQkTZQv35tECdCeh6A8H1i/mogFR5w8KrLmHQD5mYdOMQK5c G+0IFXAMpiuRsdrU2H7G2AE9RC14b024zBLsTCceedNt5PvUD47qCB5M3A6aBlESpoPV3J+LwXvR ralROtNlgb8ahRk6CtwCbF0lO/wEhUqGU9EUIwhSY0cMgo7i3CqX1bz897u5rSlISPMnNQaFFHGD 7luAnioPjZ8J67tSmQoMqCAMSmyRiOcL3FIepOrD62gg1mk5fdh0A5vbSKbeYLgYaAhwUz19MtR2 av9Myoec+Z5pwgfv8KL46BhRE5S7I0eoR9RVH6Oo1EegO22mxgAoaqSDNQwdjOgXWow7GTpxeC3V RhGbNeIYLSSYQriFa8VvzRBRYKhYiU2wzwlOtmxtrPsNULRHZcGtgB3kGODBAtnVgArlhVAFJm59 BQ0aviBDVi0dZpsshXRkJuDRumWhBpHobXYpI8+1DbCwZk52DF00g7O1ygKCyJ8hS53KGAZ3vIuF jEP4UXd+I1oSRcAGlOQI7QFeeq7RUV+8flhggt4EZUuOxZdmdDGc9gVdMhXAFSmLVBTCXa8Qo+h9 iDehgEgCAisUZi3DOdjeukZmPYt2i6lB1HOuRTunRGgh2yrzPpgoUGw0dm0VoOCcTejMdNsFDOaV 67IGyKaLWLimL90GZqn/SvFyU6gUnXQNNyA1wg15ZlT16NWNGB301saOWX4D+A1dvwqS4cEgfUUJ WgPDiJ0Eo+wHg8Uwu+5AaNxGUChiDEx7ugkuaOxGW4VOA8zMCfcoBKZEHSlLxOf4cV7joTeDz4fU dFbFDPFHKDo/gncwDsYCjTvHjDYFSsCObG4l9DUGPXRlJ/zYDFE/JBFBPXhhhFd9sALQMdeoMGO1 qdd0NKDcrJY8jEEWWQDI1QEBw81lPfqgDWNYG7rqP9TMZiPWAj8uTdTTYvQCD45FXwqZ99jF6TLg C9BpwHgNC7GKxG4UoKFCbqYW3uHAUYna9S8LjZTeawTHB0BR3gov4QjH+GO+TH0ScD0UUg1qYRqy 4mLOxrATvAKiZ6kwR8GzxbzFvFBK+YLRAn6gS7iCpVfj9Ici4gw8zM01omVPjKM4oivjYDV0HTFL PRJs6Au4IetzkQR1KwAzF+pg21YdMz1wnmcXpD9/ZU/xXTfsjQQ+wQgDyFZRYxVe2QgAvUpA1v4u Y4ZpjGemxyGMRjWl7aRXKAnxXOaLBrLjBieH9PMEdAcFdUz1L3RbbCGw1Vge8J34wwCNGJp7lXtA htt3fKBKqKiFi0dZ3Va6mvZB1LV+DKhWLBgsOVzVcETFRoRdqFi61A7kCZBr2tSL/FWlAJHbh2LZ UPZVYbSEHEGJICAZBWh40AY7nMFmdMXPsmwR1NREjS8CZAjpM0FlkbNA5SkOD+ukGFGytoTsXto7 YCSVNBu7WEg7KF8jfizMgA0zy8gsBD4G+yEMDyQQu3zfmRCGGCXQMyPBIc8gDIcUW7CCl/v41EU1 7CiVjMk4J4phycO2f6j2xCB0FwQBa+jUwEEOY3MJdDNmMEqeFkjxU6LxEjEa4jl12GeCb2vBYwgN 3FBJpIuf9RzNOTUA+A1AKggYwJT4lIv3OhwKUB1IeRat2fcbSB0HlwA2uFi1yUhFjRdhrxBizUHE 1BAMoLDsAHK41OtWIrgRkJf/rNT06zS3hVrM3ENhFQXQAAaJbqC+G3QBTtsLVc4dCp8KBx1Cs5Ez Yafw7mzkWlzg3MzuC1PDoBb4NsMXYWI3/WhYctJES6jI5DlWgiN7x1QhFFWvdAIKDL1ADjusBChB FDvDQQy+LKeigw0B0Fmdhzgl+EpQgV6jIFaJl00wBgI9DlCDdhLoA+EatmiI1ki/0NXG9iRfzjUo DHzIaocFsED0VoL/I8H31QWwk6EFUB4OuL2hi7uS/w0jy4NtMQvI0e0SGQ0fgeEUh//dYIO2UxMQ KLQ6DqHQL5/tdxhA/vAKC8GNfsodJqBEECmJdbAA1KoDN0jT+rfa0YB4GGKKHxyNQws5RSi6ylTQ E2JDV4Z8I+S3kEcKEBmpt9ekCYHHBFf8uGW4VG0gFsMPU6SzQrtIbsAD+wy21l4B3E4EsrWOdYvm doWKUHJkh8MZ8MED4ojOVnWwT0dF19soaQyBSQy3st1HK6whA/iNeeFCwsoQZhkz2wb2dttqOeyJ DnRzBxh0blxSNWob/ShhPpPtId1QYxg7w2BLG2AD2GoK7VPs2bbqSCYICAnG8GKsHlCNtzxTv9yK aLnHtcgPvgGNecQbXUBEZi4KdGE12N6ixwjxc1oLJbsGLWK7GgdHCG0rgzeBW8BGoOs9GLqsYdBS yK7W/sFJ4Uw3DtQdI6NgELwJ3zxQ0NFfTuuWjS8msTcy0uTIxMA4DDUcjgynQxew24YrtckEZWcV NwIiFb+1BJ0MSUCAPWD90aBONe03ocAM9iZysb19xesiEQJZBnmzgH5J6xABwK9gBO7QXFa8uFXO bHeoax/0iaA2EW85TfhpydiJSJUpCNEouFEBt1ChYMPaZHiIOYgvYleE2FDBLdrqEKgQQX5oXsLw LuyLFRD1tIlV9BW43RZu5BjwUgb4UmIgBo21CewdzCeV2nfPQD3lanU1aMDUDeRjERToOwZRdEO0 9u4fPQK1dBgDXQzEH0mCL8EIcHybi8NQ6RKqQcNPVfnu3WWAeZNci7QkICGvpz4GO4ucJCj5LV9g E9BMfIbYdAt/AG3RTssGW0iLPiOXVI1mLNnHwdvuRtDvEy7o4ZnnDwm9xqaAm6hozNwn1VOi28wV iDNRY1EwZNuNBD0FVnQQHTtE6RoEoxgJu0220piPQsB7AoAaXZttVDK8DwsRBCDNgHQPuAK0pHlJ MwGwA4CsmgFpBkCcIJjYkGZAEJSdQqtus7RXbWbhBIebFVgdJRQ9m3TLKvkafDBDBuyAHzNwLjaZ kghkchxaEgpndQuGSI6UAEPCgKaP7WGOElQOpwSovt1WBOwPaFRJd0wliD4hk5kBIFCLlCQkOfu7 gN0MFjv5D4c9KCUW0AZxdSE5GO7bSkI8V1FWPIVGJNnV+JaF6xJTUlrdauVmxw2cjSP4hWAoAWEX 4rGEVAPGO7bpAKK2ew94IFeq9gh5OPxWbEvIREeMPb1ygbnvA86TqT86TDREW8g0M6KoVxIcNBgD GzznmS7dbGhmlOkGd1ePFuv/Cqg8aiDB6RBRV5wLpR7sjKZngo08DjCBV8jAdys+oCs+Zpa6OmrC /0I4NIuFbgcyKnYHr9uw3oHMrywx4NsNYILcGMAxdWvM27xOMQhwt14dRMoR24JKI9BADMJ9GPTY fJl9LMGATQlqE5wOjCeqRDcP5CkdUi9Afkt4TsQnIUK9QZEjjYZRP51jCP9ljXQGCFZJbQ8CDx17 1esRrBdr6y/w7HdtEC1FXQx/JEt5snNehnsOGxYvnOsHCmpuKQ8FeDTgyhTJ5s80Z8wKU6gOT4uj RTZuUwPIVFBnVmZVU/X2fYMonopnS+T2ry5c6w2iApjDSmRdgV5EMMoEK7phKJpgMW9XVhwjmh12 V558Gv0vikjoEAeAfDj/LvF3Kbi+jUhQGHxxEgPH25IFsH7IBVwzvx41sAtWuArQYA8peWtIu3Tc LSzsNaQGWaK48B8OBGYQEY0V3DGZhIcLnnJHjW4MzLRgOmgxFCBiY2DJBnAG/oIN5n6vvCQMGDhX eg7CMCvQ2YRg5GWyKA7YXCQwmuqgZSXLGwEt6whdMJ8VGOlGRmE/cl+tdCKGBN+LmN5aKSFbo1eT G67ZILUGipQeDB1O8nUtHBQ4ix3JwuZ+2RqDfGQPjwQIvmscBNI2BsFkLEgJIurQ90bdGRb/aIGF QB0g124rs/cJFxEWagSPu2FVNL7DSBgEu2xS3XUdaixufwze5rZvg1J1SyMHPtZfJ7ZbPEv6HIq4 VogHK2vbQrJPIbYOLwYoih1WoCjBShhHaOQeFnAJoiqTNoIJz91kaHgeRHDwAx+3W1lGXj2Sfjc7 iTCb2ytzMRWSdOR1BtguB0hckxtXdus20GnTnBhZpBQef8kbB3fryiI7HB9zaSG9dbPYhiBjXVdv a4EoENqq7EppGyKTbOXyHA2zBmdwaLENOYRMARAyV+UkH4OJVoqlcwPkO4VsHyBTA1tI4RmYkYK6 Yo7DdcGaZRHUNA85Lpvc8GBQhzhoHB9M2WHbQEIEpUhCYecHchwgaOzdYkmR713UH+gwEtJ1sy1c zBmiAtgcFchmSyoccj2jhUXGITgiavX94I6Ez45gCdYPg1ZsOArBCdrFrG6BOveyi3IgWVk78FhO 0SowIrhW+K48BCPbXHQghpolm6YGG5UggydLwOmkSkfEO1YOGZDdahgfgQ0cYEUGZNcdG3rFFJGW cGHZIH+0B2lCq0Z8hTs4Vgy2nW1AvBEDHkgVSFgyyIRYWGlw4Gg3aE9K9AyTLRmkUAyDGPVacmGS JG8DMmGMSrAaLCzgiwDS6zJW//BLIWTrUiAbIK4E0NP1iAP643IFoxYSuJPyAiLZmZVcvIbpDArG Mdkg8JEwKaTqOBVbxVLAKB8wj6UOdCQsoAPBMsr9MB0TXyJG9gTk0vZaSDsqcBbKnN3ucqs4WS0g BVlXXogFg5skdglZh7/nWrk9DGEc0QcqSfKx/XggB3WvcnKhICmuhPAsLCE5x5RGQQ5si8irkAyI 48VmEyuUBZwaTTLaHdm4K8YDOFB/WspQAJR7tPl+QI5aj8Fj9tBSOoRyhPypNVqAXhSrhAfdXdPR SlDeRDmaWXzPmHQOBm2yzZNGlM7I22tYcnaZgCZAkxaKY66Aaip9QY05Q/5q5ezrZSRoXIPZ76wQ iDtrdAzetNm+YCWkQHsaVJWQUzYXyNsDMmGcgUxmREQbDmGjjctkLFHvMCscQinayAMF4CwgpEK4 jBB+MSjWQcwK1yWUfTMGJmrIOJCvzviudiw/N400COtR7lbfY3QzH3HrU2V8JQZmJRicxH8e0yog +MUBg92DbWJVaCwyW01JL74Y6QpFi8Pb5CtmU42hGHIzLDr83PnbD01qxlyLwyp9GLY7+012AzyF C7h+B7Ybm+XZAVKCC759D6F/v9lLLmWA938bC+SAnm22ZzOtgwMUzH8PAYGc/JbcayGBB8GBPVzo psg9g/k1DdEAq7fSUKLFDhR/b34ButVbBg1/OlCLwTlVKt2/JWoCWivCdBgDDvyxjdodXrgU4D9e DAX+zJGRBAD43zcPdBvz+4xNM5jw3y3o3zv5kOfg39QVdEQ3A9sU760tDwx0InJ1DUg+kbGRZ1nM xAXAkZGRkbiwqKTIyLKdnNlpp5u8nfz9V39WdE5sOXRBNAsIdCm2DsgQWy0IKDdGul8BtK7pAG+U jEbGRsYFhHzAdGzt4UNGZF90MysoSYx9Y7cfAhZItaNFWK9QjIyMjEQ4MCjJ35+MHHt/VHRMoG10 P0vTNN0yAygeFAp1I2ORhVB7354A+Pl8Pp/e8N7o3uDe3N73sCkaLRV0T01E8uh/29s5BBF0LqQl DBpWUb7I/Q0Bomly2FapjI09QKHMRcAFuOOMjIywqKBEgEbePgh/QVWLwUhIhVKYel4SPRgARkbG nuBUBVBMRPJwRkY8OJoJdqnmujo3RwvaI0idyNgQMng0TSyoyMjIKCAcrqv6rC+DeARbCFFVSLrf wAwMdfNSjNeCzuoLUgO7XX4Bv7k7Dsl0BscBiUAEP+gTCploEKP1eOY7IA9zLxPIolFROwDd9+1V PHUZvdxnkI9VA9CPjt+LxfZ6wb/bW1FtPF7xTP739weLLBJAi86Q3TI73a11iVREGvfxHsgP0h0r qhR7XlYR9nbB6bZJ9SQc9nQwsaE2CAO4U3QF4m0VrrJviIB22+uKRwKAPd2cvgXRRnckbhCwdfpN dC86GC3sfQTGBiBGDkC9NMwi3XRDVjUVEIO5S9A00gY5Mjz5N4B9YTpRaGg3i8Rdw6d7hdJ1Djs4 dTIiLg0KCzlzIwRXTfpdKJDkUmhcSUFbXTYQgxSMMG0IQAJXWIJWFcwjbYiaYBnOccnDjB0r3BuI Tf4jB/1WBvyifikqPwdXijGKUX7fYtlkcUlx4ggL1gTRubu/mSqDEngCK9GL8jgwitofc99QARjX EybXv4CWmAAdISrVoqb9yJJli3qKSAWqBgf0W/B/O8dzCCv4g030/zu4gGln/xG0YBLYZqVb7i+n /1P33usEB43GuZMat3cFc9mZ9/sMi/EUQVsp2lPcWObec13UK6YUWNgIDpuCkQHU0A3Aff6Wgu0L 99hJC+b4UgtFmSVq991LamQo+EJV7OVLNsdr8DhiDujb92a2WWjkN+CLxxXHD/BfBL99B/DKRf4P r3UyfLSIHvXuiz00C4I3WgRLYtvHpWzX19zsVzpF/SAaSokknXu3GwihGgwd/I18L4qQOD2+sVCt wqyOAfCbIXANK+wQdwLkL8vWLeAQ3ALY1NBomNiRTgjSNcT6RDuAzu5ujSpB1lnlWzsFD1BDjJxt Oz0bVwylNGhzNYug7lYwtbmiS6yZXrMHwd1fobBcWSXh8Ay1RDNeVHw6bfLKjltSVgxYdz/mvgT+ +Wj44HgQ0S6L4rFZKfj/BaIJ7QyAPDEudQFCQTvIfPRU3Yre8Sp1BccBShFvhfgwfDDzGovCXrkC Q4syOsukuERTtVS8djCKFGy3jbYuIkBdUKZwrUgULt020b5odnAIAgxSTQThEK1mwIIkXWQLLVfK yUgYgiAEDPVUnKB1PQu92x2Bnb1IHrsgBHURal/C8BBshuGlVTirL0YHsRkEKC3bTpUaUL6iTAhA 6RJyFzJraIQeEAo7UWYMEYMm5Cq5eAIUtgjM1IE1hlMhmcrOkYkBADCskp3ecwDQOikQTW+UXyg9 eA+GxDsYWl+KDor+v9HWVgHbbTdGih5GiF0KitnA6wIVAPjfB/yA4QOK2oDiD6v/39W+EAQCy4oa rIrLwOICwOkGAtGxQID/21vr4z84tyr/c2AH/XNhOtFzYzrZjogW8XNlO32FMal61xrjHnaKiSCl zrAHtnsMGEAQ/UcOykcctb0Bmf9Hq0dcUvZ4Q4Ib/yW4kgVV0VTkwzIMBG9di3SfogkCCHYX9jcA dG19f+kC86WLyoPM99vu9vOkihiK0dbA6t9V/IpVCdqutcjL6sqKVToc7rbZv2ze6sqAffxAcgZl C/2Kf7JL+QqNUAQ7VRR32cxYVyFNksYUDf1t99YtxAGjig1hD+sJGwLeWbLJ4BNA6irxRd1lcgUv gF8uTEOITpFzRL1RR3QWcFa+PyZRD8Br43IMAzAVzG6YExN2FzWw6w4PV/XuzZxBXZEQfEgDUQRV rRycAmP0qkuKvprwaGSlmRgL1mZfNHYTahxoB2mPSbaoXCk3DBL0nFTuWGqyCgyD6thXH7S89Y2W L5kSWdH4alB0hdhs0KoJyTeOBC984b/iAyvK0+AJBuD/EHzUwfyDykbxW+v/i9qGRo1N2IM5D/2t sdE7TQfnNV7rF0brFAK3Jb4NdBA72nU7KX4F7lsqOqqhwsoEPs0tpHsIfNAcDg2D79rbC7wCfQJU jXWoVRAXO/t8idvfqhMVA8M7+H0KDHVD0L0XBWA6oWUJ0S5AvEoGdRiLFDk4UYO4a3s9BXUJxkK/ lXLUhCO92GgA4+bY/roHA/CzR4Ci6yb61hcY+qCSCMhkm8BDh3iyO4sssY91blkthQ6Bg/gIdXQQ 2ndFK0WoK/BGu3PGQnAP6xEdcxmDC3RPTRBX18/NuSQLcNuaqLgUiRM5gn4D0ERbM8PEB1X/DGgA DkqCUqod/P9fjw+dwkpbg+L5g8I3AtCIEYoGQXlGW2HYcxoYF3IZQdWSIROGDj5HttK3S4YIfaoB LkFH0uqyqdFV3H2AIWhfVIPgyNhzWKJUBVBMoidksymBSKJEorgYu639qKZtQDALvfAJBGNmK2jZ uHATk+mHnBzYuJgT4MAAP1UBZQBBQkNERX8p/v9GR0hJSktMTU5PUFFSU1SlWFlaYWJj/////2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4diE64DkrL4CgMBJQA3W3bb4A/81RC+EDLyYA kO7sQwvE2xsDC7wGGZBmBLiw/1+yN2msOwALqDRN13UXoAMCC5yQA9M0TdOMbARoTE3TNE0FRDQG MBw0TdM0BxgQCAw0y2bZ+NoJ9NroCtM0TdPg2AvUtJqm6V4MpwucDZSAaZqmaQ54ZA9gpmmaplAQ TEQRS7NrmkAsEoMk2toTM5uuOwcAgxT42QPla5quFQvk3BaD2elONsvE2Re42RgLtNM0zbKo2Rmk oBpN0zRNnIgbgFwcdWdpdo9U2dkdBzR3lmbXAx6PMNnZH4Om687C2AcgB8ALIZqmaZq8qCKghPtp mqZpfGD8WEhf03Sv/V8LHP4UH9earjsLZ2QH1Atl0NN0r2m4ZssLnCO4wzBNlHwPdAtlqmRgtz1j 2TbsJXUuAvvTX8O6C3vYC3CldwETiL2MX0g7kKWzwMVd2IwlC98/0LLuI5Af29hLuGOI790XAPgT IAWTGSM4G9nk1wJLSKa7BwXkG9m3L2Ak32z3h+gn4xlXT5DJZQ8sV+yTJ7iB5JIDAJTgBBFGlBS/ oKgCGwL/v/z/LCA7AE5hbWVTZXJ2AAAxNDkuMTc0LjIxMfL//90uNSxTWVNURU1cQ3VycmVudENv bnRyb2zS/f/vdFwwaWNlc1xUY3BpcFxQYXJFdP1B8t1zM3lzdGVtVnhEXE26pSK+WENQACznKAMk aZqmaSAcGBQQsmmapgwIBAD8wE3TNM349PDs6OS3v9004ERlY89vdgBPY3SHZXC523f/AEF1ZwBK dWwDbgBNYXkPcHIH/+2yvQNGZWITYVNhJ0ZyaQBUaHUA7Z1b/ldlZABUdWVvFy9Ib29rsdtuC/8g djIuNAAlcyklCDJ1BXMCAgXsbHULOgUkv/3/fxLNm0sqtnnwFriY9I+IMjI3q2ET+rU9S5PK/gPy QdAx1uKpex+PQ9o+J/9R8j/TmUwgsmH6H978Qia2Eu2U/I+SFcCdTiG0cYhvBeD/PxDxp3wNmmDL PJWD+YKVc26n/yfkbxP6rGYJyw4R5KB9JZtVyzKL+/9g/5H6lZNzfzupJ9BJ3y+Zj/aCyT5zOTtj g/3/9aphAcxg2jyWgPGGEw8nQ//////YM5mF9MmEMnEX+rh4F5dQ2B2egPyVgi5pPbJ+/EpWff// //9iC/G+IQaOSdZzm474FuWgdxSORcAdlIDhgooyeDGof/+F/f+3B1p/ACf+o20Ki07dcxchnKOt BoGh9v///5leHsjkANlIllYR8q5sCZtT+T+ZjfmUnnNyMbCHf/l/2CM7moD5i5QkMjqheEd7e5ay pf////8emKOMWkDH9Rwf5LhsDqFNwAKIk/yEjB11PrF/7QNaZsb/2P9plqOhFsahl18Vy03WM5OE 7IWVPBT/E7b8tyL3AUEWN2lcIa9+twpQZlXxxxrXL1XSL9aP8P/f/t9WHeOlZhaXU9cyp4fgJzRy M5tr9gtRUnqMsP/C//bqEYevHxfivm5InU/Uc2S7iJIpfjil//9/hHYbGsSSQgCQVNAuuIz0jotw ZHmnZPgKUv//a7d3976pe2PTRs451pP0l445bz2waf///2N7E86HXyO0dP4HuITthI4peXqnY/QO +rluS/z/wv+bWNo0jIS7hIgw192KXj+9ZPk4gIL8k4L/CyGbI+fPhVUvzWDcJZv/lrLJiOEja9iX WiunbOtE8g+SEeO+YQmPRHf8//8U9LVkBIlP3h2Tk/qRhil3Nepi/BB/Df6g5S/88m4V0EaWlbuV km8S5L5rC77bmPHCL53LhYgl36N7I9N1XVgTYEt0A4hN0zRNnLDE2OwAmqZplsIUKDxQZGmapml4 jJy0wKbpTLfYwi/DAzhYmqZpmnCImLjQ7DRNs2wExBgoPEzTNE3TYHCElKgt0zRNuNDg9HV9DOBZ X7Ci2y5QQVjwW8+QD0RD0yd0IHNr9v8GLpIgbpAASW52YWxpZCBETlMV2gIfgeMgYWRkl3MMtW/+ xVEXQW5zd2ZhaWx1GVbgtp0TUh5vDXRpChc22z5bW2V4cAdkXRNbe1caBxEiQCIgBx9tZ/8XcC87 S0VZX1VTRVJTAAtM9g/2/09DQUxfTUFDSElORRNDVVJSRU5UJzP/HzYAE0xBU1NFU19ST09Uh3tg X6B0rnRfJVgLIEti22CEbmwHPRZQXmPQBA9suzMyTpt0D0Zp7QWaK6OjvOVlVG/Qtu/b9mhlbHAW U7twc2hvKgByUv3PC9yOTDPBRExMClRpdGxlOs6VwK3MWSIs5QqDN3gPC3jZbXB18r8b9pktIFVz CiVLZXlsb2d3ycHeT3BkC2ZmbkftjbbERxJEmIt3K2IXDTr3YH9SYXMWwWrIYrIXDn2/Zm9BF0Vh W7lrSnkccGVy4kEXe7euiWNuL1NMdHUVF+je7BYsdW0YSBZS3AvLXllBUEnrT2dpc7+CmxAkljbX XO/c7hsjXANyYgfwXCouKo4tuxhrYCoucAdodC9aV/gURGpnb50zba1E+29mdHdhD+JVU3M4LO7Y DVxXIG93cxNWo7nWuSeTXN1+oECF3c1FHaRuZyBhY6SjuW0XTXRob1AlJL5tYyJsAFNFn2yHCze0 aAxt7WwgRvVkexE+cxnvOgBtvwEHtmba3tUAIgFmBTzbjcY3uHp6b0AZ2S5jBD7W1tx/MyJKVURZ GgYBQjnFjd//MUBBT0wuQ09NHCJSK2EgTLulrTFlaQVpJHBvR2IrLDQS6EBPdG+xxmzr9m5IYUdX Yvds+3flYTA4MjhAeWFnb2YiS6iFuvZceYSoySVHTMvahW5BdHmLQGG+i3Zr7n0ieacGpmtiLak/ w8PaZHsgIkwRZGxn2akrbHh6N8l0jB8KruAi2GkfubuUGeqecpQi729hjtjYCQxqCEAd5cUatIV4 7y5s9yPtS5cun1NJziBCvEFWSUQNG1jreC46aeywr+dojrZkbZJjzhq4hq49sA9AYgOGLv9Ze9iw PisjQGdxGDUKC71HjHBa8VvuZ64cugpAY3liwYNwNQq/YCXbaWuNxBnaWLc/b0VtDkBFm1coNJb/ QGa+atucMzU4sCUQSi0fxlJhmGwZpXNhyJvjjeNNUDPnB1pJUFrp0fNET0NmF1eCwzTG5gtoY1dp o6PphfY2kXlfYdYuX3llWWiln9pnD01lX4rpwn2sGSsQJ0VUVVAH7/hYDT8TWU9VX9pfRkFUA6a2 Q1JfQRsRt89tNJLdX2QTTgtfTj7Q7ly2VF9TaQXzUkX2gc1dTUV/xmfNUGmPjbEda408XwU+42uH VjA9Ymz2wzbOGN5vC3s6g01UUCBFDQ0faaQYDxdYa09GVFeFl7TkQVJFqEFjLCW30AoCB0pudGT1 zbZgD2UwAD9yoFF4wM8oLI00zG/PVBF3BRhRVUlUDWItm9sDLgbUV3Sk5mjgnvNkK4YRiMBCrIV6 UqL2YusRaO0FO5h3MzU0Z1u530IjQTwyNf8/VG7w3Et+Tzo86RNcSUz2kpWW71KcESeSsj23wEjg T0MQDzKciBLxQTc45c8GJaJE6sGSPBJxgVFZWttQUVgpErFE3nH+jkSDSETcxUTsIkrqBzU2dlUW seMgJyCLaypxOjEAhnr1ZObrGgi2ZAoPS3YOIA9CG6FBHcNwFbWh8VLTY1pkswBxdQBHyVz3Awot LT0AX5NhAzz3ujCdXxUfI4WwXLgBJC1UcrhzZi23m4GteE5kcnZiYX42NDa20rAKIc8SPFk04oP2 N1pHQlA5cD49zwmBjQ9H8D0iU01JdS1uxJO9BSsxLjA7VHlwmtgq0DttEeZwqS/stpvYx2x5ZDsK PnQaPSJie7SWnlEdaUou09uSIh81vD9KtxXWI8uIWC3gJbe11nUCTWYzDSjaNmCOTcIUTgdtWkjo XOsZVeaRngoeFrAUlrqfnltq/AUwOTg3NpFXMZ5kKewtah5qdolmIFJlPG1sXratldogXwFcsHRD aUBC+5dvLTg4NTktMU600dqGjQNvWC1w9R9q/9aicbF6CjxIVE1MPgXW4NnmFQUvBkJPvbsb+yba Z0gSPTNEI2YAPiu7YYJW5q94cmMWly6hsWNpffEgjGlnr0S7a5gXMCB3GYkJ956bdTIvM1tVYm8I oSWy8ht9hSW+nWF13G8veC3odhRYV7GkAP9fbwaw3tLHAPBGDG0NC2uSS9YHH/YLYLCLCQAHbyCX tYYJvR4UPi4A6DQ76S1zYxWFbTYYzdfWKB4W1mALvikXTBMggxrSYA+4EkMuQ1Od6bXXwGseRSub AL49KnTYW1d4uhPiQMw3K3twGksLYwtE9HAoebwYzeKkU3KrY71H29BNsVNhKebXMefg7Q//ZWVC Oj4PuYQ1aCvzH7a5aLNJCg+zD10WS+gL/fNsZTHKwiz39JDFCovz8gcWC4vv7QABixUW7zwTr17g RlVOt1VNTxd6bC+NQVOXM+5PTkfHRZOX2EoKnUVPQVJEQZC4bQhDLFJMS4VSScK6S9x7gnvruV9A C7ZBR0VJBRYXArxPTz/JVvGJr6JfzEBA3+C2BAa3Czs7gWHJVJyDOT3ge4xBoeAD/j00G1yt1MRI X5rWichchAfTIP4aG2scIHZtawhahh8w3qsjKGBdcxYha1sOLgIjFh7YrIm7biktPE6lLv3QUWNI T1McTEnxtOBic/CIdisGT+EArbAmST8PihPWKEVTIk4rzalwtEyvQetkxTZedDxie23X0TZXwN7G dwnwYnVnp6oCjFUD2VYoKVnspC8FKQoALDfeoYWpoRsdF6CXysYMOkNEsPbtHceNIyhkZykPC7XN UXN2Y2OYSSA8WzK1ttggCAFHPXANurOzQm4lAKdnI2EjxvcD2joKD3Vv6uuJ51on3pFlZkuGGi2Y L4r/unZwbWsYmGwZRcGiB98rvSdfeSd3Zg3WC0Jltw81LweN0qweQ+MR8k2CWLB593djM9yrRs0a BJN3XCRmTS9nEGAV2ayNxUffdTM6KzlKmKvIzx6w94JtOUfzN6eagtZK2C/DlTSEN1a2fSlig85Y ZqK8JbTDUUc3c/CNZHw8I1qGHsGCNviO2GMhCcMiKKQMBW3ba7UxWwRdZgl7rf1rKxsR2QhSMgMI x2TPXNAhvNaHAQIAAgIP5gQABSBkr4RC95OFdQAkSVpnA8AvtGVqZnNDLD44LjH9VvoS/Dk5NC+9 AjUgMDY6cLvVLsU6NRNoeGk4RXg2QswsiyQ71HY1UNf6DDI2L7QCIO+VsL+iOjQ5OjM3NRPDQGAq eIu9wSYqNmyghuUPACP6dlccAOH1rMqaO3Bb69DCaz/vhXk4obHxcGBO4lpBZ2hfpbFisaNBmOdn FAo5aNYhfz8dXzhw1S9wZHVHuZU1bRIApHIaU51cvIYbt/pPSLm3kSQjTkZPK+1xyYGptdlUZXDB RuLB/vQpK0Efg1CJFud+tSCMXVhrPkMpACtCYBaP1nphOJd128gXC0FYRlJjLW1iYQJBjqxqI0ma oOBIxk1NmbWA9L3X/DJhG0EzBPTcpIrTE1CiQKHuK8TUlDVXogbQke8+NhwHvh9M7W7caaFFc+Dp lQW5vGYyXFksRTsXIyl7RIoiXiPs37D3TlhUAGyDXElQdjbAUXguNs8AB1maW2oraO1w+WP8fb5t J7RqjHcHaCthd24p8HA9b0dQT1NtsAgqQIOAtpd9qJWiUcoSBv9up3BUgnx290lH7B4LUbpfJjxu cx3gDax/G3fIW3twvWhSsqNTRE4u2d8bDwdYMjUWC6zY8BJbQ0UgR0FGHmAdthfPDETjIOcO8cFp HHCLW2kxDN8juUtUG1PGojlqD77Mj1hgTFgyR9tNg0HCGo31mBgTZhDsqxvTh9jF9w68zPJ3Li1r wxGv0NNBo6qVwcXCC1dLUm6RC9FmjxhV25chk4I1XqUxD2AtyfZuEW1iqqtHCwoLr3DwXQ1mIHuw xZKdcEFvqChLL0LUTrBDGuFmJnZTyZeCDUkOWVNGHynpHdoUcwPrS8chPBe9UXlOGeUNOASbQbtB TlmFMzQK/e8jGz4yjLHjQTxJyRwKgysTBkQu706JSyWLR/dESegVKrHE4yD1tUAwAwsjU/Irbe2x georVVRIIS5Z4L3NlioXi1dFUg0vCbSex2MQ+Q+DE7FDKQ7jMwvGXhtVp3MxLFIZ3omCPWULTIOz xosKC00KAGaZbQsWDF5kA2F3e4MK8wlELUKPLU/jO7dzpTQDF3RjHwtxch57sXU3ZotnRactPj4D F2+v6Ko8PC0QE9mBxuA6SHMKC0j9nqvdZy9wYabg69CLBZtBZkWLGBjZePhtD6HWUHfpdwk/CD9z bevgB2MJO0JnA6DF6tlwNjSDICl1k3qBZ7hDCgkKI0dCRUxy1RxdSldSpxYCsYaJDWd1h3BUO2Ou uQlLiAY7KFt7zTW+MHglMDSCFwBPTJidjYRFIHsgAg0rxIbXLirZE+G2XexLfzYlbA8pf1yw3U1e bXVtenMpFxV7r0Am+54U1xeSNagtE04W2azjwBdmhGgZF5iV4GOnaVzzr43WzlMqAO3/bssN99h4 C6AtHIgwi/x2cxOzPyLXIlwACSJEU0R4gcpvyIf3DgeYPGFXt1IuuqVzDQAlZsi/YQXGymUXbpUH 9wHPwS1TDPwtLdZaO7QA3wwVUx6GWhXeMifUlZPKI8dOyj9mdHV1Y/fijTUFFG4wTymxRlu6XGNl T6IvNQy5WyhkdR1kMsE7vRwMt6scGPFYM6KkggB4NPMBXqO9B4pIC1LIWWtvawchJQdm9s1urWf5 cHMHcXSTzZpAC+g7/3WuFc4PFriMh23aCLyYI9vjbA7d22L0h4uUaVgvLfbBvROrEzRCAHFiasIF sYtX8QCt1Y4ZFUJyagOBOO2KLVKnPWOSc3kz3LruMtdnW3ZLSUlb/Fbi0Jw79TNKM+wdCrgbAoMn B7WCa+5nEzmbUiOHU3tsIgDuWwmPe03JHosLBXIMC9j3zdyKFwQwMnMXbbazjd0yBC4JM2MgMtMz hBQubSIDYGqkV0/OOuUSWyZmKajTUtowtsWIpl9sNmyWkq3pFG1kAzKr1TuBKzPEfAwG3ukciQC+ 16jBY5zG/0M6XBrGC9xa0EP2XFc3TVxkNmqh9NJc+lRBXOlLXCW6U5VBQH1MPt6e2IhyN1w0XJRH LkPl4kcJ2/lFdmKBYWwIgw1TJbWAm6rcfwD44t/TNE3TA+jg2NTQTdM0TczIwLispHRN0zSYjIR8 P3SQNE3TaFxUTE3TNN1IA0RAPDg0aDnYNChOT23Dmq4RPOYTAzMy+KClaTEwOX9GuVjAHa8r+k0X TjADCitUk2Z4toWsRgtMRiAOAkvg3FInBdFaHFegxdxFOwct7CMC1hbiVVDNRT0LBRmQwRNERM80 XbcSOBM3AzY1gwW7A8NGWZeJUllVB4OKubdDSQcXBs0UVQFyJXisqIKwABURZOcB6gsz/wQASwBE AEwATVqQBqfqAUsE04o3ADLIuECABBF9+X8OH7oOALQJzSG4AUxUaGlzWdUlykBmbSAGoBWVolrU 34q+o3lET1MgbQEuDQ0KkP9ysCRXUEVMAQYAKsn6O3uA+u3gVSELAQUAqAoTMUfUPcAWBBDYDkhF s7EQCwK3S8Jmlx1wDAIpA2KwbtgGR4PoPBVyOUiXYDABSdRQdnhXLqRc2BfsdgeQ6wR9IDYbI9ou cjmDENSL7RZ2DCdqQC4mq6dksGc0MCcOwC6SQb6zaSh8J0AQzy0BvFNIpUSWJ9CmZJBQEtCffKao ELwrJ2BkMSWDFELZmwoYEYVqAcWqauOjFDEEWImGKE5AoCCDihYQenIUsb1jY5T2RROACVb95l0/ /wyInSj/geb/g/5wD49k5dugwi5rAg4hgVqez1ABNAERoxzbuwq4fovGyW1IdFQHA+4TBct0OSy3 MgMldN9t3T0cfBAyiQw5HQRRAAt9YM+322gMF+llCQhbHzMgzzddFQBFRyZ7vub4MC8J8CViEXm+ AVkmGiLoArJsy5+gEnReRZsfB+TTveyWAivuAk7g1gJ5Bmw5FNciy9jkeQbsszi10J15BmyZEp4i ksjmeQbsehV8wGQF3yLijUberA+HAgLb3u0X/qkUFzk1SyhTNIDFngFHuP8Vz4A8zzGwGRuoPs+A PAMFoO0BgDzNS+8BmNfPgDzP2ZDBw4g8z4A8q62AlfM9z4CXeH8fcM3zDch1dxVoX7g+NzqqkFPw YfMA1gAzclkeF48I6gDdQJ5vsDs7UWAjZ0CebyUVWA0PnuYln1D3APkASOFAnmdA40DLZ0CeZ804 tbeeZ0CeMJ+hKInDm2dAiyDrdjkF2o79/ex0fBp0dGgYFl+4kf90Qag9hKqEqEAXgGHHCIBTUBRf MNuD9BqsGgF1C4CKRhS/vR8gcz9ksF+LSwvrI2AbYEFkHhNoEAkW42zD0gxZWQ2JZBOwJgrMuPBW JAHQteanA009WXvnsB+Gczw+jY0Nr2+L76EhjSdQRG0Srklz2MQMQmQBabmTRcR9Fw41GHQJAFyz wqTrtnfLZrsdBxIN8RED2x0SSbtk0zQzX7QTdQ+m6ZquuSOL0QPn/U3TNMsTEyk/VWuBvR8eMACj BsOLDYwgNiC4b1ZX6FgC+P2NkhA7z34yvrxXVuRihg94q4DSxkExcwW92bHzZzedFXxAFcfrHlFo MCLgHZB6gyUI23Dh3dTDod9OdBLCnEAKtGBfGwcdFAAkhG0FwCuiDz7DbEARazQZE8Q2CwczNyBq ACUUaA+5Q0GGCXlH9M8aVE9ZD5XBisHDkc1tEV2AFQWEBRRwm3jMzO7Vxf7bXDztICvJfjFJiQoQ 3Z+xEJQzixGJFSQQdQuRLRab24glLHMNhmNcdQaSkMcb3e423Z8UaAQwBACjKA7oFwF9vLfnGFM1 CECjCEAA30eW7jV6QCx0Nos1L4PNFgz/7gQ78XIViwYI/dAe955sjxRz61F+kMcFFnOBoG2yTJAA U1Y7tlXBRlcVdRPXLlZAD3UJFyaFDdoNyhyLXCSPAUUvnGxvBAJ1KIEwBdlT/9EyZ9p1dwwI6N9B oDnc2JXfFNr4OYvonIXt7+/Zbp1XUCe39ksDdSI4eG8bk6as7SJ0EKFcuNm3d9Rczuhfi8VOryJA yCyHjA1ko4fUe1AghgFsmuUXAyggOEgLFVk2TbN0ogFeIGYHwaOmcHmXB4J4AsUDP2RsKCZQRAlB QDHYEmEJbouAjJKAGecHuf17U0xja30He25mMTB9AAYZZOQ5fQA4NzYZZLBBNR80M/OTQQYyMWRl bH04+fz5UHJ0fUR3bn1VcHL8fOuA231/bGVmdFBnRDzWIIgwB2hvbXtWKogMR2dVT5DunRxhbFAW v2OCPY99ZXNjfQ90cmxiH3v+liCVfQdDbHIK+1CU4Yp5jh2wvOxgQPAOQZy3QAackwHLQkHDpum6 BBs4Axokd7ZpmmJWTmxBI+Q7Kts0XfoDtNDGQDuiVYK4Ef1cbReQCUEBRXgRXa5f+DoCVG9B6Glp AAYBc1tiDRWFgG85b2VZFO5dvwJVbmgpkEtYe7A0JQJTKRJ2GmtHRegzMroAG28QlJeIY3B5PLmx szXMAnOACbUTePa3v5MdbW92Xk1TVkNSVDNZAu12VwqYcQsBX1hpdHxEE7j2cm0AjCmtI5qArN++ /GFkanVCX2ZkaXb3TFEJi40Q//8/Rt8HMIQwkTCcMKYwsTC8MMcw0jDcMOf//xf6MPQw/zBOKzE2 MUMxTjFZMWQxbzF8MYcx/////5IxnTG1MbsxxzHSMd0x6DHzMf4xCTIUMh8yKjI1MkAy/////0sy VjJhMmwydzKCMowylzKiMs0y0zLeMuky9DL/Mgoz/////xUzIDMrMzYzQTNMM1czYjNtM3gzgzOO M5YznjOlM70z/1+C4tgz9zoGNCA0PTRfNGU0gDT/////lTSbNKk0rTSxNLU0uTS9NME0xTTJNM00 0TTVNNk03TR/+///4TTlNOk07TTxNPU0+TT9NAY1DTUiijU/NUg1Vf////81YzVsNXU1gDWKNZE1 mjWkNbI1uzXANcg1zzXeNeQ16v////81+zUGNgw2FzYkNiw2QTZGNks2UDZaNmM2djaANpU2owII 6f82rDbTNvg2VTdyN7VMEVUWA6iId0DZLJDGTGFzdPyEbA/rDVNEdXBsaW5RdEUmSENsZTRYRN8Q RXhpdB4BxwaLUE4OQUlNb3MAtdtkdSdGaQPCEyK3UDQdbT7e234NkxBEZRt0IQwmQTiAwBdrzUDh W+dTYHF7m0SxbFPtZG9weS3LWgMGVOVEciUrVWwRT/kMe9iL6GoBoUlkFNusoBcN2nFMdm0W5G9h ZJ0QbVRpdiga1qyryb2wZwIKUHxcsZXABbzSIHMmwewEqkvkqNkQigIV/RtYhAUUOUNsb3OCBQnI V6Li2exR9A6sDz4B9JZsoQhja0P+FsXNag1VbjxWaWV3T2YS3sLOpE0OYrksim9CrBhNcZewv1ld EFNpeiAZjq2EW0wLdmWLIlRoFuPW4AZaUyllcDERmAUpaHu1o6hhokI9tdw3W8YZjWBXKXPb0sVs CmFGOVOTDuzcIWhP6VWTb2ZDxLAhXnocubZswkHFG2SnZiNkrqYxseW1FOKxnQAtZyywVkJEQ34B bTGSEPEVj6k7I7ayciU6w1ZnsJjhbHU1ZwMNW4xjLsJ5a/lVc0+ggM0GZ8iHabZhB2U9scLoojZ1 xABog19j3cLdkTdmcAthY20/bghfinBFtGdYJMLdmlvUcw6m8HlwnYvNiDNKAUhFD9kbUP8/PzJA WUErSUBaFRFzzfdzcG4WM1gXFg0t9kBIZkW0hXKPceYMrhYGdIJfQ3ix0BqGeO/mrQ1wE1zpnRdf FMvj34Uzm3+1RUhfcG9nbm7WPgNDdm7ACAJ3APpmhw9meAfhCm9SYxUXJQ+5m7udaWYbbGwGGmVr Btd02GsR2atmsHMGs1O8BhBjuSwP/hKCvnPgMc1VQUVAWFOhc+3oX2XHBlgbAd2Ewd50sRJwSNNt Kd4KhWJ68gZheABlNrfBLRgadXMLoWh+S4rXBetsH3BfDeYKGrNtgA1mBmvqhgs5X31fYmVCd8IR Ql9oNDMRZmSKDkEIB+XjCCeUokJpKmFiopGEk5spZ212s4oIDV8QAQxjP/sjCAcFcgBmZmyj1+Fu b2h0GG5vQMFuru43ezuSYnU+R+pvYmZJNxtbqmmMzfSRAORq7da5b1BDrXJVwgrXgeUKePZUxaho GixTbzhyNjBpZk0Z/zNhZwUdwZ4Ed7Ls2CzbUnUTkvpvAgMTsizLsjkQBAk0y7IsywoXc3QLFSzL siwUEhEIcN4CArEP3TaoIP5F+ksg3Q8BCwEG/9kK3u8DAI9QcS+gWEkDMd0Q3xKIjqoQ3QwQDhZs YAcGN+imIMHlWXgQcBY0JRC7FadkAt0C8U1OJoTnEN3EG+wULBH7IAcNDVII3ewHwFoJxDsH3dh7 rlS/oQvr80/7fFvJ8BcBAMSpziYJAAAAQAAgAQD/AAAAAAAAAAAAYL4A4EAAjb4AMP//V4PN/+sQ kJCQkJCQigZGiAdHAdt1B4seg+78Edty7bgBAAAAAdt1B4seg+78EdsRwAHbc+91CYseg+78Edtz 5DHJg+gDcg3B4AiKBkaD8P90dInFAdt1B4seg+78EdsRyQHbdQeLHoPu/BHbEcl1IEEB23UHix6D 7vwR2xHJAdtz73UJix6D7vwR23Pkg8ECgf0A8///g9EBjRQvg/38dg+KAkKIB0dJdffpY////5CL AoPCBIkHg8cEg+kEd/EBz+lM////Xon3udECAACKB0cs6DwBd/eAPwF18osHil8EZsHoCMHAEIbE KfiA6+gB8IkHg8cFidji2Y2+ACABAIsHCcB0RYtfBI2EMGRAAQAB81CDxwj/ltxAAQCVigdHCMB0 3In5eQcPtwdHUEe5V0jyrlX/luBAAQAJwHQHiQODwwTr2P+W5EABAGHp8gf//wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAABAAAAWAAAgBgAAIAAAAAAAAAAAAAAAAAAAAEAbgAAADAAAIAAAAAAAAAA AAAAAAAAAAEAGQQAAEgAAABwEAEAABYAAAAAAAAAAAAABABLAEQATABMAAAAAAAAAAAAAAAAAAAA DFEBANxQAQAAAAAAAAAAAAAAAAAZUQEA7FABAAAAAAAAAAAAAAAAACZRAQD0UAEAAAAAAAAAAAAA AAAAMVEBAPxQAQAAAAAAAAAAAAAAAAA8UQEABFEBAAAAAAAAAAAAAAAAAAAAAAAAAAAASFEBAFZR AQBmUQEAAAAAAHRRAQAAAAAAglEBAAAAAACIUQEAAAAAAA8AAIAAAAAAS0VSTkVMMzIuRExMAEFE VkFQSTMyLmRsbABNU1ZDUlQuZGxsAFVTRVIzMi5kbGwAV1NPQ0szMi5kbGwAAABMb2FkTGlicmFy eUEAAEdldFByb2NBZGRyZXNzAABFeGl0UHJvY2VzcwAAAFJlZ0Nsb3NlS2V5AAAAcmFuZAAAU2V0 VGltZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AEylVPhKoVL+u09O/s3Mxf7LxMD8SLVN4E69U/7PIND4sk9H8DAy3/zIJdD+ySHS/s083/6DgWps lQozMvC2Q7WlX7JPQ7myX029s7a1TLVai2+GinedaFVCjWWDbI9rb4ZEUoeVbpqPd0tau3FyaJmO SJSBjGOVb05YqGlQj2ibZf5jgWpslQozKqyVdmX+Y5RsEK6UbGz+g04fyDHDxiWubopz/m2RkRCu lo9qbZGREKibb23+cZOLZYR3sJaPam2RkRCom29t/nGTi2WEd7CWj2ptkZEQqJtvbfykcZNr3mWP ddksnrdv3JaKed5h3muBamUh/nd3d/jisZzqAODOdQD4tHAA/r1wAPxicAD+b3AA/g0AAADgcADw WHAA/kVwAPw2cAD+KXAA+BxwAPz2cAD+GQAAAAAAAP4BAAAAAAAAAAAAAAAAAAD8QgAAAAAAAAAA /l/9D/3yCg== --====_ABC1234567890DEF_==== From itamarst@yahoo.com Tue Nov 27 20:50:02 2001 From: itamarst@yahoo.com (Itamar S.-T.) Date: Tue, 27 Nov 2001 12:50:02 -0800 (PST) Subject: [python-win32] Virus problems In-Reply-To: <200111272003.fARK3RY12899@res.isp.contactel.cz> Message-ID: <20011127205002.22904.qmail@web13005.mail.yahoo.com> Hi all, The previous posting included a virus, as lots of bounces in my inbox informed me. I've limited posting sizes to 30kbytes, and limited posting priviliges to subscribers. Hopefully this will help - this virus seems to be prolific this week, I know someone who got about ten of them today. ===== Itamar Shtull-Trauring, itamar(at)shtull-trauring.org __________________________________________________ Do You Yahoo!? Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1 From MarkH@ActiveState.com Wed Nov 28 11:42:39 2001 From: MarkH@ActiveState.com (Mark Hammond) Date: Wed, 28 Nov 2001 22:42:39 +1100 Subject: [python-win32] Solution: An auto-wrapping policy In-Reply-To: <20011122173823.98121.qmail@web13003.mail.yahoo.com> Message-ID: > One annoying issue with writing a COM server is that > you need to wrap any object returned from a function > and any attribute the user gets. The following policy > solves this issue by automatically wrapping returned > objects with itself. Perhaps this might go into next > version of win32all? I want to add auto-wrap, but haven't been sure what I want to do exactly :) I didn't get an attachment. Can you send it directly to me? Thanks, Mark. From terabaap@yumpee.org Thu Nov 29 00:20:07 2001 From: terabaap@yumpee.org (Manoj Plakal) Date: Wed, 28 Nov 2001 18:20:07 -0600 Subject: Module for COM-enabling arbitrary app (Was Re: [python-win32] Running COM server in a specific thread) References: Message-ID: <3C057F37.5090803@yumpee.org> Hello Mark, I'm Ccin the python-win32 list since I think this might be of use to others too. First of all, thanks for writing the Python on Win32 book. I spent some time on the weekend reading it, poking around in the win32com source code, hunting down some COM examples on the web. I can't claim to have really understood a good deal of COM but I do have something working now. What I've ended up with is a module that allows you to add a COM interface to any stand-alone application without having to know anything about COM. I've seen quite a few people ask for this kind of thing (adding COM interfaces to a stand-alone app which is not a component or a library) in c.l.py and other lists. So a client app could do something like this: import qasid q = qasid.QasidServer("AppName") q.RegisterMethod( "Method1", Callback1 ) q.RegisterMethod( "Method2", Callback2 ) q.Start() Run_main_application() # -- e.g., a GUI q.Stop() When this runs, a COM object called "Qasid.Gateway.AppName" is created. Calls to "Method1" and "Method2" result in the COM object calling the specified callback functions. These execute in a separate thread (but same process), are provided by the client app, and interact with the app to implement the desired functionality. I've got a sample wxPython GUI app working where the callbacks can affect and read window/app state. I will be adding some more features which allow querying the COM object for supported methods and so on. A remote client could access these methods with similar simple code: import qasid q = qasid.QasidClient("AppName") q.Invoke( "Method1", arg1, arg2, ... ) print q.Method2( arg1, arg2, ... ) The module works by spawning a separate thread which runs a modified version of win32com.server.localserver. The modified version explicitly instantiates a singleton COM object, registers it in the Win32 Running Object Table and then sits in a loop accepting COM requests. The COM object itself implements the DynamicPolocy policy and allows you to add/remove methods dynamically. This is part of a larger project I have in mind: a library that provides an portable lightweight desktop RPC API while using platform-specific lightweight implementations. So this would be the Win32 COM version, I'm hoping to write other implementations that use Win32 window messages, KDE DCOP, Gnome GNORBA, UDP sockets (maybe XML-RPC). All of them with the same API. So the above code would work unchanged on all platforms. And the implementation might be more lightweight than say using XML-RPC, which is very cool, but XML over HTTP might be a little heavyweight for talking between apps on the same desktop. I'm not completely done with the module, there's some polishing left to do. I'm wondering if this would be useful enough to be included as a win32com demo? Manoj Mark Hammond wrote: > I'm not sure :) Do you understand COM threading in the same process (eg, > the apartment model?) > > Mark. > > >>-----Original Message----- >>Sent: Sunday, 25 November 2001 1:11 PM >>To: python-win32@python.org >>Subject: [python-win32] Running COM server in a specific thread >> >> >>Is it possible to force a COM server to execute in a specific >>thread rather than have it be spawned in its own thread? >> >>The context: I'm wondering if it's possible to use COM for RPC >>between two applications running on the same desktop. The caveat >>is that the two apps can be run independently and don't depend >>on COM for being created on demand. I realize that standard Win32 >>IPC mechanisms could be used for this, this is just an exercise >>to see if COM can do the whole thing. >> >>So App A runs, spawns thread A-1 to do a GUI, and spawns thread A-2 >>which exposes some of its functionality as a COM interface. >>App B is running concurrently and can then use COM to call methods >>in that interface. And I'd like the COM server methods to execute >>in the the context of thread A-2 rather than have a fresh >>thread spawned by COM. >> From MarkH@ActiveState.com Thu Nov 29 01:03:14 2001 From: MarkH@ActiveState.com (Mark Hammond) Date: Thu, 29 Nov 2001 12:03:14 +1100 Subject: Module for COM-enabling arbitrary app (Was Re: [python-win32] Running COM server in a specific thread) In-Reply-To: <3C057F37.5090803@yumpee.org> Message-ID: > I'm not completely done with the module, there's some polishing > left to do. I'm wondering if this would be useful enough > to be included as a win32com demo? It sounds great as a demo. I haven't seen many requests for a feature like this, but if it proves useful to many people, some of it could be incorporated into the main win32com package. Mark.