Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com From: "edward" To: "Robert Collins" , "Julia A . Case" Cc: "Cygwin" Subject: RE: glib-1.2.8? Date: Wed, 6 Dec 2000 21:41:24 -0500 MIME-Version: 1.0 Message-ID: X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart_000_0026_01C05FCD.44C24290" Importance: Normal In-Reply-To: <00c101c05fe4$cce732e0$0200a8c0@lifelesswks> X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 X-Apparently-From: Swiftnsavv AT aol DOT com ------=_NextPart_000_0026_01C05FCD.44C24290 Content-Type: multipart/mixed; boundary="----=_NextPart_001_0027_01C05FCD.44C3F040" ------=_NextPart_001_0027_01C05FCD.44C3F040 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit gmodule works for me. ugh. with spelling errors and all from the cvs source :) um. i did have to patch gmodule-dl.c and testgmodule.c um. and gdate.c and gmarkup.c and gstrfuncs.c and I did have to make tons of changes to the automake/libtool files to get the dll to build correctly. I haven't automated it just yet, but if you want the source patches... WARNING. please EXAMINE this patch and run it bit by bit. Because 1) this is a patch against CVS source, and 2) though it passes all of the glib tests (both in gmodule and in tests, once you fix the markup test), i'm not positive it works everywhere. 3) this is a patch against the CVS source. yea, it's important enough to repeat. cheers! edward $ cd /usr/gnome/src/gnome/glib/gmodule $ cygcheck testgmodule.exe Found: .\testgmodule.exe .\testgmodule.exe E:\WINNT\System32\KERNEL32.dll E:\WINNT\System32\NTDLL.DLL .\libgmodule-1.3.dll E:\private\cygwin\bin\cygwin1.dll Use -h to see help about each section $ ./testgmodule testgmodule (/usr/gnome/src/gnome/glib/gmodule): get main module handle check that not yet bound symbols in shared libraries of main module are retrievable: retrive symbol `g_module_close' from "main": retrived symbol `g_module_close' as 0x67841a24 load plugin from "/usr/gnome/src/gnome/glib/gmodule/.libs/libgplugin_a.dll" load plugin from "/usr/gnome/src/gnome/glib/gmodule/.libs/libgplugin_b.dll" GPluginB: check-init retrive symbol `gplugin_a_func' from "libgplugin_a.dll" retrive symbol `gplugin_b_func' from "libgplugin_b.dll" call plugin function(0x672c1018) A: GPluginA: Hello world call plugin function(0x6f8c1080) B: GPluginB: Hello world retrive symbol `g_clash_func' from "main" retrive symbol `g_clash_func' from "libgplugin_a.dll" retrive symbol `g_clash_func' from "libgplugin_b.dll" call plugin function(0x672c1088) self: GPluginA: Hello global clash call plugin function(0x672c1088) A: GPluginA: Hello global clash call plugin function(0x6f8c10f0) B: GPluginB: Hello global clash retrive symbol `gplugin_clash_func' from "main" retrived function `gplugin_clash_func' from self: 0x672c1050 retrive symbol `gplugin_clash_func' from "libgplugin_a.dll" retrive symbol `gplugin_clash_func' from "libgplugin_b.dll" call plugin function(0x672c1050) A: GPluginA: Hello plugin clash call plugin function(0x6f8c10b8) B: GPluginB: Hello plugin clash retrive symbol `gplugin_a_module_func' from "libgplugin_a.dll" call plugin A's module function(0x672c1164): { GPluginA: retrive symbol `gplugin_say_boo_func' from "libgplugin_b.dll" GPluginA: call that function(0x6f8c111c): GPluginB: BOOH! } unload plugin A: unload plugin B: GPluginB: unloaded -----Original Message----- From: Robert Collins [mailto:robert DOT collins AT itdomain DOT com DOT au] Sent: Wednesday, December 06, 2000 7:30 PM To: edward; Julia A . Case Cc: Cygwin Subject: Re: glib-1.2.8? glib compiles ok but it is not fully functional * gmodule fails its tests. This is important because nearly every plug-in style component based on glib needs gmodule. (Basically a wrapper for dlopen()). I posted some questions about this on this list around 3-4 months ago... but I didn't (and still don't) have the time to dig into dlopen and write test cases to show the fault. * pthreads support (as per edwards and chris's emails). However my guess is that building wiuth pthreads=none should result in the wrapper code running everything single-threaded. I'm happy to do a bit of collaboration on this if you're interested edward.. I was working on gnome for xfree86/cygwin. You'll also need to patch the libtool on all the gnome related packages to support dll creation. (see a long list on that on this list back in uhmmm august I think. Rob ----- Original Message ----- From: "edward" To: "Julia A . Case" Cc: "Cygwin" Sent: Thursday, December 07, 2000 7:54 AM Subject: RE: glib-1.2.8? > If I recall correctly, as of 2 weeks ago, both the cvs and official > versions of glib compiled fine. > > make check fails one the markup test because the test invocation is > incorrect, but you can run that one manually. > > PS. you'll have problem with the official gnome packages of bonobo and > gconf, due to file names that differ only by case. The cvs versions have > renamed those files. > > PPS. oaf, orbit and gnome-print require cygwin patches... I'll post those > once I make sure they actually work. they pass the test suite, but I want > to hold back until I can get the entire gnome package running. > > PPPS. gnome requires some libraries which must be at least re-entrant. > that means recompiling the winsup cygwin module to export the *_r > functions. > > Cheers. > edward > > -----Original Message----- > From: cygwin-owner AT sources DOT redhat DOT com > [mailto:cygwin-owner AT sources DOT redhat DOT com]On Behalf Of Julia A . Case > Sent: Wednesday, December 06, 2000 3:25 PM > To: cygwin AT sources DOT redhat DOT com > Subject: glib-1.2.8? > > > Has anyone been able to build glib-1.2.8 under cygwin? > > Julie > > -- > [ Julia Anne Case ] [ Ships are safe inside the harbor, ] > [Programmer at large] [ but is that what ships are really for. ] > [ Admining Linux ] [ To thine own self be true. ] > [ Windows/WindowsNT ] [ Fair is where you take your cows to be judged. ] > > > -- > Want to unsubscribe from this list? > Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com > ------=_NextPart_001_0027_01C05FCD.44C3F040 Content-Type: application/octet-stream; name="glib-cygwin.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="glib-cygwin.patch" --- gdate.c.eml Fri Sep 29 09:37:00 2000=0A= +++ gdate.c Thu Nov 30 13:31:31 2000=0A= @@ -737,9 +737,11 @@=0A= ++i;=0A= ++j;=0A= }=0A= - =0A= - =0A= - if (pt.num_ints =3D=3D 3 && !g_date_valid_dmy (day, m, y))=0A= + if (pt.num_ints =3D=3D 2 && pt.month !=3D G_DATE_BAD_MONTH)=0A= + {=0A= + m =3D pt.month;=0A= + }=0A= + else if (pt.num_ints =3D=3D 3 && !g_date_valid_dmy (day, m, y))=0A= {=0A= /* Try YYYY MM DD */=0A= y =3D pt.n[0];=0A= --- gmarkup.c.eml Thu Nov 30 13:59:30 2000=0A= +++ gmarkup.c Thu Nov 30 13:56:48 2000=0A= @@ -761,7 +761,7 @@=0A= static const gchar*=0A= current_element (GMarkupParseContext *context)=0A= {=0A= - return context->tag_stack->data;=0A= + return (context->tag_stack?context->tag_stack->data:0);=0A= }=0A= =0A= static const gchar*=0A= --- gstrfuncs.c.eml Thu Nov 30 12:33:25 2000=0A= +++ gstrfuncs.c Thu Nov 30 12:33:46 2000=0A= @@ -676,7 +676,7 @@=0A= char *msg;=0A= =0A= #ifdef HAVE_STRSIGNAL=0A= -#ifdef G_OS_BEOS=0A= +#if defined(G_OS_BEOS) || defined(__CYGWIN__)=0A= extern const char * strsignal(int);=0A= #else /* !G_OS_BEOS */=0A= /* this is declared differently (const) in string.h on BeOS */=0A= --- gmodule/gmodule-dl.c.eml Fri Dec 1 07:11:28 2000=0A= +++ gmodule/gmodule-dl.c Fri Dec 1 04:30:03 2000=0A= @@ -68,6 +68,120 @@=0A= #define RTLD_NOW 0=0A= #endif /* RTLD_NOW */=0A= =0A= +#if defined(__CYGWIN__)=0A= +#include =0A= +#include =0A= +static gpointer=0A= +find_in_any_module_using_toolhelp (const gchar *symbol_name)=0A= +{=0A= + typedef HANDLE (WINAPI *PFNCREATETOOLHELP32SNAPSHOT)(DWORD, DWORD);=0A= + static PFNCREATETOOLHELP32SNAPSHOT pfnCreateToolhelp32Snapshot =3D = NULL;=0A= +=0A= + typedef BOOL (WINAPI *PFNMODULE32FIRST)(HANDLE, MODULEENTRY32*);=0A= + static PFNMODULE32FIRST pfnModule32First=3D NULL;=0A= +=0A= + typedef BOOL (WINAPI *PFNMODULE32NEXT)(HANDLE, MODULEENTRY32*);=0A= + static PFNMODULE32NEXT pfnModule32Next =3D NULL;=0A= +=0A= + static HMODULE kernel32;=0A= +=0A= + HANDLE snapshot; =0A= + MODULEENTRY32 me32;=0A= +=0A= + gpointer p;=0A= +=0A= + if (!pfnCreateToolhelp32Snapshot || !pfnModule32First || = !pfnModule32Next)=0A= + {=0A= + if (!kernel32)=0A= + if (!(kernel32 =3D GetModuleHandle ("kernel32.dll")))=0A= + return NULL;=0A= +=0A= + if (!(pfnCreateToolhelp32Snapshot =3D = (PFNCREATETOOLHELP32SNAPSHOT) GetProcAddress (kernel32, = "CreateToolhelp32Snapshot"))=0A= + || !(pfnModule32First =3D (PFNMODULE32FIRST) GetProcAddress = (kernel32, "Module32First"))=0A= + || !(pfnModule32Next =3D (PFNMODULE32NEXT) GetProcAddress (kernel32, = "Module32Next")))=0A= + return NULL;=0A= + }=0A= +=0A= + if ((snapshot =3D (*pfnCreateToolhelp32Snapshot) (TH32CS_SNAPMODULE, = 0)) =3D=3D (HANDLE) -1)=0A= + return NULL;=0A= +=0A= + me32.dwSize =3D sizeof (me32);=0A= + p =3D NULL;=0A= + if ((*pfnModule32First) (snapshot, &me32))=0A= + {=0A= + do {=0A= + if ((p =3D GetProcAddress (me32.hModule, symbol_name)) !=3D NULL)=0A= + break;=0A= + } while ((*pfnModule32Next) (snapshot, &me32));=0A= + }=0A= +=0A= + CloseHandle (snapshot);=0A= +=0A= + return p;=0A= +}=0A= +=0A= +static gpointer=0A= +find_in_any_module_using_psapi (const gchar *symbol_name)=0A= +{=0A= + static HMODULE psapi =3D NULL;=0A= +=0A= + typedef BOOL (WINAPI *PFNENUMPROCESSMODULES) (HANDLE, HMODULE *, = DWORD, LPDWORD) ;=0A= + static PFNENUMPROCESSMODULES pfnEnumProcessModules =3D NULL;=0A= +=0A= + HMODULE *modules;=0A= + HMODULE dummy;=0A= + gint i, size;=0A= + DWORD needed;=0A= + =0A= + gpointer p;=0A= +=0A= + if (!pfnEnumProcessModules)=0A= + {=0A= + if (!psapi)=0A= + if ((psapi =3D LoadLibrary ("psapi.dll")) =3D=3D NULL)=0A= + return NULL;=0A= +=0A= + if (!(pfnEnumProcessModules =3D (PFNENUMPROCESSMODULES) = GetProcAddress (psapi, "EnumProcessModules")))=0A= + return NULL;=0A= + }=0A= +=0A= + if (!(*pfnEnumProcessModules) (GetCurrentProcess (), &dummy,=0A= + sizeof (HMODULE), &needed))=0A= + return NULL;=0A= +=0A= + size =3D needed + 10 * sizeof (HMODULE);=0A= + modules =3D g_malloc (size);=0A= +=0A= + if (!(*pfnEnumProcessModules) (GetCurrentProcess (), modules,=0A= + size, &needed)=0A= + || needed > size)=0A= + {=0A= + g_free (modules);=0A= + return NULL;=0A= + }=0A= + =0A= + p =3D NULL;=0A= + for (i =3D 0; i < needed / sizeof (HMODULE); i++)=0A= + if ((p =3D GetProcAddress (modules[i], symbol_name)) !=3D NULL)=0A= + break;=0A= +=0A= + g_free (modules);=0A= +=0A= + return p;=0A= +}=0A= +=0A= +static gpointer=0A= +find_in_any_module (const gchar *symbol_name)=0A= +{=0A= + gpointer result;=0A= +=0A= + if ((result =3D find_in_any_module_using_toolhelp (symbol_name)) = =3D=3D NULL=0A= + && (result =3D find_in_any_module_using_psapi (symbol_name)) = =3D=3D NULL)=0A= + return NULL;=0A= + else=0A= + return result;=0A= +}=0A= +#endif=0A= =0A= /* --- functions --- */=0A= static gchar*=0A= @@ -93,6 +207,10 @@=0A= return handle;=0A= }=0A= =0A= +#if defined(__CYGWIN__)=0A= +static gpointer null_module_handle =3D 0;=0A= +#endif=0A= +=0A= static gpointer=0A= _g_module_self (void)=0A= {=0A= @@ -105,7 +223,9 @@=0A= handle =3D dlopen (NULL, RTLD_GLOBAL | RTLD_LAZY);=0A= if (!handle)=0A= g_module_set_error (fetch_dlerror ());=0A= - =0A= +#if defined(__CYGWIN__)=0A= + null_module_handle =3D handle;=0A= +#endif=0A= return handle;=0A= }=0A= =0A= @@ -132,6 +252,11 @@=0A= gpointer p;=0A= =0A= p =3D dlsym (handle, symbol_name);=0A= +#if defined(__CYGWIN__)=0A= + if (p =3D=3D NULL && handle =3D=3D null_module_handle) {=0A= + p =3D find_in_any_module(symbol_name);=0A= + }=0A= +#endif=0A= if (!p)=0A= g_module_set_error (fetch_dlerror ());=0A= =0A= @@ -142,13 +267,18 @@=0A= _g_module_build_path (const gchar *directory,=0A= const gchar *module_name)=0A= {=0A= +#if defined(__CYGWIN__)=0A= +#define DLL_EXT ".dll"=0A= +#else=0A= +#define DLL_EXT ".so"=0A= +#endif=0A= if (directory && *directory) {=0A= if (strncmp (module_name, "lib", 3) =3D=3D 0)=0A= return g_strconcat (directory, "/", module_name, NULL);=0A= else=0A= - return g_strconcat (directory, "/lib", module_name, ".so", NULL);=0A= + return g_strconcat (directory, "/lib", module_name, DLL_EXT, = NULL);=0A= } else if (strncmp (module_name, "lib", 3) =3D=3D 0)=0A= return g_strdup (module_name);=0A= else=0A= - return g_strconcat ("lib", module_name, ".so", NULL);=0A= + return g_strconcat ("lib", module_name, DLL_EXT, NULL);=0A= }=0A= --- gmodule/testgmodule.c.eml Fri Dec 1 07:11:49 2000=0A= +++ gmodule/testgmodule.c Fri Dec 1 04:26:34 2000=0A= @@ -61,8 +61,13 @@=0A= plugin_a =3D g_strconcat (string, "/.libs/", "libgplugin_a.sl", NULL);=0A= plugin_b =3D g_strconcat (string, "/.libs/", "libgplugin_b.sl", NULL);=0A= #else /* neither DLD nor WIN32 */=0A= +#if defined(__CYGWIN__)=0A= + plugin_a =3D g_strconcat (string, "/.libs/", "libgplugin_a.dll", = NULL);=0A= + plugin_b =3D g_strconcat (string, "/.libs/", "libgplugin_b.dll", = NULL);=0A= +#else=0A= plugin_a =3D g_strconcat (string, "/.libs/", "libgplugin_a.so", NULL);=0A= plugin_b =3D g_strconcat (string, "/.libs/", "libgplugin_b.so", NULL);=0A= +#endif=0A= #endif=0A= g_free (string);=0A= =0A= ------=_NextPart_001_0027_01C05FCD.44C3F040-- ------=_NextPart_000_0026_01C05FCD.44C24290 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIILzCCAy4w ggKXoAMCAQICEQDSdi6NFAw9fbKoJV2v7g11MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05ODA1MTIwMDAwMDBaFw0wODA1MTIyMzU5NTla MIHMMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 d29yazFGMEQGA1UECxM9d3d3LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L1JQQSBJbmNvcnAuIEJ5 IFJlZi4sTElBQi5MVEQoYyk5ODFIMEYGA1UEAxM/VmVyaVNpZ24gQ2xhc3MgMSBDQSBJbmRpdmlk dWFsIFN1YnNjcmliZXItUGVyc29uYSBOb3QgVmFsaWRhdGVkMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC7WkSKBBa7Vf0DeootlE8VeDa4DUqyb5xUv7zodyqdufBou5XZMUFweoFLuUgTVi3H COGEQqvAopKrRFyqQvCCDgLpL/vCO7u+yScKXbawNkIztW5UiE+HSr8Z2vkV6A+HthzjzMaajn9q JJLj/OBluqexfu/J2zdqyErICQbkmQIDAQABo3wwejARBglghkgBhvhCAQEEBAMCAQYwRwYDVR0g BEAwPjA8BgtghkgBhvhFAQcBATAtMCsGCCsGAQUFBwIBFh93d3cudmVyaXNpZ24uY29tL3JlcG9z aXRvcnkvUlBBMA8GA1UdEwQIMAYBAf8CAQAwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBAgUAA4GB AIi4Nzvd2pQ3AK2qn+GBAXEekmptL/bxndPKZDjcG5gMB4ZbhRVqD7lJhaSV8Rd9Z7R/LSzdmkKe wz60jqrlCwbe8lYq+jPHvhnXU0zDvcjjF7WkSUJj7MKmFw9dWBpJPJBcVaNlIAD9GCDlX4KmsaiS xVhqwY0DPOvDzQWikK5uMIIE+TCCBGKgAwIBAgIQVVCnZAR32kCJV2EcJWFZfjANBgkqhkiG9w0B AQQFADCBzDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxRjBEBgNVBAsTPXd3dy52ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9SUEEgSW5jb3Jw LiBCeSBSZWYuLExJQUIuTFREKGMpOTgxSDBGBgNVBAMTP1ZlcmlTaWduIENsYXNzIDEgQ0EgSW5k aXZpZHVhbCBTdWJzY3JpYmVyLVBlcnNvbmEgTm90IFZhbGlkYXRlZDAeFw0wMDA0MTgwMDAwMDBa Fw0wMTA0MTgyMzU5NTlaMIIBFDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsTPXd3dy52ZXJpc2lnbi5jb20vcmVwb3NpdG9y eS9SUEEgSW5jb3JwLiBieSBSZWYuLExJQUIuTFREKGMpOTgxHjAcBgNVBAsTFVBlcnNvbmEgTm90 IFZhbGlkYXRlZDE0MDIGA1UECxMrRGlnaXRhbCBJRCBDbGFzcyAxIC0gTWljcm9zb2Z0IEZ1bGwg U2VydmljZTEWMBQGA1UEAxQNRWR3YXJkIE0uIExlZTEiMCAGCSqGSIb3DQEJARYTZWR3YXJkQHRh aWxpZmVyLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyk3l0Z6LTJqUIu0v0gOxCtqJ RkeqGmPAlPZRUOnZGYgBbJnVfv+zaSGrraDn9ENPcZ3vQrfNR377vTV9HonHjaC3gRAW1Hm7TI4K w8N7LO+dHzIf+GOa44BF/OUt9a3Sc9F0a5FQ5oeDZusZzObmB7b4I/HFkXthK10PjZH6++kCAwEA AaOCAY8wggGLMAkGA1UdEwQCMAAwgawGA1UdIASBpDCBoTCBngYLYIZIAYb4RQEHAQEwgY4wKAYI KwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9DUFMwYgYIKwYBBQUHAgIwVjAVFg5W ZXJpU2lnbiwgSW5jLjADAgEBGj1WZXJpU2lnbidzIENQUyBpbmNvcnAuIGJ5IHJlZmVyZW5jZSBs aWFiLiBsdGQuIChjKTk3IFZlcmlTaWduMBEGCWCGSAGG+EIBAQQEAwIHgDCBhgYKYIZIAYb4RQEG AwR4FnZkNDY1MmJkNjNmMjA0NzAyOTI5ODc2M2M5ZDJmMjc1MDY5YzczNTliZWQxYjA1OWRhNzVi YzRiYzk3MDE3NDdkYTVkM2YyMTQxYmVhZGIyYmQyZTg5MjE2YWE2YmYyZDExMTQ5OTdhMmJlNDVm ZGYzZWE0NTBjMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL2NsYXNz MS5jcmwwDQYJKoZIhvcNAQEEBQADgYEAJj2gFrp0fO+8GNOl3U5ctDn0IYr8MwDFxymgdQnSYsOZ q2wPC3aCFK4BB9Oj4YBerRF1sDyAZZx8CFcH+k+aysC3vxzufqdOdc3MxAHuHggKTZ3wybV2r9pb fzJlFcw+jTgPj9yqsp3g6lpt70d7xpa8UW5aQODXdc/TnVXyRrMxggM4MIIDNAIBATCB4TCBzDEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx RjBEBgNVBAsTPXd3dy52ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9SUEEgSW5jb3JwLiBCeSBSZWYu LExJQUIuTFREKGMpOTgxSDBGBgNVBAMTP1ZlcmlTaWduIENsYXNzIDEgQ0EgSW5kaXZpZHVhbCBT dWJzY3JpYmVyLVBlcnNvbmEgTm90IFZhbGlkYXRlZAIQVVCnZAR32kCJV2EcJWFZfjAJBgUrDgMC GgUAoIIBrDAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMDEyMDcw MjQxMTlaMCMGCSqGSIb3DQEJBDEWBBQv4pESN+uCuUjBP6uoPWf4i1BcAjBYBgkqhkiG9w0BCQ8x SzBJMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDAH BgUrDgMCGjAKBggqhkiG9w0CBTCB8gYJKwYBBAGCNxAEMYHkMIHhMIHMMRcwFQYDVQQKEw5WZXJp U2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFGMEQGA1UECxM9d3d3 LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L1JQQSBJbmNvcnAuIEJ5IFJlZi4sTElBQi5MVEQoYyk5 ODFIMEYGA1UEAxM/VmVyaVNpZ24gQ2xhc3MgMSBDQSBJbmRpdmlkdWFsIFN1YnNjcmliZXItUGVy c29uYSBOb3QgVmFsaWRhdGVkAhBVUKdkBHfaQIlXYRwlYVl+MA0GCSqGSIb3DQEBAQUABIGAkfxH 8zmmsOiZMUKqzdUq/j+nx3vEKe7WD//Ndw7vZ1oD8qXzIHU2JFmY9hPsRF6JtczZERoLB7u81dwx +dy0eBMpYbEw9alM3l0wAFpr2jFE+s8Ejpb06sGz3RMVIn2q2903+I9Ofg1wzGgy0qNjwuina+Bv egO+gbh9gN7MT94AAAAAAAA= ------=_NextPart_000_0026_01C05FCD.44C24290--